Prevent from adding delegation for the same user many times (Bifrost#T20383)
This commit is contained in:
parent
bfa8ff2a67
commit
f67df88238
3 changed files with 28 additions and 21 deletions
|
@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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';
|
||||
|
|
Loading…
Add table
Reference in a new issue