Branch 'roundcubemail-plugins-kolab-3.1' - 5 commits - plugins/tasklist
Thomas Brüderli
bruederli at kolabsys.com
Thu May 1 18:07:45 CEST 2014
plugins/tasklist/drivers/database/tasklist_database_driver.php | 7
plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php | 146 +++++++++-
plugins/tasklist/drivers/tasklist_driver.php | 10
plugins/tasklist/localization/de_CH.inc | 1
plugins/tasklist/localization/de_DE.inc | 16 -
plugins/tasklist/localization/en_US.inc | 1
plugins/tasklist/skins/larry/tasklist.css | 17 +
plugins/tasklist/skins/larry/templates/kolabacl.html | 26 +
plugins/tasklist/skins/larry/templates/mainview.html | 9
plugins/tasklist/tasklist.js | 103 ++++---
plugins/tasklist/tasklist.php | 7
plugins/tasklist/tasklist_ui.php | 5
12 files changed, 280 insertions(+), 68 deletions(-)
New commits:
commit 5be7b5bb93ab30b22d7537c42cc18e4acebd7906
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Thu May 1 18:07:14 2014 +0200
Fix pass-by-reference warnings
diff --git a/plugins/tasklist/drivers/database/tasklist_database_driver.php b/plugins/tasklist/drivers/database/tasklist_database_driver.php
index 7d4c0f1..db05bde 100644
--- a/plugins/tasklist/drivers/database/tasklist_database_driver.php
+++ b/plugins/tasklist/drivers/database/tasklist_database_driver.php
@@ -89,7 +89,8 @@ class tasklist_database_driver extends tasklist_driver
{
// attempt to create a default list for this user
if (empty($this->lists)) {
- if ($this->create_list(array('name' => 'Default', 'color' => '000000')))
+ $prop = array('name' => 'Default', 'color' => '000000');
+ if ($this->create_list($prop))
$this->_read_lists();
}
diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 5767fa0..197d17b 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -156,7 +156,8 @@ class tasklist_kolab_driver extends tasklist_driver
{
// attempt to create a default list for this user
if (empty($this->lists)) {
- if ($this->create_list(array('name' => 'Tasks', 'color' => '0000CC', 'default' => true)))
+ $prop = array('name' => 'Tasks', 'color' => '0000CC', 'default' => true);
+ if ($this->create_list($prop))
$this->_read_lists(true);
}
commit 6c0372f263dbebcf00457b3196d685b6dfe1ae3b
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Tue Apr 22 19:41:17 2014 +0200
Remove deleted lists from selector in task edit dialog, too (#2985)
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 37e94a7..0b0a561 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -1764,7 +1764,7 @@ function rcube_tasklist_ui(settings)
var li, delete_ids = [],
list = me.tasklists[prop.id];
- // find sub-lists
+ // find sub-lists
if (list && list.children) {
for (var child_id in me.tasklists) {
if (String(child_id).indexOf(prop.id) == 0)
@@ -1790,6 +1790,7 @@ function rcube_tasklist_ui(settings)
unlock_saving();
remove_tasks(list.id);
}
+ $("#taskedit-tasklist option[value='"+id+"']").remove();
}
}
commit ed5dd590d6956d1ec9823fed202ce5a2f8c18f10
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Tue Apr 22 19:35:48 2014 +0200
Add new list to list selector in task edit dialog, too (#2985)
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 905158b..37e94a7 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -1810,6 +1810,9 @@ function rcube_tasklist_ui(settings)
$(rcmail.gui_objects.folderlist).append(li);
me.tasklists[prop.id] = prop;
init_tasklist_li(li.get(0), prop.id);
+
+ // append to list selector in task edit dialog, too (#2985)
+ $('<option>').attr('value', prop.id).html(Q(prop.name)).appendTo('#taskedit-tasklist');
}
/**
commit 57a23526c54eb9dbaa7b786bcf6422c94aa7b5aa
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Apr 9 12:05:56 2014 +0200
Reload task view after renaming folders
diff --git a/plugins/tasklist/drivers/database/tasklist_database_driver.php b/plugins/tasklist/drivers/database/tasklist_database_driver.php
index 3c5ad38..7d4c0f1 100644
--- a/plugins/tasklist/drivers/database/tasklist_database_driver.php
+++ b/plugins/tasklist/drivers/database/tasklist_database_driver.php
@@ -103,7 +103,7 @@ class tasklist_database_driver extends tasklist_driver
* @return mixed ID of the new list on success, False on error
* @see tasklist_driver::create_list()
*/
- public function create_list($prop)
+ public function create_list(&$prop)
{
$result = $this->rc->db->query(
"INSERT INTO " . $this->db_lists . "
@@ -128,7 +128,7 @@ class tasklist_database_driver extends tasklist_driver
* @return boolean True on success, Fales on failure
* @see tasklist_driver::edit_list()
*/
- public function edit_list($prop)
+ public function edit_list(&$prop)
{
$query = $this->rc->db->query(
"UPDATE " . $this->db_lists . "
diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 3954a27..5767fa0 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -172,7 +172,7 @@ class tasklist_kolab_driver extends tasklist_driver
* showalarms: True if alarms are enabled
* @return mixed ID of the new list on success, False on error
*/
- public function create_list($prop)
+ public function create_list(&$prop)
{
$prop['type'] = 'task' . ($prop['default'] ? '.default' : '');
$prop['active'] = true; // activate folder by default
@@ -195,6 +195,10 @@ class tasklist_kolab_driver extends tasklist_driver
if ($prefs['kolab_tasklists'][$id])
$this->rc->user->save_prefs($prefs);
+ // force page reload to properly render folder hierarchy
+ if (!empty($prop['parent']))
+ $prop['_reload'] = true;
+
return $id;
}
@@ -208,7 +212,7 @@ class tasklist_kolab_driver extends tasklist_driver
* showalarms: True if alarms are enabled (if supported)
* @return boolean True on success, Fales on failure
*/
- public function edit_list($prop)
+ public function edit_list(&$prop)
{
if ($prop['id'] && ($folder = $this->folders[$prop['id']])) {
$prop['oldname'] = $folder->name;
@@ -233,6 +237,10 @@ class tasklist_kolab_driver extends tasklist_driver
if ($prefs['kolab_tasklists'][$id])
$this->rc->user->save_prefs($prefs);
+ // force page reload if folder name/hierarchy changed
+ if ($newfolder != $prop['oldname'])
+ $prop['_reload'] = true;
+
return $id;
}
diff --git a/plugins/tasklist/drivers/tasklist_driver.php b/plugins/tasklist/drivers/tasklist_driver.php
index 9e6fee8..ee5a161 100644
--- a/plugins/tasklist/drivers/tasklist_driver.php
+++ b/plugins/tasklist/drivers/tasklist_driver.php
@@ -75,7 +75,7 @@ abstract class tasklist_driver
* showalarms: True if alarms are enabled
* @return mixed ID of the new list on success, False on error
*/
- abstract function create_list($prop);
+ abstract function create_list(&$prop);
/**
* Update properties of an existing tasklist
@@ -87,7 +87,7 @@ abstract class tasklist_driver
* showalarms: True if alarms are enabled (if supported)
* @return boolean True on success, Fales on failure
*/
- abstract function edit_list($prop);
+ abstract function edit_list(&$prop);
/**
* Set active/subscribed state of a list
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index d23ecd4..905158b 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -1798,6 +1798,11 @@ function rcube_tasklist_ui(settings)
*/
function insert_list(prop)
{
+ if (prop._reload) {
+ rcmail.redirect(rcmail.url(''));
+ return;
+ }
+
var li = $('<li>').attr('id', 'rcmlitasklist'+prop.id)
.append('<input type="checkbox" name="_list[]" value="'+prop.id+'" checked="checked" />')
.append('<span class="handle"> </span>')
@@ -1815,11 +1820,17 @@ function rcube_tasklist_ui(settings)
var id = prop.oldid || prop.id,
li = rcmail.get_folder_li(id, 'rcmlitasklist');
+ if (prop._reload) {
+ rcmail.redirect(rcmail.url(''));
+ return;
+ }
+
if (me.tasklists[id] && li) {
delete me.tasklists[id];
me.tasklists[prop.id] = prop;
- $(li).data('id', prop.id);
- $('#'+li.id+' input').data('id', prop.id);
+ $(li).data('id', prop.id)
+ .attr('id', 'rcmlitasklist'+prop.id)
+ .find('input').data('id', prop.id);
$('.listname', li).html(Q(prop.name));
}
}
commit f5870e3b35a0c04a9c734baeb65980f1eab1f509
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Wed Apr 9 11:12:50 2014 +0200
Include sharing (acl) tab in task list edit dialog
Conflicts:
plugins/tasklist/localization/de_CH.inc
plugins/tasklist/localization/de_DE.inc
plugins/tasklist/tasklist.js
diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 96a4288..3954a27 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -50,6 +50,8 @@ class tasklist_kolab_driver extends tasklist_driver
if (kolab_storage::$version == '2.0') {
$this->alarm_absolute = false;
}
+
+ $this->plugin->register_action('folder-acl', array($this, 'folder_acl'));
}
/**
@@ -862,21 +864,132 @@ class tasklist_kolab_driver extends tasklist_driver
/**
*
*/
- public function tasklist_edit_form($fieldprop)
+ public function tasklist_edit_form($action, $list, $fieldprop)
{
- $select = kolab_storage::folder_selector('task', array('name' => 'parent', 'id' => 'taskedit-parentfolder'), null);
- $fieldprop['parent'] = array(
- 'id' => 'taskedit-parentfolder',
- 'label' => $this->plugin->gettext('parentfolder'),
- 'value' => $select->show(''),
+ if ($list['id'] && ($list = $this->lists[$list['id']])) {
+ $folder_name = $this->folders[$list['id']]->name; // UTF7
+ }
+ else {
+ $folder_name = '';
+ }
+
+ $storage = $this->rc->get_storage();
+ $delim = $storage->get_hierarchy_delimiter();
+ $form = array();
+
+ if (strlen($folder_name)) {
+ $path_imap = explode($delim, $folder_name);
+ array_pop($path_imap); // pop off name part
+ $path_imap = implode($path_imap, $delim);
+
+ $options = $storage->folder_info($folder_name);
+ }
+ else {
+ $path_imap = '';
+ }
+
+ $hidden_fields[] = array('name' => 'oldname', 'value' => $folder_name);
+
+ // folder name (default field)
+ $input_name = new html_inputfield(array('name' => 'name', 'id' => 'taskedit-tasklistame', 'size' => 20));
+ $fieldprop['name']['value'] = $input_name->show($list['editname'], array('disabled' => ($options['norename'] || $options['protected'])));
+
+ // prevent user from moving folder
+ if (!empty($options) && ($options['norename'] || $options['protected'])) {
+ $hidden_fields[] = array('name' => 'parent', 'value' => $path_imap);
+ }
+ else {
+ $select = kolab_storage::folder_selector('task', array('name' => 'parent', 'id' => 'taskedit-parentfolder'), $folder_name);
+ $fieldprop['parent'] = array(
+ 'id' => 'taskedit-parentfolder',
+ 'label' => $this->plugin->gettext('parentfolder'),
+ 'value' => $select->show($path_imap),
+ );
+ }
+
+ // General tab
+ $form['properties'] = array(
+ 'name' => $this->rc->gettext('properties'),
+ 'fields' => array(),
);
- $formfields = array();
foreach (array('name','parent','showalarms') as $f) {
- $formfields[$f] = $fieldprop[$f];
+ $form['properties']['fields'][$f] = $fieldprop[$f];
+ }
+
+ // add folder ACL tab
+ if ($action != 'form-new') {
+ $form['sharing'] = array(
+ 'name' => Q($this->plugin->gettext('tabsharing')),
+ 'content' => html::tag('iframe', array(
+ 'src' => $this->rc->url(array('_action' => 'folder-acl', '_folder' => $folder_name, 'framed' => 1)),
+ 'width' => '100%',
+ 'height' => 280,
+ 'border' => 0,
+ 'style' => 'border:0'),
+ '')
+ );
+ }
+
+ $form_html = '';
+ if (is_array($hidden_fields)) {
+ foreach ($hidden_fields as $field) {
+ $hiddenfield = new html_hiddenfield($field);
+ $form_html .= $hiddenfield->show() . "\n";
+ }
}
- return parent::tasklist_edit_form($formfields);
+ // create form output
+ foreach ($form as $tab) {
+ if (is_array($tab['fields']) && empty($tab['content'])) {
+ $table = new html_table(array('cols' => 2));
+ foreach ($tab['fields'] as $col => $colprop) {
+ $colprop['id'] = '_'.$col;
+ $label = !empty($colprop['label']) ? $colprop['label'] : $this->plugin->gettext($col);
+
+ $table->add('title', html::label($colprop['id'], Q($label)));
+ $table->add(null, $colprop['value']);
+ }
+ $content = $table->show();
+ }
+ else {
+ $content = $tab['content'];
+ }
+
+ if (!empty($content)) {
+ $form_html .= html::tag('fieldset', null, html::tag('legend', null, Q($tab['name'])) . $content) . "\n";
+ }
+ }
+
+ return $form_html;
+ }
+
+ /**
+ * Handler to render ACL form for a notes folder
+ */
+ public function folder_acl()
+ {
+ $this->plugin->require_plugin('acl');
+ $this->rc->output->add_handler('folderacl', array($this, 'folder_acl_form'));
+ $this->rc->output->send('tasklist.kolabacl');
}
+ /**
+ * Handler for ACL form template object
+ */
+ public function folder_acl_form()
+ {
+ $folder = rcube_utils::get_input_value('_folder', RCUBE_INPUT_GPC);
+
+ if (strlen($folder)) {
+ $storage = $this->rc->get_storage();
+ $options = $storage->folder_info($folder);
+
+ // get sharing UI from acl plugin
+ $acl = $this->rc->plugins->exec_hook('folder_form',
+ array('form' => array(), 'options' => $options, 'name' => $folder));
+ }
+
+ return $acl['form']['sharing']['content'] ?: html::div('hint', $this->plugin->gettext('aclnorights'));
+ }
}
diff --git a/plugins/tasklist/drivers/tasklist_driver.php b/plugins/tasklist/drivers/tasklist_driver.php
index cc9a409..9e6fee8 100644
--- a/plugins/tasklist/drivers/tasklist_driver.php
+++ b/plugins/tasklist/drivers/tasklist_driver.php
@@ -260,10 +260,12 @@ abstract class tasklist_driver
* Build the edit/create form for lists.
* This gives the drivers the opportunity to add more list properties
*
- * @param array List with form fields to be rendered
+ * @param string The action called this form
+ * @param array Tasklist properties
+ * @param array List with form fields to be rendered
* @return string HTML content of the form
*/
- public function tasklist_edit_form($formfields)
+ public function tasklist_edit_form($action, $list, $formfields)
{
$html = '';
foreach ($formfields as $field) {
diff --git a/plugins/tasklist/localization/de_CH.inc b/plugins/tasklist/localization/de_CH.inc
index ab9a999..2534c0f 100644
--- a/plugins/tasklist/localization/de_CH.inc
+++ b/plugins/tasklist/localization/de_CH.inc
@@ -68,3 +68,4 @@ $labels['deletetasktconfirm'] = 'Möchten Sie diese Aufgabe wirklich löschen?';
$labels['deleteparenttasktconfirm'] = 'Möchten Sie diese Aufgabe inklusive aller Teilaufgaben wirklich löschen?';
$labels['deletelistconfirm'] = 'Möchten Sie diese Liste mit allen Aufgaben wirklich löschen?';
$labels['deletelistconfirmrecursive'] = 'Möchten Sie diese Liste mit allen Aufgaben und Unter-Listen wirklich löschen?';
+$labels['aclnorights'] = 'Der Zugriff auf diese Liste erfordert Administrator-Rechte.';
diff --git a/plugins/tasklist/localization/de_DE.inc b/plugins/tasklist/localization/de_DE.inc
index b6d1cc3..ed0c975 100644
--- a/plugins/tasklist/localization/de_DE.inc
+++ b/plugins/tasklist/localization/de_DE.inc
@@ -60,11 +60,11 @@ $labels['this'] = 'diesen';
$labels['next'] = 'nächsten';
// mesages
-$labels['savingdata'] = 'Daten werden gespeichert...';
-$labels['errorsaving'] = 'Fehler beim Speichern.';
-$labels['notasksfound'] = 'Für die aktuellen Kriterien wurden keine Aufgaben gefunden.';
-$labels['invalidstartduedates'] = 'Beginn der Aufgabe darf nicht gröÃer als das Enddatum sein.';
-$labels['deletetasktconfirm'] = 'Möchten Sie diese Aufgabe wirklich löschen?';
-$labels['deleteparenttasktconfirm'] = 'Möchten Sie diese Aufgabe inklusive aller Teilaufgaben wirklich löschen?';
-$labels['deletelistconfirm'] = 'Möchten Sie diese Liste mit allen Aufgaben wirklich löschen?';
-$labels['deletelistconfirmrecursive'] = 'Möchten Sie diese Liste mit allen Aufgaben und Unter-Listen wirklich löschen?';
\ No newline at end of file
+$labels['savingdata'] = 'Daten werden gespeichertâ¦';
+$labels['errorsaving'] = 'Daten konnten nicht gespeichert werden.';
+$labels['notasksfound'] = 'Keine Aufgabe erfüllt die angelegten Kriterien';
+$labels['invalidstartduedates'] = 'Das Anfangsdatum muss vor dem Fälligkeitsdatum liegen.';
+$labels['deletetasktconfirm'] = 'Diese Aufgabe wirklich löschen?';
+$labels['deleteparenttasktconfirm'] = 'Diese Aufgabe wirklich mit allen Teilaufgaben löschen?';
+$labels['deletelistconfirm'] = 'Diese Aufgabenliste wirklich mit allen Aufgaben löschen?';
+$labels['aclnorights'] = 'Der Zugriff auf diese Liste erfordert Administrator-Rechte.';
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index ba331be..91360ce 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -69,3 +69,4 @@ $labels['deletetasktconfirm'] = 'Do you really want to delete this task?';
$labels['deleteparenttasktconfirm'] = 'Do you really want to delete this task and all its subtasks?';
$labels['deletelistconfirm'] = 'Do you really want to delete this list with all its tasks?';
$labels['deletelistconfirmrecursive'] = 'Do you really want to delete this list with all its sub-lists and tasks?';
+$labels['aclnorights'] = 'You do not have administrator rights on this task list.';
diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css
index 0db39c4..5c808ab 100644
--- a/plugins/tasklist/skins/larry/tasklist.css
+++ b/plugins/tasklist/skins/larry/tasklist.css
@@ -834,6 +834,23 @@ label.block {
outline: none;
}
+.tasklistview .uidialog .tabbed {
+ margin: -12px -8px 0 -8px;
+ min-width: 600px;
+}
+
+.tasklistview .uidialog .propform fieldset.tab {
+ display: block;
+ background: #efefef;
+ margin-top: 0.5em;
+ padding: 0.5em 1em;
+ min-height: 290px;
+}
+
+.tasklistview .uidialog .propform #taskedit-tasklistame {
+ width: 20em;
+}
+
/**
* Styles of the tagedit inputsforms
diff --git a/plugins/tasklist/skins/larry/templates/kolabacl.html b/plugins/tasklist/skins/larry/templates/kolabacl.html
new file mode 100644
index 0000000..1cf26fc
--- /dev/null
+++ b/plugins/tasklist/skins/larry/templates/kolabacl.html
@@ -0,0 +1,26 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<style type="text/css" media="screen">
+
+body.aclform {
+ background: #efefef;
+ margin: 0;
+}
+
+body.aclform .hint {
+ margin: 1em;
+}
+
+</style>
+</head>
+<body class="iframe aclform">
+
+<roundcube:object name="folderacl" />
+
+<roundcube:include file="/includes/footer.html" />
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html
index 40ae7bd..30fae50 100644
--- a/plugins/tasklist/skins/larry/templates/mainview.html
+++ b/plugins/tasklist/skins/larry/templates/mainview.html
@@ -146,7 +146,8 @@
<roundcube:include file="/templates/taskedit.html" />
<div id="tasklistform" class="uidialog">
- <roundcube:object name="plugin.tasklist_editform" />
+ <roundcube:label name="loading" />
+ <roundcube:container name="tasklistform" id="tasklistform" />
</div>
<script type="text/javascript">
@@ -156,6 +157,12 @@ var UI = new rcube_mail_ui();
$(document).ready(function(e){
UI.init();
+
+ rcmail.addEventListener('tasklist_editform_load', function(e){
+ if (rcmail.env.tasklist_driver == 'kolab')
+ UI.init_tabs($('#tasklistform > form').addClass('propform tabbed'));
+ });
+
new rcube_splitter({ id:'taskviewsplitter', p1:'#sidebar', p2:'#mainview-right',
orientation:'v', relative:true, start:240, min:180, size:16, offset:2 }).init();
new rcube_splitter({ id:'taskviewsplitterv', p1:'#tagsbox', p2:'#tasklistsbox',
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 41ec403..d23ecd4 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -1670,8 +1670,7 @@ function rcube_tasklist_ui(settings)
function list_edit_dialog(id)
{
var list = me.tasklists[id],
- $dialog = $('#tasklistform');
- editform = $('#tasklisteditform');
+ $dialog = $(rcmail.gui_containers.tasklistform);
if ($dialog.is(':ui-dialog'))
$dialog.dialog('close');
@@ -1679,50 +1678,67 @@ function rcube_tasklist_ui(settings)
if (!list)
list = { name:'', editable:true, showalarms:true };
- // fill edit form
- var name = $('#taskedit-tasklistame').prop('disabled', list.norename||false).val(list.editname || list.name),
- alarms = $('#taskedit-showalarms').prop('checked', list.showalarms).get(0),
- parent = $('#taskedit-parentfolder').val(list.parentfolder);
+ var editform, name, alarms;
+
+ $dialog.html(rcmail.get_label('loading'));
+ $.ajax({
+ type: 'GET',
+ dataType: 'html',
+ url: rcmail.url('tasklist'),
+ data: { action:(list.id ? 'form-edit' : 'form-new'), l:{ id:list.id } },
+ success: function(data) {
+ $dialog.html(data);
+ rcmail.triggerEvent('tasklist_editform_load', list);
+
+ // resize and reposition dialog window
+ editform = $('#tasklisteditform');
+ me.dialog_resize(rcmail.gui_containers.tasklistform, editform.height(), editform.width());
+
+ name = $('#taskedit-tasklistame').prop('disabled', list.norename||false).val(list.editname || list.name);
+ alarms = $('#taskedit-showalarms').prop('checked', list.showalarms).get(0);
+ name.select();
+ }
+ });
// dialog buttons
var buttons = {};
buttons[rcmail.gettext('save','tasklist')] = function() {
- // do some input validation
- if (!name.val() || name.val().length < 2) {
- alert(rcmail.gettext('invalidlistproperties', 'tasklist'));
- name.select();
- return;
- }
+ // do some input validation
+ if (!name.val() || name.val().length < 2) {
+ alert(rcmail.gettext('invalidlistproperties', 'tasklist'));
+ name.select();
+ return;
+ }
- // post data to server
- var data = editform.serializeJSON();
- if (list.id)
- data.id = list.id;
- if (alarms)
- data.showalarms = alarms.checked ? 1 : 0;
- if (parent.length)
- data.parentfolder = $('option:selected', parent).val();
-
- saving_lock = rcmail.set_busy(true, 'tasklist.savingdata');
- rcmail.http_post('tasklist', { action:(list.id ? 'edit' : 'new'), l:data });
- $dialog.dialog('close');
+ // post data to server
+ var data = editform.serializeJSON();
+ if (list.id)
+ data.id = list.id;
+ if (alarms)
+ data.showalarms = alarms.checked ? 1 : 0;
+
+ saving_lock = rcmail.set_busy(true, 'tasklist.savingdata');
+ rcmail.http_post('tasklist', { action:(list.id ? 'edit' : 'new'), l:data });
+ $dialog.dialog('close');
};
buttons[rcmail.gettext('cancel','tasklist')] = function() {
- $dialog.dialog('close');
+ $dialog.dialog('close');
};
// open jquery UI dialog
$dialog.dialog({
- modal: true,
- resizable: true,
- closeOnEscape: false,
- title: rcmail.gettext((list.id ? 'editlist' : 'createlist'), 'tasklist'),
- close: function() { $dialog.dialog('destroy').hide(); },
- buttons: buttons,
- minWidth: 400,
- width: 420
+ modal: true,
+ resizable: true,
+ closeOnEscape: false,
+ title: rcmail.gettext((list.id ? 'editlist' : 'createlist'), 'tasklist'),
+ close: function() {
+ $dialog.dialog('destroy').hide();
+ },
+ buttons: buttons,
+ minWidth: 400,
+ width: 420
}).show();
}
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 2758626..6f77734 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -478,13 +478,18 @@ class tasklist extends rcube_plugin
public function tasklist_action()
{
$action = get_input_value('action', RCUBE_INPUT_GPC);
- $list = get_input_value('l', RCUBE_INPUT_POST, true);
+ $list = get_input_value('l', RCUBE_INPUT_GPC, true);
$success = false;
if (isset($list['showalarms']))
$list['showalarms'] = intval($list['showalarms']);
switch ($action) {
+ case 'form-new':
+ case 'form-edit':
+ echo $this->ui->tasklist_editform($action, $list);
+ exit;
+
case 'new':
$list += array('showalarms' => true, 'active' => true, 'editable' => true);
if ($insert_id = $this->driver->create_list($list)) {
diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php
index 21faba3..d3537ae 100644
--- a/plugins/tasklist/tasklist_ui.php
+++ b/plugins/tasklist/tasklist_ui.php
@@ -70,7 +70,6 @@ class tasklist_ui
$this->plugin->register_handler('plugin.category_select', array($this, 'category_select'));
$this->plugin->register_handler('plugin.searchform', array($this->rc->output, 'search_form'));
$this->plugin->register_handler('plugin.quickaddform', array($this, 'quickadd_form'));
- $this->plugin->register_handler('plugin.tasklist_editform', array($this, 'tasklist_editform'));
$this->plugin->register_handler('plugin.tasks', array($this, 'tasks_resultview'));
$this->plugin->register_handler('plugin.tagslist', array($this, 'tagslist'));
$this->plugin->register_handler('plugin.tags_editline', array($this, 'tags_editline'));
@@ -146,7 +145,7 @@ class tasklist_ui
}
- function tasklist_editform($attrib = array())
+ function tasklist_editform($action, $list = array())
{
$fields = array(
'name' => array(
@@ -169,7 +168,7 @@ class tasklist_ui
);
return html::tag('form', array('action' => "#", 'method' => "post", 'id' => 'tasklisteditform'),
- $this->plugin->driver->tasklist_edit_form($fields)
+ $this->plugin->driver->tasklist_edit_form($action, $list, $fields)
);
}
More information about the commits
mailing list