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');