e8bee5b7e562142bc21259a191fad7fb22083ec0
[squirrelmail.git] / functions / attachment_common.php
1 <?php
2
3 /**
4 * attachment_common.php
5 *
6 * This file provides the handling of often-used attachment types.
7 *
8 * @copyright &copy; 1999-2006 The SquirrelMail Project Team
9 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
10 * @version $Id$
11 * @package squirrelmail
12 * @todo document attachment $type hook arguments
13 */
14
15 $attachment_common_show_images_list = array();
16
17 /**
18 * Mapping of file extensions to mime types
19 *
20 * Used for application/octet-stream mime type detection.
21 * Supported extensions: bmp, gif, htm, html, jpg, jpeg, php,
22 * png, rtf, txt, patch (since 1.4.2), vcf
23 * @global array $FileExtensionToMimeType
24 */
25 $FileExtensionToMimeType = array('bmp' => 'image/x-bitmap',
26 'gif' => 'image/gif',
27 'htm' => 'text/html',
28 'html' => 'text/html',
29 'jpe' => 'image/jpeg',
30 'jpg' => 'image/jpeg',
31 'jpeg' => 'image/jpeg',
32 'php' => 'text/plain',
33 'png' => 'image/png',
34 'rtf' => 'text/richtext',
35 'txt' => 'text/plain',
36 'patch'=> 'text/plain',
37 'vcf' => 'text/x-vcard');
38
39 /* Register browser-supported image types */
40 sqgetGlobalVar('attachment_common_types', $attachment_common_types);
41 // FIXME: do we use $attachment_common_types that is not extracted by sqgetGlobalVar() ?
42 if (isset($attachment_common_types)) {
43 // var is used to detect activation of jpeg image types
44 unset($jpeg_done);
45 /* Don't run this before being logged in. That may happen
46 when plugins include mime.php */
47 foreach ($attachment_common_types as $val => $v) {
48 if ($val == 'image/gif')
49 register_attachment_common('image/gif', 'link_image');
50 elseif (($val == 'image/jpeg' || $val == 'image/pjpeg' || $val == 'image/jpg') and
51 (!isset($jpeg_done))) {
52 $jpeg_done = 1;
53 register_attachment_common('image/jpg', 'link_image');
54 register_attachment_common('image/jpeg', 'link_image');
55 register_attachment_common('image/pjpeg', 'link_image');
56 }
57 elseif ($val == 'image/png')
58 register_attachment_common('image/png', 'link_image');
59 elseif ($val == 'image/x-xbitmap')
60 register_attachment_common('image/x-xbitmap', 'link_image');
61 elseif ($val == '*/*' || $val == 'image/*') {
62 /**
63 * browser (Firefox) declared that anything is acceptable.
64 * Lets register some common image types.
65 */
66 if (! isset($jpeg_done)) {
67 $jpeg_done = 1;
68 register_attachment_common('image/jpg', 'link_image');
69 register_attachment_common('image/jpeg', 'link_image');
70 register_attachment_common('image/pjpeg', 'link_image');
71 }
72 register_attachment_common('image/gif', 'link_image');
73 register_attachment_common('image/png', 'link_image');
74 register_attachment_common('image/x-xbitmap', 'link_image');
75 // register_attachment_common('image/x-ico', 'link_image');
76 // register_attachment_common('image/x-icon', 'link_image');
77 // register_attachment_common('image/bmp', 'link_image');
78 // register_attachment_common('image/x-ms-bmp', 'link_image');
79 }
80 }
81 unset($jpeg_done);
82 }
83
84 /* Register text-type attachments */
85 register_attachment_common('message/rfc822', 'link_message');
86 register_attachment_common('text/plain', 'link_text');
87 register_attachment_common('text/richtext', 'link_text');
88
89 /* Register HTML */
90 register_attachment_common('text/html', 'link_html');
91
92 /* Register vcards */
93 register_attachment_common('text/x-vcard', 'link_vcard');
94 register_attachment_common('text/directory', 'link_vcard');
95
96 /* Register rules for general types.
97 * These will be used if there isn't a more specific rule available. */
98 register_attachment_common('text/*', 'link_text');
99 register_attachment_common('message/*', 'link_text');
100
101 /* Register "unknown" attachments */
102 register_attachment_common('application/octet-stream', 'octet_stream');
103
104
105 /**
106 * Function which optimizes readability of the above code
107 * Registers 'attachment $type' hooks.
108 * @param string $type attachment type
109 * @param string $func suffix of attachment_common_* function, which handles $type attachments.
110 * @since 1.2.0
111 */
112 function register_attachment_common($type, $func) {
113 global $squirrelmail_plugin_hooks;
114 $squirrelmail_plugin_hooks['attachment ' . $type]['attachment_common'] =
115 'attachment_common_' . $func;
116 }
117
118 /**
119 * Adds href and text keys to attachment_common array for text attachments
120 * @param array $Args attachment $type hook arguments
121 * @since 1.2.0
122 */
123 function attachment_common_link_text(&$Args) {
124 global $base_uri;
125 /* If there is a text attachment, we would like to create a "View" button
126 that links to the text attachment viewer.
127
128 $Args[1] = the array of actions
129
130 Use the name of this file for adding an action
131 $Args[1]['attachment_common'] = Array for href and text
132
133 $Args[1]['attachment_common']['text'] = What is displayed
134 $Args[1]['attachment_common']['href'] = Where it links to */
135 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
136
137 // if htmlspecialchars() breaks something - find other way to encode & in url.
138 $Args[1]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING);
139 $Args[1]['attachment_common']['href'] =
140 set_url_var($Args[1]['attachment_common']['href'],
141 'ent_id',$Args[5]);
142
143 /* The link that we created needs a name. */
144 $Args[1]['attachment_common']['text'] = _("View");
145
146 /* Each attachment has a filename on the left, which is a link.
147 Where that link points to can be changed. Just in case the link above
148 for viewing text attachments is not the same as the default link for
149 this file, we'll change it.
150
151 This is a lot better in the image links, since the defaultLink will just
152 download the image, but the one that we set it to will format the page
153 to have an image tag in the center (looking a lot like this text viewer) */
154 $Args[6] = $Args[1]['attachment_common']['href'];
155 }
156
157 /**
158 * Adds href and text keys to attachment_common array for rfc822 attachments
159 * @param array $Args attachment $type hook arguments
160 * @since 1.2.6
161 */
162 function attachment_common_link_message(&$Args) {
163 global $base_uri;
164 $Args[1]['attachment_common']['href'] = $base_uri . 'src/read_body.php?startMessage=' .
165 $Args[2] . '&amp;passed_id=' . $Args[3] . '&amp;mailbox=' . $Args[4] .
166 '&amp;passed_ent_id=' . $Args[5] . '&amp;override_type0=message&amp;override_type1=rfc822';
167
168 $Args[1]['attachment_common']['text'] = _("View");
169
170 $Args[6] = $Args[1]['attachment_common']['href'];
171 }
172
173 /**
174 * Adds href and text keys to attachment_common array for html attachments
175 * @param array $Args attachment $type hook arguments
176 * @since 1.2.0
177 */
178 function attachment_common_link_html(&$Args) {
179 global $base_uri;
180 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
181
182 $Args[1]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING).
183 /* why use the overridetype? can this be removed */
184 /* override_type might be needed only when we want view other type of messages as html */
185 '&amp;override_type0=text&amp;override_type1=html';
186 $Args[1]['attachment_common']['href'] =
187 set_url_var($Args[1]['attachment_common']['href'],
188 'ent_id',$Args[5]);
189
190 $Args[1]['attachment_common']['text'] = _("View");
191
192 $Args[6] = $Args[1]['attachment_common']['href'];
193 }
194
195 /**
196 * Adds href and text keys to attachment_common array for image attachments
197 * @param array $Args attachment $type hook arguments
198 * @since 1.2.0
199 */
200 function attachment_common_link_image(&$Args) {
201 global $attachment_common_show_images_list, $base_uri ;
202
203 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
204
205 $info['passed_id'] = $Args[3];
206 $info['mailbox'] = $Args[4];
207 $info['ent_id'] = $Args[5];
208 $info['name'] = $Args[7];
209 $info['download_href'] = isset($Args[1]['download link']) ? $Args[1]['download link']['href'] : '';
210
211 $attachment_common_show_images_list[] = $info;
212
213 $Args[1]['attachment_common']['href'] = $base_uri . 'src/image.php?'. htmlspecialchars($QUERY_STRING);
214 $Args[1]['attachment_common']['href'] =
215 set_url_var($Args[1]['attachment_common']['href'],
216 'ent_id',$Args[5]);
217
218 $Args[1]['attachment_common']['text'] = _("View");
219
220 $Args[6] = $Args[1]['attachment_common']['href'];
221 }
222
223 /**
224 * Adds href and text keys to attachment_common array for vcard attachments
225 * @param array $Args attachment $type hook arguments
226 * @since 1.2.0
227 */
228 function attachment_common_link_vcard(&$Args) {
229 global $base_uri;
230 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
231
232 $Args[1]['attachment_common']['href'] = $base_uri . 'src/vcard.php?'. htmlspecialchars($QUERY_STRING);
233 $Args[1]['attachment_common']['href'] =
234 set_url_var($Args[1]['attachment_common']['href'],
235 'ent_id',$Args[5]);
236
237 $Args[1]['attachment_common']['text'] = _("View Business Card");
238
239 $Args[6] = $Args[1]['attachment_common']['href'];
240 }
241
242 /**
243 * Processes octet-stream attachments.
244 * Calls attachment_common-load_mime_types and attachment $type hooks.
245 * @param array $Args attachment $type hook arguments
246 * @since 1.2.0
247 */
248 function attachment_common_octet_stream(&$Args) {
249 global $FileExtensionToMimeType;
250
251 do_hook('attachment_common-load_mime_types');
252
253 ereg('\\.([^\\.]+)$', $Args[7], $Regs);
254
255 $Ext = strtolower($Regs[1]);
256
257 if ($Ext == '' || ! isset($FileExtensionToMimeType[$Ext]))
258 return;
259
260 $Ret = do_hook('attachment ' . $FileExtensionToMimeType[$Ext],
261 $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6],
262 $Args[7], $Args[8], $Args[9]);
263
264 foreach ($Ret as $a => $b) {
265 $Args[$a] = $b;
266 }
267 }