diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index 58d35787..bc5c17ed 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -308,7 +308,6 @@ class calendar extends rcube_plugin $this->ui->init_templates(); $this->rc->output->add_label('lowest','low','normal','high','highest','delete','cancel','uploading','noemailwarning','close'); - $this->rc->output->add_label('libcalendaring.itipaccepted','libcalendaring.itiptentative','libcalendaring.itipdeclined','libcalendaring.itipdelegated','libcalendaring.expandattendeegroup','libcalendaring.expandattendeegroupnodata'); // initialize attendees autocompletion $this->rc->autocomplete_init(); diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index 3fcfd629..11a9dc7c 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -526,7 +526,7 @@ function rcube_calendar_ui(settings) } } - line = event_attendee_html(data); + line = rcube_libcalendaring.attendee_html(data); if (morelink) overflow += line; @@ -671,24 +671,6 @@ function rcube_calendar_ui(settings) rcmail.enable_command('event-history', calendar.history) }; - // render HTML code for displaying an attendee record - var event_attendee_html = function(data) - { - var dispname = Q(data.name || data.email), tooltip = ''; - - if (data.email) { - tooltip = data.email + '; ' + data.status; - dispname = '' + dispname + ''; - } - - if (data['delegated-to']) - tooltip = rcmail.gettext('delegatedto', 'calendar') + data['delegated-to']; - else if (data['delegated-from']) - tooltip = rcmail.gettext('delegatedfrom', 'calendar') + data['delegated-from']; - - return '' + dispname + ' '; - }; - // event handler for clicks on an attendee link var event_attendee_click = function(e) { @@ -1115,8 +1097,8 @@ function rcube_calendar_ui(settings) } // format attendees struct else if (prop == 'attendees') { - if (change['old']) change.old_ = event_attendee_html(change['old']); - if (change['new']) change.new_ = event_attendee_html($.extend({}, change['old'] || {}, change['new'])); + if (change['old']) change.old_ = rcube_libcalendaring.attendee_html(change['old']); + if (change['new']) change.new_ = rcube_libcalendaring.attendee_html($.extend({}, change['old'] || {}, change['new'])); html = true; } // localize priority values diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js index 72c451fd..d9f24751 100644 --- a/plugins/libcalendaring/libcalendaring.js +++ b/plugins/libcalendaring/libcalendaring.js @@ -1004,6 +1004,37 @@ function rcube_libcalendaring(settings) ////// static methods +// render HTML code for displaying an attendee record +rcube_libcalendaring.attendee_html = function(data) +{ + var name, tooltip = '', context = 'libcalendaring', + dispname = data.name || data.email, + status = data.role == 'ORGANIZER' ? 'ORGANIZER' : data.status; + + if (status) + status = status.toLowerCase(); + + if (data.email) { + tooltip = data.email; + name = $('').attr({href: 'mailto:' + data.email, 'class': 'mailtolink', 'data-cutype': data.cutype}) + + if (status) + tooltip += ' (' + rcmail.gettext('status' + status, context) + ')'; + } + else { + name = $(''); + } + + if (data['delegated-to']) + tooltip = rcmail.gettext('delegatedto', context) + data['delegated-to']; + else if (data['delegated-from']) + tooltip = rcmail.gettext('delegatedfrom', context) + data['delegated-from']; + + return $('').append( + $('').attr({'class': 'attendee ' + status, title: tooltip}).append(name.text(dispname)) + ).html(); +}; + /** * */ diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php index 54d38c76..326fe9b6 100644 --- a/plugins/libcalendaring/libcalendaring.php +++ b/plugins/libcalendaring/libcalendaring.php @@ -131,6 +131,14 @@ class libcalendaring extends rcube_plugin $this->rc->output->set_env('libcal_settings', $this->load_settings()); $this->include_script('libcalendaring.js'); $this->include_stylesheet($this->local_skin_path() . '/libcal.css'); + + $this->rc->output->add_label( + 'libcalendaring.itipaccepted', 'libcalendaring.itiptentative', 'libcalendaring.itipdeclined', + 'libcalendaring.itipdelegated', 'libcalendaring.expandattendeegroup', 'libcalendaring.expandattendeegroupnodata', + 'libcalendaring.statusorganizer', 'libcalendaring.statusaccepted', 'libcalendaring.statusdeclined', + 'libcalendaring.statusdelegated', 'libcalendaring.statusunknown', 'libcalendaring.statusneeds-action', + 'libcalendaring.statustentative' + ); } if ($args['task'] == 'mail') { diff --git a/plugins/libcalendaring/localization/en_US.inc b/plugins/libcalendaring/localization/en_US.inc index b0a3585e..9d7d54ce 100644 --- a/plugins/libcalendaring/localization/en_US.inc +++ b/plugins/libcalendaring/localization/en_US.inc @@ -88,6 +88,14 @@ $labels['dayofmonth'] = 'Day of month'; $labels['addrdate'] = 'Add repeat date'; $labels['except'] = 'except'; +$labels['statusorganizer'] = 'Organizer'; +$labels['statusaccepted'] = 'Accepted'; +$labels['statustentative'] = 'Tentative'; +$labels['statusdeclined'] = 'Declined'; +$labels['statusdelegated'] = 'Delegated'; +$labels['statusneeds-action'] = 'Needs action'; +$labels['statusunknown'] = 'Unknown'; + // itip related labels $labels['itipinvitation'] = 'Invitation to'; $labels['itipupdate'] = 'Update of'; diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js index 0bc47a53..83dd346a 100644 --- a/plugins/tasklist/tasklist.js +++ b/plugins/tasklist/tasklist.js @@ -2053,7 +2053,7 @@ function rcube_tasklist_ui(settings) rsvp = mystatus; } - line = task_attendee_html(data); + line = rcube_libcalendaring.attendee_html(data); if (morelink) overflow += line; @@ -2107,7 +2107,7 @@ function rcube_tasklist_ui(settings) $('#task-rsvp .itip-reply-comment textarea').hide().val(''); if (rec.organizer && !organizer) { - $('#task-organizer').show().children('.task-text').html(task_attendee_html($.extend(rec.organizer, { role:'ORGANIZER' }))); + $('#task-organizer').show().children('.task-text').html(rcube_libcalendaring.attendee_html($.extend(rec.organizer, { role:'ORGANIZER' }))); } } @@ -2163,24 +2163,6 @@ function rcube_tasklist_ui(settings) me.dialog_resize($dialog.get(0), $dialog.height(), 580); } - // render HTML code for displaying an attendee record - function task_attendee_html(data) - { - var dispname = Q(data.name || data.email), tooltip = ''; - - if (data.email) { - tooltip = data.email; - dispname = '' + dispname + ''; - } - - if (data['delegated-to']) - tooltip = rcmail.gettext('delegatedto', 'tasklist') + data['delegated-to']; - else if (data['delegated-from']) - tooltip = rcmail.gettext('delegatedfrom', 'tasklist') + data['delegated-from']; - - return '' + dispname + ' '; - } - /** * */ @@ -2285,8 +2267,8 @@ function rcube_tasklist_ui(settings) } // format attendees struct else if (prop == 'attendees') { - if (change['old']) change.old_ = task_attendee_html(change['old']); - if (change['new']) change.new_ = task_attendee_html($.extend({}, change['old'] || {}, change['new'])); + if (change['old']) change.old_ = rcube_libcalendaring.attendee_html(change['old']); + if (change['new']) change.new_ = rcube_libcalendaring.attendee_html($.extend({}, change['old'] || {}, change['new'])); html = true; } // localize status diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php index 87687f15..386408d4 100644 --- a/plugins/tasklist/tasklist.php +++ b/plugins/tasklist/tasklist.php @@ -1472,7 +1472,7 @@ class tasklist extends rcube_plugin $this->rc->output->set_env('autocomplete_threads', (int)$this->rc->config->get('autocomplete_threads', 0)); $this->rc->output->set_env('autocomplete_max', (int)$this->rc->config->get('autocomplete_max', 15)); $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length')); - $this->rc->output->add_label('autocompletechars', 'autocompletemore', 'delete', 'close', 'libcalendaring.expandattendeegroup', 'libcalendaring.expandattendeegroupnodata'); + $this->rc->output->add_label('autocompletechars', 'autocompletemore', 'delete', 'close'); $this->rc->output->set_pagetitle($this->gettext('navtitle')); $this->rc->output->send('tasklist.mainview');