| | |
| | | { |
| | | // retrieve headers from IMAP |
| | | if ($this->get_capability('sort') && ($msg_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, $this->skip_deleted ? 'UNDELETED' : ''))) |
| | | { |
| | | $mymsgidx = array_slice ($msg_index, $begin, $end-$begin, true); |
| | | { |
| | | $mymsgidx = array_slice ($msg_index, $begin, $end-$begin); |
| | | $msgs = join(",", $mymsgidx); |
| | | $headers_sorted = true; |
| | | } |
| | | else |
| | | { |
| | |
| | | */ |
| | | function move_message($uids, $to_mbox, $from_mbox='') |
| | | { |
| | | $to_mbox = stripslashes($to_mbox); |
| | | $to_mbox_in = stripslashes($to_mbox); |
| | | $from_mbox = stripslashes($from_mbox); |
| | | $to_mbox = $this->_mod_mailbox($to_mbox); |
| | | $to_mbox = $this->_mod_mailbox($to_mbox_in); |
| | | $from_mbox = $from_mbox ? $this->_mod_mailbox($from_mbox) : $this->mailbox; |
| | | |
| | | // make sure mailbox exists |
| | | if (!in_array($to_mbox, $this->_list_mailboxes())) |
| | | { |
| | | if (in_array($to_mbox, $this->default_folders)) |
| | | $this->create_mailbox($to_mbox, TRUE); |
| | | if (in_array($to_mbox_in, $this->default_folders)) |
| | | $this->create_mailbox($to_mbox_in, TRUE); |
| | | else |
| | | return FALSE; |
| | | } |
| | |
| | | |
| | | // send expunge command in order to have the moved message |
| | | // really deleted from the source mailbox |
| | | if ($moved) |
| | | { |
| | | if ($moved) { |
| | | $this->_expunge($from_mbox, FALSE); |
| | | $this->_clear_messagecount($from_mbox); |
| | | $this->_clear_messagecount($to_mbox); |
| | | } |
| | | } |
| | | // moving failed |
| | | else if (rcmail::get_instance()->config->get('delete_always', false)) { |
| | | return iil_C_Delete($this->conn, $from_mbox, join(',', $a_mids)); |
| | | } |
| | | |
| | | // remove message ids from search set |
| | | if ($moved && $this->search_set && $from_mbox == $this->mailbox) |
| | |
| | | */ |
| | | function set_sequence_numbers($seqnums) |
| | | { |
| | | $this->sequence_numbers = $seqnums; |
| | | $this->sequence_numbers = array_flip($seqnums); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * Get the position of a message sequence number in my sequence_numbers array |
| | | * |
| | | * @param int Message sequence number contained in sequence_numbers |
| | | * @return int Position, -1 if not found |
| | | */ |
| | | function position_of($seqnum) |
| | | { |
| | | $pos = array_search($seqnum, $this->sequence_numbers); |
| | | if ($pos === false) return -1; |
| | | return $pos; |
| | | } |
| | | |
| | | /** |
| | | * Sort method called by uasort() |
| | | */ |
| | | function compare_seqnums($a, $b) |
| | |
| | | $seqb = $b->id; |
| | | |
| | | // then find each sequence number in my ordered list |
| | | $posa = $this->position_of($seqa); |
| | | $posb = $this->position_of($seqb); |
| | | $posa = isset($this->sequence_numbers[$seqa]) ? intval($this->sequence_numbers[$seqa]) : -1; |
| | | $posb = isset($this->sequence_numbers[$seqb]) ? intval($this->sequence_numbers[$seqb]) : -1; |
| | | |
| | | // return the relative position as the comparison value |
| | | $ret = $posa - $posb; |
| | | return $ret; |
| | | return $posa - $posb; |
| | | } |
| | | } |
| | | |