next() public method

public next ( ) : mixed
return mixed Either a string, boolean (true for open paren, false for close paren/EOS), Horde_Stream object, or null.
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
 /**
  * @dataProvider clientSortProvider
  */
 public function testClientSortProvider($sort, $expected, $locale)
 {
     $ids = new Horde_Imap_Client_Ids();
     $pipeline = $this->socket_ob->pipeline();
     foreach ($this->fetch_data as $val) {
         $token = new Horde_Imap_Client_Tokenize($val);
         $token->rewind();
         $token->next();
         $ids->add($token->next());
         $this->socket_ob->doServerResponse($pipeline, $val);
     }
     $this->socket_ob->fetch_results = $pipeline->fetch;
     $sorted = $this->sort_ob->clientSort($ids, array('sort' => $sort));
     $this->assertEquals(count($expected), count($sorted));
     if (!$locale || class_exists('Collator')) {
         $this->assertEquals($expected, array_values($sorted));
     }
 }
Exemplo n.º 3
0
 /**
  * Parse a METADATA response (RFC 5464 [4.4]).
  *
  * @param Horde_Imap_Client_Interaction_Pipeline $pipeline  Pipeline
  *                                                          object.
  * @param Horde_Imap_Client_Tokenize $data  The server response.
  *
  * @throws Horde_Imap_Client_Exception
  */
 protected function _parseMetadata(Horde_Imap_Client_Interaction_Pipeline $pipeline, Horde_Imap_Client_Tokenize $data)
 {
     // Mailbox name is in UTF7-IMAP.
     $mbox = Horde_Imap_Client_Mailbox::get($data->next(), true);
     // Ignore unsolicited responses.
     if ($data->next() === true) {
         while (($entry = $data->next()) !== false) {
             $pipeline->data['metadata'][strval($mbox)][$entry] = $data->next();
         }
     }
 }
Exemplo n.º 4
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;
     }
 }
Exemplo n.º 5
0
 public function testLiteralStream()
 {
     $token = new Horde_Imap_Client_Tokenize();
     $token->add('FOO {10}');
     $token->addLiteralStream('1234567890');
     $token->add(' BAR');
     $token->rewind();
     $this->assertEquals('FOO', $token->next());
     /* Internal stream is converted to string. */
     $this->assertEquals('1234567890', $token->next());
     $this->assertEquals('BAR', $token->next());
     $this->assertTrue($token->eos);
     /* Check to see stream is returned if nextStream() is called and
      * a literal is encountered. */
     $token->rewind();
     $this->assertEquals('FOO', $token->nextStream());
     $stream = $token->nextStream();
     $this->assertInstanceOf('Horde_Stream_Temp', $stream);
     $this->assertEquals('1234567890', strval($stream));
     $this->assertEquals('BAR', $token->nextStream());
     $token = new Horde_Imap_Client_Tokenize();
     $token->add('{200}' . str_repeat('Z', 200));
     $token->rewind();
     $this->assertEquals(str_repeat('Z', 200), $token->next());
     $token->rewind();
     $stream = $token->nextStream();
     $this->assertInstanceOf('Horde_Stream_Temp', $stream);
     $this->assertEquals(str_repeat('Z', 200), strval($stream));
 }
Exemplo n.º 6
0
 public function testFlushIterator()
 {
     $test = 'FOO (BAR (BAZ BAZ2) BAR2) FOO2';
     $token = new Horde_Imap_Client_Tokenize($test);
     $token->rewind();
     $token->next();
     // FOO
     $token->next();
     // Opening paren
     $this->assertEquals(array('BAR', 'BAR2'), $token->flushIterator());
     $this->assertEquals('FOO2', $token->next());
     $token->rewind();
     $token->next();
     // FOO
     $token->next();
     // Opening paren
     $this->assertEquals(array(), $token->flushIterator(false));
     $this->assertEquals('FOO2', $token->next());
     $token->rewind();
     $token->next();
     // FOO
     $token->next();
     // Opening paren
     $this->assertEquals(array(), $token->flushIterator(false, false));
     $this->assertTrue($token->eos);
 }