X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=mod%2Fcal.php;h=ab20617257160722047ef9906022add163986165;hb=7c9a0ec4594fa6d45cc615f8bde914bcc131226d;hp=0cde2a6ecec636b5100a7c4ce366dceb0838ffc7;hpb=65b541413f2ecc8d16050a8ed57bdf22e0814b89;p=friendica.git diff --git a/mod/cal.php b/mod/cal.php index 0cde2a6ece..ab20617257 100644 --- a/mod/cal.php +++ b/mod/cal.php @@ -33,6 +33,11 @@ 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)) @@ -50,10 +55,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 +103,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 +119,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) { @@ -137,7 +153,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']); @@ -276,4 +295,47 @@ function cal_content(&$a) { 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; + } }