diff options
Diffstat (limited to 'plugins/acl')
-rw-r--r-- | plugins/acl/acl.js | 28 | ||||
-rw-r--r-- | plugins/acl/acl.php | 40 |
2 files changed, 45 insertions, 23 deletions
diff --git a/plugins/acl/acl.js b/plugins/acl/acl.js index c4011a81c..aa9e06d3d 100644 --- a/plugins/acl/acl.js +++ b/plugins/acl/acl.js @@ -1,7 +1,7 @@ /** * ACL plugin script * - * @version 0.6.3 + * @version @package_version@ * @author Aleksander Machniak <alec@alec.pl> */ @@ -179,9 +179,8 @@ rcube_webmail.prototype.acl_get_usernames = function() if (this.env.acl_specials.length && $.inArray(selection[n], this.env.acl_specials) >= 0) { users.push(selection[n]); } - else { - row = list.rows[selection[n]].obj; - cell = $('td.user', row); + else if (row = list.rows[selection[n]]) { + cell = $('td.user', row.obj); if (cell.length == 1) users.push(cell.text()); } @@ -193,10 +192,17 @@ rcube_webmail.prototype.acl_get_usernames = function() // Removes ACL table row rcube_webmail.prototype.acl_remove_row = function(id) { - this.acl_list.remove_row(id); + var list = this.acl_list; + + list.remove_row(id); + list.clear_selection(); + // we don't need it anymore (remove id conflict) $('#rcmrow'+id).remove(); this.env.acl[id] = null; + + this.enable_command('acl-delete', list.selection.length > 0); + this.enable_command('acl-edit', list.selection.length == 1); } // Adds ACL table row @@ -259,7 +265,7 @@ rcube_webmail.prototype.acl_add_row = function(o, sel) // Initializes and shows ACL create/edit form rcube_webmail.prototype.acl_init_form = function(id) { - var ul, row, val = '', type = 'user', li_elements, body = $('body'), + var ul, row, td, val = '', type = 'user', li_elements, body = $('body'), adv_ul = $('#advancedrights'), sim_ul = $('#simplerights'), name_input = $('#acluser'); @@ -286,10 +292,11 @@ rcube_webmail.prototype.acl_init_form = function(id) li_elements = $(':checkbox', ul); li_elements.attr('checked', false); - if (id) { - row = this.acl_list.rows[id].obj; + if (id && (row = this.acl_list.rows[id])) { + row = row.obj; li_elements.map(function() { - var val = this.value, td = $('td.'+this.id, row); + val = this.value; + td = $('td.'+this.id, row); if (td && td.hasClass('enabled')) this.checked = true; }); @@ -299,6 +306,9 @@ rcube_webmail.prototype.acl_init_form = function(id) else type = id; } + // mark read (lrs) rights by default + else + li_elements.filter(function() { return this.id.match(/^acl([lrs]|read)$/); }).prop('checked', true); name_input.val(val); $('input[value='+type+']').prop('checked', true); diff --git a/plugins/acl/acl.php b/plugins/acl/acl.php index 3a5fd1ac1..b2e5b8d47 100644 --- a/plugins/acl/acl.php +++ b/plugins/acl/acl.php @@ -441,26 +441,37 @@ class acl extends rcube_plugin $acl = trim(get_input_value('_acl', RCUBE_INPUT_GPC)); $oldid = trim(get_input_value('_old', RCUBE_INPUT_GPC)); - $acl = array_intersect(str_split($acl), $this->rights_supported()); + $acl = array_intersect(str_split($acl), $this->rights_supported()); + $users = $oldid ? array($user) : explode(',', $user); - if (!empty($this->specials) && in_array($user, $this->specials)) { - $username = $this->gettext($user); - } - else { - if (!strpos($user, '@') && ($realm = $this->get_realm())) { - $user .= '@' . rcube_idn_to_ascii(preg_replace('/^@/', '', $realm)); + foreach ($users as $user) { + $user = trim($user); + + if (!empty($this->specials) && in_array($user, $this->specials)) { + $username = $this->gettext($user); + } + else { + if (!strpos($user, '@') && ($realm = $this->get_realm())) { + $user .= '@' . rcube_idn_to_ascii(preg_replace('/^@/', '', $realm)); + } + $username = $user; + } + + if (!$acl || !$user || !strlen($mbox)) { + continue; } - $username = $user; - } - if ($acl && $user && $user != $_SESSION['username'] && strlen($mbox)) { - $result = $this->rc->imap->set_acl($mbox, $user, $acl); + if ($user != $_SESSION['username'] && $username != $_SESSION['username']) { + if ($this->rc->imap->set_acl($mbox, $user, $acl)) { + $ret = array('id' => html_identifier($user), + 'username' => $username, 'acl' => implode($acl), 'old' => $oldid); + $this->rc->output->command('acl_update', $ret); + $result++; + } + } } if ($result) { - $ret = array('id' => html_identifier($user), - 'username' => $username, 'acl' => implode($acl), 'old' => $oldid); - $this->rc->output->command('acl_update', $ret); $this->rc->output->show_message($oldid ? 'acl.updatesuccess' : 'acl.createsuccess', 'confirmation'); } else { @@ -479,6 +490,7 @@ class acl extends rcube_plugin $user = explode(',', $user); foreach ($user as $u) { + $u = trim($u); if ($this->rc->imap->delete_acl($mbox, $u)) { $this->rc->output->command('acl_remove_row', html_identifier($u)); } |