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
|
// Delegate delete
|
||||||
if ($this->rc->action == 'plugin.delegation-delete') {
|
if ($this->rc->action == 'plugin.delegation-delete') {
|
||||||
$id = rcube_utils::get_input_value('id', rcube_utils::INPUT_GPC);
|
$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));
|
$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->show_message($this->gettext('deletesuccess'), 'confirmation');
|
||||||
$this->rc->output->command('plugin.delegate_save_complete', array('deleted' => $id));
|
$this->rc->output->command('plugin.delegate_save_complete', array('deleted' => $id));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->rc->output->show_message($this->gettext('deleteerror'), 'error');
|
$this->rc->output->show_message($this->gettext($error), 'error');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Delegate add/update
|
// Delegate add/update
|
||||||
|
@ -369,23 +369,23 @@ class kolab_delegation extends rcube_plugin
|
||||||
// update
|
// update
|
||||||
if ($id) {
|
if ($id) {
|
||||||
$delegate = $engine->delegate_get($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->show_message($this->gettext('updatesuccess'), 'confirmation');
|
||||||
$this->rc->output->command('plugin.delegate_save_complete', array('updated' => $id));
|
$this->rc->output->command('plugin.delegate_save_complete', array('updated' => $id));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->rc->output->show_message($this->gettext('updateerror'), 'error');
|
$this->rc->output->show_message($this->gettext($error), 'error');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// new
|
// new
|
||||||
else {
|
else {
|
||||||
$login = rcube_utils::get_input_value('newid', rcube_utils::INPUT_GPC);
|
$login = rcube_utils::get_input_value('newid', rcube_utils::INPUT_GPC);
|
||||||
$delegate = $engine->delegate_get_by_name($login);
|
$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->show_message($this->gettext('createsuccess'), 'confirmation');
|
||||||
$this->rc->output->command('plugin.delegate_save_complete', array(
|
$this->rc->output->command('plugin.delegate_save_complete', array(
|
||||||
'created' => $delegate['ID'],
|
'created' => $delegate['ID'],
|
||||||
|
@ -393,7 +393,7 @@ class kolab_delegation extends rcube_plugin
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
else {
|
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 string|array $delegate Delegate DN (encoded) or delegate data (result of delegate_get())
|
||||||
* @param array $acl List of folder->right map
|
* @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)
|
public function delegate_add($delegate, $acl)
|
||||||
{
|
{
|
||||||
|
@ -63,18 +65,20 @@ class kolab_delegation_engine
|
||||||
|
|
||||||
$dn = $delegate['ID'];
|
$dn = $delegate['ID'];
|
||||||
if (empty($delegate) || empty($dn)) {
|
if (empty($delegate) || empty($dn)) {
|
||||||
return false;
|
return 'createerror';
|
||||||
}
|
}
|
||||||
|
|
||||||
$list = $this->list_delegates();
|
$list = $this->list_delegates();
|
||||||
|
|
||||||
// add delegate to the list
|
|
||||||
$list = array_keys((array)$list);
|
$list = array_keys((array)$list);
|
||||||
$list = array_filter($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
|
// update user record
|
||||||
$result = $this->user_update_delegates($list);
|
$result = $this->user_update_delegates($list);
|
||||||
|
@ -84,7 +88,7 @@ class kolab_delegation_engine
|
||||||
$this->delegate_acl_update($delegate['uid'], $acl);
|
$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 string $uid Delegate authentication identifier
|
||||||
* @param array $acl List of folder->right map
|
* @param array $acl List of folder->right map
|
||||||
* @param bool $update Update (remove) old rights
|
* @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)
|
public function delegate_acl_update($uid, $acl, $update = false)
|
||||||
{
|
{
|
||||||
|
@ -119,8 +125,6 @@ class kolab_delegation_engine
|
||||||
$storage->delete_acl($folder_name, $uid);
|
$storage->delete_acl($folder_name, $uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -128,6 +132,8 @@ class kolab_delegation_engine
|
||||||
*
|
*
|
||||||
* @param string $dn Delegate DN (encoded)
|
* @param string $dn Delegate DN (encoded)
|
||||||
* @param bool $acl_del Enable ACL deletion on delegator folders
|
* @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)
|
public function delegate_delete($dn, $acl_del = false)
|
||||||
{
|
{
|
||||||
|
@ -136,7 +142,7 @@ class kolab_delegation_engine
|
||||||
$user = $this->user();
|
$user = $this->user();
|
||||||
|
|
||||||
if (empty($delegate) || !isset($list[$dn])) {
|
if (empty($delegate) || !isset($list[$dn])) {
|
||||||
return false;
|
return 'deleteerror';
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove delegate from the list
|
// remove delegate from the list
|
||||||
|
@ -153,7 +159,7 @@ class kolab_delegation_engine
|
||||||
$this->delegate_acl_update($delegate['uid'], array(), true);
|
$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['updateerror'] = 'Could not update delegate.';
|
||||||
$labels['createsuccess'] = 'The delegate was successfully added.';
|
$labels['createsuccess'] = 'The delegate was successfully added.';
|
||||||
$labels['createerror'] = 'Could not add delegate.';
|
$labels['createerror'] = 'Could not add delegate.';
|
||||||
|
$labels['delegationexisterror'] = 'Specified user already is your delegate.';
|
||||||
|
|
||||||
$labels['arialabeldelegatedelete'] = 'Delegate deletion dialog';
|
$labels['arialabeldelegatedelete'] = 'Delegate deletion dialog';
|
||||||
$labels['arialabeldelegateform'] = 'Delegate properties form';
|
$labels['arialabeldelegateform'] = 'Delegate properties form';
|
||||||
|
|
Loading…
Add table
Reference in a new issue