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