From c8715ff2e70c40eb623cd4944d2e0e993dae5c4a Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Tue, 17 Mar 2015 10:43:03 +0100 Subject: [PATCH] Show CalDAV URL in tasks view (#3908); relies on the 'calendar_caldav_url' config option from the calendar module --- .../drivers/kolab/tasklist_kolab_driver.php | 1 + plugins/tasklist/drivers/tasklist_driver.php | 18 ++++++++++++ plugins/tasklist/localization/en_US.inc | 2 ++ .../skins/larry/templates/mainview.html | 5 ++++ plugins/tasklist/tasklist.js | 29 +++++++++++++++++++ plugins/tasklist/tasklist_ui.php | 1 + 6 files changed, 56 insertions(+) diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php index 65e7fc5f..4fccf7e5 100644 --- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php +++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php @@ -151,6 +151,7 @@ class tasklist_kolab_driver extends tasklist_driver 'subtype' => $folder->subtype, 'group' => $folder->default ? 'default' : $folder->get_namespace(), 'class' => trim($folder->get_namespace() . ($folder->default ? ' default' : '')), + 'caldavuid' => $folder->get_uid(), ); } diff --git a/plugins/tasklist/drivers/tasklist_driver.php b/plugins/tasklist/drivers/tasklist_driver.php index 1de03532..8a06db3a 100644 --- a/plugins/tasklist/drivers/tasklist_driver.php +++ b/plugins/tasklist/drivers/tasklist_driver.php @@ -358,6 +358,24 @@ abstract class tasklist_driver return $html; } + /** + * Compose an URL for CalDAV access to the given list (if configured) + */ + public function tasklist_caldav_url($list) + { + $rcmail = rcube::get_instance(); console($list); + if (!empty($list['caldavuid']) && ($template = $rcmail->config->get('calendar_caldav_url', null))) { + return strtr($template, array( + '%h' => $_SERVER['HTTP_HOST'], + '%u' => urlencode($rcmail->get_user_name()), + '%i' => urlencode($list['caldavuid']), + '%n' => urlencode($list['editname']), + )); + } + + return null; + } + /** * Handler for user_delete plugin hook * diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc index 57ad7e55..ee66759e 100644 --- a/plugins/tasklist/localization/en_US.inc +++ b/plugins/tasklist/localization/en_US.inc @@ -20,6 +20,8 @@ $labels['searchterms'] = 'Search terms'; $labels['notasklistsfound'] = 'No tasklists found'; $labels['nrtasklistsfound'] = '$nr tasklists found'; $labels['removelist'] = 'Remove from list'; +$labels['showcaldavurl'] = 'Show CalDAV URL'; +$labels['caldavurldescription'] = 'Copy this address to a CalDAV client application (e.g. Evolution or Mozilla Thunderbird) to synchronize this specific tasklist with your computer or mobile device.'; $labels['newtask'] = 'New Task'; $labels['createtask'] = 'Create Task '; diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html index 1e7aa435..f80b2f7e 100644 --- a/plugins/tasklist/skins/larry/templates/mainview.html +++ b/plugins/tasklist/skins/larry/templates/mainview.html @@ -56,6 +56,11 @@
  • + + +
  • + +
  • diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js index 9f187460..a01689fb 100644 --- a/plugins/tasklist/tasklist.js +++ b/plugins/tasklist/tasklist.js @@ -120,6 +120,7 @@ function rcube_tasklist_ui(settings) this.expand_collapse = expand_collapse; this.list_delete = list_delete; this.list_remove = list_remove; + this.list_showurl = list_showurl; this.list_edit_dialog = list_edit_dialog; this.unlock_saving = unlock_saving; @@ -172,6 +173,7 @@ function rcube_tasklist_ui(settings) rcmail.enable_command('list-delete', has_permission(me.tasklists[node.id], 'xa')); rcmail.enable_command('list-import', has_permission(me.tasklists[node.id], 'i')); rcmail.enable_command('list-remove', me.tasklists[node.id] && me.tasklists[node.id].removable); + rcmail.enable_command('list-showurl', me.tasklists[node.id] && !!me.tasklists[node.id].caldavurl); me.selected_list = node.id; }); tasklists_widget.addEventListener('subscribe', function(p) { @@ -2878,6 +2880,32 @@ function rcube_tasklist_ui(settings) } } + /** + * + */ + function list_showurl(id) + { + var list = me.tasklists[id]; + if (list && list.caldavurl) { + $('div.showurldialog:ui-dialog').dialog('close'); + + var $dialog = $('
    ').addClass('showurldialog').append('

    '+rcmail.gettext('caldavurldescription', 'tasklist')+'

    '), + textbox = $('