Example #1
0
 /**
  * Set message flag to one or several messages
  *
  * @param mixed   $uids       Message UIDs as array or comma-separated string, or '*'
  * @param string  $flag       Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
  * @param string  $mbox_name  Folder name
  * @param boolean $skip_cache True to skip message cache clean up
  * @return boolean  Operation status
  */
 function set_flag($uids, $flag, $mbox_name = NULL, $skip_cache = false)
 {
     $mailbox = strlen($mbox_name) ? $this->mod_mailbox($mbox_name) : $this->mailbox;
     $flag = strtoupper($flag);
     list($uids, $all_mode) = $this->_parse_uids($uids, $mailbox);
     if (strpos($flag, 'UN') === 0) {
         $result = $this->conn->unflag($mailbox, $uids, substr($flag, 2));
     } else {
         $result = $this->conn->flag($mailbox, $uids, $flag);
     }
     if ($result) {
         // reload message headers if cached
         if ($this->caching_enabled && !$skip_cache) {
             $cache_key = $mailbox . '.msg';
             if ($all_mode) {
                 $this->clear_message_cache($cache_key);
             } else {
                 $this->remove_message_cache($cache_key, explode(',', $uids));
             }
         }
         // clear cached counters
         if ($flag == 'SEEN' || $flag == 'UNSEEN') {
             $this->_clear_messagecount($mailbox, 'SEEN');
             $this->_clear_messagecount($mailbox, 'UNSEEN');
         } else {
             if ($flag == 'DELETED') {
                 $this->_clear_messagecount($mailbox, 'DELETED');
             }
         }
     }
     return $result;
 }
Example #2
0
 /**
  * Set message flag to one or several messages
  *
  * @param mixed   $uids       Message UIDs as array or comma-separated string, or '*'
  * @param string  $flag       Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
  * @param string  $mailbox    Folder name
  * @param boolean $skip_cache True to skip message cache clean up
  *
  * @return boolean  Operation status
  */
 function set_flag($uids, $flag, $mailbox = null, $skip_cache = false)
 {
     if (!strlen($mailbox)) {
         $mailbox = $this->mailbox;
     }
     $flag = strtoupper($flag);
     list($uids, $all_mode) = $this->_parse_uids($uids, $mailbox);
     if (strpos($flag, 'UN') === 0) {
         $result = $this->conn->unflag($mailbox, $uids, substr($flag, 2));
     } else {
         $result = $this->conn->flag($mailbox, $uids, $flag);
     }
     if ($result) {
         // reload message headers if cached
         // @TODO: update flags instead removing from cache
         if (!$skip_cache && ($mcache = $this->get_mcache_engine())) {
             $status = strpos($flag, 'UN') !== 0;
             $mflag = preg_replace('/^UN/', '', $flag);
             $mcache->change_flag($mailbox, $all_mode ? null : explode(',', $uids), $mflag, $status);
         }
         // clear cached counters
         if ($flag == 'SEEN' || $flag == 'UNSEEN') {
             $this->_clear_messagecount($mailbox, 'SEEN');
             $this->_clear_messagecount($mailbox, 'UNSEEN');
         } else {
             if ($flag == 'DELETED') {
                 $this->_clear_messagecount($mailbox, 'DELETED');
             }
         }
     }
     return $result;
 }
Example #3
0
    /**
     * Mark messages as deleted and expunge them
     *
     * @param mixed  $uids    Message UIDs as array or comma-separated string, or '*'
     * @param string $folder  Source folder
     *
     * @return boolean True on success, False on error
     */
    public function delete_message($uids, $folder='')
    {
        if (!strlen($folder)) {
            $folder = $this->folder;
        }

        list($uids, $all_mode) = $this->parse_uids($uids);

        // exit if no message uids are specified
        if (empty($uids)) {
            return false;
        }

        if (!$this->check_connection()) {
            return false;
        }

        $deleted = $this->conn->flag($folder, $uids, 'DELETED');

        if ($deleted) {
            // send expunge command in order to have the deleted message
            // really deleted from the folder
            $this->expunge_message($uids, $folder, false);
            $this->clear_messagecount($folder);
            unset($this->uid_id_map[$folder]);

            // unset threads internal cache
            unset($this->icache['threads']);

            // remove message ids from search set
            if ($this->search_set && $folder == $this->folder) {
                // threads are too complicated to just remove messages from set
                if ($this->search_threads || $all_mode) {
                    $this->refresh_search();
                }
                else {
                    $this->search_set->filter(explode(',', $uids));
                }
            }

            // remove cached messages
            $this->clear_message_cache($folder, $all_mode ? null : explode(',', $uids));
        }

        return $deleted;
    }