Update TNEF Viewer.
authorMichael M Slusarz <slusarz@curecanti.org>
Wed, 12 Nov 2008 18:51:00 +0000 (11:51 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Wed, 12 Nov 2008 18:51:00 +0000 (11:51 -0700)
framework/Mime/lib/Horde/Mime/Viewer/tnef.php
imp/lib/Mime/Viewer/tnef.php

index bc26393..224a557 100644 (file)
 class Horde_Mime_Viewer_tnef extends Horde_Mime_Viewer_Driver
 {
     /**
-     * Render out the current tnef data.
+     * Can this driver render various views?
      *
-     * @param array $params  Any parameters the viewer may need.
+     * @var boolean
+     */
+    protected $_capability = array(
+        'embedded' => false,
+        'full' => true,
+        'info' => false,
+        'inline' => true
+    );
+
+    /**
+     * Return the full rendered version of the Horde_Mime_Part object.
      *
-     * @return string  The rendered contents.
+     * @return array  See Horde_Mime_Viewer_Driver::render().
      */
-    public function render($params = array())
+    protected function _render()
     {
-        require_once 'Horde/Compress.php';
+        $ret = $this->_renderInline();
+        if (!empty($ret)) {
+            $ret['data'] = '<html><body>' . $ret['data'] . '</body></html>';
+        }
+        return $ret;
+    }
 
+    /**
+     * Return the rendered inline version of the Horde_Mime_Part object.
+     *
+     * @return array  See Horde_Mime_Viewer_Driver::render().
+     */
+    protected function _renderInline()
+    {
+        require_once 'Horde/Compress.php';
         $tnef = &Horde_Compress::singleton('tnef');
 
         $data = '<table border="1">';
-        $info = $tnef->decompress($this->mime_part->getContents());
+        $info = $tnef->decompress($this->_mimepart->getContents());
         if (empty($info) || is_a($info, 'PEAR_Error')) {
             $data .= '<tr><td>' . _("MS-TNEF Attachment contained no data.") . '</td></tr>';
         } else {
@@ -39,16 +62,9 @@ class Horde_Mime_Viewer_tnef extends Horde_Mime_Viewer_Driver
         }
         $data .= '</table>';
 
-        return $data;
-    }
-
-    /**
-     * Return the MIME content type of the rendered content.
-     *
-     * @return string  The content type of the output.
-     */
-    public function getType()
-    {
-        return 'text/html; charset=' . NLS::getCharset();
+        return array(
+            'data' => $data,
+            'type' => 'text/html; charset=' . NLS::getCharset()
+        );
     }
 }
index 2f30615..bd42872 100644 (file)
 class IMP_Horde_Mime_Viewer_tnef extends Horde_Mime_Viewer_tnef
 {
     /**
-     * The contentType of the attachment.
+     * Can this driver render various views?
      *
-     * @var string
+     * @var boolean
      */
-    protected $_contentType = 'application/octet-stream';
+    protected $_capability = array(
+        'embedded' => false,
+        'full' => true,
+        'info' => true,
+        'inline' => false
+    );
 
     /**
-     * Render out the currently set contents.
+     * Return the full rendered version of the Horde_Mime_Part object.
      *
-     * @param array $params  An array with a reference to a MIME_Contents
-     *                       object.
+     * URL parameters used by this function:
+     * <pre>
+     * 'tnef_attachment' - (integer) The TNEF attachment to download.
+     * </pre>
      *
-     * @return string  Either the list of tnef files or the data of an
-     *                 individual tnef file.
+     * @return array  See Horde_Mime_Viewer_Driver::render().
      */
-    public function render($params)
+    protected function _render()
     {
-        $contents = &$params[0];
-
-        $text = '';
+        if (!Util::getFormData('tnef_attachment')) {
+            $ret = $this->_renderInfo();
+            $ret['data'] = '<html><body>' . $ret['data'] . '</body></html>';
+            return $ret;
+        }
 
         /* Get the data from the attachment. */
-        $tnefData = $this->_getSubparts();
+        $tnef = &Horde_Compress::singleton('tnef');
+        $tnefData = $tnef->decompress($this->_mimepart->getContents());
 
         /* Display the requested file. Its position in the $tnefData
-           array can be found in 'tnef_attachment'. */
-        if (Util::getFormData('tnef_attachment')) {
-            $tnefKey = Util::getFormData('tnef_attachment') - 1;
-            /* Verify that the requested file exists. */
-            if (isset($tnefData[$tnefKey])) {
-                $text = $tnefData[$tnefKey]['stream'];
-                if (empty($text)) {
-                    $text = $this->formatStatusMsg(_("Could not extract the requested file from the MS-TNEF attachment."));
-                } else {
-                    $this->mime_part->setName($tnefData[$tnefKey]['name']);
-                    $this->mime_part->setType($tnefData[$tnefKey]['type'] . '/' . $tnefData[$tnefKey]['subtype']);
-                }
-            } else {
-                $text = $this->formatStatusMsg(_("The requested file does not exist in the MS-TNEF attachment."));
+         * array can be found in 'tnef_attachment'. */
+        $tnefKey = Util::getFormData('tnef_attachment') - 1;
+
+        /* Verify that the requested file exists. */
+        if (isset($tnefData[$tnefKey])) {
+            $text = $tnefData[$tnefKey]['stream'];
+            if (!empty($text)) {
+                return array(
+                    'data' => $text,
+                    'name' => $tnefData[$tnefKey]['name'],
+                    'type' => $tnefData[$tnefKey]['type'] . '/' . $tnefData[$tnefKey]['subtype']
+                );
             }
-        } else {
-            $text = $this->renderAttachmentInfo(array($params[0]));
         }
 
-        return $text;
+        // TODO: Error reporting
+        return array();
     }
 
     /**
-     * Render out TNEF attachment information.
+     * Return the rendered information about the Horde_Mime_Part object.
      *
-     * @param array $params  An array with a reference to a MIME_Contents
-     *                       object.
-     *
-     * @return string  The rendered text in HTML.
+     * @return array  See Horde_Mime_Viewer_Driver::render().
      */
-    public function renderAttachmentInfo($params)
+    protected function _renderInfo()
     {
-        $contents = &$params[0];
-
-        $text = '';
-
-        /* Make sure the contents are in the MIME_Part object. */
-        if (!$this->mime_part->getContents()) {
-            $this->mime_part->setContents($contents->getBodyPart($this->mime_part->getMIMEId()));
-        }
-
         /* Get the data from the attachment. */
-        $tnefData = $this->_getSubparts();
+        $tnef = &Horde_Compress::singleton('tnef');
+        $tnefData = $tnef->decompress($this->_mimepart->getContents());
+
+        $data = '';
 
         if (!count($tnefData)) {
-            $text = $this->formatStatusMsg(_("No attachments found."));
+            $status = array(
+                'text' => array(_("No attachments found."))
+            );
         } else {
-            $text = $this->formatStatusMsg(_("The following files were attached to this part:")) . '<br />';
-            foreach ($tnefData as $key => $data) {
-                $temp_part = $this->mime_part;
+            $status = array(
+                'text' => array(_("The following files were attached to this part:"))
+            );
+
+            reset($tnefData);
+            while (list($key, $data) = $tnefData) {
+                $temp_part = $this->_mimepart;
                 $temp_part->setName($data['name']);
                 $temp_part->setDescription($data['name']);
 
                 /* Short-circuit MIME-type guessing for winmail.dat parts;
-                   we're showing enough entries for them already. */
+                 * we're showing enough entries for them already. */
                 $type = $data['type'] . '/' . $data['subtype'];
-                if (($type == 'application/octet-stream') ||
-                    ($type == 'application/base64')) {
+                if (in_array($type, array('application/octet-stream', 'application/base64'))) {
                     $type = Horde_Mime_Magic::filenameToMIME($data['name']);
                 }
                 $temp_part->setType($type);
 
-                $link = $contents->linkView($temp_part, 'view_attach', htmlspecialchars($data['name']), array('jstext' => sprintf(_("View %s"), $data['name']), 'viewparams' => array('tnef_attachment' => ($key + 1))));
-                $text .= _("Attached File:") . '&nbsp;&nbsp;' . $link . '&nbsp;&nbsp;(' . $data['type'] . '/' . $data['subtype'] . ")<br />\n";
+                $link = $this->_params['contents']->linkView($temp_part, 'view_attach', htmlspecialchars($data['name']), array('jstext' => sprintf(_("View %s"), $data['name']), 'params' => array('tnef_attachment' => $key + 1)));
+                $data .= _("Attached File:") . '&nbsp;&nbsp;' . $link . '&nbsp;&nbsp;(' . $data['type'] . '/' . $data['subtype'] . ")<br />\n";
             }
         }
 
-        return $text;
-    }
-
-    /**
-     * List any embedded attachments in the TNEF part.
-     *
-     * @return array  An array of any embedded attachments.
-     */
-    protected function _getSubparts()
-    {
-        $tnef = &Horde_Compress::singleton('tnef');
-        return $tnef->decompress($this->mime_part->transferDecode());
-    }
-
-    /**
-     * Return the content-type.
-     *
-     * @return string  The content-type of the output.
-     */
-    public function getType()
-    {
-        if (Util::getFormData('tnef_attachment')) {
-            return $this->_contentType;
-        } else {
-            return 'text/html; charset=' . NLS::getCharset();
-        }
+        return array(
+            'data' => $data,
+            'status' => array($status),
+            'type' => 'text/html; charset=' . NLS::getCharset()
+        );
     }
 }