diff --git a/plugins/kolab_delegation/kolab_delegation.php b/plugins/kolab_delegation/kolab_delegation.php index 717aaeb5..a9ccf464 100644 --- a/plugins/kolab_delegation/kolab_delegation.php +++ b/plugins/kolab_delegation/kolab_delegation.php @@ -350,15 +350,15 @@ class kolab_delegation extends rcube_plugin // Delegate delete if ($this->rc->action == 'plugin.delegation-delete') { - $id = rcube_utils::get_input_value('id', rcube_utils::INPUT_GPC); - $success = $engine->delegate_delete($id, (bool) rcube_utils::get_input_value('acl', rcube_utils::INPUT_GPC)); + $id = rcube_utils::get_input_value('id', rcube_utils::INPUT_GPC); + $error = $engine->delegate_delete($id, (bool) rcube_utils::get_input_value('acl', rcube_utils::INPUT_GPC)); - if ($success) { + if (!$error) { $this->rc->output->show_message($this->gettext('deletesuccess'), 'confirmation'); $this->rc->output->command('plugin.delegate_save_complete', array('deleted' => $id)); } else { - $this->rc->output->show_message($this->gettext('deleteerror'), 'error'); + $this->rc->output->show_message($this->gettext($error), 'error'); } } // Delegate add/update @@ -369,23 +369,23 @@ class kolab_delegation extends rcube_plugin // update if ($id) { $delegate = $engine->delegate_get($id); - $success = $engine->delegate_acl_update($delegate['uid'], $acl); + $error = $engine->delegate_acl_update($delegate['uid'], $acl); - if ($success) { + if (!$error) { $this->rc->output->show_message($this->gettext('updatesuccess'), 'confirmation'); $this->rc->output->command('plugin.delegate_save_complete', array('updated' => $id)); } else { - $this->rc->output->show_message($this->gettext('updateerror'), 'error'); + $this->rc->output->show_message($this->gettext($error), 'error'); } } // new else { $login = rcube_utils::get_input_value('newid', rcube_utils::INPUT_GPC); $delegate = $engine->delegate_get_by_name($login); - $success = $engine->delegate_add($delegate, $acl); + $error = $engine->delegate_add($delegate, $acl); - if ($success) { + if (!$error) { $this->rc->output->show_message($this->gettext('createsuccess'), 'confirmation'); $this->rc->output->command('plugin.delegate_save_complete', array( 'created' => $delegate['ID'], @@ -393,7 +393,7 @@ class kolab_delegation extends rcube_plugin )); } else { - $this->rc->output->show_message($this->gettext('createerror'), 'error'); + $this->rc->output->show_message($this->gettext($error), 'error'); } } } diff --git a/plugins/kolab_delegation/kolab_delegation_engine.php b/plugins/kolab_delegation/kolab_delegation_engine.php index eae73477..bacd35bf 100644 --- a/plugins/kolab_delegation/kolab_delegation_engine.php +++ b/plugins/kolab_delegation/kolab_delegation_engine.php @@ -54,6 +54,8 @@ class kolab_delegation_engine * * @param string|array $delegate Delegate DN (encoded) or delegate data (result of delegate_get()) * @param array $acl List of folder->right map + * + * @return string On error returns an error label, on success returns null */ public function delegate_add($delegate, $acl) { @@ -63,18 +65,20 @@ class kolab_delegation_engine $dn = $delegate['ID']; if (empty($delegate) || empty($dn)) { - return false; + return 'createerror'; } $list = $this->list_delegates(); - - // add delegate to the list $list = array_keys((array)$list); $list = array_filter($list); - if (!in_array($dn, $list)) { - $list[] = $dn; + + if (in_array($dn, $list)) { + return 'delegationexisterror'; } - $list = array_map(array('kolab_auth_ldap', 'dn_decode'), $list); + + // add delegate to the list + $list[] = $dn; + $list = array_map(array('kolab_auth_ldap', 'dn_decode'), $list); // update user record $result = $this->user_update_delegates($list); @@ -84,7 +88,7 @@ class kolab_delegation_engine $this->delegate_acl_update($delegate['uid'], $acl); } - return $result; + return $result ? null : 'createerror'; } /** @@ -93,6 +97,8 @@ class kolab_delegation_engine * @param string $uid Delegate authentication identifier * @param array $acl List of folder->right map * @param bool $update Update (remove) old rights + * + * @return string On error returns an error label, on success returns null */ public function delegate_acl_update($uid, $acl, $update = false) { @@ -119,8 +125,6 @@ class kolab_delegation_engine $storage->delete_acl($folder_name, $uid); } } - - return true; } /** @@ -128,6 +132,8 @@ class kolab_delegation_engine * * @param string $dn Delegate DN (encoded) * @param bool $acl_del Enable ACL deletion on delegator folders + * + * @return string On error returns an error label, on success returns null */ public function delegate_delete($dn, $acl_del = false) { @@ -136,7 +142,7 @@ class kolab_delegation_engine $user = $this->user(); if (empty($delegate) || !isset($list[$dn])) { - return false; + return 'deleteerror'; } // remove delegate from the list @@ -153,7 +159,7 @@ class kolab_delegation_engine $this->delegate_acl_update($delegate['uid'], array(), true); } - return $result; + return $result ? null : 'deleteerror'; } /** diff --git a/plugins/kolab_delegation/localization/en_US.inc b/plugins/kolab_delegation/localization/en_US.inc index 94ceb9e7..cbf66e6f 100644 --- a/plugins/kolab_delegation/localization/en_US.inc +++ b/plugins/kolab_delegation/localization/en_US.inc @@ -35,6 +35,7 @@ $labels['updatesuccess'] = 'The delegate was successfully updated.'; $labels['updateerror'] = 'Could not update delegate.'; $labels['createsuccess'] = 'The delegate was successfully added.'; $labels['createerror'] = 'Could not add delegate.'; +$labels['delegationexisterror'] = 'Specified user already is your delegate.'; $labels['arialabeldelegatedelete'] = 'Delegate deletion dialog'; $labels['arialabeldelegateform'] = 'Delegate properties form';