add labels to login page
[squirrelmail.git] / functions / attachment_common.php
CommitLineData
7baf86a9 1<?php
7350889b 2
35586184 3/**
4 * attachment_common.php
5 *
35586184 6 * This file provides the handling of often-used attachment types.
7 *
d4e46166 8 * @copyright &copy; 1999-2009 The SquirrelMail Project Team
4b4abf93 9 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
31841a9e 10 * @version $Id$
d6c32258 11 * @package squirrelmail
3169f064 12 * @todo document attachment $type hook arguments
35586184 13 */
7baf86a9 14
fdbac73b 15$attachment_common_show_images_list = array();
3169f064 16
4691e788 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 */
5bc6067b 25$FileExtensionToMimeType = array('bmp' => 'image/x-bitmap',
26 'gif' => 'image/gif',
27 'htm' => 'text/html',
28 'html' => 'text/html',
6cbe465c 29 'jpe' => 'image/jpeg',
5bc6067b 30 'jpg' => 'image/jpeg',
31 'jpeg' => 'image/jpeg',
32 'php' => 'text/plain',
33 'png' => 'image/png',
34 'rtf' => 'text/richtext',
35 'txt' => 'text/plain',
ab8b558f 36 'patch'=> 'text/plain',
5bc6067b 37 'vcf' => 'text/x-vcard');
38
39/* Register browser-supported image types */
b455793d 40sqgetGlobalVar('attachment_common_types', $attachment_common_types);
4691e788 41// FIXME: do we use $attachment_common_types that is not extracted by sqgetGlobalVar() ?
5bc6067b 42if (isset($attachment_common_types)) {
4691e788 43 // var is used to detect activation of jpeg image types
44 unset($jpeg_done);
5bc6067b 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) {
7baf86a9 48 if ($val == 'image/gif')
5bc6067b 49 register_attachment_common('image/gif', 'link_image');
6cbe465c 50 elseif (($val == 'image/jpeg' || $val == 'image/pjpeg' || $val == 'image/jpg') and
7baf86a9 51 (!isset($jpeg_done))) {
5bc6067b 52 $jpeg_done = 1;
6cbe465c 53 register_attachment_common('image/jpg', 'link_image');
5bc6067b 54 register_attachment_common('image/jpeg', 'link_image');
55 register_attachment_common('image/pjpeg', 'link_image');
7baf86a9 56 }
57 elseif ($val == 'image/png')
5bc6067b 58 register_attachment_common('image/png', 'link_image');
7baf86a9 59 elseif ($val == 'image/x-xbitmap')
5bc6067b 60 register_attachment_common('image/x-xbitmap', 'link_image');
4691e788 61 elseif ($val == '*/*' || $val == 'image/*') {
62 /**
202bcbcc 63 * browser (Firefox) declared that anything is acceptable.
4691e788 64 * Lets register some common image types.
65 */
66 if (! isset($jpeg_done)) {
67 $jpeg_done = 1;
6cbe465c 68 register_attachment_common('image/jpg', 'link_image');
4691e788 69 register_attachment_common('image/jpeg', 'link_image');
70 register_attachment_common('image/pjpeg', 'link_image');
4691e788 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 }
5bc6067b 80 }
81 unset($jpeg_done);
82}
7baf86a9 83
5bc6067b 84/* Register text-type attachments */
679f13b7 85register_attachment_common('message/rfc822', 'link_message');
5bc6067b 86register_attachment_common('text/plain', 'link_text');
87register_attachment_common('text/richtext', 'link_text');
7baf86a9 88
5bc6067b 89/* Register HTML */
90register_attachment_common('text/html', 'link_html');
7baf86a9 91
5bc6067b 92/* Register vcards */
93register_attachment_common('text/x-vcard', 'link_vcard');
35036cf9 94register_attachment_common('text/directory', 'link_vcard');
7baf86a9 95
ae2f65a9 96/* Register rules for general types.
97 * These will be used if there isn't a more specific rule available. */
98register_attachment_common('text/*', 'link_text');
99register_attachment_common('message/*', 'link_text');
100
5bc6067b 101/* Register "unknown" attachments */
102register_attachment_common('application/octet-stream', 'octet_stream');
7baf86a9 103
104
3169f064 105/**
9c6e960d 106 * Function which optimizes readability of the above code, and also
107 * ensures that the attachment_common code is exectuted before any
108 * plugin, so that the latter may override the default processing.
109 *
3169f064 110 * Registers 'attachment $type' hooks.
9c6e960d 111 *
112 * @param string $type Attachment type
113 * @param string $func Suffix of attachment_common_* function, which
114 * handles $type attachments.
115 *
3169f064 116 * @since 1.2.0
117 */
7baf86a9 118function register_attachment_common($type, $func) {
5bc6067b 119 global $squirrelmail_plugin_hooks;
9c6e960d 120 $plugin_type = 'attachment ' . $type;
121 $fn = 'attachment_common_' . $func;
122 if (!empty($squirrelmail_plugin_hooks[$plugin_type])) {
123 $plugins = $squirrelmail_plugin_hooks[$plugin_type];
124 $plugins = array_merge(array('attachment_common', $fn), $plugins);
125 $squirrelmail_plugin_hooks[$plugin_type] = $plugins;
126 } else {
127 $squirrelmail_plugin_hooks[$plugin_type]['attachment_common'] = $fn;
128 }
7baf86a9 129}
130
3169f064 131/**
132 * Adds href and text keys to attachment_common array for text attachments
133 * @param array $Args attachment $type hook arguments
134 * @since 1.2.0
135 */
21dab2dc 136function attachment_common_link_text(&$Args) {
202bcbcc 137 global $base_uri;
21dab2dc 138 /* If there is a text attachment, we would like to create a "View" button
5bc6067b 139 that links to the text attachment viewer.
62f7daa5 140
d849b570 141 $Args[0] = the array of actions
62f7daa5 142
21dab2dc 143 Use the name of this file for adding an action
d849b570 144 $Args[0]['attachment_common'] = Array for href and text
62f7daa5 145
d849b570 146 $Args[0]['attachment_common']['text'] = What is displayed
147 $Args[0]['attachment_common']['href'] = Where it links to */
961ca3d8 148 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
846a3a21 149
3169f064 150 // if htmlspecialchars() breaks something - find other way to encode & in url.
d849b570 151 $Args[0]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING);
152 $Args[0]['attachment_common']['href'] =
153 set_url_var($Args[0]['attachment_common']['href'],
154 'ent_id',$Args[4]);
62f7daa5 155
21dab2dc 156 /* The link that we created needs a name. */
d849b570 157 $Args[0]['attachment_common']['text'] = _("View");
679f13b7 158
5bc6067b 159 /* Each attachment has a filename on the left, which is a link.
160 Where that link points to can be changed. Just in case the link above
161 for viewing text attachments is not the same as the default link for
162 this file, we'll change it.
62f7daa5 163
5bc6067b 164 This is a lot better in the image links, since the defaultLink will just
165 download the image, but the one that we set it to will format the page
166 to have an image tag in the center (looking a lot like this text viewer) */
6f2b104c 167 $Args[5] = $Args[0]['attachment_common']['href'];
7baf86a9 168}
169
3169f064 170/**
171 * Adds href and text keys to attachment_common array for rfc822 attachments
172 * @param array $Args attachment $type hook arguments
173 * @since 1.2.6
174 */
21dab2dc 175function attachment_common_link_message(&$Args) {
202bcbcc 176 global $base_uri;
d849b570 177 $Args[0]['attachment_common']['href'] = $base_uri . 'src/read_body.php?startMessage=' .
178 $Args[1] . '&amp;passed_id=' . $Args[2] . '&amp;mailbox=' . $Args[3] .
179 '&amp;passed_ent_id=' . $Args[4] . '&amp;override_type0=message&amp;override_type1=rfc822';
21dab2dc 180
d849b570 181 $Args[0]['attachment_common']['text'] = _("View");
f4c8a5ab 182
d849b570 183 $Args[5] = $Args[0]['attachment_common']['href'];
679f13b7 184}
185
3169f064 186/**
187 * Adds href and text keys to attachment_common array for html attachments
188 * @param array $Args attachment $type hook arguments
189 * @since 1.2.0
190 */
21dab2dc 191function attachment_common_link_html(&$Args) {
202bcbcc 192 global $base_uri;
961ca3d8 193 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
846a3a21 194
d849b570 195 $Args[0]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING).
3169f064 196 /* why use the overridetype? can this be removed */
197 /* override_type might be needed only when we want view other type of messages as html */
47f9a69d 198 '&amp;override_type0=text&amp;override_type1=html';
d849b570 199 $Args[0]['attachment_common']['href'] =
200 set_url_var($Args[0]['attachment_common']['href'],
201 'ent_id',$Args[4]);
5bc6067b 202
d849b570 203 $Args[0]['attachment_common']['text'] = _("View");
5bc6067b 204
d849b570 205 $Args[5] = $Args[0]['attachment_common']['href'];
7baf86a9 206}
207
3169f064 208/**
f8a1ed5a 209 * Adds href and text keys to attachment_common array for image attachments
3169f064 210 * @param array $Args attachment $type hook arguments
211 * @since 1.2.0
212 */
21dab2dc 213function attachment_common_link_image(&$Args) {
202bcbcc 214 global $attachment_common_show_images_list, $base_uri ;
846a3a21 215
961ca3d8 216 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
62f7daa5 217
d849b570 218 $info['passed_id'] = $Args[2];
219 $info['mailbox'] = $Args[3];
220 $info['ent_id'] = $Args[4];
221 $info['name'] = $Args[6];
222 $info['download_href'] = isset($Args[0]['download link']) ? $Args[0]['download link']['href'] : '';
d2dcc193 223
5bc6067b 224 $attachment_common_show_images_list[] = $info;
62f7daa5 225
d849b570 226 $Args[0]['attachment_common']['href'] = $base_uri . 'src/image.php?'. htmlspecialchars($QUERY_STRING);
227 $Args[0]['attachment_common']['href'] =
228 set_url_var($Args[0]['attachment_common']['href'],
229 'ent_id',$Args[4]);
62f7daa5 230
d849b570 231 $Args[0]['attachment_common']['text'] = _("View");
62f7daa5 232
d849b570 233 $Args[5] = $Args[0]['attachment_common']['href'];
7baf86a9 234}
235
3169f064 236/**
f8a1ed5a 237 * Adds href and text keys to attachment_common array for vcard attachments
3169f064 238 * @param array $Args attachment $type hook arguments
239 * @since 1.2.0
240 */
21dab2dc 241function attachment_common_link_vcard(&$Args) {
202bcbcc 242 global $base_uri;
961ca3d8 243 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
62f7daa5 244
d849b570 245 $Args[0]['attachment_common']['href'] = $base_uri . 'src/vcard.php?'. htmlspecialchars($QUERY_STRING);
246 $Args[0]['attachment_common']['href'] =
247 set_url_var($Args[0]['attachment_common']['href'],
248 'ent_id',$Args[4]);
62f7daa5 249
d849b570 250 $Args[0]['attachment_common']['text'] = _("View Business Card");
62f7daa5 251
d849b570 252 $Args[5] = $Args[0]['attachment_common']['href'];
7baf86a9 253}
254
3169f064 255/**
256 * Processes octet-stream attachments.
f8a1ed5a 257 * Calls attachment_common-load_mime_types and attachment $type hooks.
3169f064 258 * @param array $Args attachment $type hook arguments
259 * @since 1.2.0
260 */
21dab2dc 261function attachment_common_octet_stream(&$Args) {
d849b570 262 global $FileExtensionToMimeType, $null;
62f7daa5 263
d7c9c0d4 264//FIXME: I propose removing this hook; I don't like having two hooks close together, but moreover, this hook appears to merely give plugins the chance to add to the global $FileExtensionToMimeType variable, which they can do in any hook before now - I'd recommend prefs_backend (which is what config_override used to be) because it's the one hook run at the beginning of almost all page requests in init.php -- the con is that we don't need it run on ALL page requests, do we? There may be another hook in THIS page request that we can recommend, in which case, we *really should* remove this hook here.
9c6e960d 265//FIXME: or at least we can move this hook up to the top of this file where $FileExtensionToMimeType is defined. What else is this hook here for? What plugins use it?
d849b570 266 do_hook('attachment_common-load_mime_types', $null);
62f7daa5 267
d849b570 268 ereg('\\.([^\\.]+)$', $Args[6], $Regs);
62f7daa5 269
5bc6067b 270 $Ext = strtolower($Regs[1]);
62f7daa5 271
5bc6067b 272 if ($Ext == '' || ! isset($FileExtensionToMimeType[$Ext]))
62f7daa5 273 return;
274
9c6e960d 275 $temp = array(&$Args[0], &$Args[1], &$Args[2], &$Args[3], &$Args[4], &$Args[5],
276 &$Args[6], &$Args[7], &$Args[8]);
d7c9c0d4 277 do_hook('attachment ' . $FileExtensionToMimeType[$Ext], $temp);
62f7daa5 278
7baf86a9 279}