From 1b250fad733200f28752d1b0bf9c148d95686af1 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 14 Jun 2013 19:40:10 +0200 Subject: [PATCH 01/24] moved my profile --- blackout/blackout.php | 2 +- impressum/impressum.php | 2 +- mathjax/mathjax.php | 2 +- piwik/piwik.php | 4 +--- statusnet/statusnet.php | 2 +- twitter/twitter.php | 4 +--- webrtc/webrtc.php | 4 ++-- 7 files changed, 8 insertions(+), 12 deletions(-) diff --git a/blackout/blackout.php b/blackout/blackout.php index 83495611..e629b7a3 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -4,7 +4,7 @@ * Description: Blackout your ~friendica node during a given period, requires PHP >= 5.3 * License: MIT * Version: 1.0 - * Author: Tobias Diekershoff + * Author: Tobias Diekershoff * * About * ===== diff --git a/impressum/impressum.php b/impressum/impressum.php index 3c1106c9..8bcc8b7d 100755 --- a/impressum/impressum.php +++ b/impressum/impressum.php @@ -3,7 +3,7 @@ * Name: Impressum * Description: Plugin to add contact information to the about page (/friendica) * Version: 1.2 - * Author: Tobias Diekershoff + * Author: Tobias Diekershoff * License: 3-clause BSD license */ diff --git a/mathjax/mathjax.php b/mathjax/mathjax.php index ccc6ca0c..d97e9649 100644 --- a/mathjax/mathjax.php +++ b/mathjax/mathjax.php @@ -4,7 +4,7 @@ * Name: MathJax * Description: Addon for Friendika to include MathJax (LaTeX math syntax) * Version: 1.0 - * Author: Tobias Diekershoff + * Author: Tobias Diekershoff * License: 3-clause BSD license */ diff --git a/piwik/piwik.php b/piwik/piwik.php index 3501b2c8..a2086bdc 100755 --- a/piwik/piwik.php +++ b/piwik/piwik.php @@ -3,7 +3,7 @@ * Name: Piwik Analytics * Description: Piwik Analytics Plugin for Friendica * Version: 1.1 - * Author: Tobias Diekershoff + * Author: Tobias Diekershoff * Author: Klaus Weidenbach */ @@ -26,8 +26,6 @@ * installation has. Alter the baseurl to fit your needs, don't care * about http/https but beware to put the trailing / at the end of your * setting. - * - * Documentation see http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Piwik_Plugin */ function piwik_install() { diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 3a5ceb8a..eeca3d60 100755 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -3,7 +3,7 @@ * Name: StatusNet Connector * Description: Relay public postings to a connected StatusNet account * Version: 1.0.5 - * Author: Tobias Diekershoff + * Author: Tobias Diekershoff * Author: Michael Vogel * * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel diff --git a/twitter/twitter.php b/twitter/twitter.php index bde494e1..8b4dec99 100755 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -3,7 +3,7 @@ * Name: Twitter Connector * Description: Relay public postings to a connected Twitter account * Version: 1.0.4 - * Author: Tobias Diekershoff + * Author: Tobias Diekershoff * Author: Michael Vogel * * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel @@ -58,8 +58,6 @@ * from "Settings -> Plugin Settings". * * Requirements: PHP5, curl [Slinky library] - * - * Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin */ define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes diff --git a/webrtc/webrtc.php b/webrtc/webrtc.php index 7a4e8cf7..e0d33393 100644 --- a/webrtc/webrtc.php +++ b/webrtc/webrtc.php @@ -3,8 +3,8 @@ * Name: WebRTC Application * Description: add a webrtc instance for video/audio * Version: 1.0 - * Author: stephen mahood - * Author: Tobias Diekershoff + * Author: Stephen Mahood + * Author: Tobias Diekershoff */ function webrtc_install() { From bd0468303ba27f524f8d7900d888e9aa5a057b58 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 14 Jun 2013 20:08:10 +0200 Subject: [PATCH 02/24] SN: add the hint about the / to the admin panel config screen --- statusnet/statusnet.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index eeca3d60..154e1465 100755 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -758,7 +758,7 @@ function statusnet_plugin_admin(&$a, &$o){ foreach($sites as $id=>$s){ $sitesform[] = Array( 'sitename' => Array("sitename[$id]", "Site name", $s['sitename'], ""), - 'apiurl' => Array("apiurl[$id]", "Api url", $s['apiurl'], ""), + 'apiurl' => Array("apiurl[$id]", "Api url", $s['apiurl'], t("Base API Path \x28remember the trailing /\x29") ), 'secret' => Array("secret[$id]", "Secret", $s['consumersecret'], ""), 'key' => Array("key[$id]", "Key", $s['consumerkey'], ""), 'applicationname' => Array("applicationname[$id]", "Application name", $s['applicationname'], ""), @@ -770,7 +770,7 @@ function statusnet_plugin_admin(&$a, &$o){ $id++; $sitesform[] = Array( 'sitename' => Array("sitename[$id]", t("Site name"), "", ""), - 'apiurl' => Array("apiurl[$id]", t("API URL"), "", ""), + 'apiurl' => Array("apiurl[$id]", "Api url", $s['apiurl'], t("Base API Path \x28remember the trailing /\x29") ), 'secret' => Array("secret[$id]", t("Consumer Secret"), "", ""), 'key' => Array("key[$id]", t("Consumer Key"), "", ""), 'applicationname' => Array("applicationname[$id]", t("Application name"), "", ""), From aa0db37feae29aa265dbcf1c9446760e85b4ffc1 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 08:48:31 +0200 Subject: [PATCH 03/24] c&p typo and checking for a trailing / in admin panel --- statusnet/statusnet.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 154e1465..b3450d95 100755 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -727,6 +727,8 @@ function statusnet_plugin_admin_post(&$a){ foreach($_POST['sitename'] as $id=>$sitename){ $sitename=trim($sitename); $apiurl=trim($_POST['apiurl'][$id]); + if (! (substr($apiurl, -1)=='/')) + $apiurl=$apiurl.'/'; $secret=trim($_POST['secret'][$id]); $key=trim($_POST['key'][$id]); $applicationname = ((x($_POST, 'applicationname')) ? notags(trim($_POST['applicationname'][$id])):''); @@ -770,7 +772,7 @@ function statusnet_plugin_admin(&$a, &$o){ $id++; $sitesform[] = Array( 'sitename' => Array("sitename[$id]", t("Site name"), "", ""), - 'apiurl' => Array("apiurl[$id]", "Api url", $s['apiurl'], t("Base API Path \x28remember the trailing /\x29") ), + 'apiurl' => Array("apiurl[$id]", "Api url", "", t("Base API Path \x28remember the trailing /\x29") ), 'secret' => Array("secret[$id]", t("Consumer Secret"), "", ""), 'key' => Array("key[$id]", t("Consumer Key"), "", ""), 'applicationname' => Array("applicationname[$id]", t("Application name"), "", ""), From 73aabf82b2b31840da42d5a3897193c4101e1542 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 08:52:14 +0200 Subject: [PATCH 04/24] updatet the SN tarball --- statusnet.tgz | Bin 34767 -> 37029 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/statusnet.tgz b/statusnet.tgz index e92174ac8b09b54d250a04f5fb5c46ff19d2c334..dce1dd52786aee8763f2a07b5e543046167270c3 100755 GIT binary patch literal 37029 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�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 From 11199550575a9904d97ba7e90f23688f724a0864 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 10:51:27 +0200 Subject: [PATCH 05/24] cal: basic addon layout --- cal/cal.php | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 cal/cal.php diff --git a/cal/cal.php b/cal/cal.php new file mode 100644 index 00000000..302549bb --- /dev/null +++ b/cal/cal.php @@ -0,0 +1,40 @@ + + * License: MIT + * ******************************************************************/ + + +function cal_install() +{ +} +function cal_uninstall() +{ +} +function cal_module() +{ +} +/* pathes + * /cal/$user/export/$format + */ +function cal_content() +{ + $a = get_app(); + $o = ""; + if ($a->argc == 1) { + $o = "

".t('Some text to explain what this does.')."

"; + } elseif ($a->argc==4) { + $username = $a->argv[1]; + $do = $a->argv[2]; + $format = $a->argv[3]; + $o = "

".$do." calendar for ".$username." as ".$format." file.

"; + } else { + $o = "

".t('Wrong number of parameters')."

"; + } + return $o; +} + +?> From a79bd7c9f43652a565ca539a80cc41fa4d852637 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 10:54:42 +0200 Subject: [PATCH 06/24] added MIT License file --- cal/LICENSE | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 cal/LICENSE diff --git a/cal/LICENSE b/cal/LICENSE new file mode 100644 index 00000000..b2551796 --- /dev/null +++ b/cal/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013 Tobias Diekershoff + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. From 6ddd3100a76aaa36c8dc6baea3d429205d6db9b2 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 11:03:30 +0200 Subject: [PATCH 07/24] cal: basic README added --- cal/LICENSE | 2 +- cal/README.md | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 cal/README.md diff --git a/cal/LICENSE b/cal/LICENSE index b2551796..2c696e9a 100644 --- a/cal/LICENSE +++ b/cal/LICENSE @@ -5,7 +5,7 @@ of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: +furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. diff --git a/cal/README.md b/cal/README.md new file mode 100644 index 00000000..ded1b330 --- /dev/null +++ b/cal/README.md @@ -0,0 +1,27 @@ +Calendar Export +=============== + +This addon makes it possible to export the events posted by your users being +exported to other formats, so they can be imported into other calendar +applications. + +Exporting a calendar is an _opt-in_ feature which has to be activated by each +of the users in the _addon settings_. As the admin you can only provide the +service but should not force it upon your users. + +The calendars are exported at + + http://example.com/cal/username/format + +currently the only supported format is __ical__. + +Author +------ + +This addon is developed by [Tobias Diekershoff](https://f.diekershoff.de/profile/tobias). + +License +------- + +This addon is licensed under the [MIT](http://opensource.org/licenses/MIT) +license, see also the LICENSE file in the addon directory. From c9880c23724fbf010446326647d255962cbe3b14 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 11:51:19 +0200 Subject: [PATCH 08/24] cal: added settings functions --- cal/cal.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cal/cal.php b/cal/cal.php index 302549bb..f3823968 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -10,9 +10,13 @@ function cal_install() { + register_hook('plugin_settings', 'addon/cal/cal.php', 'cal_addon_settings'); + register_hook('plugin_settings_post', 'addon/cal/cal.php', 'cal_addon_settings_post'); } function cal_uninstall() { + unregister_hook('plugin_settings', 'addon/cal/cal.php', 'cal_addon_settings'); + unregister_hook('plugin_settings_post', 'addon/cal/cal.php', 'cal_addon_settings_post'); } function cal_module() { @@ -37,4 +41,15 @@ function cal_content() return $o; } +function cal_addon_settings_post ( &$a, &$b ) +{ + if (! local_user()) + return; +} +function cal_addon_settings ( &$a, &$s ) +{ + if (! local_user()) + return; +} + ?> From 70432578967279c40df82d459117205805dcfae9 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 12:14:33 +0200 Subject: [PATCH 09/24] cal: added user config --- cal/cal.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/cal/cal.php b/cal/cal.php index f3823968..adef464b 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -45,11 +45,30 @@ function cal_addon_settings_post ( &$a, &$b ) { if (! local_user()) return; + + if (!x($_POST,'cal-submit')) + return; + + set_pconfig(local_user(),'cal','enable',intval($_POST['cal-enable'])); } function cal_addon_settings ( &$a, &$s ) { if (! local_user()) return; + + $enabled = get_pconfig(local_user(), 'cal', 'enable'); + $checked = (($enabled) ? ' checked="checked" ' : ''); + $url = $a->get_baseurl().'/cal/'.$a->user['nickname'].'/export/ical'; + + $s .= '

'.t('Export Events').'

'; + $s .= '

'.t('If this is enabled, you public events will be available at').' '.$url.'

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + $s .= '
'; + $s .= '
'; + } ?> From 2a368fa6ac2fa19e51e39c97a99378354f2c2627 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 15 Jun 2013 21:34:56 +0200 Subject: [PATCH 10/24] cal: export to ical --- cal/cal.php | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 95 insertions(+), 4 deletions(-) diff --git a/cal/cal.php b/cal/cal.php index adef464b..6e8829de 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -22,25 +22,116 @@ function cal_module() { } /* pathes - * /cal/$user/export/$format + * /cal/$user/export/$ + * currently supported format is ical (iCalendar */ function cal_content() { $a = get_app(); $o = ""; if ($a->argc == 1) { - $o = "

".t('Some text to explain what this does.')."

"; + $o .= "

".t('Event Export')."

".t('You can download public events from: ').$a->get_baseurl()."/cal/username/export/ical

"; } elseif ($a->argc==4) { + // get the parameters from the request we just received $username = $a->argv[1]; $do = $a->argv[2]; $format = $a->argv[3]; - $o = "

".$do." calendar for ".$username." as ".$format." file.

"; + // 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 { - $o = "

".t('Wrong number of parameters')."

"; + // wrong number of parameters + killme(); } 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 ) { if (! local_user()) From 35568f0cf76d098363920542980451607d27551a Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 08:45:55 +0200 Subject: [PATCH 11/24] cal: added CSV export --- cal/cal.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/cal/cal.php b/cal/cal.php index 6e8829de..fb5ae482 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -83,8 +83,26 @@ function cal_format_output ($r, $f, $tz) $res = t('This calendar format is not supported');; switch ($f) { + // format the exported data as a CSV file + case "csv": + header("Content-type: text/csv"); + $o = '"Subject", "Start Date", "Start Time", "Description", "End Date", "End Time", "Location"' . PHP_EOL; + foreach ($r as $rr) { + $tmp1 = strtotime($rr['start']); + $tmp2 = strtotime($rr['finish']); + $time_format = "%H:%M:%S"; + $date_format = "%d.%m.%Y"; + $o .= '"'.$rr['summary'].'", "'.strftime($date_format, $tmp1) . + '", "'.strftime($time_format, $tmp1).'", "'.$rr['desc'] . + '", "'.strftime($date_format, $tmp2) . + '", "'.strftime($time_format, $tmp2) . + '", "'.$rr['location'].'"' . PHP_EOL; + } + echo $o; + killme(); + case "ical": - header("Content-type: text/icon"); + header("Content-type: text/ics"); $res = ''; $o = 'BEGIN:VCALENDAR'. PHP_EOL . 'PRODID:-//friendica calendar export//0.1//EN' . PHP_EOL From 9c541ae7697ffe1659d44179980f1dde0b91ede5 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 08:49:10 +0200 Subject: [PATCH 12/24] cal: user settings info about supported formats --- cal/cal.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cal/cal.php b/cal/cal.php index fb5ae482..461cb020 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -167,10 +167,11 @@ function cal_addon_settings ( &$a, &$s ) $enabled = get_pconfig(local_user(), 'cal', 'enable'); $checked = (($enabled) ? ' checked="checked" ' : ''); - $url = $a->get_baseurl().'/cal/'.$a->user['nickname'].'/export/ical'; + $url = $a->get_baseurl().'/cal/'.$a->user['nickname'].'/export/format'; $s .= '

'.t('Export Events').'

'; $s .= '

'.t('If this is enabled, you public events will be available at').' '.$url.'

'; + $s .= '

'.t('Currently supported formats are ical and csv.').'

'; $s .= '
'; $s .= ''; $s .= ''; From f5e09c787d7bb02070ea9a7350502c259061ed8b Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 08:51:11 +0200 Subject: [PATCH 13/24] cal: added csv support to the README --- cal/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cal/README.md b/cal/README.md index ded1b330..c19f07ce 100644 --- a/cal/README.md +++ b/cal/README.md @@ -13,7 +13,10 @@ The calendars are exported at http://example.com/cal/username/format -currently the only supported format is __ical__. +currently the following formats are supported + +* ical +* csv. Author ------ From d5b79c8194273804466b5beaa80ac251cf1e2f56 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 08:54:04 +0200 Subject: [PATCH 14/24] cal: added tarball --- cal.tgz | Bin 0 -> 3395 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 cal.tgz diff --git a/cal.tgz b/cal.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7a9bedd9dd4e17d4e92793c453d868a226233f60 GIT binary patch literal 3395 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 Z6;x0`1r=0KK?Q#U_&1{$0$Tu3006Suoe2N{ literal 0 HcmV?d00001 From 18e8f8d8fbf40d3d55ecfcb2e8d0506488fe023a Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 09:34:44 +0200 Subject: [PATCH 15/24] cal: missing export in README --- cal.tgz | Bin 3395 -> 3394 bytes cal/README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/cal.tgz b/cal.tgz index 7a9bedd9dd4e17d4e92793c453d868a226233f60..c52061d58b1cb4415a9cbb6799694cd584aa4e6c 100644 GIT binary patch literal 3394 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 Ygc3?9p@b4j_)ms^02G;P`T$S>03A<{fdBvi literal 3395 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 Z6;x0`1r=0KK?Q#U_&1{$0$Tu3006Suoe2N{ diff --git a/cal/README.md b/cal/README.md index c19f07ce..f2185650 100644 --- a/cal/README.md +++ b/cal/README.md @@ -11,7 +11,7 @@ service but should not force it upon your users. The calendars are exported at - http://example.com/cal/username/format + http://example.com/cal/username/export/format currently the following formats are supported From 69065bfd109b427104fcdf18919635681b27241d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 12:15:38 +0200 Subject: [PATCH 16/24] cal: added TODO note to CSV export --- cal/cal.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cal/cal.php b/cal/cal.php index 461cb020..597e5323 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -88,6 +88,8 @@ function cal_format_output ($r, $f, $tz) header("Content-type: text/csv"); $o = '"Subject", "Start Date", "Start Time", "Description", "End Date", "End Time", "Location"' . PHP_EOL; foreach ($r as $rr) { +// TODO the time / date entries don't include any information about the +// timezone the event is scheduled in :-/ $tmp1 = strtotime($rr['start']); $tmp2 = strtotime($rr['finish']); $time_format = "%H:%M:%S"; From d399dde3ba4cc27a68f90c896ccbcd4582a9301e Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 13:20:39 +0200 Subject: [PATCH 17/24] cal: cleanup the README --- cal.tgz | Bin 3394 -> 3439 bytes cal/README.md | 5 ++--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cal.tgz b/cal.tgz index c52061d58b1cb4415a9cbb6799694cd584aa4e6c..cb075e2218572475d22f126ad79dba4df15164c6 100644 GIT binary patch delta 3437 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 PFAV`Qv{TlIt(tr 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 Date: Sun, 16 Jun 2013 15:24:32 +0200 Subject: [PATCH 18/24] cal: code cleanup --- cal.tgz | Bin 3439 -> 3472 bytes cal/cal.php | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cal.tgz b/cal.tgz index cb075e2218572475d22f126ad79dba4df15164c6..b01a169dbeba86ac9b7f4305b4584b35654eac82 100644 GIT binary patch literal 3472 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 RDB&**{{d$|?Ee5z001sozajtt diff --git a/cal/cal.php b/cal/cal.php index 597e5323..5ec8d73e 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -22,8 +22,8 @@ function cal_module() { } /* pathes - * /cal/$user/export/$ - * currently supported format is ical (iCalendar + * /cal/$user/export/$format + * currently supported formats are ical (iCalendar) and CSV */ function cal_content() { @@ -80,7 +80,7 @@ function cal_content() function cal_format_output ($r, $f, $tz) { - $res = t('This calendar format is not supported');; + $res = t('This calendar format is not supported'); switch ($f) { // format the exported data as a CSV file @@ -105,11 +105,11 @@ function cal_format_output ($r, $f, $tz) case "ical": header("Content-type: text/ics"); - $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 +// see http://tools.ietf.org/html/rfc2445#section-4.8.3 // . 'BEGIN:VTIMEZONE' . PHP_EOL // . 'TZID:' . $tz . PHP_EOL // . 'END:VTIMEZONE' . PHP_EOL; From f9deb708c74461ae69b4eb1a833b3a21cebb6a68 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sun, 16 Jun 2013 22:03:41 +0200 Subject: [PATCH 19/24] cal: CSV date now is YYYY-MM-DD --- cal.tgz | Bin 3472 -> 3477 bytes cal/cal.php | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/cal.tgz b/cal.tgz index b01a169dbeba86ac9b7f4305b4584b35654eac82..259d9563dd6dd560f3b684c12781d3c9925c9eb0 100644 GIT binary patch literal 3477 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 Date: Wed, 19 Jun 2013 13:19:46 +0200 Subject: [PATCH 20/24] cal: typo --- cal/cal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cal/cal.php b/cal/cal.php index 4d251d37..b9c27755 100644 --- a/cal/cal.php +++ b/cal/cal.php @@ -172,7 +172,7 @@ function cal_addon_settings ( &$a, &$s ) $url = $a->get_baseurl().'/cal/'.$a->user['nickname'].'/export/format'; $s .= '

'.t('Export Events').'

'; - $s .= '

'.t('If this is enabled, you public events will be available at').' '.$url.'

'; + $s .= '

'.t('If this is enabled, your public events will be available at').' '.$url.'

'; $s .= '

'.t('Currently supported formats are ical and csv.').'

'; $s .= '
'; $s .= ''; From 6c8e16938bea824cf7414f720238cb078e2f1a20 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 19 Jun 2013 13:28:02 +0200 Subject: [PATCH 21/24] cal: added DE translation --- cal/lang/C/messages.po | 54 +++++++++++++++++++++++++++++++++++++++++ cal/lang/C/strings.php | 12 +++++++++ cal/lang/de/strings.php | 11 +++++++++ 3 files changed, 77 insertions(+) create mode 100644 cal/lang/C/messages.po create mode 100644 cal/lang/C/strings.php create mode 100644 cal/lang/de/strings.php diff --git a/cal/lang/C/messages.po b/cal/lang/C/messages.po new file mode 100644 index 00000000..db7ae28b --- /dev/null +++ b/cal/lang/C/messages.po @@ -0,0 +1,54 @@ +# ADDON cal +# Copyright (C) +# This file is distributed under the same license as the Friendica cal addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-06-19 13:20+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cal.php:33 +msgid "Event Export" +msgstr "" + +#: cal.php:33 +msgid "You can download public events from: " +msgstr "" + +#: cal.php:53 +msgid "The user does not export the calendar." +msgstr "" + +#: cal.php:83 +msgid "This calendar format is not supported" +msgstr "" + +#: cal.php:174 +msgid "Export Events" +msgstr "" + +#: cal.php:175 +msgid "If this is enabled, your public events will be available at" +msgstr "" + +#: cal.php:176 +msgid "Currently supported formats are ical and csv." +msgstr "" + +#: cal.php:178 +msgid "Enable calendar export" +msgstr "" + +#: cal.php:181 +msgid "Submit" +msgstr "" diff --git a/cal/lang/C/strings.php b/cal/lang/C/strings.php new file mode 100644 index 00000000..a72dc119 --- /dev/null +++ b/cal/lang/C/strings.php @@ -0,0 +1,12 @@ +strings["Event Export"] = ""; +$a->strings["You can download public events from: "] = ""; +$a->strings["The user does not export the calendar."] = ""; +$a->strings["This calendar format is not supported"] = ""; +$a->strings["Export Events"] = ""; +$a->strings["If this is enabled, your public events will be available at"] = ""; +$a->strings["Currently supported formats are ical and csv."] = ""; +$a->strings["Enable calendar export"] = ""; +$a->strings["Submit"] = ""; diff --git a/cal/lang/de/strings.php b/cal/lang/de/strings.php new file mode 100644 index 00000000..b3d658b1 --- /dev/null +++ b/cal/lang/de/strings.php @@ -0,0 +1,11 @@ +strings["Event Export"] = "Export von Veranstaltungen"; +$a->strings["You can download public events from: "] = "Öffentliche Veranstaltungen können unter folgender Adresse geladen werden: "; +$a->strings["The user does not export the calendar."] = "Dieser Nutzer exportiert keine Veranstaltungen."; +$a->strings["This calendar format is not supported"] = "Dieses Kalenderformat wird nicht unterstützt "; +$a->strings["Export Events"] = "Export von Veranstaltungen"; +$a->strings["If this is enabled, your public events will be available at"] = "ISt dieses Addpn aktiviert werden deine öffentlichen Veranstaltungen exportiert. Die Adresse zum Download lautet"; +$a->strings["Currently supported formats are ical and csv."] = "Derzeit werden die Formate ical und csv unterstützt."; +$a->strings["Enable calendar export"] = "Aktiviere den Kalenderexport"; From 689e0842a77aae49a09dd1b4a4198c3848577391 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 19 Jun 2013 14:14:12 +0200 Subject: [PATCH 22/24] cal: typo in DE translation --- cal/lang/de/strings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cal/lang/de/strings.php b/cal/lang/de/strings.php index b3d658b1..178e1281 100644 --- a/cal/lang/de/strings.php +++ b/cal/lang/de/strings.php @@ -6,6 +6,6 @@ $a->strings["You can download public events from: "] = "Öffentliche Veranstaltu $a->strings["The user does not export the calendar."] = "Dieser Nutzer exportiert keine Veranstaltungen."; $a->strings["This calendar format is not supported"] = "Dieses Kalenderformat wird nicht unterstützt "; $a->strings["Export Events"] = "Export von Veranstaltungen"; -$a->strings["If this is enabled, your public events will be available at"] = "ISt dieses Addpn aktiviert werden deine öffentlichen Veranstaltungen exportiert. Die Adresse zum Download lautet"; +$a->strings["If this is enabled, your public events will be available at"] = "Ist dieses Addpn aktiviert werden deine öffentlichen Veranstaltungen exportiert. Die Adresse zum Download lautet"; $a->strings["Currently supported formats are ical and csv."] = "Derzeit werden die Formate ical und csv unterstützt."; $a->strings["Enable calendar export"] = "Aktiviere den Kalenderexport"; From fc5670530dba7b720fbf497203eb28de68ccf6eb Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 19 Jun 2013 14:22:09 +0200 Subject: [PATCH 23/24] cal: typo in DE translation --- cal/lang/de/strings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cal/lang/de/strings.php b/cal/lang/de/strings.php index 178e1281..968a0a8a 100644 --- a/cal/lang/de/strings.php +++ b/cal/lang/de/strings.php @@ -6,6 +6,6 @@ $a->strings["You can download public events from: "] = "Öffentliche Veranstaltu $a->strings["The user does not export the calendar."] = "Dieser Nutzer exportiert keine Veranstaltungen."; $a->strings["This calendar format is not supported"] = "Dieses Kalenderformat wird nicht unterstützt "; $a->strings["Export Events"] = "Export von Veranstaltungen"; -$a->strings["If this is enabled, your public events will be available at"] = "Ist dieses Addpn aktiviert werden deine öffentlichen Veranstaltungen exportiert. Die Adresse zum Download lautet"; +$a->strings["If this is enabled, your public events will be available at"] = "Ist dieses Addon aktiviert werden deine öffentlichen Veranstaltungen exportiert. Die Adresse zum Download lautet"; $a->strings["Currently supported formats are ical and csv."] = "Derzeit werden die Formate ical und csv unterstützt."; $a->strings["Enable calendar export"] = "Aktiviere den Kalenderexport"; From ca671fc49beb8efdc0cd7bc1d26d5a1398440d75 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 21 Jun 2013 12:07:06 +0200 Subject: [PATCH 24/24] only the public events of the user are exported, not public eventy by contacts and some validation of the exported ical file --- cal.tgz | Bin 3477 -> 4394 bytes cal/cal.php | 14 ++++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cal.tgz b/cal.tgz index 259d9563dd6dd560f3b684c12781d3c9925c9eb0..2c080ac52499e6ec64635b90eb309a82a8b8c89a 100644 GIT binary patch literal 4394 zcmV+_5!LP=iwFRQCB#tx1MNHQcG^gm`D;DJU1E<+4+t=}lO=X~2*@#K`0xRo-n2Kz zmZbtT780Y9>^O7s8v7{oYyb6&?Y&hcA;3#XOG;< z*k0`IiBD|HpW=IEr?Ouu@9gaDzj#)zl&h7!XR!C!gi(umWQ73F!XSvg1oyS^|E0}F z{o{YeY%+VaHAunxySw-3zp_`Z?kwrQvbVqg49bs2QKtPr*Z;xKsCljQ(+_AG`~+QV z%4*QCJmxznR`cU52qPM3GH!?NEOG;&t`^%y6l?{GvQEE^U2U5}$l5F-BI(!~i)mt7&mBp8k0U=l?$UMrPG zhBNOr99Eiz0U<0!V$y5E({^p@mT~XWSA1GYid9SQ-edn`Db6X|kowQ4mfoVccNH zVTeZS-2#tiG|C*1!)Uo70~cq*wwvsWJXpR1jlnydTw0{T4*Uo)rQ+PQ;1I?vI=5!C zZ6%M*0Q+(|`NJK-_NG;QZG~eS4iBM{hkqnc27(<-s;_fKw5^-8t<;Xx^G5EVgd+zt zIru(^ad{t{;Kug?%URlsqcE7(0B6xkM9rneSsbF)jhv7S3C730p9qH-J}4n_N#ti> z9%orn4-a>V(2Y_Fh&{Rgtq@T}wB2bz(HFA6$BajC!{Be|s`0nY+-v4&8=J|RC=7-5 z`mFNd6^=MTwr@xDNp)oVtJF{H+Y@GA;cAv3gVcpu6MhG9iakM_$`;2`&QS zk9bKOZvoICftZ#g{2K`29fB^$b;z%*F&7!mAh`%;ajD>j<9CPxS{cPCbec+v`PQY! zlr_)L&PVQeTkt10DeYAWqbCAEYLZ#XumvryKMJMq*9<&&>P8m1G!E!^hQr zFA$*w+1SpLrb$YvvX=yWLFrm_QGkn)>$`kH-zMBd!Ebg<%B_$Qn#i6cCQc^k1y9B{{Lb0A9Sug8~=+wG} zHZm#~>Jlb@ZMmM1e z>^hfo(YOnsoN!@o-8((B zjulyy;aZdvfb^F(Mp($%{5n^Y5}7c|!5xxo$PA$v-OeyWjo8PiL{N#76Ul*|8^o7? zV|J7)KyE;03Qa3w^It=hKmE$2<@D1;Yf1p=dji&0mWu{wz{&B+x!G&0^^hNC2|hz& zVKWSA>k_BKUbB}vPbd+W$g>}XF3MB73)i>3*kKf)gvLoUq!{ZG^&#d8Obgyu*fL3- zV-TW*%^?RB}t04b83ZsB#Aywg-E;g$EfkY%gc2+^;7EWQX|2)kYa$Co> ztxj!gkQ0N%M|SXiacf%Ka^#>$y7ZiG$c3d7&_5VDiBUIj)sb8@gN3XO>CS_J7)Yio zz!`cH-~^*shdhk_;r{t6i|u^NVgw9}&|=lZp9%I>E#tHNU^a#(+IdTPL}KEUDn7u* zU7Ii2_#5+Wt6O{5sJG2-v)6t;v#WvOI#7Z^+JIiGm5m|FG3Df9-Y6ERzai_$x9= z{pihBM^S2b&R*aWojXqQ)^y7mZXIuR&?^~4ObRFIXbuO%dVg43@B&eG zSLclkZJ)F9NPXc~NL=ulzl%mP!QVq+>R0oN1TGG~TA}_tWHZmQ*|tJlNc3aqpcllN zOOq_evAJjQ3FF(;g+)r?m7ZVXWN_N))cfz%Uc-rZDqgwiyJ(gpPe*Xm95ni^lOZ|C zuMj==@+BRzzqnN#Qz&__)1!e$pEZ3sgB5d3=c#m%akZGnIB0WkJ^4Nx5Bc z{RrK!LU|@os-X}0)nl?nR_0vrZ{b1}_Ri9Izyg(b91Do4;_yLC-QG^{d z)R!Fg)zC>NGvm-xCqRpbSh_gG(#7!>Eq;-pP~wE#Smuq`Ud=_rANVx%BL<>L9<4VoK8yLsJa(HWi&2e`>F zEFv=Ejh0d!boh4nl8uL)RZ>}rRfQqRUqR)#*FXmvb4w}SgmmZ-=9WQ`T;?qUi_RP^ zE4zidE`yIa+n_?rl&3yRDVdIWC{iOPFE8WzRK6w4r1*d`NM#PXK*kdgzm{203` zWGlwpxG+H~EiY0+zF!OGZFEr_@p#NamgT@5GE!j4UQru0l@+{JbW1AbXqLvL=WaYH z?L;_AZJ^u$(Vl}+N)~(@6Xd&oey#n{H&g5O6pj2|yVWqe1M|_=`11X4d8fR)Pxrrj zFZTELcFX&8|68r@t?z%IqBVlqZRn0Cn2p$Z*eO@4cif(8+6fD%E~m>@3RQGpaCr;k z(84kuBi1OyG8St@D!|69K&OLrqJu7uK7$SW}0*#c2#GT2_L|u8MoVXkluaIgic{||*C^E4k9qlD&u%m!Z ziHSALp&VBnK-4siE=R1(;F<|uq>6nk-fSsup@7+3t7=GI8C|mEe1p!`H0ny&32AxU zGJfP@nm|!m9C$3TY2fG$5Xnr0Jn^#T6Q72ucF5X<->AVk03 z9lnR&5!Acy;jgW3vjFCQob=7X0D66`)j4UmOzdlQ8|~9(tNRw-;Jj{cC~r~_>97a1 zphDF$2ZXF+_8Z6ev;L;lZVlfTw4>IrOE`~ueW=3;*2k^JX}jKslhZz?z9uf;M6}&j z_o$Dnm>nz|3|tlaK-3U0IIg$bw3JpqMe6%RA2fO=@B6K{$3r;owVNh(zA=%q`kS^X zmqMl*?Ru+IfM&f@e`|_aJ;c)22uxB(_W;yI>(%jJg9;pCqtWXQ`}nhfT=s|Q)L&Wy zvjFveYd`{_8-;>K;=~y}fduDuO^Jm>4GS7U5c+*OFjIukH0y1|h3e@psLxpE0{>?l z#s9upZ+1*$>O9gKUy1*f>Wdf4@qfRvj{i^6mY-@JE;foI>07O-b%h~-qE>)Gg9ReQQVVv!FM(s~ceBMhqYFdbuwq)lZI z2@H|t!+9`^imrbSBW6W0h5w0bPhetkb^UE&25@aDg6JGr3+AsD#7RBlK36Miggu@fZ~&jLRq21CZ>ga=u0 zr`Ld1q-h)KNSuANrZbNjb}+s3fsMLv)#fjc7IT4YMW5FBn)Z_@@9~3*drgxM=Cq<{ z3%bTH4(ihjW>Ruzt6AZP?FYW8%i~JwNu641Wi6FLIS~7fe4zqo7}@0#xB`;la}=Y^ z#N~(r=Ou*6Yia&Pw<+SPfaa^JM&yr)n&oYs{Q41PcSZvnoR|6$U% zr2k#~x6c2bqRIFF+AEE&K9m8R<+5*ub06q7S6ymcWB7c>LQ6dQj$(hz{M^#q2R$X0 zNPqjU(TI{4%-Gm6TDbb{pT3Wuu^%ydY~^7mgc-ZSu zNeE^&1lf(FPb|4@a2dj0G1p%q%~)OP0q?>xD{=U%0A`_ry>UZ_9tuw)$u5t6`|s#e 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