Fix handling of MYRIGHTS on private namespace roots - fixes issue where

in ACL plugin it wasn't possible to share INBOX folder (when it was a namespace prefix).
pull/13/head
Aleksander Machniak 13 years ago
parent a60d139d87
commit b866a27364

@ -128,8 +128,10 @@ class acl extends rcube_plugin
*/
function folder_form($args)
{
// Edited folder name (empty in create-folder mode)
$mbox_imap = $args['options']['name'];
$myrights = $args['options']['rights'];
// Edited folder name (empty in create-folder mode)
if (!strlen($mbox_imap)) {
return $args;
}
@ -139,18 +141,8 @@ class acl extends rcube_plugin
return $args;
}
*/
// Namespace root
if ($args['options']['is_root']) {
return $args;
}
// Get MYRIGHTS
if (!($myrights = $args['options']['rights'])) {
return $args;
}
// Do nothing if no ACL support
if (!$this->rc->storage->get_capability('ACL')) {
if (empty($myrights)) {
return $args;
}

@ -13,9 +13,9 @@
<email>alec@alec.pl</email>
<active>yes</active>
</lead>
<date>2012-03-13</date>
<date>2012-06-28</date>
<version>
<release>0.8</release>
<release>0.9</release>
<api>0.7</api>
</version>
<stability>

@ -3229,8 +3229,9 @@ class rcube_imap extends rcube_storage
$cache_key = 'mailboxes.folder-info.' . $folder;
$cached = $this->get_cache($cache_key);
if (is_array($cached))
if (is_array($cached)) {
return $cached;
}
$acl = $this->get_capability('ACL');
$namespace = $this->get_namespace();
@ -3267,10 +3268,9 @@ class rcube_imap extends rcube_storage
$options['name'] = $folder;
$options['attributes'] = $this->folder_attributes($folder, true);
$options['namespace'] = $this->folder_namespace($folder);
$options['rights'] = $acl && !$options['is_root'] ? (array)$this->my_rights($folder) : array();
$options['special'] = in_array($folder, $this->default_folders);
// Set 'noselect' and 'norename' flags
// Set 'noselect' flag
if (is_array($options['attributes'])) {
foreach ($options['attributes'] as $attrib) {
$attrib = strtolower($attrib);
@ -3283,6 +3283,15 @@ class rcube_imap extends rcube_storage
$options['noselect'] = true;
}
// Get folder rights (MYRIGHTS)
if ($acl && !$options['noselect']) {
// skip shared roots
if (!$options['is_root'] || $options['namespace'] == 'personal') {
$options['rights'] = (array)$this->my_rights($folder);
}
}
// Set 'norename' flag
if (!empty($options['rights'])) {
$options['norename'] = !in_array('x', $options['rights']) && !in_array('d', $options['rights']);

Loading…
Cancel
Save