]> git.mxchange.org Git - friendica.git/blobdiff - mod/cal.php
get_basepath() uses a lot $this (which means object-referenced calls, or
[friendica.git] / mod / cal.php
index 0cde2a6ecec636b5100a7c4ce366dceb0838ffc7..ba43393284767fe744c46c3598b034dd1bc5d1ca 100644 (file)
@@ -33,12 +33,14 @@ function cal_init(&$a) {
                $a->data['user'] = $user[0];
                $a->profile_uid = $user[0]['uid'];
 
+               // if it's a json request abort here becaus we don't
+               // need the widget data
+               if ($a->argv[2] === 'json')
+                       return;
+
                $profile = get_profiledata_by_nick($nick, $a->profile_uid);
 
-               if((intval($profile['page-flags']) == PAGE_COMMUNITY) || (intval($profile['page-flags']) == PAGE_PRVGROUP))
-                       $account_type = t('Forum');
-               else
-                       $account_type = "";
+               $account_type = account_type($profile);
 
                $tpl = get_markup_template("vcard-widget.tpl");
 
@@ -50,10 +52,13 @@ function cal_init(&$a) {
                        '$pdesc' => (($profile['pdesc'] != "") ? $profile['pdesc'] : ""),
                ));
 
+               $cal_widget = widget_events();
+
                if(! x($a->page,'aside'))
                        $a->page['aside'] = '';
 
                $a->page['aside'] .= $vcard_widget;
+               $a->page['aside'] .= $cal_widget;
        }
 
        return;
@@ -95,6 +100,13 @@ function cal_content(&$a) {
        $m = 0;
        $ignored = ((x($_REQUEST,'ignored')) ? intval($_REQUEST['ignored']) : 0);
 
+       if($a->argc == 4) {
+               if($a->argv[2] == 'export') {
+                       $mode = 'export';
+                       $format = $a->argv[3];
+               }
+       }
+
        //
        // Setup permissions structures
        //
@@ -104,6 +116,7 @@ function cal_content(&$a) {
        $contact_id = 0;
 
        $owner_uid = $a->data['user']['uid'];
+       $nick = $a->data['user']['nickname'];
 
        if(is_array($_SESSION['remote'])) {
                foreach($_SESSION['remote'] as $v) {
@@ -119,7 +132,7 @@ function cal_content(&$a) {
                        intval($contact_id),
                        intval($a->profile['profile_uid'])
                );
-               if(count($r)) {
+               if (dbm::is_result($r)) {
                        $contact = $r[0];
                        $remote_contact = true;
                }
@@ -137,7 +150,10 @@ function cal_content(&$a) {
                return;
        }
 
-       $sql_extra = item_permissions_sql($owner_uid,$remote_contact,$groups);
+       // get the permissions
+       $sql_perms = item_permissions_sql($owner_uid,$remote_contact,$groups);
+       // we only want to have the events of the profile owner
+       $sql_extra = " AND `event`.`cid` = 0 " . $sql_perms;
 
        // get the tab navigation bar
        $tabs .= profile_tabs($a,false, $a->data['user']['nickname']);
@@ -182,8 +198,8 @@ function cal_content(&$a) {
 
 
                if ($a->argv[2] === 'json'){
-                       if (x($_GET,'start'))   $start = date("Y-m-d h:i:s", $_GET['start']);
-                       if (x($_GET,'end'))     $finish = date("Y-m-d h:i:s", $_GET['end']);
+                       if (x($_GET,'start'))   $start = $_GET['start'];
+                       if (x($_GET,'end'))     $finish = $_GET['end'];
                }
 
                $start  = datetime_convert('UTC','UTC',$start);
@@ -211,7 +227,7 @@ function cal_content(&$a) {
 
                $links = array();
 
-               if(count($r)) {
+               if (dbm::is_result($r)) {
                        $r = sort_by_date($r);
                        foreach($r as $rr) {
                                $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'j') : datetime_convert('UTC','UTC',$rr['start'],'j'));
@@ -224,7 +240,7 @@ function cal_content(&$a) {
                $events=array();
 
                // transform the event in a usable array
-               if(count($r))
+               if (dbm::is_result($r))
                        $r = sort_by_date($r);
                        $events = process_events($r);
 
@@ -237,7 +253,7 @@ function cal_content(&$a) {
                        $tpl =  get_markup_template("event.tpl");
                } else {
 //                     if (get_config('experimentals','new_calendar')==1){
-                               $tpl = get_markup_template("events-js.tpl");
+                               $tpl = get_markup_template("events_js.tpl");
 //                     } else {
 //                             $tpl = get_markup_template("events.tpl");
 //                     }
@@ -268,12 +284,54 @@ function cal_content(&$a) {
                        "month" => t("month"),
                        "week" => t("week"),
                        "day" => t("day"),
-
-
+                       "list" => t("list"),
                ));
 
                if (x($_GET,'id')){ echo $o; killme(); }
 
                return $o;
        }
+
+       if($mode == 'export') {
+               if(! (intval($owner_uid))) {
+                       notice( t('User not found'));
+                       return;
+               }
+
+               // Test permissions
+               // Respect the export feature setting for all other /cal pages if it's not the own profile
+               if( ((local_user() !== intval($owner_uid))) && ! feature_enabled($owner_uid, "export_calendar")) {
+                       notice( t('Permission denied.') . EOL);
+                       goaway('cal/' . $nick);
+               }
+
+               // Get the export data by uid
+               $evexport = event_export($owner_uid, $format);
+
+               if (!$evexport["success"]) {
+                       if($evexport["content"])
+                               notice( t('This calendar format is not supported') );
+                       else
+                               notice( t('No exportable data found'));
+
+                       // If it the own calendar return to the events page
+                       // otherwise to the profile calendar page
+                       if (local_user() === intval($owner_uid))
+                               $return_path = "events";
+                       else
+                               $returnpath = "cal/".$nick;
+
+                       goaway($return_path);
+               }
+
+               // If nothing went wrong we can echo the export content
+               if ($evexport["success"]) {
+                       header('Content-type: text/calendar');
+                       header('content-disposition: attachment; filename="' . t('calendar') . '-' . $nick . '.' . $evexport["extension"] . '"' );
+                       echo $evexport["content"];
+                       killme();
+               }
+
+               return;
+       }
 }