| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 | 
							- <?php
 - 
 - /**
 -  +-----------------------------------------------------------------------+
 -  | This file is part of the Roundcube Webmail client                     |
 -  | Copyright (C) 2005-2012, The Roundcube Dev Team                       |
 -  | Copyright (C) 2011-2012, Kolab Systems AG                             |
 -  |                                                                       |
 -  | Licensed under the GNU General Public License version 3 or            |
 -  | any later version with exceptions for skins & plugins.                |
 -  | See the README file for a full license statement.                     |
 -  |                                                                       |
 -  | PURPOSE:                                                              |
 -  |   E-mail message headers representation                               |
 -  +-----------------------------------------------------------------------+
 -  | Author: Aleksander Machniak <alec@alec.pl>                            |
 -  +-----------------------------------------------------------------------+
 - */
 - 
 - /**
 -  * Struct representing an e-mail message header
 -  *
 -  * @package    Framework
 -  * @subpackage Storage
 -  * @author     Aleksander Machniak <alec@alec.pl>
 -  */
 - class rcube_message_header
 - {
 -     /**
 -      * Message sequence number
 -      *
 -      * @var int
 -      */
 -     public $id;
 - 
 -     /**
 -      * Message unique identifier
 -      *
 -      * @var int
 -      */
 -     public $uid;
 - 
 -     /**
 -      * Message subject
 -      *
 -      * @var string
 -      */
 -     public $subject;
 - 
 -     /**
 -      * Message sender (From)
 -      *
 -      * @var string
 -      */
 -     public $from;
 - 
 -     /**
 -      * Message recipient (To)
 -      *
 -      * @var string
 -      */
 -     public $to;
 - 
 -     /**
 -      * Message additional recipients (Cc)
 -      *
 -      * @var string
 -      */
 -     public $cc;
 - 
 -     /**
 -      * Message Reply-To header
 -      *
 -      * @var string
 -      */
 -     public $replyto;
 - 
 -     /**
 -      * Message In-Reply-To header
 -      *
 -      * @var string
 -      */
 -     public $in_reply_to;
 - 
 -     /**
 -      * Message date (Date)
 -      *
 -      * @var string
 -      */
 -     public $date;
 - 
 -     /**
 -      * Message identifier (Message-ID)
 -      *
 -      * @var string
 -      */
 -     public $messageID;
 - 
 -     /**
 -      * Message size
 -      *
 -      * @var int
 -      */
 -     public $size;
 - 
 -     /**
 -      * Message encoding
 -      *
 -      * @var string
 -      */
 -     public $encoding;
 - 
 -     /**
 -      * Message charset
 -      *
 -      * @var string
 -      */
 -     public $charset;
 - 
 -     /**
 -      * Message Content-type
 -      *
 -      * @var string
 -      */
 -     public $ctype;
 - 
 -     /**
 -      * Message timestamp (based on message date)
 -      *
 -      * @var int
 -      */
 -     public $timestamp;
 - 
 -     /**
 -      * IMAP bodystructure string
 -      *
 -      * @var string
 -      */
 -     public $bodystructure;
 - 
 -     /**
 -      * IMAP internal date
 -      *
 -      * @var string
 -      */
 -     public $internaldate;
 - 
 -     /**
 -      * Message References header
 -      *
 -      * @var string
 -      */
 -     public $references;
 - 
 -     /**
 -      * Message priority (X-Priority)
 -      *
 -      * @var int
 -      */
 -     public $priority;
 - 
 -     /**
 -      * Message receipt recipient
 -      *
 -      * @var string
 -      */
 -     public $mdn_to;
 - 
 -     /**
 -      * IMAP folder this message is stored in
 -      *
 -      * @var string
 -      */
 -     public $folder;
 - 
 -     /**
 -      * Other message headers
 -      *
 -      * @var array
 -      */
 -     public $others = array();
 - 
 -     /**
 -      * Message flags
 -      *
 -      * @var array
 -      */
 -     public $flags = array();
 - 
 -     // map header to rcube_message_header object property
 -     private $obj_headers = array(
 -         'date'      => 'date',
 -         'from'      => 'from',
 -         'to'        => 'to',
 -         'subject'   => 'subject',
 -         'reply-to'  => 'replyto',
 -         'cc'        => 'cc',
 -         'bcc'       => 'bcc',
 -         'mbox'      => 'folder',
 -         'folder'    => 'folder',
 -         'content-transfer-encoding' => 'encoding',
 -         'in-reply-to'               => 'in_reply_to',
 -         'content-type'              => 'ctype',
 -         'charset'                   => 'charset',
 -         'references'                => 'references',
 -         'return-receipt-to'         => 'mdn_to',
 -         'disposition-notification-to' => 'mdn_to',
 -         'x-confirm-reading-to'      => 'mdn_to',
 -         'message-id'                => 'messageID',
 -         'x-priority'                => 'priority',
 -     );
 - 
 -     /**
 -      * Returns header value
 -      */
 -     public function get($name, $decode = true)
 -     {
 -         $name = strtolower($name);
 - 
 -         if (isset($this->obj_headers[$name])) {
 -             $value = $this->{$this->obj_headers[$name]};
 -         }
 -         else {
 -             $value = $this->others[$name];
 -         }
 - 
 -         if ($decode) {
 -             if (is_array($value)) {
 -                 foreach ($value as $key => $val) {
 -                     $val         = rcube_mime::decode_header($val, $this->charset);
 -                     $value[$key] = rcube_charset::clean($val);
 -                 }
 -             }
 -             else {
 -                 $value = rcube_mime::decode_header($value, $this->charset);
 -                 $value = rcube_charset::clean($value);
 -             }
 -         }
 - 
 -         return $value;
 -     }
 - 
 -     /**
 -      * Sets header value
 -      */
 -     public function set($name, $value)
 -     {
 -         $name = strtolower($name);
 - 
 -         if (isset($this->obj_headers[$name])) {
 -             $this->{$this->obj_headers[$name]} = $value;
 -         }
 -         else {
 -             $this->others[$name] = $value;
 -         }
 -     }
 - 
 - 
 -     /**
 -      * Factory method to instantiate headers from a data array
 -      *
 -      * @param array Hash array with header values
 -      * @return object rcube_message_header instance filled with headers values
 -      */
 -     public static function from_array($arr)
 -     {
 -         $obj = new rcube_message_header;
 -         foreach ($arr as $k => $v)
 -             $obj->set($k, $v);
 - 
 -         return $obj;
 -     }
 - }
 - 
 - 
 - /**
 -  * Class for sorting an array of rcube_message_header objects in a predetermined order.
 -  *
 -  * @package    Framework
 -  * @subpackage Storage
 -  * @author  Aleksander Machniak <alec@alec.pl>
 -  */
 - class rcube_message_header_sorter
 - {
 -     private $uids = array();
 - 
 - 
 -     /**
 -      * Set the predetermined sort order.
 -      *
 -      * @param array $index  Numerically indexed array of IMAP UIDs
 -      */
 -     function set_index($index)
 -     {
 -         $index = array_flip($index);
 - 
 -         $this->uids = $index;
 -     }
 - 
 -     /**
 -      * Sort the array of header objects
 -      *
 -      * @param array $headers Array of rcube_message_header objects indexed by UID
 -      */
 -     function sort_headers(&$headers)
 -     {
 -         uksort($headers, array($this, "compare_uids"));
 -     }
 - 
 -     /**
 -      * Sort method called by uksort()
 -      *
 -      * @param int $a Array key (UID)
 -      * @param int $b Array key (UID)
 -      */
 -     function compare_uids($a, $b)
 -     {
 -         // then find each sequence number in my ordered list
 -         $posa = isset($this->uids[$a]) ? intval($this->uids[$a]) : -1;
 -         $posb = isset($this->uids[$b]) ? intval($this->uids[$b]) : -1;
 - 
 -         // return the relative position as the comparison value
 -         return $posa - $posb;
 -     }
 - }
 
 
  |