alecpl
2011-06-23 25e6a0f11043537e9ea2950398f916d4db96a235
- Add rcube_imap::mailbox_info()


2 files modified
101 ■■■■■ changed files
program/include/rcube_imap.php 56 ●●●●● patch | view | raw | blame | history
program/steps/settings/func.inc 45 ●●●●● patch | view | raw | blame | history
program/include/rcube_imap.php
@@ -3489,6 +3489,62 @@
    /**
     * Returns extended information about the folder
     *
     * @param string $mailbox Folder name
     *
     * @return array Data
     */
    function mailbox_info($mailbox)
    {
        $acl       = $this->get_capability('ACL');
        $namespace = $this->get_namespace();
        $options   = array();
        // check if the folder is a namespace prefix
        if (!empty($namespace)) {
            $mbox = $mailbox . $this->delimiter;
            foreach ($namespace as $ns) {
                foreach ($ns as $item) {
                    if ($item[0] === $mbox) {
                        $options['is_root'] = true;
                        break;
                    }
                }
            }
        }
        $options['name']      = $mailbox;
        $options['options']   = $this->mailbox_options($mailbox, true);
        $options['namespace'] = $this->mailbox_namespace($mailbox);
        $options['rights']    = $acl && !$options['is_root'] ? (array)$this->my_rights($mailbox) : array();
        $options['special']   = in_array($mailbox, $this->default_folders);
        if (is_array($options['options'])) {
            foreach ($options['options'] as $opt) {
                $opt = strtolower($opt);
                if ($opt == '\noselect' || $opt == '\nonexistent') {
                    $options['noselect'] = true;
                }
            }
        }
        else {
            $options['noselect'] = true;
        }
        if (!empty($options['rights'])) {
            $options['norename'] = !in_array('x', $options['rights']) &&
                (!in_array('c', $options['rights']) || !in_array('d', $options['rights']));
            if (!$options['noselect']) {
                $options['noselect'] = !in_array('r', $options['rights']);
            }
        }
        return $options;
    }
    /**
     * Get message header names for rcube_imap_generic::fetchHeader(s)
     *
     * @return string Space-separated list of header names
program/steps/settings/func.inc
@@ -788,51 +788,8 @@
{
    global $RCMAIL;
    $acl             = $RCMAIL->imap->get_capability('ACL');
    $default_folders = (array) $RCMAIL->config->get('default_imap_folders');
    $delimiter       = $RCMAIL->imap->get_hierarchy_delimiter();
    $namespace       = $RCMAIL->imap->get_namespace();
    $options         = array();
    // check if the folder is a namespace prefix
    if (!empty($namespace)) {
        $mbox = $mailbox . $delimiter;
        foreach ($namespace as $ns) {
            foreach ($ns as $item) {
                if ($item[0] === $mbox) {
                    $options['is_root'] = true;
                    break;
                }
            }
        }
    }
    $options['name']      = $mailbox;
    $options['options']   = $RCMAIL->imap->mailbox_options($mailbox, true);
    $options['namespace'] = $RCMAIL->imap->mailbox_namespace($mailbox);
    $options['rights']    = $acl && !$options['is_root'] ? (array)$RCMAIL->imap->my_rights($mailbox) : array();
    $options['special']   = in_array($mailbox, $default_folders);
    $options = $RCMAIL->imap->mailbox_info($mailbox);
    $options['protected'] = $options['is_root'] || ($options['special'] && $RCMAIL->config->get('protect_default_folders'));
    if (is_array($options['options'])) {
        foreach ($options['options'] as $opt) {
            $opt = strtolower($opt);
            if ($opt == '\noselect' || $opt == '\nonexistent') {
                $options['noselect'] = true;
            }
        }
    }
    else {
        $options['noselect'] = true;
    }
    if (!empty($options['rights'])) {
        $options['norename'] = !in_array('x', $options['rights']) &&
            (!in_array('c', $options['rights']) || !in_array('d', $options['rights']));
        if (!$options['noselect']) {
            $options['noselect'] = !in_array('r', $options['rights']);
        }
    }
    return $options;
}