IMP_Ftree_Account_Imap::getList PHP Method

getList() public method

public getList ( $query = [], $mask )
    public function getList($query = array(), $mask = 0)
    {
        global $prefs;
        $imp_imap = $this->imp_imap;
        $ns = $imp_imap->getNamespaces();
        $out = array();
        if ($mask & self::INIT) {
            /* Add namespace elements. */
            if ($prefs->getValue('tree_view')) {
                foreach ($ns as $val) {
                    $type = null;
                    switch ($val->type) {
                        case $val::NS_OTHER:
                            $attr = IMP_Ftree::ELT_NAMESPACE_OTHER;
                            $type = self::OTHER_KEY;
                            break;
                        case $val::NS_SHARED:
                            $attr = IMP_Ftree::ELT_NAMESPACE_SHARED;
                            $type = self::SHARED_KEY;
                            break;
                    }
                    if (!is_null($type)) {
                        $out[$type] = array('a' => $attr | IMP_Ftree::ELT_NOSELECT | IMP_Ftree::ELT_NONIMAP, 'v' => $type);
                    }
                }
            }
            $query = array('INBOX');
            foreach ($ns as $val) {
                $query[] = $val . '*';
            }
            $lmquery = $mask & self::UNSUB ? Horde_Imap_Client::MBOX_ALL_SUBSCRIBED : Horde_Imap_Client::MBOX_SUBSCRIBED_EXISTS;
        } elseif ($mask & self::UNSUB) {
            $lmquery = Horde_Imap_Client::MBOX_UNSUBSCRIBED;
            $query = array();
            foreach ($ns as $val) {
                $query[] = $val . '*';
            }
        } elseif (empty($query)) {
            return $out;
        } else {
            $lmquery = Horde_Imap_Client::MBOX_ALL_SUBSCRIBED;
        }
        $res = $imp_imap->listMailboxes($query, $lmquery, array('attributes' => true, 'delimiter' => true, 'sort' => true));
        foreach ($res as $val) {
            if (in_array('\\nonexistent', $val['attributes'])) {
                continue;
            }
            $mbox = strval($val['mailbox']);
            $ns_info = $imp_imap->getNamespace($mbox);
            $parent = null;
            /* Break apart the name via the delimiter and go step by
             * step through the name to make sure all subfolders exist
             * in the tree. */
            if ($ns_info && strlen($ns_info->delimiter)) {
                /* Strip personal namespace (if non-empty). */
                if ($ns_info->type === $ns_info::NS_PERSONAL) {
                    $stripped = $ns_info->stripNamespace($mbox);
                    $parts = explode($ns_info->delimiter, $stripped);
                    if ($stripped != $mbox) {
                        $parts[0] = $ns_info->name . $parts[0];
                    }
                } else {
                    $parts = explode($ns_info->delimiter, $mbox);
                }
                if ($prefs->getValue('tree_view')) {
                    switch ($ns_info->type) {
                        case $ns_info::NS_OTHER:
                            $parent = self::OTHER_KEY;
                            break;
                        case $ns_info::NS_SHARED:
                            $parent = self::SHARED_KEY;
                            break;
                    }
                }
            } else {
                $parts = array($mbox);
            }
            for ($i = 1, $p_count = count($parts); $i <= $p_count; ++$i) {
                $part = implode($val['delimiter'], array_slice($parts, 0, $i));
                if (!isset($out[$part])) {
                    if ($p_count == $i) {
                        $attr = 0;
                        if (in_array('\\subscribed', $val['attributes'])) {
                            $attr |= IMP_Ftree::ELT_IS_SUBSCRIBED;
                        }
                        if (in_array('\\noselect', $val['attributes'])) {
                            $attr |= IMP_Ftree::ELT_NOSELECT;
                        }
                        if (in_array('\\noinferiors', $val['attributes'])) {
                            $attr |= IMP_Ftree::ELT_NOINFERIORS;
                        }
                    } else {
                        $attr = IMP_Ftree::ELT_NOSELECT;
                    }
                    $out[$part] = array('a' => $attr, 'v' => $part);
                    if (!is_null($parent)) {
                        $out[$part]['p'] = $parent;
                    }
                }
                $parent = $part;
            }
        }
        return $out;
    }

Usage Example

示例#1
0
 /**
  */
 public function getList($query = array(), $mask = 0)
 {
     global $injector;
     $init = false;
     $out = array();
     $remote = $injector->getInstance('IMP_Remote');
     $raccount = $remote[strval($this)];
     switch ($raccount->login()) {
         case $raccount::LOGIN_BAD_CHANGED:
             $remote[strval($this)] = $raccount;
             break;
         case $raccount::LOGIN_OK_CHANGED:
             $remote[strval($this)] = $raccount;
             // Fall-through
         // Fall-through
         case $raccount::LOGIN_OK:
             $init = true;
             break;
     }
     $query = array_filter(array_map(array($remote, 'getMailboxById'), $query));
     if (empty($query)) {
         $mask |= self::INIT;
     }
     if ($mask & self::INIT) {
         $out[] = array('a' => IMP_Ftree::ELT_REMOTE | IMP_Ftree::ELT_NOSELECT | IMP_Ftree::ELT_NONIMAP, 'v' => self::REMOTE_KEY);
         $out[] = array('a' => ($init ? IMP_Ftree::ELT_REMOTE_AUTH : 0) | IMP_Ftree::ELT_REMOTE | IMP_Ftree::ELT_IS_SUBSCRIBED | IMP_Ftree::ELT_NONIMAP, 'p' => self::REMOTE_KEY, 'v' => strval($this));
     }
     if ($init) {
         foreach (parent::getList($query, $mask) as $val) {
             $out[] = array_filter(array('a' => $val['a'] | IMP_Ftree::ELT_REMOTE_MBOX, 'p' => isset($val['p']) ? $raccount->mailbox($val['p']) : strval($raccount), 'v' => $raccount->mailbox($val['v'])));
         }
     }
     return $out;
 }
All Usage Examples Of IMP_Ftree_Account_Imap::getList
IMP_Ftree_Account_Imap