Horde_ActiveSync_Imap_Adapter::getUidFromMid PHP Method

getUidFromMid() public method

Return an array of message UIDs from a list of Message-IDs.
public getUidFromMid ( string $mid, Horde_ActiveSync_Folder_Imap $folder ) : integer
$mid string The Message-ID
$folder Horde_ActiveSync_Folder_Imap The folder object to search.
return integer The UID
    public function getUidFromMid($mid, Horde_ActiveSync_Folder_Imap $folder)
    {
        $iids = new Horde_Imap_Client_Ids(array_diff($folder->messages(), $folder->removed()));
        $search_q = new Horde_Imap_Client_Search_Query();
        $search_q->ids($iids);
        $search_q->headerText('Message-ID', $mid);
        $mbox = new Horde_Imap_Client_Mailbox($folder->serverid());
        $results = $this->_getImapOb()->search($mbox, $search_q);
        $uid = $results['match']->ids;
        if (!empty($uid)) {
            return current($uid);
        }
        throw new Horde_Exception_NotFound('Message not found.');
    }

Usage Example

Example #1
0
 /**
  * Get verb changes from the maillog.
  *
  * @param Horde_ActiveSync_Folder_Imap $folder  The folder to search.
  * @param integer $ts                           The timestamp to start from.
  *
  * @return Horde_ActiveSync_Folder_Imap  The folder object, with any changes
  *                                       added accordingly.
  */
 protected function _getMaillogChanges(Horde_ActiveSync_Folder_Imap $folder, $ts)
 {
     if ($ts == 0) {
         // For initial sync we don't need to poll for these changes since
         // when we send the new message, we poll the maillog for last verb
         // anyway.
         return $folder;
     }
     $changes = $this->_connector->mail_getMaillogChanges($ts);
     $flags = array();
     $s_changes = array();
     foreach ($changes as $mid) {
         try {
             $uid = $this->_imap->getUidFromMid($mid, $folder);
         } catch (Horde_Exception_NotFound $e) {
             continue;
         } catch (Horde_ActiveSync_Exception $e) {
             $this->_logger->err($e->getMessage());
             continue;
         }
         $s_changes[] = $uid;
         $verb = $this->_getLastVerb($mid);
         if (!empty($verb)) {
             switch ($verb['action']) {
                 case 'reply':
                 case 'reply_list':
                     $flags[$uid] = array(Horde_ActiveSync::CHANGE_REPLY_STATE => $verb['ts']);
                     break;
                 case 'reply_all':
                     $flags[$uid] = array(Horde_ActiveSync::CHANGE_REPLYALL_STATE => $verb['ts']);
                     break;
                 case 'forward':
                     $flags[$uid] = array(Horde_ActiveSync::CHANGE_FORWARD_STATE => $verb['ts']);
             }
         }
     }
     if (!empty($s_changes)) {
         $folder->setChanges($s_changes, $flags);
     }
     return $folder;
 }