Add option to display direct CardDAV urls for Kolab address books in the Roundcube UI

This commit is contained in:
Thomas Bruederli 2013-10-03 12:44:41 +02:00
parent 1800bd6556
commit e6e2044d40
8 changed files with 63 additions and 1 deletions

View file

@ -11,4 +11,12 @@
*/
$rcmail_config['kolab_addressbook_prio'] = 0;
// 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 - Folder name
// %i - Folder UUID
// $rcmail_config['kolab_addressbook_carddav_url'] = 'http://%h/iRony/addressbooks/%u/%i';
?>

View file

@ -18,6 +18,7 @@ rcube_webmail.prototype.set_book_actions = function()
this.enable_command('book-create', true);
this.enable_command('book-edit', 'book-delete', source && sources[source] && sources[source].kolab && sources[source].editable);
this.enable_command('book-showurl', source && sources[source] && sources[source].carddavurl);
};
rcube_webmail.prototype.book_create = function()
@ -38,6 +39,29 @@ rcube_webmail.prototype.book_delete = function()
}
};
rcube_webmail.prototype.book_showurl = function()
{
var source = this.env.source ? this.env.address_sources[this.env.source] : null;
if (source && source.carddavurl) {
$('div.showurldialog:ui-dialog').dialog('close');
var $dialog = $('<div>').addClass('showurldialog').append('<p>'+rcmail.gettext('carddavurldescription', 'kolab_addressbook')+'</p>'),
textbox = $('<textarea>').addClass('urlbox').css('width', '100%').attr('rows', 2).appendTo($dialog);
$dialog.dialog({
resizable: true,
closeOnEscape: true,
title: rcmail.gettext('bookshowurl', 'kolab_addressbook'),
close: function() {
$dialog.dialog("destroy").remove();
},
width: 520
}).show();
textbox.val(source.carddavurl).select();
}
};
// displays page with book edit/create form
rcube_webmail.prototype.book_show_contentframe = function(action, framed)
{

View file

@ -117,6 +117,7 @@ class kolab_addressbook extends rcube_plugin
'undelete' => $abook->undelete && $undelete,
'realname' => rcube_charset::convert($abook->get_realname(), 'UTF7-IMAP'), // IMAP folder name
'class_name' => $abook->get_namespace(),
'carddavurl' => $abook->get_carddav_url(),
'kolab' => true,
);
}

View file

@ -58,6 +58,10 @@ class kolab_addressbook_ui
$options = array('book-create', 'book-edit', 'book-delete');
$idx = 0;
if ($this->rc->config->get('kolab_addressbook_carddav_url')) {
$options[] = 'book-showurl';
}
foreach ($options as $command) {
$content = html::tag('li', $idx ? null : array('class' => 'separator_above'),
$this->plugin->api->output->button(array(
@ -82,7 +86,8 @@ class kolab_addressbook_ui
$this->plugin->api->add_content($content, 'groupoptions');
$this->rc->output->add_label('kolab_addressbook.bookdeleteconfirm',
'kolab_addressbook.bookdeleting');
'kolab_addressbook.bookdeleting', 'kolab_addressbook.bookshowurl',
'kolab_addressbook.carddavurldescription');
}
// book create/edit form
else {

View file

@ -178,6 +178,24 @@ class rcube_kolab_contacts extends rcube_addressbook
return $this->namespace;
}
/**
* Compose an URL for CardDAV access to this address book (if configured)
*/
public function get_carddav_url()
{
$url = null;
$rcmail = rcmail::get_instance();
if ($template = $rcmail->config->get('kolab_addressbook_carddav_url', null)) {
return strtr($template, array(
'%h' => $_SERVER['HTTP_HOST'],
'%u' => urlencode($rcmail->get_user_name()),
'%i' => urlencode($this->storagefolder->get_uid()),
'%n' => urlencode($this->imap_folder),
));
}
return false;
}
/**
* Setter for the current group

View file

@ -25,6 +25,8 @@ $labels['bookdelete'] = 'Adressbuch löschen';
$labels['bookproperties'] = 'Eigenschaften des Adressbuchs';
$labels['bookname'] = 'Name des Buches';
$labels['parentbook'] = 'Übergeordnetes Buch';
$labels['bookshowurl'] = 'CardDAV-URL anzeigen';
$labels['carddavurldescription'] = 'Benutzen Sie folgende Addresse in einer <a href="http://en.wikipedia.org/wiki/CardDAV" target="_blank">CalDAV</a>-Anwendung um dieses spezifische Adressbuch mit dem Computer oder Mobiltelefon zu synchronisieren.';
$labels['addressbookprio'] = 'Reihenfolge der Adressbücher';
$labels['personalfirst'] = 'Private(s) Adressbuch/Adressbücher zuerst';

View file

@ -25,6 +25,8 @@ $labels['bookdelete'] = 'Adressbuch löschen';
$labels['bookproperties'] = 'Eigenschaften des Adressbuchs';
$labels['bookname'] = 'Name des Buches';
$labels['parentbook'] = 'Übergeordnetes Buch';
$labels['bookshowurl'] = 'CardDAV-URL anzeigen';
$labels['carddavurldescription'] = 'Benutzen Sie folgende Addresse in einer <a href="http://en.wikipedia.org/wiki/CardDAV" target="_blank">CalDAV</a>-Anwendung um dieses spezifische Adressbuch mit dem Computer oder Mobiltelefon zu synchronisieren.';
$labels['addressbookprio'] = 'Reihenfolge der Adressbücher';
$labels['personalfirst'] = 'Private(s) Adressbuch/Adressbücher zuerst';

View file

@ -25,6 +25,8 @@ $labels['bookdelete'] = 'Delete address book';
$labels['bookproperties'] = 'Address book properties';
$labels['bookname'] = 'Book name';
$labels['parentbook'] = 'Superior book';
$labels['bookshowurl'] = 'Show CardDAV URL';
$labels['carddavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CardDAV" target="_blank">CardDAV</a> client application to fully synchronize this specific address book with your computer or mobile device.';
$labels['addressbookprio'] = 'Address book(s) selection/behaviour';
$labels['personalfirst'] = 'Personal address book(s) first';