Add a few more vars to image handler for later user with templates.
[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 *
47ccfad4 8 * @copyright &copy; 1999-2006 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/**
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 */
7baf86a9 112function register_attachment_common($type, $func) {
5bc6067b 113 global $squirrelmail_plugin_hooks;
114 $squirrelmail_plugin_hooks['attachment ' . $type]['attachment_common'] =
7baf86a9 115 'attachment_common_' . $func;
116}
117
3169f064 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 */
21dab2dc 123function attachment_common_link_text(&$Args) {
202bcbcc 124 global $base_uri;
21dab2dc 125 /* If there is a text attachment, we would like to create a "View" button
5bc6067b 126 that links to the text attachment viewer.
62f7daa5 127
5bc6067b 128 $Args[1] = the array of actions
62f7daa5 129
21dab2dc 130 Use the name of this file for adding an action
131 $Args[1]['attachment_common'] = Array for href and text
62f7daa5 132
5bc6067b 133 $Args[1]['attachment_common']['text'] = What is displayed
21dab2dc 134 $Args[1]['attachment_common']['href'] = Where it links to */
961ca3d8 135 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
846a3a21 136
3169f064 137 // if htmlspecialchars() breaks something - find other way to encode & in url.
202bcbcc 138 $Args[1]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING);
98eb617f 139 $Args[1]['attachment_common']['href'] =
62f7daa5 140 set_url_var($Args[1]['attachment_common']['href'],
21dab2dc 141 'ent_id',$Args[5]);
62f7daa5 142
21dab2dc 143 /* The link that we created needs a name. */
144 $Args[1]['attachment_common']['text'] = _("View");
679f13b7 145
5bc6067b 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.
62f7daa5 150
5bc6067b 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'];
7baf86a9 155}
156
3169f064 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 */
21dab2dc 162function attachment_common_link_message(&$Args) {
202bcbcc 163 global $base_uri;
164 $Args[1]['attachment_common']['href'] = $base_uri . 'src/read_body.php?startMessage=' .
679f13b7 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';
21dab2dc 167
168 $Args[1]['attachment_common']['text'] = _("View");
f4c8a5ab 169
62f7daa5 170 $Args[6] = $Args[1]['attachment_common']['href'];
679f13b7 171}
172
3169f064 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 */
21dab2dc 178function attachment_common_link_html(&$Args) {
202bcbcc 179 global $base_uri;
961ca3d8 180 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
846a3a21 181
202bcbcc 182 $Args[1]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING).
3169f064 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 */
47f9a69d 185 '&amp;override_type0=text&amp;override_type1=html';
186 $Args[1]['attachment_common']['href'] =
62f7daa5 187 set_url_var($Args[1]['attachment_common']['href'],
21dab2dc 188 'ent_id',$Args[5]);
5bc6067b 189
21dab2dc 190 $Args[1]['attachment_common']['text'] = _("View");
5bc6067b 191
192 $Args[6] = $Args[1]['attachment_common']['href'];
7baf86a9 193}
194
3169f064 195/**
f8a1ed5a 196 * Adds href and text keys to attachment_common array for image attachments
3169f064 197 * @param array $Args attachment $type hook arguments
198 * @since 1.2.0
199 */
21dab2dc 200function attachment_common_link_image(&$Args) {
202bcbcc 201 global $attachment_common_show_images_list, $base_uri ;
846a3a21 202
961ca3d8 203 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
62f7daa5 204
5bc6067b 205 $info['passed_id'] = $Args[3];
206 $info['mailbox'] = $Args[4];
207 $info['ent_id'] = $Args[5];
d2dcc193 208 $info['name'] = $Args[7];
209 $info['download_href'] = isset($Args[1]['download link']) ? $Args[1]['download link']['href'] : '';
210
5bc6067b 211 $attachment_common_show_images_list[] = $info;
62f7daa5 212
202bcbcc 213 $Args[1]['attachment_common']['href'] = $base_uri . 'src/image.php?'. htmlspecialchars($QUERY_STRING);
ff9d4297 214 $Args[1]['attachment_common']['href'] =
62f7daa5 215 set_url_var($Args[1]['attachment_common']['href'],
21dab2dc 216 'ent_id',$Args[5]);
62f7daa5 217
21dab2dc 218 $Args[1]['attachment_common']['text'] = _("View");
62f7daa5 219
5bc6067b 220 $Args[6] = $Args[1]['attachment_common']['href'];
7baf86a9 221}
222
3169f064 223/**
f8a1ed5a 224 * Adds href and text keys to attachment_common array for vcard attachments
3169f064 225 * @param array $Args attachment $type hook arguments
226 * @since 1.2.0
227 */
21dab2dc 228function attachment_common_link_vcard(&$Args) {
202bcbcc 229 global $base_uri;
961ca3d8 230 sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
62f7daa5 231
202bcbcc 232 $Args[1]['attachment_common']['href'] = $base_uri . 'src/vcard.php?'. htmlspecialchars($QUERY_STRING);
ff9d4297 233 $Args[1]['attachment_common']['href'] =
62f7daa5 234 set_url_var($Args[1]['attachment_common']['href'],
21dab2dc 235 'ent_id',$Args[5]);
62f7daa5 236
c9fec394 237 $Args[1]['attachment_common']['text'] = _("View Business Card");
62f7daa5 238
5bc6067b 239 $Args[6] = $Args[1]['attachment_common']['href'];
7baf86a9 240}
241
3169f064 242/**
243 * Processes octet-stream attachments.
f8a1ed5a 244 * Calls attachment_common-load_mime_types and attachment $type hooks.
3169f064 245 * @param array $Args attachment $type hook arguments
246 * @since 1.2.0
247 */
21dab2dc 248function attachment_common_octet_stream(&$Args) {
5bc6067b 249 global $FileExtensionToMimeType;
62f7daa5 250
5bc6067b 251 do_hook('attachment_common-load_mime_types');
62f7daa5 252
5bc6067b 253 ereg('\\.([^\\.]+)$', $Args[7], $Regs);
62f7daa5 254
5bc6067b 255 $Ext = strtolower($Regs[1]);
62f7daa5 256
5bc6067b 257 if ($Ext == '' || ! isset($FileExtensionToMimeType[$Ext]))
62f7daa5 258 return;
259
260 $Ret = do_hook('attachment ' . $FileExtensionToMimeType[$Ext],
261 $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6],
5bc6067b 262 $Args[7], $Args[8], $Args[9]);
62f7daa5 263
5bc6067b 264 foreach ($Ret as $a => $b) {
265 $Args[$a] = $b;
266 }
7baf86a9 267}