<?php
- /**
- ** attachment_common.php
- **
- ** Copyright (c) 1999-2001 The Squirrelmail Development Team
- ** Licensed under the GNU GPL. For full terms see the file COPYING.
- **
- ** This file provides the handling of often-used attachment types.
- **
- ** $Id$
- **/
-
- global $attachment_common_show_images_list;
- $attachment_common_show_images_list = array();
-
- global $FileExtensionToMimeType, $attachment_common_types;
- $FileExtensionToMimeType = array('bmp' => 'image/x-bitmap',
- 'gif' => 'image/gif',
- 'htm' => 'text/html',
- 'html' => 'text/html',
- 'jpg' => 'image/jpeg',
- 'jpeg' => 'image/jpeg',
- 'php' => 'text/plain',
- 'png' => 'image/png',
- 'rtf' => 'text/richtext',
- 'txt' => 'text/plain',
- 'vcf' => 'text/x-vcard');
-
- // Register browser-supported image types
- if (isset($attachment_common_types)) {
- // Don't run this before being logged in. That may happen
- // when plugins include mime.php
- foreach ($attachment_common_types as $val => $v) {
+
+/**
+ * attachment_common.php
+ *
+ * This file provides the handling of often-used attachment types.
+ *
+ * @copyright © 1999-2006 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @version $Id$
+ * @package squirrelmail
+ * @todo document attachment $type hook arguments
+ */
+
+
+/**
+ * Mapping of file extensions to mime types
+ *
+ * Used for application/octet-stream mime type detection.
+ * Supported extensions: bmp, gif, htm, html, jpg, jpeg, php,
+ * png, rtf, txt, patch (since 1.4.2), vcf
+ * @global array $FileExtensionToMimeType
+ */
+$FileExtensionToMimeType = array('bmp' => 'image/x-bitmap',
+ 'gif' => 'image/gif',
+ 'htm' => 'text/html',
+ 'html' => 'text/html',
+ 'jpe' => 'image/jpeg',
+ 'jpg' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'php' => 'text/plain',
+ 'png' => 'image/png',
+ 'rtf' => 'text/richtext',
+ 'txt' => 'text/plain',
+ 'patch'=> 'text/plain',
+ 'vcf' => 'text/x-vcard');
+
+/* Register browser-supported image types */
+sqgetGlobalVar('attachment_common_types', $attachment_common_types);
+// FIXME: do we use $attachment_common_types that is not extracted by sqgetGlobalVar() ?
+if (isset($attachment_common_types)) {
+ // var is used to detect activation of jpeg image types
+ unset($jpeg_done);
+ /* Don't run this before being logged in. That may happen
+ when plugins include mime.php */
+ foreach ($attachment_common_types as $val => $v) {
if ($val == 'image/gif')
- register_attachment_common('image/gif', 'link_image');
- elseif (($val == 'image/jpeg' || $val == 'image/pjpeg') and
+ register_attachment_common('image/gif', 'link_image');
+ elseif (($val == 'image/jpeg' || $val == 'image/pjpeg' || $val == 'image/jpg') and
(!isset($jpeg_done))) {
- $jpeg_done = 1;
- register_attachment_common('image/jpeg', 'link_image');
- register_attachment_common('image/pjpeg', 'link_image');
+ $jpeg_done = 1;
+ register_attachment_common('image/jpg', 'link_image');
+ register_attachment_common('image/jpeg', 'link_image');
+ register_attachment_common('image/pjpeg', 'link_image');
}
elseif ($val == 'image/png')
- register_attachment_common('image/png', 'link_image');
+ register_attachment_common('image/png', 'link_image');
elseif ($val == 'image/x-xbitmap')
- register_attachment_common('image/x-xbitmap', 'link_image');
- }
- unset($jpeg_done);
- }
+ register_attachment_common('image/x-xbitmap', 'link_image');
+ elseif ($val == '*/*' || $val == 'image/*') {
+ /**
+ * browser (Firefox) declared that anything is acceptable.
+ * Lets register some common image types.
+ */
+ if (! isset($jpeg_done)) {
+ $jpeg_done = 1;
+ register_attachment_common('image/jpg', 'link_image');
+ register_attachment_common('image/jpeg', 'link_image');
+ register_attachment_common('image/pjpeg', 'link_image');
+ }
+ register_attachment_common('image/gif', 'link_image');
+ register_attachment_common('image/png', 'link_image');
+ register_attachment_common('image/x-xbitmap', 'link_image');
+ // register_attachment_common('image/x-ico', 'link_image');
+ // register_attachment_common('image/x-icon', 'link_image');
+ // register_attachment_common('image/bmp', 'link_image');
+ // register_attachment_common('image/x-ms-bmp', 'link_image');
+ }
+ }
+ unset($jpeg_done);
+}
- // Register text-type attachments
- register_attachment_common('message/rfc822', 'link_text');
- register_attachment_common('text/plain', 'link_text');
- register_attachment_common('text/richtext', 'link_text');
+/* Register text-type attachments */
+register_attachment_common('message/rfc822', 'link_message');
+register_attachment_common('text/plain', 'link_text');
+register_attachment_common('text/richtext', 'link_text');
- // Register HTML
- register_attachment_common('text/html', 'link_html');
+/* Register HTML */
+register_attachment_common('text/html', 'link_html');
- // Register vcards
- register_attachment_common('text/x-vcard', 'link_vcard');
+/* Register vcards */
+register_attachment_common('text/x-vcard', 'link_vcard');
+register_attachment_common('text/directory', 'link_vcard');
- // Register "unknown" attachments
- register_attachment_common('application/octet-stream', 'octet_stream');
+/* Register rules for general types.
+ * These will be used if there isn't a more specific rule available. */
+register_attachment_common('text/*', 'link_text');
+register_attachment_common('message/*', 'link_text');
+/* Register "unknown" attachments */
+register_attachment_common('application/octet-stream', 'octet_stream');
-/* Function which optimizes readability of the above code */
+/**
+ * Function which optimizes readability of the above code
+ * Registers 'attachment $type' hooks.
+ * @param string $type attachment type
+ * @param string $func suffix of attachment_common_* function, which handles $type attachments.
+ * @since 1.2.0
+ */
function register_attachment_common($type, $func) {
- global $squirrelmail_plugin_hooks;
- $squirrelmail_plugin_hooks['attachment ' . $type]['attachment_common'] =
+ global $squirrelmail_plugin_hooks;
+ $squirrelmail_plugin_hooks['attachment ' . $type]['attachment_common'] =
'attachment_common_' . $func;
}
+/**
+ * Adds href and text keys to attachment_common array for text attachments
+ * @param array $Args attachment $type hook arguments
+ * @since 1.2.0
+ */
+function attachment_common_link_text(&$Args) {
+ global $base_uri;
+ /* If there is a text attachment, we would like to create a "View" button
+ that links to the text attachment viewer.
+
+ $Args[1] = the array of actions
-function attachment_common_link_text(&$Args)
-{
- // If there is a text attachment, we would like to create a 'view' button
- // that links to the text attachment viewer.
- //
- // $Args[1] = the array of actions
- //
- // Use our plugin name for adding an action
- // $Args[1]['attachment_common'] = array for href and text
- //
- // $Args[1]['attachment_common']['text'] = What is displayed
- // $Args[1]['attachment_common']['href'] = Where it links to
- //
- // This sets the 'href' of this plugin for a new link.
- $Args[1]['attachment_common']['href'] = '../src/download.php?startMessage=' .
- $Args[2] . '&passed_id=' . $Args[3] . '&mailbox=' . $Args[4] .
- '&passed_ent_id=' . $Args[5] . '&override_type0=text&override_type1=plain';
-
- // If we got here from a search, we should preserve these variables
- if ($Args[8] && $Args[9])
- $Args[1]['attachment_common']['href'] .= '&where=' .
- urlencode($Args[8]) . '&what=' . urlencode($Args[9]);
-
- // The link that we created needs a name. "view" will be displayed for
- // all text attachments handled by this plugin.
- $Args[1]['attachment_common']['text'] = _("view");
-
- // Each attachment has a filename on the left, which is a link.
- // Where that link points to can be changed. Just in case the link above
- // for viewing text attachments is not the same as the default link for
- // this file, we'll change it.
- //
- // This is a lot better in the image links, since the defaultLink will just
- // download the image, but the one that we set it to will format the page
- // to have an image tag in the center (looking a lot like this text viewer)
- $Args[6] = $Args[1]['attachment_common']['href'];
+ Use the name of this file for adding an action
+ $Args[1]['attachment_common'] = Array for href and text
+
+ $Args[1]['attachment_common']['text'] = What is displayed
+ $Args[1]['attachment_common']['href'] = Where it links to */
+ sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
+
+ // if htmlspecialchars() breaks something - find other way to encode & in url.
+ $Args[1]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING);
+ $Args[1]['attachment_common']['href'] =
+ set_url_var($Args[1]['attachment_common']['href'],
+ 'ent_id',$Args[5]);
+
+ /* The link that we created needs a name. */
+ $Args[1]['attachment_common']['text'] = _("View");
+
+ /* Each attachment has a filename on the left, which is a link.
+ Where that link points to can be changed. Just in case the link above
+ for viewing text attachments is not the same as the default link for
+ this file, we'll change it.
+
+ This is a lot better in the image links, since the defaultLink will just
+ download the image, but the one that we set it to will format the page
+ to have an image tag in the center (looking a lot like this text viewer) */
+ $Args[6] = $Args[1]['attachment_common']['href'];
}
+/**
+ * Adds href and text keys to attachment_common array for rfc822 attachments
+ * @param array $Args attachment $type hook arguments
+ * @since 1.2.6
+ */
+function attachment_common_link_message(&$Args) {
+ global $base_uri;
+ $Args[1]['attachment_common']['href'] = $base_uri . 'src/read_body.php?startMessage=' .
+ $Args[2] . '&passed_id=' . $Args[3] . '&mailbox=' . $Args[4] .
+ '&passed_ent_id=' . $Args[5] . '&override_type0=message&override_type1=rfc822';
-function attachment_common_link_html(&$Args)
-{
- $Args[1]['attachment_common']['href'] = '../src/download.php?startMessage=' .
- $Args[2] . '&passed_id=' . $Args[3] . '&mailbox=' . $Args[4] .
- '&passed_ent_id=' . $Args[5] . '&override_type0=text&override_type1=html';
-
- if ($Args[8] && $Args[9])
- $Args[1]['attachment_common']['href'] .= '&where=' .
- urlencode($Args[8]) . '&what=' . urlencode($Args[9]);
+ $Args[1]['attachment_common']['text'] = _("View");
- $Args[1]['attachment_common']['text'] = _("view");
-
- $Args[6] = $Args[1]['attachment_common']['href'];
+ $Args[6] = $Args[1]['attachment_common']['href'];
}
+/**
+ * Adds href and text keys to attachment_common array for html attachments
+ * @param array $Args attachment $type hook arguments
+ * @since 1.2.0
+ */
+function attachment_common_link_html(&$Args) {
+ global $base_uri;
+ sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
+
+ $Args[1]['attachment_common']['href'] = $base_uri . 'src/view_text.php?'. htmlspecialchars($QUERY_STRING).
+ /* why use the overridetype? can this be removed */
+ /* override_type might be needed only when we want view other type of messages as html */
+ '&override_type0=text&override_type1=html';
+ $Args[1]['attachment_common']['href'] =
+ set_url_var($Args[1]['attachment_common']['href'],
+ 'ent_id',$Args[5]);
-function attachment_common_link_image(&$Args)
-{
- global $attachment_common_show_images, $attachment_common_show_images_list;
-
- $info['passed_id'] = $Args[3];
- $info['mailbox'] = $Args[4];
- $info['ent_id'] = $Args[5];
-
- $attachment_common_show_images_list[] = $info;
-
- $Args[1]['attachment_common']['href'] = '../src/image.php?startMessage=' .
- $Args[2] . '&passed_id=' . $Args[3] . '&mailbox=' . $Args[4] .
- '&passed_ent_id=' . $Args[5];
-
- if ($Args[8] && $Args[9])
- $Args[1]['attachment_common']['href'] .= '&where=' .
- urlencode($Args[8]) . '&what=' . urlencode($Args[9]);
-
- $Args[1]['attachment_common']['text'] = _("view");
-
- $Args[6] = $Args[1]['attachment_common']['href'];
+ $Args[1]['attachment_common']['text'] = _("View");
+
+ $Args[6] = $Args[1]['attachment_common']['href'];
}
+/**
+ * Adds href and text keys to attachment_common array for image attachments
+ * @param array $Args attachment $type hook arguments
+ * @since 1.2.0
+ */
+function attachment_common_link_image(&$Args) {
+ global $attachment_common_show_images_list, $base_uri ;
+
+ sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
-function attachment_common_link_vcard(&$Args)
-{
- $Args[1]['attachment_common']['href'] = '../src/vcard.php?startMessage=' .
- $Args[2] . '&passed_id=' . $Args[3] . '&mailbox=' . $Args[4] .
- '&passed_ent_id=' . $Args[5];
+ $info['passed_id'] = $Args[3];
+ $info['mailbox'] = $Args[4];
+ $info['ent_id'] = $Args[5];
- if (isset($where) && isset($what))
- $Args[1]['attachment_common']['href'] .= '&where=' .
- urlencode($Args[8]) . '&what=' . urlencode($Args[9]);
+ $attachment_common_show_images_list[] = $info;
- $Args[1]['attachment_common']['text'] = _("Business Card");
+ $Args[1]['attachment_common']['href'] = $base_uri . 'src/image.php?'. htmlspecialchars($QUERY_STRING);
+ $Args[1]['attachment_common']['href'] =
+ set_url_var($Args[1]['attachment_common']['href'],
+ 'ent_id',$Args[5]);
- $Args[6] = $Args[1]['attachment_common']['href'];
+ $Args[1]['attachment_common']['text'] = _("View");
+
+ $Args[6] = $Args[1]['attachment_common']['href'];
}
+/**
+ * Adds href and text keys to attachment_common array for vcard attachments
+ * @param array $Args attachment $type hook arguments
+ * @since 1.2.0
+ */
+function attachment_common_link_vcard(&$Args) {
+ global $base_uri;
+ sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
+
+ $Args[1]['attachment_common']['href'] = $base_uri . 'src/vcard.php?'. htmlspecialchars($QUERY_STRING);
+ $Args[1]['attachment_common']['href'] =
+ set_url_var($Args[1]['attachment_common']['href'],
+ 'ent_id',$Args[5]);
+
+ $Args[1]['attachment_common']['text'] = _("View Business Card");
+
+ $Args[6] = $Args[1]['attachment_common']['href'];
+}
+
+/**
+ * Processes octet-stream attachments.
+ * Calls attachment_common-load_mime_types and attachment $type hooks.
+ * @param array $Args attachment $type hook arguments
+ * @since 1.2.0
+ */
+function attachment_common_octet_stream(&$Args) {
+ global $FileExtensionToMimeType;
+
+ do_hook('attachment_common-load_mime_types');
+
+ ereg('\\.([^\\.]+)$', $Args[7], $Regs);
+
+ $Ext = strtolower($Regs[1]);
+
+ if ($Ext == '' || ! isset($FileExtensionToMimeType[$Ext]))
+ return;
+
+ $Ret = do_hook('attachment ' . $FileExtensionToMimeType[$Ext],
+ $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6],
+ $Args[7], $Args[8], $Args[9]);
-function attachment_common_octet_stream(&$Args)
-{
- global $FileExtensionToMimeType;
-
- do_hook('attachment_common-load_mime_types');
-
- ereg('\\.([^\\.]+)$', $Args[7], $Regs);
-
- $Ext = strtolower($Regs[1]);
-
- if ($Ext == '' || ! isset($FileExtensionToMimeType[$Ext]))
- return;
-
- $Ret = do_hook('attachment ' . $FileExtensionToMimeType[$Ext],
- $Args[1], $Args[2], $Args[3], $Args[4], $Args[5], $Args[6],
- $Args[7], $Args[8], $Args[9]);
-
- foreach ($Ret as $a => $b) {
- $Args[$a] = $b;
- }
+ foreach ($Ret as $a => $b) {
+ $Args[$a] = $b;
+ }
}
-?>
+?>
\ No newline at end of file