Horde_Imap_Client_Socket::_parseList PHP Method

_parseList() protected method

Parse a LIST/LSUB response (RFC 3501 [7.2.2 & 7.2.3]).
protected _parseList ( Horde_Imap_Client_Interaction_Pipeline $pipeline, Horde_Imap_Client_Tokenize $data )
$pipeline Horde_Imap_Client_Interaction_Pipeline Pipeline object.
$data Horde_Imap_Client_Tokenize The server response (includes type as first token).
    protected function _parseList(Horde_Imap_Client_Interaction_Pipeline $pipeline, Horde_Imap_Client_Tokenize $data)
    {
        $data->next();
        $attr = null;
        $attr_raw = $data->flushIterator();
        $delimiter = $data->next();
        $mbox = Horde_Imap_Client_Mailbox::get($data->next(), !$this->_capability()->isEnabled('UTF8=ACCEPT'));
        $ml = $pipeline->data['mailboxlist'];
        switch ($ml['mode']) {
            case Horde_Imap_Client::MBOX_ALL_SUBSCRIBED:
            case Horde_Imap_Client::MBOX_SUBSCRIBED_EXISTS:
            case Horde_Imap_Client::MBOX_UNSUBSCRIBED:
                $attr = array_flip(array_map('Horde_String::lower', $attr_raw));
                /* Subscribed list is in UTF-8. */
                if (is_null($ml['sub']) && !isset($attr['\\subscribed']) && strcasecmp($mbox, 'INBOX') === 0) {
                    $attr['\\subscribed'] = 1;
                } elseif (isset($ml['sub'][strval($mbox)])) {
                    $attr['\\subscribed'] = 1;
                }
                break;
        }
        switch ($ml['mode']) {
            case Horde_Imap_Client::MBOX_SUBSCRIBED_EXISTS:
                if (isset($attr['\\nonexistent']) || !isset($attr['\\subscribed'])) {
                    return;
                }
                break;
            case Horde_Imap_Client::MBOX_UNSUBSCRIBED:
                if (isset($attr['\\subscribed'])) {
                    return;
                }
                break;
        }
        if (!empty($ml['opts']['flat'])) {
            $pipeline->data['listresponse'][] = $mbox;
            return;
        }
        $tmp = array('delimiter' => $delimiter, 'mailbox' => $mbox);
        if ($attr || !empty($ml['opts']['attributes'])) {
            if (is_null($attr)) {
                $attr = array_flip(array_map('Horde_String::lower', $attr_raw));
            }
            /* RFC 5258 [3.4]: inferred attributes. */
            if ($ml['ext']) {
                if (isset($attr['\\noinferiors'])) {
                    $attr['\\hasnochildren'] = 1;
                }
                if (isset($attr['\\nonexistent'])) {
                    $attr['\\noselect'] = 1;
                }
            }
            $tmp['attributes'] = array_keys($attr);
        }
        if ($data->next() !== false) {
            $tmp['extended'] = $data->flushIterator();
        }
        $pipeline->data['listresponse'][strval($mbox)] = $tmp;
    }