phpDocumentor updates
[squirrelmail.git] / functions / attachment_common.php
index 1f69325d6e990dde2118fbb0b6bc6e94f00bb751..8a7db6346157eb122b188faa5cb5a6fdd9c6347b 100644 (file)
 /**
  * attachment_common.php
  *
- * Copyright (c) 1999-2002 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.
  *
- * $Id$
+ * @copyright © 1999-2005 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
  */
 
-/*****************************************************************/
-/*** THIS FILE NEEDS TO HAVE ITS FORMATTING FIXED!!!           ***/
-/*** PLEASE DO SO AND REMOVE THIS COMMENT SECTION.             ***/
-/***    + Base level indent should begin at left margin, as    ***/
-/***      the $attachment_common_show_images_list stuff below. ***/
-/***    + All identation should consist of four space blocks   ***/
-/***    + Tab characters are evil.                             ***/
-/***    + all comments should use "slash-star ... star-slash"  ***/
-/***      style -- no pound characters, no slash-slash style   ***/
-/***    + FLOW CONTROL STATEMENTS (if, while, etc) SHOULD      ***/
-/***      ALWAYS USE { AND } CHARACTERS!!!                     ***/
-/***    + Please use ' instead of ", when possible. Note "     ***/
-/***      should always be used in _( ) function calls.        ***/
-/*** Thank you for your help making the SM code more readable. ***/
-/*****************************************************************/
+/** @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;
-  $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) {
+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',
+                                 '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');
+            register_attachment_common('image/gif',       'link_image');
         elseif (($val == 'image/jpeg' || $val == 'image/pjpeg') 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/jpeg',      'link_image');
+            register_attachment_common('image/pjpeg',     'link_image');
+            // register_attachment_common('image/jpg',       '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/jpeg',  'link_image');
+                register_attachment_common('image/pjpeg', 'link_image');
+                // register_attachment_common('image/jpg',       '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) {
+    /* 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 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'] = 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]);
 
-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'];
+    /* 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) {
+    $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';
 
-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) {
+    sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
+
+    $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'],
+          'ent_id',$Args[5]);
+
+    $Args[1]['attachment_common']['text'] = _("View");
 
-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[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;
+
+    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'] = 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'];
+    $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) {
+    sqgetGlobalVar('QUERY_STRING', $QUERY_STRING, SQ_SERVER);
+
+    $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'] = _("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