/**
* attachment_common.php
*
- * Copyright (c) 1999-2004 The SquirrelMail Project Team
- * Licensed under the GNU GPL. For full terms see the file COPYING.
- *
* 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
*/
-/**
- * FIXME Needs phpDocumentator style documentation
- */
-require_once(SM_PATH . 'functions/global.php');
+/** @ignore */
+if (! defined('SM_PATH')) define('SM_PATH','../');
+
+/** sqgetGlobalVar() */
+include_once(SM_PATH . 'functions/global.php');
+/** sqm_baseuri() */
+include_once(SM_PATH . 'functions/display_messages.php');
global $attachment_common_show_images_list;
$attachment_common_show_images_list = array();
global $FileExtensionToMimeType, $attachment_common_types;
+/**
+ * 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
+ elseif (($val == 'image/jpeg' || $val == 'image/pjpeg' || $val == 'image/jpg') and
(!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/png', 'link_image');
elseif ($val == 'image/x-xbitmap')
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 HTML */
register_attachment_common('text/html', 'link_html');
-
/* Register vcards */
register_attachment_common('text/x-vcard', 'link_vcard');
register_attachment_common('text/directory', 'link_vcard');
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'] =
'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) {
/* If there is a text attachment, we would like to create a "View" button
that links to the text attachment viewer.
$Args[1]['attachment_common']['href'] = Where it links to */
sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
- $Args[1]['attachment_common']['href'] = SM_PATH . 'src/view_text.php?'. $QUERY_STRING;
+ // if htmlspecialchars() breaks something - find other way to encode & in url.
+ $Args[1]['attachment_common']['href'] = sqm_baseuri() . 'src/view_text.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'];
}
+/**
+ * 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) {
- $Args[1]['attachment_common']['href'] = SM_PATH . 'src/read_body.php?startMessage=' .
+ $Args[1]['attachment_common']['href'] = sqm_baseuri() . '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';
$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) {
sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
- $Args[1]['attachment_common']['href'] = SM_PATH . 'src/view_text.php?'. $QUERY_STRING.
- /* why use the overridetype? can this be removed */
+ $Args[1]['attachment_common']['href'] = sqm_baseuri() . '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'],
$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, $attachment_common_show_images_list;
+ global $attachment_common_show_images_list;
sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
$attachment_common_show_images_list[] = $info;
- $Args[1]['attachment_common']['href'] = SM_PATH . 'src/image.php?'. $QUERY_STRING;
+ $Args[1]['attachment_common']['href'] = sqm_baseuri() . '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'];
}
-
+/**
+ * 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) {
sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
- $Args[1]['attachment_common']['href'] = SM_PATH . 'src/vcard.php?'. $QUERY_STRING;
+ $Args[1]['attachment_common']['href'] = sqm_baseuri() . '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'] = _("Business Card");
+ $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;