Exemplo n.º 1
0
 /**
  * Constructor.
  *
  * @param Horde_Imap_Client_Tokenize $token  Tokenized data returned from
  *                                           the server.
  */
 public function __construct(Horde_Imap_Client_Tokenize $token)
 {
     $this->token = $token;
     /* Check for response status. */
     $status = $token->current();
     $valid = array('BAD', 'BYE', 'NO', 'OK', 'PREAUTH');
     if (in_array($status, $valid)) {
         $this->status = constant(__CLASS__ . '::' . $status);
         $resp_text = $token->next();
         /* Check for response code. Only occurs if there is a response
          * status. */
         if (is_string($resp_text) && $resp_text[0] == '[') {
             $resp = new stdClass();
             $resp->data = array();
             if ($resp_text[strlen($resp_text) - 1] == ']') {
                 $resp->code = substr($resp_text, 1, -1);
             } else {
                 $resp->code = substr($resp_text, 1);
                 while (($elt = $token->next()) !== false) {
                     if (is_string($elt) && $elt[strlen($elt) - 1] == ']') {
                         $resp->data[] = substr($elt, 0, -1);
                         break;
                     }
                     $resp->data[] = is_string($elt) ? $elt : iterator_to_array($elt);
                 }
             }
             $token->next();
             $this->responseCode = $resp;
         }
     }
 }
Exemplo n.º 2
0
 /**
  * Parse a METADATA response (RFC 5464 [4.4]).
  *
  * @param Horde_Imap_Client_Tokenize $data  The server response.
  *
  * @throws Horde_Imap_Client_Exception
  */
 protected function _parseMetadata(Horde_Imap_Client_Tokenize $data)
 {
     switch ($data->current()) {
         case 'ANNOTATION':
             $mbox = $data->next();
             // Ignore unsolicited responses.
             if (is_object($entry = $data->next())) {
                 break;
             }
             $m_data = $data->next();
             $type = $m_data->rewind();
             do {
                 switch ($type) {
                     case 'value.priv':
                         $this->_temp['metadata'][$mbox]['/private' . $entry] = $m_data->next();
                         break;
                     case 'value.shared':
                         $this->_temp['metadata'][$mbox]['/shared' . $entry] = $m_data->next();
                         break;
                     default:
                         throw new Horde_Imap_Client_Exception(sprintf(Horde_Imap_Client_Translation::t("Invalid METADATA value type \"%s\"."), $type), Horde_Imap_Client_Exception::METADATA_INVALID);
                 }
             } while (($type = $data->next()) !== false);
             break;
         case 'METADATA':
             $mbox = $data->next();
             // Ignore unsolicited responses.
             if (!is_object($m_data = $data->next())) {
                 break;
             }
             $entry = $m_data->rewind();
             do {
                 $this->_temp['metadata'][$mbox][$entry] = $m_data->next();
             } while (($entry = $m_data->next()) !== false);
             break;
     }
 }