Mercurial > hg > rc2
comparison program/lib/Roundcube/rcube_message_header.php @ 0:4681f974d28b
vanilla 1.3.3 distro, I hope
| author | Charlie Root |
|---|---|
| date | Thu, 04 Jan 2018 15:52:31 -0500 |
| parents | |
| children | 1866b439e6d3 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4681f974d28b |
|---|---|
| 1 <?php | |
| 2 | |
| 3 /** | |
| 4 +-----------------------------------------------------------------------+ | |
| 5 | This file is part of the Roundcube Webmail client | | |
| 6 | Copyright (C) 2005-2012, The Roundcube Dev Team | | |
| 7 | Copyright (C) 2011-2012, Kolab Systems AG | | |
| 8 | | | |
| 9 | Licensed under the GNU General Public License version 3 or | | |
| 10 | any later version with exceptions for skins & plugins. | | |
| 11 | See the README file for a full license statement. | | |
| 12 | | | |
| 13 | PURPOSE: | | |
| 14 | E-mail message headers representation | | |
| 15 +-----------------------------------------------------------------------+ | |
| 16 | Author: Aleksander Machniak <alec@alec.pl> | | |
| 17 +-----------------------------------------------------------------------+ | |
| 18 */ | |
| 19 | |
| 20 /** | |
| 21 * Struct representing an e-mail message header | |
| 22 * | |
| 23 * @package Framework | |
| 24 * @subpackage Storage | |
| 25 * @author Aleksander Machniak <alec@alec.pl> | |
| 26 */ | |
| 27 class rcube_message_header | |
| 28 { | |
| 29 /** | |
| 30 * Message sequence number | |
| 31 * | |
| 32 * @var int | |
| 33 */ | |
| 34 public $id; | |
| 35 | |
| 36 /** | |
| 37 * Message unique identifier | |
| 38 * | |
| 39 * @var int | |
| 40 */ | |
| 41 public $uid; | |
| 42 | |
| 43 /** | |
| 44 * Message subject | |
| 45 * | |
| 46 * @var string | |
| 47 */ | |
| 48 public $subject; | |
| 49 | |
| 50 /** | |
| 51 * Message sender (From) | |
| 52 * | |
| 53 * @var string | |
| 54 */ | |
| 55 public $from; | |
| 56 | |
| 57 /** | |
| 58 * Message recipient (To) | |
| 59 * | |
| 60 * @var string | |
| 61 */ | |
| 62 public $to; | |
| 63 | |
| 64 /** | |
| 65 * Message additional recipients (Cc) | |
| 66 * | |
| 67 * @var string | |
| 68 */ | |
| 69 public $cc; | |
| 70 | |
| 71 /** | |
| 72 * Message Reply-To header | |
| 73 * | |
| 74 * @var string | |
| 75 */ | |
| 76 public $replyto; | |
| 77 | |
| 78 /** | |
| 79 * Message In-Reply-To header | |
| 80 * | |
| 81 * @var string | |
| 82 */ | |
| 83 public $in_reply_to; | |
| 84 | |
| 85 /** | |
| 86 * Message date (Date) | |
| 87 * | |
| 88 * @var string | |
| 89 */ | |
| 90 public $date; | |
| 91 | |
| 92 /** | |
| 93 * Message identifier (Message-ID) | |
| 94 * | |
| 95 * @var string | |
| 96 */ | |
| 97 public $messageID; | |
| 98 | |
| 99 /** | |
| 100 * Message size | |
| 101 * | |
| 102 * @var int | |
| 103 */ | |
| 104 public $size; | |
| 105 | |
| 106 /** | |
| 107 * Message encoding | |
| 108 * | |
| 109 * @var string | |
| 110 */ | |
| 111 public $encoding; | |
| 112 | |
| 113 /** | |
| 114 * Message charset | |
| 115 * | |
| 116 * @var string | |
| 117 */ | |
| 118 public $charset; | |
| 119 | |
| 120 /** | |
| 121 * Message Content-type | |
| 122 * | |
| 123 * @var string | |
| 124 */ | |
| 125 public $ctype; | |
| 126 | |
| 127 /** | |
| 128 * Message timestamp (based on message date) | |
| 129 * | |
| 130 * @var int | |
| 131 */ | |
| 132 public $timestamp; | |
| 133 | |
| 134 /** | |
| 135 * IMAP bodystructure string | |
| 136 * | |
| 137 * @var string | |
| 138 */ | |
| 139 public $bodystructure; | |
| 140 | |
| 141 /** | |
| 142 * IMAP internal date | |
| 143 * | |
| 144 * @var string | |
| 145 */ | |
| 146 public $internaldate; | |
| 147 | |
| 148 /** | |
| 149 * Message References header | |
| 150 * | |
| 151 * @var string | |
| 152 */ | |
| 153 public $references; | |
| 154 | |
| 155 /** | |
| 156 * Message priority (X-Priority) | |
| 157 * | |
| 158 * @var int | |
| 159 */ | |
| 160 public $priority; | |
| 161 | |
| 162 /** | |
| 163 * Message receipt recipient | |
| 164 * | |
| 165 * @var string | |
| 166 */ | |
| 167 public $mdn_to; | |
| 168 | |
| 169 /** | |
| 170 * IMAP folder this message is stored in | |
| 171 * | |
| 172 * @var string | |
| 173 */ | |
| 174 public $folder; | |
| 175 | |
| 176 /** | |
| 177 * Other message headers | |
| 178 * | |
| 179 * @var array | |
| 180 */ | |
| 181 public $others = array(); | |
| 182 | |
| 183 /** | |
| 184 * Message flags | |
| 185 * | |
| 186 * @var array | |
| 187 */ | |
| 188 public $flags = array(); | |
| 189 | |
| 190 // map header to rcube_message_header object property | |
| 191 private $obj_headers = array( | |
| 192 'date' => 'date', | |
| 193 'from' => 'from', | |
| 194 'to' => 'to', | |
| 195 'subject' => 'subject', | |
| 196 'reply-to' => 'replyto', | |
| 197 'cc' => 'cc', | |
| 198 'bcc' => 'bcc', | |
| 199 'mbox' => 'folder', | |
| 200 'folder' => 'folder', | |
| 201 'content-transfer-encoding' => 'encoding', | |
| 202 'in-reply-to' => 'in_reply_to', | |
| 203 'content-type' => 'ctype', | |
| 204 'charset' => 'charset', | |
| 205 'references' => 'references', | |
| 206 'return-receipt-to' => 'mdn_to', | |
| 207 'disposition-notification-to' => 'mdn_to', | |
| 208 'x-confirm-reading-to' => 'mdn_to', | |
| 209 'message-id' => 'messageID', | |
| 210 'x-priority' => 'priority', | |
| 211 ); | |
| 212 | |
| 213 /** | |
| 214 * Returns header value | |
| 215 */ | |
| 216 public function get($name, $decode = true) | |
| 217 { | |
| 218 $name = strtolower($name); | |
| 219 | |
| 220 if (isset($this->obj_headers[$name])) { | |
| 221 $value = $this->{$this->obj_headers[$name]}; | |
| 222 } | |
| 223 else { | |
| 224 $value = $this->others[$name]; | |
| 225 } | |
| 226 | |
| 227 if ($decode) { | |
| 228 if (is_array($value)) { | |
| 229 foreach ($value as $key => $val) { | |
| 230 $val = rcube_mime::decode_header($val, $this->charset); | |
| 231 $value[$key] = rcube_charset::clean($val); | |
| 232 } | |
| 233 } | |
| 234 else { | |
| 235 $value = rcube_mime::decode_header($value, $this->charset); | |
| 236 $value = rcube_charset::clean($value); | |
| 237 } | |
| 238 } | |
| 239 | |
| 240 return $value; | |
| 241 } | |
| 242 | |
| 243 /** | |
| 244 * Sets header value | |
| 245 */ | |
| 246 public function set($name, $value) | |
| 247 { | |
| 248 $name = strtolower($name); | |
| 249 | |
| 250 if (isset($this->obj_headers[$name])) { | |
| 251 $this->{$this->obj_headers[$name]} = $value; | |
| 252 } | |
| 253 else { | |
| 254 $this->others[$name] = $value; | |
| 255 } | |
| 256 } | |
| 257 | |
| 258 | |
| 259 /** | |
| 260 * Factory method to instantiate headers from a data array | |
| 261 * | |
| 262 * @param array Hash array with header values | |
| 263 * @return object rcube_message_header instance filled with headers values | |
| 264 */ | |
| 265 public static function from_array($arr) | |
| 266 { | |
| 267 $obj = new rcube_message_header; | |
| 268 foreach ($arr as $k => $v) | |
| 269 $obj->set($k, $v); | |
| 270 | |
| 271 return $obj; | |
| 272 } | |
| 273 } | |
| 274 | |
| 275 | |
| 276 /** | |
| 277 * Class for sorting an array of rcube_message_header objects in a predetermined order. | |
| 278 * | |
| 279 * @package Framework | |
| 280 * @subpackage Storage | |
| 281 * @author Aleksander Machniak <alec@alec.pl> | |
| 282 */ | |
| 283 class rcube_message_header_sorter | |
| 284 { | |
| 285 private $uids = array(); | |
| 286 | |
| 287 | |
| 288 /** | |
| 289 * Set the predetermined sort order. | |
| 290 * | |
| 291 * @param array $index Numerically indexed array of IMAP UIDs | |
| 292 */ | |
| 293 function set_index($index) | |
| 294 { | |
| 295 $index = array_flip($index); | |
| 296 | |
| 297 $this->uids = $index; | |
| 298 } | |
| 299 | |
| 300 /** | |
| 301 * Sort the array of header objects | |
| 302 * | |
| 303 * @param array $headers Array of rcube_message_header objects indexed by UID | |
| 304 */ | |
| 305 function sort_headers(&$headers) | |
| 306 { | |
| 307 uksort($headers, array($this, "compare_uids")); | |
| 308 } | |
| 309 | |
| 310 /** | |
| 311 * Sort method called by uksort() | |
| 312 * | |
| 313 * @param int $a Array key (UID) | |
| 314 * @param int $b Array key (UID) | |
| 315 */ | |
| 316 function compare_uids($a, $b) | |
| 317 { | |
| 318 // then find each sequence number in my ordered list | |
| 319 $posa = isset($this->uids[$a]) ? intval($this->uids[$a]) : -1; | |
| 320 $posb = isset($this->uids[$b]) ? intval($this->uids[$b]) : -1; | |
| 321 | |
| 322 // return the relative position as the comparison value | |
| 323 return $posa - $posb; | |
| 324 } | |
| 325 } |
