forked from friendica/friendica-addons
cal: export to ical
This commit is contained in:
parent
7043257896
commit
2a368fa6ac
1 changed files with 95 additions and 4 deletions
99
cal/cal.php
99
cal/cal.php
|
@ -22,25 +22,116 @@ function cal_module()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
/* pathes
|
/* pathes
|
||||||
* /cal/$user/export/$format
|
* /cal/$user/export/$
|
||||||
|
* currently supported format is ical (iCalendar
|
||||||
*/
|
*/
|
||||||
function cal_content()
|
function cal_content()
|
||||||
{
|
{
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
$o = "";
|
$o = "";
|
||||||
if ($a->argc == 1) {
|
if ($a->argc == 1) {
|
||||||
$o = "<p>".t('Some text to explain what this does.')."</p>";
|
$o .= "<h3>".t('Event Export')."</h3><p>".t('You can download public events from: ').$a->get_baseurl()."/cal/username/export/ical</p>";
|
||||||
} elseif ($a->argc==4) {
|
} elseif ($a->argc==4) {
|
||||||
|
// get the parameters from the request we just received
|
||||||
$username = $a->argv[1];
|
$username = $a->argv[1];
|
||||||
$do = $a->argv[2];
|
$do = $a->argv[2];
|
||||||
$format = $a->argv[3];
|
$format = $a->argv[3];
|
||||||
$o = "<p>".$do." calendar for ".$username." as ".$format." file.</p>";
|
// check that there is a user matching the requested profile
|
||||||
|
$r = q("SELECT uid FROM user WHERE nickname='".$username."' LIMIT 1;");
|
||||||
|
if (count($r))
|
||||||
|
{
|
||||||
|
$uid = $r[0]['uid'];
|
||||||
|
} else {
|
||||||
|
killme();
|
||||||
|
}
|
||||||
|
// if we shall do anything other then export, end here
|
||||||
|
if (! $do == 'export' )
|
||||||
|
killme();
|
||||||
|
// check if the user allows us to share the profile
|
||||||
|
$enable = get_pconfig( $uid, 'cal', 'enable');
|
||||||
|
if (! $enable == 1) {
|
||||||
|
info(t('The user does not export the calendar.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// we are allowed to show events
|
||||||
|
// get the timezone the user is in
|
||||||
|
$r = q("SELECT timezone FROM user WHERE uid=".$uid." LIMIT 1;");
|
||||||
|
if (count($r))
|
||||||
|
$timezone = $r[0]['timezone'];
|
||||||
|
// does the user who requests happen to be the owner of the events
|
||||||
|
// requested? then show all of your events, otherwise only those that
|
||||||
|
// don't have limitations set in allow_cid and allow_gid
|
||||||
|
if (local_user() == $uid) {
|
||||||
|
$r = q("SELECT `start`, `finish`, `adjust`, `summary`, `desc`, `location` FROM `event` WHERE `uid`=".$uid.";");
|
||||||
|
} else {
|
||||||
|
$r = q("SELECT `start`, `finish`, `adjust`, `summary`, `desc`, `location` FROM `event` WHERE `allow_cid`='' and `allow_gid`='' and `uid`='".$uid."';");
|
||||||
|
}
|
||||||
|
// we have the events that are available for the requestor
|
||||||
|
// now format the output according to the requested format
|
||||||
|
$res = cal_format_output($r, $format, $timezone);
|
||||||
|
if (! $res=='')
|
||||||
|
info($res);
|
||||||
} else {
|
} else {
|
||||||
$o = "<p>".t('Wrong number of parameters')."</p>";
|
// wrong number of parameters
|
||||||
|
killme();
|
||||||
}
|
}
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function cal_format_output ($r, $f, $tz)
|
||||||
|
{
|
||||||
|
$res = t('This calendar format is not supported');;
|
||||||
|
switch ($f)
|
||||||
|
{
|
||||||
|
case "ical":
|
||||||
|
header("Content-type: text/icon");
|
||||||
|
$res = '';
|
||||||
|
$o = 'BEGIN:VCALENDAR'. PHP_EOL
|
||||||
|
. 'PRODID:-//friendica calendar export//0.1//EN' . PHP_EOL
|
||||||
|
. 'VERSION:2.0' . PHP_EOL;
|
||||||
|
// TODO include timezone informations in cases were the time is not in UTC
|
||||||
|
// . 'BEGIN:VTIMEZONE' . PHP_EOL
|
||||||
|
// . 'TZID:' . $tz . PHP_EOL
|
||||||
|
// . 'END:VTIMEZONE' . PHP_EOL;
|
||||||
|
foreach ($r as $rr) {
|
||||||
|
if ($rr['adjust'] == 1) {
|
||||||
|
$UTC = 'Z';
|
||||||
|
} else {
|
||||||
|
$UTC = '';
|
||||||
|
}
|
||||||
|
$o .= 'BEGIN:VEVENT' . PHP_EOL;
|
||||||
|
if ($rr[start]) {
|
||||||
|
$tmp = strtotime($rr['start']);
|
||||||
|
$dtformat = "%Y%m%dT%H%M%S".$UTC;
|
||||||
|
$o .= 'DTSTART:'.strftime($dtformat, $tmp).PHP_EOL;
|
||||||
|
}
|
||||||
|
if ($rr['finish']) {
|
||||||
|
$tmp = strtotime($rr['finish']);
|
||||||
|
$dtformat = "%Y%m%dT%H%M%S".$UTC;
|
||||||
|
$o .= 'DTEND:'.strftime($dtformat, $tmp).PHP_EOL;
|
||||||
|
}
|
||||||
|
if ($rr['summary'])
|
||||||
|
$tmp = $rr['summary'];
|
||||||
|
$tmp = str_replace(PHP_EOL, PHP_EOL.' ',$tmp);
|
||||||
|
$o .= 'SUMMARY:' . $tmp . PHP_EOL;
|
||||||
|
if ($rr['desc'])
|
||||||
|
$tmp = $rr['desc'];
|
||||||
|
$tmp = str_replace(PHP_EOL, PHP_EOL.' ',$tmp);
|
||||||
|
$o .= 'DESCRIPTION:' . $tmp . PHP_EOL;
|
||||||
|
if ($rr['location']) {
|
||||||
|
$tmp = $rr['location'];
|
||||||
|
$tmp = str_replace(PHP_EOL, PHP_EOL.' ',$tmp);
|
||||||
|
$o .= 'LOCATION:' . $tmp . PHP_EOL;
|
||||||
|
}
|
||||||
|
$o .= 'END:VEVENT' . PHP_EOL;
|
||||||
|
}
|
||||||
|
$o .= 'END:VCALENDAR' . PHP_EOL;
|
||||||
|
echo $o;
|
||||||
|
killme();
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
function cal_addon_settings_post ( &$a, &$b )
|
function cal_addon_settings_post ( &$a, &$b )
|
||||||
{
|
{
|
||||||
if (! local_user())
|
if (! local_user())
|
||||||
|
|
Loading…
Reference in a new issue