diff --git a/plugins/kolab_activesync/kolab_activesync.js b/plugins/kolab_activesync/kolab_activesync.js index 3e1d826c..26a56ac9 100644 --- a/plugins/kolab_activesync/kolab_activesync.js +++ b/plugins/kolab_activesync/kolab_activesync.js @@ -35,7 +35,15 @@ function kolab_activesync_config() if (rcmail.gui_objects.devicelist) { var devicelist = new rcube_list_widget(rcmail.gui_objects.devicelist, { multiselect:true, draggable:false, keyboard:true }); - devicelist.addEventListener('select', select_device).init().focus(); + + devicelist.addEventListener('select', select_device) + .init() + .focus(); + + rcmail.devicelist = devicelist; + setTimeout(function() { + rcmail.triggerEvent('listupdate', {list: devicelist, rowcount: devicelist.rowcount}); + }, 100); // load frame if there are no devices if (!rcmail.env.devicecount) @@ -72,7 +80,9 @@ function kolab_activesync_config() { active_device = list.get_single_selection(); - if (active_device) + rcmail.enable_command('plugin.delete-device', list.get_selection().length > 0); + + if (active_device && !list.multi_selecting) device_select(active_device); else if (rcmail.env.contentframe) rcmail.show_contentframe(false); @@ -139,16 +149,25 @@ function kolab_activesync_config() if (p.success && p.id && p['delete']) { active_device = null; device_select(); - devicelist.remove_row(p.id); + + if (p.id == 'ALL') + devicelist.clear(); + else + devicelist.remove_row(p.id); + + rcmail.triggerEvent('listupdate', {list: devicelist, rowcount: devicelist.rowcount}); rcmail.enable_command('plugin.delete-device', false); } }; + // handler for delete commands function delete_device_config() { - if (active_device && confirm(rcmail.gettext('devicedeleteconfirm', 'kolab_activesync'))) { + var selection = devicelist.get_selection(); + + if (selection.length && confirm(rcmail.gettext('devicedeleteconfirm', 'kolab_activesync'))) { http_lock = rcmail.set_busy(true, 'kolab_activesync.savingdata'); - rcmail.http_post('plugin.activesync-json', { cmd:'delete', id:active_device }, http_lock); + rcmail.http_post('plugin.activesync-json', { cmd:'delete', id:selection }, http_lock); } }; diff --git a/plugins/kolab_activesync/kolab_activesync.php b/plugins/kolab_activesync/kolab_activesync.php index 38791182..235ab5aa 100644 --- a/plugins/kolab_activesync/kolab_activesync.php +++ b/plugins/kolab_activesync/kolab_activesync.php @@ -159,12 +159,17 @@ class kolab_activesync extends rcube_plugin break; case 'delete': - $success = $this->device_delete($imei); + foreach ((array) $imei as $id) { + $success = $this->device_delete($id); + } if ($success) { $this->rc->output->show_message($this->gettext('successfullydeleted'), 'confirmation'); $this->rc->output->command('plugin.activesync_save_complete', array( - 'success' => true, 'id' => $imei, 'delete' => true)); + 'success' => true, + 'delete' => true, + 'id' => count($imei) > 1 ? 'ALL' : $imei[0], + )); } else $this->rc->output->show_message($this->gettext('savingerror'), 'error'); diff --git a/plugins/kolab_activesync/skins/elastic/templates/config.html b/plugins/kolab_activesync/skins/elastic/templates/config.html index 3c832efb..00983278 100644 --- a/plugins/kolab_activesync/skins/elastic/templates/config.html +++ b/plugins/kolab_activesync/skins/elastic/templates/config.html @@ -13,11 +13,8 @@