diff --git a/plugins/tasklist/drivers/database/tasklist_database_driver.php b/plugins/tasklist/drivers/database/tasklist_database_driver.php index 975f96ee..5b1e99bb 100644 --- a/plugins/tasklist/drivers/database/tasklist_database_driver.php +++ b/plugins/tasklist/drivers/database/tasklist_database_driver.php @@ -75,6 +75,7 @@ class tasklist_database_driver extends tasklist_driver while ($result && ($arr = $this->rc->db->fetch_assoc($result))) { $arr['showalarms'] = intval($arr['showalarms']); $arr['active'] = !in_array($arr['id'], $hidden); + $arr['editable'] = true; $this->lists[$arr['id']] = $arr; $list_ids[] = $this->rc->db->quote($arr['id']); } @@ -133,7 +134,7 @@ class tasklist_database_driver extends tasklist_driver $query = $this->rc->db->query( "UPDATE " . $this->db_lists . " SET name=?, color=?, showalarms=? - WHERE calendar_id=? + WHERE tasklist_id=? AND user_id=?", $prop['name'], $prop['color'], @@ -288,7 +289,8 @@ class tasklist_database_driver extends tasklist_driver "SELECT * FROM " . $this->db_tasks . " WHERE tasklist_id IN (%s) AND del=0 - %s", + %s + ORDER BY parent_id, task_id ASC", join(',', $list_ids), $sql_add ), @@ -409,6 +411,11 @@ class tasklist_database_driver extends tasklist_driver $sql_set[] = $this->rc->db->quote_identifier($col) . '=' . (empty($prop[$col]) ? 'NULL' : $this->rc->db->quote($prop[$col])); } + // moved from another list + if ($prop['_fromlist'] && ($newlist = $prop['list'])) { + $sql_set[] = 'tasklist_id=' . $this->rc->db->quote($newlist); + } + $query = $this->rc->db->query(sprintf( "UPDATE " . $this->db_tasks . " SET changed=%s %s diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php index 5ccb3de9..b1d62eb3 100644 --- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php +++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php @@ -69,14 +69,27 @@ class tasklist_kolab_driver extends tasklist_driver asort($names, SORT_LOCALE_STRING); + $delim = $this->rc->get_storage()->get_hierarchy_delimiter(); + $listnames = array(); + foreach ($names as $utf7name => $name) { $folder = $this->folders[$utf7name]; + + $path_imap = explode($delim, $name); + $editname = array_pop($path_imap); // pop off raw name part + $path_imap = join($delim, $path_imap); + + $name = kolab_storage::folder_displayname(kolab_storage::object_name($utf7name), $listnames); + $tasklist = array( 'id' => kolab_storage::folder_id($utf7name), - 'name' => kolab_storage::object_name($utf7name), + 'name' => $name, + 'editname' => $editname, 'color' => 'CC0000', 'showalarms' => false, - 'active' => 1, #$folder->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION), + 'editable' => true, + 'active' => $folder->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION), + 'parentfolder' => $path_imap, ); $this->lists[$tasklist['id']] = $tasklist; $this->folders[$tasklist['id']] = $folder; @@ -108,7 +121,17 @@ class tasklist_kolab_driver extends tasklist_driver */ public function create_list($prop) { - return false; + $prop['type'] = 'task'; + $prop['subscribed'] = kolab_storage::SERVERSIDE_SUBSCRIPTION; // subscribe to folder by default + $folder = kolab_storage::folder_update($prop); + + if ($folder === false) { + $this->last_error = kolab_storage::$last_error; + return false; + } + + // create ID + return kolab_storage::folder_id($folder); } /** @@ -123,6 +146,20 @@ class tasklist_kolab_driver extends tasklist_driver */ public function edit_list($prop) { + if ($prop['id'] && ($folder = $this->folders[$prop['id']])) { + $prop['oldname'] = $folder->name; + $prop['type'] = 'task'; + $newfolder = kolab_storage::folder_update($prop); + + if ($newfolder === false) { + $this->last_error = kolab_storage::$last_error; + return false; + } + + // create ID + return kolab_storage::folder_id($newfolder); + } + return false; } @@ -136,6 +173,9 @@ class tasklist_kolab_driver extends tasklist_driver */ public function subscribe_list($prop) { + if ($prop['id'] && ($folder = $this->folders[$prop['id']])) { + return $folder->subscribe($prop['active'], kolab_storage::SERVERSIDE_SUBSCRIPTION); + } return false; } @@ -148,6 +188,13 @@ class tasklist_kolab_driver extends tasklist_driver */ public function remove_list($prop) { + if ($prop['id'] && ($folder = $this->folders[$prop['id']])) { + if (kolab_storage::folder_delete($folder->name)) + return true; + else + $this->last_error = kolab_storage::$last_error; + } + return false; } @@ -419,4 +466,19 @@ class tasklist_kolab_driver extends tasklist_driver } + /** + * + */ + public function tasklist_edit_form($formfields) + { + $select = kolab_storage::folder_selector('task', array('name' => 'parent', 'id' => 'edit-parentfolder'), null); + $formfields['parent'] = array( + 'id' => 'edit-parentfolder', + 'label' => $this->plugin->gettext('parentfolder'), + 'value' => $select->show(''), + ); + + return parent::tasklist_edit_form($formfields); + } + } diff --git a/plugins/tasklist/drivers/tasklist_driver.php b/plugins/tasklist/drivers/tasklist_driver.php index a3b0a850..c1d694dc 100644 --- a/plugins/tasklist/drivers/tasklist_driver.php +++ b/plugins/tasklist/drivers/tasklist_driver.php @@ -181,4 +181,23 @@ abstract class tasklist_driver return $rcmail->config->get('tasklist_categories', array()); } + /** + * 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 + * @return string HTML content of the form + */ + public function tasklist_edit_form($formfields) + { + $html = ''; + foreach ($formfields as $prop => $field) { + $html .= html::div('form-section', + html::label($field['id'], $field['label']) . + $field['value']); + } + + return $html; + } + } diff --git a/plugins/tasklist/localization/de_CH.inc b/plugins/tasklist/localization/de_CH.inc index a7b3712f..2253733c 100644 --- a/plugins/tasklist/localization/de_CH.inc +++ b/plugins/tasklist/localization/de_CH.inc @@ -31,6 +31,13 @@ $labels['save'] = 'Speichern'; $labels['cancel'] = 'Abbrechen'; $labels['addsubtask'] = 'Neue Teilaufgabe'; +$labels['editlist'] = 'Ressource bearbeiten'; +$labels['createlist'] = 'Neue Ressource'; +$labels['listactions'] = 'Ressourcenoptionen...'; +$labels['listname'] = 'Name'; +$labels['showalarms'] = 'Erinnerungen anzeigen'; +$labels['import'] = 'Importieren'; + // date words $labels['on'] = 'am'; $labels['at'] = 'um'; diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc index cbdcffb5..25e374c4 100644 --- a/plugins/tasklist/localization/en_US.inc +++ b/plugins/tasklist/localization/en_US.inc @@ -1,43 +1,50 @@ - +
+ +
+
+

@@ -125,6 +137,10 @@
+
+ +
+