From fdde6fcbf08157f3432fe5b9b1d49a34a274427d Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Wed, 3 Sep 2014 10:36:53 +0200 Subject: [PATCH] Fix errors on addressbook delete and no list update on name change (#3559) --- .../kolab_addressbook/kolab_addressbook.js | 32 +++++++++++++------ .../kolab_addressbook/kolab_addressbook.php | 8 ++--- .../lib/kolab_addressbook_ui.php | 1 + 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/plugins/kolab_addressbook/kolab_addressbook.js b/plugins/kolab_addressbook/kolab_addressbook.js index ee60569d..aa6df6e8 100644 --- a/plugins/kolab_addressbook/kolab_addressbook.js +++ b/plugins/kolab_addressbook/kolab_addressbook.js @@ -309,7 +309,21 @@ rcube_webmail.prototype.book_delete_done = function(id, recur) // action executed after book create/update rcube_webmail.prototype.book_update = function(data, old) { - var link, classes = [(data.group || ''), 'addressbook']; + var classes = ['addressbook'], + oldid = old ? rcmail.html_identifier_encode(old) : null, + content = $('
').append( + $('').html(data.name).attr({ + href: this.url('', { _source: data.id }), + rel: data.id, + onclick: "return rcmail.command('list', '" + data.id + "', this)" + }), + $('').attr({ + 'class': 'subscribed', + role: 'checkbox', + 'aria-checked': true, + title: this.gettext('kolab_addressbook.foldersubscribe') + }) + ); this.show_contentframe(false); @@ -319,19 +333,17 @@ rcube_webmail.prototype.book_update = function(data, old) if (data.group) classes.push(data.group); - link = $('').html(data.name) - .attr({ - href: this.url('', { _source: data.id }), - rel: data.id, - onclick: "return rcmail.command('list', '" + data.id + "', this)" - }); - // update (remove old row) if (old) { - this.treelist.update(old, { id: data.id, html:link, classes: classes, parent:(old != data.id ? data.parent : null) }, data.group || true); + // is the folder subscribed? + if (!$('#rcmli' + oldid + ' > div.subscribed').length) { + content.removeClass('subscribed').find('span').attr('aria-checked', false); + } + + this.treelist.update(old, {id: data.id, html: content, classes: classes, parent: (old != data.id ? data.parent : null)}, data.group || true); } else { - this.treelist.insert({ id: data.id, html:link, classes: classes, childlistclass: 'groups' }, data.parent, data.group || true); + this.treelist.insert({id: data.id, html: content, classes: classes, childlistclass: 'groups'}, data.parent, data.group || true); } this.env.contactfolders[data.id] = this.env.address_sources[data.id] = data; diff --git a/plugins/kolab_addressbook/kolab_addressbook.php b/plugins/kolab_addressbook/kolab_addressbook.php index e9f143f2..e3824bc3 100644 --- a/plugins/kolab_addressbook/kolab_addressbook.php +++ b/plugins/kolab_addressbook/kolab_addressbook.php @@ -627,7 +627,7 @@ class kolab_addressbook extends rcube_plugin $this->rc->output->show_message('kolab_addressbook.book'.$type.'d', 'confirmation'); $this->rc->output->command('set_env', 'delimiter', $delimiter); $this->rc->output->command('book_update', array( - 'id' => kolab_storage::folder_id($folder), + 'id' => kolab_storage::folder_id($folder, true), 'name' => $kolab_folder->get_foldername(), 'readonly' => false, 'editable' => true, @@ -636,7 +636,7 @@ class kolab_addressbook extends rcube_plugin 'group' => $kolab_folder->get_namespace(), 'parent' => kolab_storage::folder_id($kolab_folder->get_parent()), 'kolab' => true, - ), kolab_storage::folder_id($prop['oldname'])); + ), kolab_storage::folder_id($prop['oldname'], true)); $this->rc->output->send('iframe'); } @@ -762,7 +762,7 @@ class kolab_addressbook extends rcube_plugin } } } - + if ($success) { $this->rc->output->show_message('successfullysaved', 'confirmation'); } @@ -790,7 +790,7 @@ class kolab_addressbook extends rcube_plugin $this->rc->output->command('set_rowcount', rcmail_get_rowcount_text(new rcube_result_set())); $this->rc->output->command('set_env', 'delimiter', $delimiter); $this->rc->output->command('list_contacts_clear'); - $this->rc->output->command('book_delete_done', kolab_storage::folder_id($folder)); + $this->rc->output->command('book_delete_done', kolab_storage::folder_id($folder, true)); } else { $this->rc->output->show_message('kolab_addressbook.bookdeleteerror', 'error'); diff --git a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php index 898dd8cd..10d49f63 100644 --- a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php +++ b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php @@ -103,6 +103,7 @@ class kolab_addressbook_ui 'kolab_addressbook.listsearchresults', 'kolab_addressbook.nraddressbooksfound', 'kolab_addressbook.noaddressbooksfound', + 'kolab_addressbook.foldersubscribe', 'resetsearch'); } // book create/edit form