diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index cd2a917a..cc8baeef 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -144,6 +144,27 @@ function rcube_tasklist_ui(settings)
return;
}
+ if (rcmail.env.action == 'dialog-ui') {
+ task_edit_dialog(null, 'new', rcmail.env.task_prop);
+
+ rcmail.addEventListener('plugin.unlock_saving', function(status) {
+ unlock_saving();
+
+ if (status) {
+ var rc = window.parent.rcmail,
+ win = rc.env.contentframe ? rc.get_frame_window(rc.env.contentframe) : window.parent;
+
+ if (win) {
+ win.location.reload();
+ }
+
+ window.parent.kolab_task_dialog_element.dialog('destroy');
+ }
+ });
+
+ return;
+ }
+
// initialize task list selectors
for (var id in me.tasklists) {
if (settings.selected_list && me.tasklists[settings.selected_list] && !me.tasklists[settings.selected_list].active) {
@@ -1800,7 +1821,7 @@ function rcube_tasklist_ui(settings)
success = true;
}
else {
- alert(rcmail.gettext('noemailwarning'));
+ rcmail.alert_dialog(rcmail.gettext('noemailwarning'));
}
}
@@ -1824,8 +1845,8 @@ function rcube_tasklist_ui(settings)
dispname = '
' + dispname + '';
// delete icon
- var icon = rcmail.env.deleteicon ? '

' : rcmail.gettext('delete');
- var dellink = '
' + icon + '';
+ var icon = rcmail.env.deleteicon ? '

' : '
' + Q(rcmail.gettext('delete')) + '';
+ var dellink = '
' + icon + '';
var tooltip, status = (data.status || '').toLowerCase(),
status_label = rcmail.gettext('status' + status, 'libcalendaring');
@@ -1846,8 +1867,9 @@ function rcube_tasklist_ui(settings)
rcmail.gettext('expandattendeegroup','libcalendaring') + '';
}
+ var elastic = $(attendees_list).parents('.no-img').length > 0;
var html = '
' + dispname + ' | ' +
- '
' + Q(status ? status_label : '') + ' | ' +
+ '
' + Q(status && !elastic ? status_label : '') + ' | ' +
(data.cutype != 'RESOURCE' ? '
' + (readonly || !invbox ? '' : invbox) + ' | ' : '') +
'
' + (readonly ? '' : dellink) + ' | ';
@@ -2305,7 +2327,8 @@ function rcube_tasklist_ui(settings)
function task_edit_dialog(id, action, presets)
{
var elastic = false, infodialog = $('#taskshow');
- if (infodialog.data('nodialog')) {
+ if (infodialog.data('nodialog') || $('#taskedit').data('nodialog')) {
+
elastic = true;
infodialog.addClass('hidden').parent().addClass('watermark'); // Elastic
}
@@ -2424,13 +2447,15 @@ function rcube_tasklist_ui(settings)
}
});
- $('#edit-tab-attendees').show();
+ $('#edit-tab-attendees').show(); // Larry
+ $('a[href="#taskedit-panel-attendees"]').parent().show(); // Elastic
$('#edit-attendees-form')[(allow_invitations?'show':'hide')]();
$('#edit-identities-list').val(identity_id);
$('#taskedit-organizer')[(organizer ? 'show' : 'hide')]();
}
else {
- $('#edit-tab-attendees').hide();
+ $('#edit-tab-attendees').hide(); // Larry
+ $('a[href="#taskedit-panel-attendees"]').parent().hide(); // Elastic
}
// attachments
@@ -2448,11 +2473,12 @@ function rcube_tasklist_ui(settings)
}
// show/hide tabs according to calendar's feature support
- $('#taskedit-tab-attachments')[(list.attachments||rec.attachments?'show':'hide')]();
+ $('#taskedit-tab-attachments')[(list.attachments||rec.attachments?'show':'hide')](); // Larry
+ $('a[href="#taskedit-panel-attachments"]').parent()[(list.attachments||rec.attachments?'show':'hide')](); // Elastic
// activate the first tab
$('#taskedit:not([data-notabs])').tabs('option', 'active', 0); // Larry
- if (elastic)
+ if (elastic && $.tab)
$('#taskedit li.nav-item:first-child a').tab('show'); // Elastic
// define dialog buttons
@@ -2481,16 +2507,16 @@ function rcube_tasklist_ui(settings)
var startdate = $.datepicker.parseDate(datepicker_settings.dateFormat, data.startdate, datepicker_settings);
var duedate = $.datepicker.parseDate(datepicker_settings.dateFormat, data.date, datepicker_settings);
if (startdate > duedate) {
- alert(rcmail.gettext('invalidstartduedates', 'tasklist'));
+ rcmail.alert_dialog(rcmail.gettext('invalidstartduedates', 'tasklist'));
return false;
}
else if ((data.time == '') != (data.starttime == '')) {
- alert(rcmail.gettext('invalidstartduetimes', 'tasklist'));
+ rcmail.alert_dialog(rcmail.gettext('invalidstartduetimes', 'tasklist'));
return false;
}
}
else if (data.recurrence && !data.startdate && !data.date) {
- alert(rcmail.gettext('recurrencerequiresdate', 'tasklist'));
+ rcmail.alert_dialog(rcmail.gettext('recurrencerequiresdate', 'tasklist'));
return false;
}
@@ -2547,7 +2573,7 @@ function rcube_tasklist_ui(settings)
delete data._notify;
}
- if (save_task(data, action))
+ if (save_task(data, action) && !elastic)
$dialog.dialog('close');
};
@@ -3313,29 +3339,28 @@ function tasklist_options_menu(p)
/* tasklist plugin UI initialization */
var rctasks;
window.rcmail && rcmail.addEventListener('init', function(evt) {
+ rctasks = new rcube_tasklist_ui($.extend(rcmail.env.tasklist_settings, rcmail.env.libcal_settings));
- rctasks = new rcube_tasklist_ui($.extend(rcmail.env.tasklist_settings, rcmail.env.libcal_settings));
+ // register button commands
+ rcmail.register_command('newtask', function(){ rctasks.edit_task(null, 'new', {}); }, true);
+ rcmail.register_command('print', function(){ rctasks.print_tasks(); }, true);
+ rcmail.register_command('import', function(){ rctasks.import_tasks(rctasks.selected_list); }, true);
+ rcmail.register_command('edit-task', function(){ rctasks.edit_task(rctasks.selected_task.id, 'edit'); });
+ rcmail.register_command('delete-task', function(){ rctasks.delete_task(rctasks.selected_task.id); });
+ rcmail.register_command('add-child-task', function(){ rctasks.add_childtask(rctasks.selected_task.id); });
+ rcmail.register_command('save-task', function(){ rcmail.env.task_save_func(); });
- // register button commands
- rcmail.register_command('newtask', function(){ rctasks.edit_task(null, 'new', {}); }, true);
- rcmail.register_command('print', function(){ rctasks.print_tasks(); }, true);
- rcmail.register_command('import', function(){ rctasks.import_tasks(rctasks.selected_list); }, true);
- rcmail.register_command('edit-task', function(){ rctasks.edit_task(rctasks.selected_task.id, 'edit'); });
- rcmail.register_command('delete-task', function(){ rctasks.delete_task(rctasks.selected_task.id); });
- rcmail.register_command('add-child-task', function(){ rctasks.add_childtask(rctasks.selected_task.id); });
- rcmail.register_command('save-task', function(){ rcmail.env.task_save_func(); });
+ rcmail.register_command('list-create', function(){ rctasks.list_edit_dialog(null); }, true);
+ rcmail.register_command('list-edit', function(){ rctasks.list_edit_dialog(rctasks.selected_list); }, false);
+ rcmail.register_command('list-delete', function(){ rctasks.list_delete(rctasks.selected_list); }, false);
+ rcmail.register_command('list-remove', function(){ rctasks.list_remove(rctasks.selected_list); }, false);
+ rcmail.register_command('list-showurl', function(){ rctasks.list_showurl(rctasks.selected_list); }, false);
- rcmail.register_command('list-create', function(){ rctasks.list_edit_dialog(null); }, true);
- rcmail.register_command('list-edit', function(){ rctasks.list_edit_dialog(rctasks.selected_list); }, false);
- rcmail.register_command('list-delete', function(){ rctasks.list_delete(rctasks.selected_list); }, false);
- rcmail.register_command('list-remove', function(){ rctasks.list_remove(rctasks.selected_list); }, false);
- rcmail.register_command('list-showurl', function(){ rctasks.list_showurl(rctasks.selected_list); }, false);
+ rcmail.register_command('export', function(){ rctasks.export_tasks(); }, true);
+ rcmail.register_command('search', function(){ rctasks.quicksearch(); }, true);
+ rcmail.register_command('reset-search', function(){ rctasks.reset_search(); }, true);
+ rcmail.register_command('expand-all', function(){ rctasks.expand_collapse(true); }, true);
+ rcmail.register_command('collapse-all', function(){ rctasks.expand_collapse(false); }, true);
- rcmail.register_command('export', function(){ rctasks.export_tasks(); }, true);
- rcmail.register_command('search', function(){ rctasks.quicksearch(); }, true);
- rcmail.register_command('reset-search', function(){ rctasks.reset_search(); }, true);
- rcmail.register_command('expand-all', function(){ rctasks.expand_collapse(true); }, true);
- rcmail.register_command('collapse-all', function(){ rctasks.expand_collapse(false); }, true);
-
- rctasks.init();
+ rctasks.init();
});
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 41d93948..770b0fd8 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -116,8 +116,7 @@ class tasklist extends rcube_plugin
$this->register_action('counts', array($this, 'fetch_counts'));
$this->register_action('fetch', array($this, 'fetch_tasks'));
$this->register_action('print', array($this, 'print_tasks'));
- $this->register_action('inlineui', array($this, 'get_inline_ui'));
- $this->register_action('mail2task', array($this, 'mail_message2task'));
+ $this->register_action('dialog-ui', array($this, 'mail_message2task'));
$this->register_action('get-attachment', array($this, 'attachment_get'));
$this->register_action('upload', array($this, 'attachment_upload'));
$this->register_action('import', array($this, 'import_tasks'));
@@ -141,7 +140,7 @@ class tasklist extends rcube_plugin
}
// add 'Create event' item to message menu
- if ($this->api->output->type == 'html') {
+ if ($this->api->output->type == 'html' && $_GET['_rel'] != 'task') {
$this->api->add_content(html::tag('li', null,
$this->api->output->button(array(
'command' => 'tasklist-create-from-mail',
@@ -555,7 +554,7 @@ class tasklist extends rcube_plugin
}
// unlock client
- $this->rc->output->command('plugin.unlock_saving');
+ $this->rc->output->command('plugin.unlock_saving', $success);
if ($refresh) {
if ($refresh['id']) {
@@ -1447,42 +1446,6 @@ class tasklist extends rcube_plugin
$this->rc->output->send('tasklist.mainview');
}
-
- /**
- *
- */
- public function get_inline_ui()
- {
- foreach (array('save','cancel','savingdata') as $label)
- $texts['tasklist.'.$label] = $this->gettext($label);
-
- $texts['tasklist.newtask'] = $this->gettext('createfrommail');
-
-
- $this->ui->init_templates();
- $this->ui->tasklists();
-
- // collect env variables
- $env = array(
- 'tasklists' => $this->rc->output->get_env('tasklists'),
- 'tasklist_settings' => $this->ui->load_settings(),
- );
-
- echo $this->api->output->parse('tasklist.taskedit', false, false);
-
- $script_add = '';
- foreach ($this->ui->get_gui_objects() as $obj => $id) {
- $script_add .= rcmail_output::JS_OBJECT_NAME . ".gui_object('$obj', '$id');\n";
- }
-
- echo html::tag('script', array('type' => 'text/javascript'),
- rcmail_output::JS_OBJECT_NAME . ".set_env(" . json_encode($env) . ");\n".
- rcmail_output::JS_OBJECT_NAME . ".add_label(" . json_encode($texts) . ");\n".
- $script_add
- );
- exit;
- }
-
/**
* Handler for keep-alive requests
* This will check for updated data in active lists and sync them to the client
@@ -1793,19 +1756,22 @@ class tasklist extends rcube_plugin
public function mail_message2task()
{
- $uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
- $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
+ $this->load_ui();
+ $this->ui->init();
+ $this->ui->init_templates();
+ $this->ui->tasklists();
+
+ $uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GET);
+ $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GET);
$task = array();
- // establish imap connection
- $imap = $this->rc->get_storage();
- $imap->set_folder($mbox);
- $message = new rcube_message($uid);
+ $imap = $this->rc->get_storage();
+ $message = new rcube_message($uid, $mbox);
if ($message->headers) {
- $task['title'] = trim($message->subject);
+ $task['title'] = trim($message->subject);
$task['description'] = trim($message->first_text_part());
- $task['id'] = -$uid;
+ $task['id'] = -$uid;
$this->load_driver();
@@ -1816,18 +1782,19 @@ class tasklist extends rcube_plugin
// copy mail attachments to task
else if ($message->attachments && $this->driver->attachments) {
if (!is_array($_SESSION[self::SESSION_KEY]) || $_SESSION[self::SESSION_KEY]['id'] != $task['id']) {
- $_SESSION[self::SESSION_KEY] = array();
- $_SESSION[self::SESSION_KEY]['id'] = $task['id'];
- $_SESSION[self::SESSION_KEY]['attachments'] = array();
+ $_SESSION[self::SESSION_KEY] = array(
+ 'id' => $task['id'],
+ 'attachments' => array(),
+ );
}
foreach ((array)$message->attachments as $part) {
$attachment = array(
- 'data' => $imap->get_message_part($uid, $part->mime_id, $part),
- 'size' => $part->size,
- 'name' => $part->filename,
+ 'data' => $imap->get_message_part($uid, $part->mime_id, $part),
+ 'size' => $part->size,
+ 'name' => $part->filename,
'mimetype' => $part->mimetype,
- 'group' => $task['id'],
+ 'group' => $task['id'],
);
$attachment = $this->rc->plugins->exec_hook('attachment_save', $attachment);
@@ -1846,13 +1813,13 @@ class tasklist extends rcube_plugin
}
}
- $this->rc->output->command('plugin.mail2taskdialog', $task);
+ $this->rc->output->set_env('task_prop', $task);
}
else {
$this->rc->output->command('display_message', $this->gettext('messageopenerror'), 'error');
}
- $this->rc->output->send();
+ $this->rc->output->send('tasklist.dialog');
}
/**
@@ -1922,7 +1889,7 @@ class tasklist extends rcube_plugin
);
}
if (count($links)) {
- $html .= html::div('messagetasklinks', html::tag('ul', 'tasklist', join("\n", $links)));
+ $html .= html::div('messagetasklinks boxinformation', html::tag('ul', 'tasklist', join("\n", $links)));
}
// prepend iTip/relation boxes to message body
diff --git a/plugins/tasklist/tasklist_base.js b/plugins/tasklist/tasklist_base.js
index 1ecaa290..956bac2e 100644
--- a/plugins/tasklist/tasklist_base.js
+++ b/plugins/tasklist/tasklist_base.js
@@ -6,7 +6,7 @@
* @licstart The following is the entire license notice for the
* JavaScript code in this file.
*
- * Copyright (C) 2013, Kolab Systems AG
+ * Copyright (C) 2013-2018, Kolab Systems AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
@@ -27,17 +27,8 @@
function rcube_tasklist(settings)
{
- /* private vars */
- var ui_loaded = false;
- var me = this;
- var mywin = window;
-
- /* public members */
- this.ui = null;
-
/* public methods */
this.create_from_mail = create_from_mail;
- this.mail2taskdialog = mail2task_dialog;
this.save_to_tasklist = save_to_tasklist;
@@ -46,51 +37,37 @@ function rcube_tasklist(settings)
*/
function create_from_mail(uid)
{
- if (uid || (uid = rcmail.get_single_uid())) {
- // load calendar UI (scripts and edit dialog template)
- if (!ui_loaded) {
- $.when(
- $.getScript(rcmail.assets_path('plugins/tasklist/tasklist.js')),
- $.get(rcmail.url('tasks/inlineui'), function(html) { $(document.body).append(html); }, 'html')
- ).then(function() {
- // register attachments form
- // rcmail.gui_object('attachmentlist', 'attachmentlist');
-
- ui_loaded = true;
- me.ui = new rcube_tasklist_ui($.extend(rcmail.env.tasklist_settings, settings));
- create_from_mail(uid); // start over
- });
-
- return;
- }
-
- // get message contents for task dialog
- var lock = rcmail.set_busy(true, 'loading');
- rcmail.http_post('tasks/mail2task', {
- '_mbox': rcmail.env.mailbox,
- '_uid': uid
- }, lock);
+ if (!uid && !(uid = rcmail.get_single_uid())) {
+ return;
}
- }
- /**
- * Callback function to put the given task properties into the dialog
- */
- function mail2task_dialog(prop)
- {
- this.ui.edit_task(null, 'new', prop);
- rcmail.addEventListener('responseaftertask', refresh_mailview);
- }
+ var url = {_mbox: rcmail.env.mailbox, _uid: uid, _framed: 1},
+ buttons = {},
+ button_classes = ['mainaction save', 'cancel'],
+ title = rcmail.gettext('tasklist.createfrommail'),
+ dialog = $('