From f2547d87fe2c0fb41cc7dff17aeedba3af7ec591 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 29 Feb 2024 16:23:57 +0100 Subject: [PATCH] tasklist: Fix various issues with DAV driver, store alarms option in folder properties --- .../drivers/caldav/tasklist_caldav_driver.php | 37 ++++--------------- plugins/tasklist/tasklist.js | 2 + plugins/tasklist/tasklist.php | 7 +--- 3 files changed, 12 insertions(+), 34 deletions(-) diff --git a/plugins/tasklist/drivers/caldav/tasklist_caldav_driver.php b/plugins/tasklist/drivers/caldav/tasklist_caldav_driver.php index 9437700e..84d35db7 100644 --- a/plugins/tasklist/drivers/caldav/tasklist_caldav_driver.php +++ b/plugins/tasklist/drivers/caldav/tasklist_caldav_driver.php @@ -79,7 +79,6 @@ class tasklist_caldav_driver extends tasklist_driver $this->lists[$tasklist['id']] = $tasklist; $this->folders[$tasklist['id']] = $folder; - // $this->folders[$folder->name] = $folder; } return $this->lists; @@ -88,13 +87,13 @@ class tasklist_caldav_driver extends tasklist_driver /** * Derive list properties from the given kolab_storage_folder object */ - protected function folder_props($folder, $prefs) + protected function folder_props($folder, $prefs = []) { if ($folder->get_namespace() == 'personal') { $norename = false; $editable = true; $rights = 'lrswikxtea'; - $alarms = true; + $alarms = !isset($folder->attributes['alarms']) || $folder->attributes['alarms']; } else { $alarms = false; $rights = 'lr'; @@ -302,6 +301,7 @@ class tasklist_caldav_driver extends tasklist_driver public function create_list(&$prop) { $prop['type'] = 'task'; + $prop['alarms'] = !empty($prop['showalarms']); $id = $this->storage->folder_update($prop); @@ -309,22 +309,12 @@ class tasklist_caldav_driver extends tasklist_driver return false; } - $prefs['kolab_tasklists'] = $this->rc->config->get('kolab_tasklists', []); - - if (isset($prop['showalarms'])) { - $prefs['kolab_tasklists'][$id]['showalarms'] = $prop['showalarms'] ? true : false; - } - - if (isset($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; } else { - $folder = $this->get_folder($id); - $prop += $this->folder_props($folder, []); + $prop += $this->_read_lists(true)[$id] ?? []; + unset($prop['type'], $prop['alarms']); } return $id; @@ -346,23 +336,12 @@ class tasklist_caldav_driver extends tasklist_driver if (!empty($prop['id'])) { $id = $prop['id']; $prop['type'] = 'task'; + $prop['alarms'] = !empty($prop['showalarms']); if ($this->storage->folder_update($prop) !== false) { - $prefs['kolab_tasklists'] = $this->rc->config->get('kolab_tasklists', []); + $prop += $this->_read_lists(true)[$id] ?? []; + unset($prop['type'], $prop['alarms']); - if (isset($prop['showalarms'])) { - $prefs['kolab_tasklists'][$id]['showalarms'] = $prop['showalarms'] ? true : false; - } - - if (isset($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 true; } } diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js index 9b065260..c5a8663c 100644 --- a/plugins/tasklist/tasklist.js +++ b/plugins/tasklist/tasklist.js @@ -3179,8 +3179,10 @@ function rcube_tasklist_ui(settings) } if (me.tasklists[id] && li) { + prop = $.extend({}, me.tasklists[id], prop); delete me.tasklists[id]; me.tasklists[prop.id] = prop; + $(li).find('input').first().val(prop.id); $(li).find('.listname').first().html(Q(prop.name)); tasklists_widget.update(id, {id: prop.id, html: $(li).children().first()}); diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php index 99786c3a..c70bc768 100644 --- a/plugins/tasklist/tasklist.php +++ b/plugins/tasklist/tasklist.php @@ -1009,10 +1009,6 @@ class tasklist extends rcube_plugin unset($list['_token']); - if (isset($list['showalarms'])) { - $list['showalarms'] = intval($list['showalarms']); - } - switch ($action) { case 'form-new': case 'form-edit': @@ -1021,7 +1017,7 @@ class tasklist extends rcube_plugin exit; case 'new': - $list += ['showalarms' => true, 'active' => true, 'editable' => true]; + $list += ['showalarms' => !empty($list['showalarms']), 'active' => true, 'editable' => true]; if ($insert_id = $this->driver->create_list($list)) { $list['id'] = $insert_id; if (empty($list['_reload'])) { @@ -1036,6 +1032,7 @@ class tasklist extends rcube_plugin case 'edit': $list['oldid'] = $list['id']; + $list['showalarms'] = !empty($list['showalarms']); if ($success = $this->driver->edit_list($list)) { $this->rc->output->command('plugin.update_tasklist', $list); }