Add display indicator for forwarded messages
[squirrelmail.git] / functions / template / message_list_util.php
1 <?php
2
3 /**
4 * message_list_util.php
5 *
6 * Helper functions for message list templates.
7 *
8 * The following functions are utility functions for templates. Do not
9 * echo output in these functions.
10 *
11 * @copyright &copy; 2005-2009 The SquirrelMail Project Team
12 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
13 * @version $Id$
14 * @package squirrelmail
15 */
16
17
18 /**
19 * @param array $aOrder
20 * @return array
21 */
22 function calcMessageListColumnWidth($aOrder) {
23 /**
24 * Width of the displayed columns
25 */
26 $aWidthTpl = array(
27 SQM_COL_CHECK => 1,
28 SQM_COL_FROM => 25,
29 SQM_COL_DATE => 15,
30 SQM_COL_SUBJ => 100,
31 SQM_COL_FLAGS => 2,
32 SQM_COL_SIZE => 5,
33 SQM_COL_PRIO => 1,
34 SQM_COL_ATTACHMENT => 1,
35 SQM_COL_INT_DATE => 15,
36 SQM_COL_TO => 25,
37 SQM_COL_CC => 25,
38 SQM_COL_BCC => 25
39 );
40
41 /**
42 * Calculate the width of the subject column based on the
43 * widths of the other columns
44 */
45 if (isset($aOrder[SQM_COL_SUBJ])) {
46 foreach($aOrder as $iCol) {
47 if ($iCol != SQM_COL_SUBJ) {
48 $aWidthTpl[SQM_COL_SUBJ] -= $aWidthTpl[$iCol];
49 }
50 }
51 }
52 $aWidth = array();
53 foreach($aOrder as $iCol) {
54 $aWidth[$iCol] = $aWidthTpl[$iCol];
55 }
56
57 $iCheckTotalWidth = $iTotalWidth = 0;
58 foreach($aOrder as $iCol) { $iTotalWidth += $aWidth[$iCol];}
59
60 $iTotalWidth = ($iTotalWidth) ? $iTotalWidth : 100; // divide by zero check. shouldn't be needed
61
62 // correct the width to 100%
63 foreach($aOrder as $iCol) {
64 $aWidth[$iCol] = round( (100 / $iTotalWidth) * $aWidth[$iCol] , 0);
65 $iCheckTotalWidth += $aWidth[$iCol];
66 }
67 if ($iCheckTotalWidth > 100) { // correction needed
68 $iCol = array_search(max($aWidth),$aWidth);
69 $aWidth[$iCol] -= $iCheckTotalWidth-100;
70 }
71 return $aWidth;
72 }
73
74
75 /**
76 * Function to retrieve correct icon based on provided message flags. This is
77 * a merge/replacement for getFlagIcon() and getFlagText() functions.
78 *
79 * @param array $aFlags associative array with seen,deleted,anwered and flag keys.
80 * @param string $icon_theme_path path to user's currently selected icon theme.
81 * @return string $icon full HTML img tag or text icon, depending on of user prefs
82 * @author Steve Brown
83 */
84 function getFlagIcon ($aFlags, $icon_theme_path) {
85 /**
86 * 0 = unseen
87 * 1 = seen
88 * 2 = deleted
89 * 3 = deleted seen
90 * 4 = answered
91 * 5 = answered seen
92 * 6 = answered deleted
93 * 7 = answered deleted seen
94 * 8 = flagged
95 * 9 = flagged seen
96 * 10 = flagged deleted
97 * 11 = flagged deleted seen
98 * 12 = flagged answered
99 * 13 = flagged aswered seen
100 * 14 = flagged answered deleted
101 * 15 = flagged anserwed deleted seen
102 * ...
103 * 32 = forwarded
104 * 33 = forwarded seen
105 * 34 = forwarded deleted
106 * 35 = forwarded deleted seen
107 * ...
108 * 41 = flagged forwarded seen
109 * 42 = flagged forwarded deleted
110 * 43 = flagged forwarded deleted seen
111 */
112
113 /**
114 * Use static vars to avoid initialisation of the array on each displayed row
115 */
116 global $nbsp;
117 static $flag_icons, $flag_values;
118 if (!isset($flag_icons)) {
119 // This is by no means complete...
120 $flag_icons = array (
121 // Image icon name Text Icon Alt/Title Text
122 // --------------- --------- --------------
123 array ('msg_new.png', $nbsp, '('._("New").')') ,
124 array ('msg_read.png', $nbsp, '('._("Read").')'),
125 array ('msg_new_deleted.png', _("D"), '('._("Deleted").')'),
126 array ('msg_read_deleted.png', _("D"), '('._("Deleted").')'),
127 array ('msg_new_reply.png', _("A"), '('._("Answered").')'),
128 array ('msg_read_reply.png', _("A"), '('._("Answered").')'),
129 array ('msg_new_deleted_reply.png', _("D"), '('._("Answered").')'),
130 array ('msg_read_deleted_reply.png', _("D"), '('._("Answered").')'),
131 array ('flagged.png', _("F"), '('._("Flagged").')'),
132 array ('flagged.png', _("F"), '('._("Flagged").')'),
133 array ('flagged.png', _("F"), '('._("Flagged").')'),
134 array ('flagged.png', _("F"), '('._("Flagged").')'),
135 array ('flagged.png', _("F"), '('._("Flagged").')'),
136 array ('flagged.png', _("F"), '('._("Flagged").')'),
137 array ('flagged.png', _("F"), '('._("Flagged").')'),
138 array ('flagged.png', _("F"), '('._("Flagged").')'),
139 FALSE,
140 FALSE,
141 FALSE,
142 FALSE,
143 FALSE,
144 FALSE,
145 FALSE,
146 FALSE,
147 FALSE,
148 FALSE,
149 FALSE,
150 FALSE,
151 FALSE,
152 FALSE,
153 FALSE,
154 FALSE,
155 array ('msg_new_forwarded.png', _("O"), '('._("Forwarded").')'),
156 array ('msg_read_forwarded.png', _("O"), '('._("Forwarded").')'),
157 array ('msg_new_deleted_forwarded.png', _("D"), '('._("Forwarded").')'),
158 array ('msg_read_deleted_forwarded.png', _("D"), '('._("Forwarded").')'),
159 FALSE,
160 FALSE,
161 FALSE,
162 FALSE,
163 FALSE,
164 array ('flagged.png', _("F"), '('._("Flagged").')'),
165 array ('flagged.png', _("F"), '('._("Flagged").')'),
166 array ('flagged.png', _("F"), '('._("Flagged").')'),
167 );
168
169 $flag_values = array('seen' => 1,
170 'deleted' => 2,
171 'answered' => 4,
172 'flagged' => 8,
173 'draft' => 16,
174 'forwarded' => 32);
175 }
176
177 /**
178 * The flags entry contain all items displayed in the flag column.
179 */
180 $icon = '';
181
182 $index = 0;
183 foreach ($aFlags as $flag => $flagvalue) {
184 switch ($flag) {
185 case 'deleted':
186 case 'answered':
187 case 'forwarded':
188 case 'seen':
189 case 'flagged': if ($flagvalue) $index += $flag_values[$flag]; break;
190 default: break;
191 }
192 }
193
194 if (!empty($flag_icons[$index])) {
195 $data = $flag_icons[$index];
196 } else {
197 //FIXME: previously this default was set to the last value of the $flag_icons array (when it was index 15 - flagged anserwed deleted seen) but I don't understand why... am changing it to flagged (index 15 just shows (only) the flag icon anyway)
198 $data = $flag_icons[8]; // default to just flagged
199 }
200
201 $icon = getIcon($icon_theme_path, $data[0], $data[1], $data[2]);
202 return $icon;
203 }
204
205
206 /**
207 * Function to retrieve correct priority icon based on user prefs
208 *
209 * @param integer $priority priority value of message
210 * @param string $icon_theme_path path to user's currently selected icon theme.
211 * @return string $icon full HTML img tag or text icon, depending on of user prefs
212 * @author Steve Brown
213 */
214 function getPriorityIcon ($priority, $icon_theme_path) {
215 $icon = '';
216
217 switch ($priority) {
218 case 1:
219 case 2:
220 $icon = getIcon($icon_theme_path, 'prio_high.png', create_span('!', 'high_priority'), _("High priority"));
221 break;
222 case 5:
223 $icon = getIcon($icon_theme_path, 'prio_low.png', create_span('&#8595;', 'low_priority'), _("Low priority"));
224 break;
225 default:
226 $icon = getIcon($icon_theme_path, 'transparent.png', '', _("Normal priority"), 5);
227 break;
228 }
229
230 return $icon;
231 }
232
233
234 /**
235 * Function to retrieve correct attchment icon based on user prefs
236 *
237 * @param boolean $attach TRUE if the message has an attachment
238 * @param string $icon_theme_path path to user's currently selected icon theme.
239 * @return string $icon full HTML img tag or text icon, depending on of user prefs
240 * @author Steve Brown
241 */
242 function getAttachmentIcon ($attach, $icon_theme_path) {
243 $icon = '';
244
245 $icon_file = $attach ? 'attach.png' : 'transparent.png';
246 $alt_text = $attach ? _("Attachment") : _("No attachment");
247 $text = $attach ? '+' : '';
248 $icon = getIcon($icon_theme_path, $icon_file, $text, $alt_text);
249
250 return $icon;
251 }