roundcubemail/program/lib/Roundcube/rcube_imap.php
public function move_message($uids, $to_mbox, $from_mbox='')
    {
        if (!strlen($from_mbox)) {
            $from_mbox = $this->folder;
        }

        if ($to_mbox === $from_mbox) {
            return false;
        }

        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;
        }

        $config   = rcube::get_instance()->config;
        $to_trash = $to_mbox == $config->get('trash_mbox');

        // flag messages as read before moving them
        if ($to_trash && $config->get('read_when_deleted')) {
            // don't flush cache (4th argument)
            $this->set_flag($uids, 'SEEN', $from_mbox, true);
        }

        // move messages
        $moved = $this->conn->move($uids, $from_mbox, $to_mbox);

        // when moving to Trash we make sure the folder exists
        // as it's uncommon scenario we do this when MOVE fails, not before
        if (!$moved && $to_trash && $this->get_response_code() == rcube_storage::TRYCREATE) {
            if ($this->create_folder($to_mbox, true, 'trash')) {
                $moved = $this->conn->move($uids, $from_mbox, $to_mbox);
            }
        }

        if ($moved) {
            $this->clear_messagecount($from_mbox);
            $this->clear_messagecount($to_mbox);

            $this->set_search_dirty($from_mbox);
            $this->set_search_dirty($to_mbox);
        }
        // moving failed
        else if ($to_trash && $config->get('delete_always', false)) {
            $moved = $this->delete_message($uids, $from_mbox);
        }

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

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

            // remove cached messages
            // @TODO: do cache update instead of clearing it
            $this->clear_message_cache($from_mbox, $all_mode ? null : explode(',', $uids));
        }

        return $moved;
    }
public function move_message($uids, $to_mbox, $from_mbox='')
    {
        if (!strlen($from_mbox)) {
            $from_mbox = $this->folder;
        }

        if ($to_mbox === $from_mbox) {
            return false;
        }

        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;
        }

        $config   = rcube::get_instance()->config;
        $to_trash = $to_mbox == $config->get('trash_mbox');

        // flag messages as read before moving them
        if ($to_trash && $config->get('read_when_deleted')) {
            // don't flush cache (4th argument)
            $this->set_flag($uids, 'SEEN', $from_mbox, true);
        }

        // move messages
        $moved = $this->conn->move($uids, $from_mbox, $to_mbox);

        // when moving to Trash we make sure the folder exists
        // as it's uncommon scenario we do this when MOVE fails, not before
        if (!$moved && $to_trash && $this->get_response_code() == rcube_storage::TRYCREATE) {
            if ($this->create_folder($to_mbox, true, 'trash')) {
                $moved = $this->conn->move($uids, $from_mbox, $to_mbox);
            }
        }

        if ($moved) {
            $this->clear_messagecount($from_mbox);
            $this->clear_messagecount($to_mbox);

            $this->set_search_dirty($from_mbox);
            $this->set_search_dirty($to_mbox);
        }
        // moving failed
        else if ($to_trash && $config->get('delete_always', false)) {
            $moved = $this->delete_message($uids, $from_mbox);
        }

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

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

            // remove cached messages
            // @TODO: do cache update instead of clearing it
            $this->clear_message_cache($from_mbox, $all_mode ? null : explode(',', $uids));
        }

        return $moved;
    }
public function move_message ( $ uids , $ to_mbox , $ from_mbox = '' ) { if ( ! strlen ( $ from_mbox ) ) { $ from_mbox = $ this -> folder ; } if ( $ to_mbox === $ from_mbox ) { return false ; } 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 ; } $ config = rcube :: get_instance ( ) -> config ; $ to_trash = $ to_mbox == $ config -> get ( 'trash_mbox' ) ; // flag messages as read before moving them if ( $ to_trash && $ config -> get ( 'read_when_deleted' ) ) { // don't flush cache (4th argument) $ this -> set_flag ( $ uids , 'SEEN' , $ from_mbox , true ) ; } // move messages $ moved = $ this -> conn -> move ( $ uids , $ from_mbox , $ to_mbox ) ; // when moving to Trash we make sure the folder exists // as it's uncommon scenario we do this when MOVE fails, not before if ( ! $ moved && $ to_trash && $ this -> get_response_code ( ) == rcube_storage :: TRYCREATE ) { if ( $ this -> create_folder ( $ to_mbox , true , 'trash' ) ) { $ moved = $ this -> conn -> move ( $ uids , $ from_mbox , $ to_mbox ) ; } } if ( $ moved ) { $ this -> clear_messagecount ( $ from_mbox ) ; $ this -> clear_messagecount ( $ to_mbox ) ; $ this -> set_search_dirty ( $ from_mbox ) ; $ this -> set_search_dirty ( $ to_mbox ) ; } // moving failed else if ( $ to_trash && $ config -> get ( 'delete_always' , false ) ) { $ moved = $ this -> delete_message ( $ uids , $ from_mbox ) ; } if ( $ moved ) { // unset threads internal cache unset ( $ this -> icache [ 'threads' ] ) ; // remove message ids from search set if ( $ this -> search_set && $ from_mbox == $ this -> folder ) { // threads are too complicated to just remove messages from set if ( $ this -> search_threads || $ all_mode ) { $ this -> refresh_search ( ) ; } else if ( ! $ this -> search_set -> incomplete ) { $ this -> search_set -> filter ( explode ( ',' , $ uids ) , $ this -> folder ) ; } } // remove cached messages // @TODO: do cache update instead of clearing it $ this -> clear_message_cache ( $ from_mbox , $ all_mode ? null : explode ( ',' , $ uids ) ) ; } return $ moved ; }
Move a message from one folder to another

@param mixed  $uids      Message UIDs as array or comma-separated string, or '*'
@param string $to_mbox   Target folder
@param string $from_mbox Source folder

@return boolean True on success, False on error
Move a message from one folder to another