From 1800bd65562b12fa58dbc2a3efdffe31ef2c0098 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 3 Oct 2013 12:07:02 +0200 Subject: [PATCH] Add option to display direct CalDAV urls for calendars in the UI --- plugins/calendar/calendar_ui.js | 8 ++++++++ plugins/calendar/config.inc.php.dist | 7 +++++++ .../calendar/drivers/kolab/kolab_calendar.php | 18 ++++++++++++++++++ .../calendar/drivers/kolab/kolab_driver.php | 1 + plugins/calendar/localization/de_CH.inc | 1 + plugins/calendar/localization/de_DE.inc | 1 + plugins/calendar/localization/en_US.inc | 1 + plugins/calendar/skins/classic/calendar.css | 3 ++- .../skins/classic/templates/calendar.html | 4 ++++ plugins/calendar/skins/larry/calendar.css | 3 ++- .../skins/larry/templates/calendar.html | 4 ++++ 11 files changed, 49 insertions(+), 2 deletions(-) diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index 27476418..81e350f0 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -2009,6 +2009,14 @@ function rcube_calendar_ui(settings) $dialog.dialog('close'); if (calendar.feedurl) { + if (calendar.caldavurl) { + $('#caldavurl').val(calendar.caldavurl); + $('#calendarcaldavurl').show(); + } + else { + $('#calendarcaldavurl').hide(); + } + $dialog.dialog({ resizable: true, closeOnEscape: true, diff --git a/plugins/calendar/config.inc.php.dist b/plugins/calendar/config.inc.php.dist index a8d5da83..56748bfe 100644 --- a/plugins/calendar/config.inc.php.dist +++ b/plugins/calendar/config.inc.php.dist @@ -119,5 +119,12 @@ $rcmail_config['calendar_itip_smtp_user'] = 'smtpauth'; // SMTP password used to send (anonymous) itip messages $rcmail_config['calendar_itip_smtp_pass'] = '123456'; +// Base URL to build fully qualified URIs to access calendars via CALDAV +// The following replacement variables are supported: +// %h - Current HTTP host +// %u - Current webmail user name +// %n - Calendar name +// %i - Calendar UUID +// $rcmail_config['calendar_caldav_url'] = 'http://%h/iRony/calendars/%u/%i'; ?> \ No newline at end of file diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index 1cf71077..877c3f54 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -155,6 +155,24 @@ class kolab_calendar return 'cc0000'; } + /** + * Compose an URL for CalDAV access to this calendar (if configured) + */ + public function get_caldav_url() + { + $url = null; + if ($template = $this->cal->rc->config->get('calendar_caldav_url', null)) { + return strtr($template, array( + '%h' => $_SERVER['HTTP_HOST'], + '%u' => urlencode($this->cal->rc->get_user_name()), + '%i' => urlencode($this->storage->get_uid()), + '%n' => urlencode($this->imap_folder), + )); + } + + return false; + } + /** * Return the corresponding kolab_storage_folder instance */ diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 75810b6c..2edc7cd0 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -123,6 +123,7 @@ class kolab_driver extends calendar_driver 'active' => $cal->storage->is_active(), 'owner' => $cal->get_owner(), 'children' => true, // TODO: determine if that folder indeed has child folders + 'caldavurl' => $cal->get_caldav_url(), ); } diff --git a/plugins/calendar/localization/de_CH.inc b/plugins/calendar/localization/de_CH.inc index cd3399fd..b580fc20 100644 --- a/plugins/calendar/localization/de_CH.inc +++ b/plugins/calendar/localization/de_CH.inc @@ -76,6 +76,7 @@ $labels['onemonthback'] = '1 Monat zurück'; $labels['nmonthsback'] = '$nr Monate zurück'; $labels['showurl'] = 'URL anzeigen'; $labels['showurldescription'] = 'Über die folgende Adresse können Sie mit einem beliebigen Kalenderprogramm Ihren Kalender abrufen (nur lesend), sofern dieses das iCal-Format unterstützt.'; +$labels['caldavurldescription'] = 'Benutzen Sie folgende Addresse in einer CalDAV-Anwendung (wie z.B. Evolution oder Mozilla Thunderbird) um diesen spezifischen Kalender mit dem Computer oder Mobiltelefon zu synchronisieren.'; // agenda view $labels['listrange'] = 'Angezeigter Bereich:'; diff --git a/plugins/calendar/localization/de_DE.inc b/plugins/calendar/localization/de_DE.inc index cb96b0d7..60e6ad2d 100644 --- a/plugins/calendar/localization/de_DE.inc +++ b/plugins/calendar/localization/de_DE.inc @@ -76,6 +76,7 @@ $labels['onemonthback'] = '1 Monat zurück'; $labels['nmonthsback'] = '$nr Monate zurück'; $labels['showurl'] = 'URL anzeigen'; $labels['showurldescription'] = 'Über die folgende Adresse können Sie mit einem beliebigen Kalenderprogramm Ihren Kalender abrufen (nur lesend), sofern dieses das iCal-Format unterstützt.'; +$labels['caldavurldescription'] = 'Benutzen Sie folgende Addresse in einer CalDAV-Anwendung (wie z.B. Evolution oder Mozilla Thunderbird) um diesen spezifischen Kalender mit dem Computer oder Mobiltelefon zu synchronisieren.'; // agenda view $labels['listrange'] = 'Angezeigter Bereich:'; diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc index 3bf52bae..9a631b20 100644 --- a/plugins/calendar/localization/en_US.inc +++ b/plugins/calendar/localization/en_US.inc @@ -77,6 +77,7 @@ $labels['onemonthback'] = '1 month back'; $labels['nmonthsback'] = '$nr months back'; $labels['showurl'] = 'Show calendar URL'; $labels['showurldescription'] = 'Use the following address to access (read only) your calendar from other applications. You can copy and paste this into any calendar software that supports the iCal format.'; +$labels['caldavurldescription'] = 'Copy this address to a CalDAV client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.'; // agenda view $labels['listrange'] = 'Range to display:'; diff --git a/plugins/calendar/skins/classic/calendar.css b/plugins/calendar/skins/classic/calendar.css index 117c2cea..835bdac6 100644 --- a/plugins/calendar/skins/classic/calendar.css +++ b/plugins/calendar/skins/classic/calendar.css @@ -164,7 +164,8 @@ pre { background-position: 0 -92px; } -#calfeedurl { +#calfeedurl, +#caldavurl { width: 98%; background: #fbfbfb; padding: 4px; diff --git a/plugins/calendar/skins/classic/templates/calendar.html b/plugins/calendar/skins/classic/templates/calendar.html index a78e76fc..ba80ca3c 100644 --- a/plugins/calendar/skins/classic/templates/calendar.html +++ b/plugins/calendar/skins/classic/templates/calendar.html @@ -150,6 +150,10 @@

+
diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css index b11abfa5..8775b2aa 100644 --- a/plugins/calendar/skins/larry/calendar.css +++ b/plugins/calendar/skins/larry/calendar.css @@ -225,7 +225,8 @@ pre { background-position: right -92px; } -#calfeedurl { +#calfeedurl, +#caldavurl { width: 98%; background: #fbfbfb; padding: 4px; diff --git a/plugins/calendar/skins/larry/templates/calendar.html b/plugins/calendar/skins/larry/templates/calendar.html index bc9beca7..79ce5add 100644 --- a/plugins/calendar/skins/larry/templates/calendar.html +++ b/plugins/calendar/skins/larry/templates/calendar.html @@ -164,6 +164,10 @@

+