Support Mime Viewer raw render output
authorMichael M Slusarz <slusarz@curecanti.org>
Mon, 9 Nov 2009 22:23:05 +0000 (15:23 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 10 Nov 2009 16:48:38 +0000 (09:48 -0700)
15 files changed:
imp/lib/Contents.php
imp/lib/Mime/Viewer/Alternative.php
imp/lib/Mime/Viewer/Appledouble.php
imp/lib/Mime/Viewer/Html.php
imp/lib/Mime/Viewer/Images.php
imp/lib/Mime/Viewer/Itip.php
imp/lib/Mime/Viewer/Mdn.php
imp/lib/Mime/Viewer/Partial.php
imp/lib/Mime/Viewer/Pdf.php
imp/lib/Mime/Viewer/Pgp.php
imp/lib/Mime/Viewer/Related.php
imp/lib/Mime/Viewer/Smime.php
imp/lib/Mime/Viewer/Status.php
imp/lib/Mime/Viewer/Tnef.php
imp/view.php

index 1cda133..e384271 100644 (file)
@@ -32,6 +32,7 @@ class IMP_Contents
     const RENDER_INLINE_DISP_NO = 4;
     const RENDER_INFO = 8;
     const RENDER_INLINE_AUTO = 16;
+    const RENDER_RAW = 32;
 
     /**
      * Flag to indicate whether the last call to getBodypart() returned
@@ -445,6 +446,10 @@ class IMP_Contents
         case self::RENDER_INFO:
             $textmode = 'info';
             break;
+
+        case self::RENDER_RAW:
+            $textmode = 'raw';
+            break;
         }
 
         $ret = $viewer->render($textmode);
@@ -471,7 +476,7 @@ class IMP_Contents
                     )
                 );
             }
-        } elseif (($textmode != 'full') &&
+        } elseif (!in_array($textmode, array('full', 'raw')) &&
                   ($mime_part->getPrimaryType() == 'text')) {
             /* If this is a text/* part, AND the browser does not support
              * UTF-8, give the user a link to open the part in a new window
@@ -911,6 +916,10 @@ class IMP_Contents
             $mask |= self::RENDER_INLINE | self::RENDER_INFO;
         }
 
+        if (($mask & self::RENDER_RAW) && $viewer->canRender('raw')) {
+            return self::RENDER_RAW;
+        }
+
         if (($mask & self::RENDER_FULL) && $viewer->canRender('full')) {
             return self::RENDER_FULL;
         }
index e1e0090..c65ab7b 100644 (file)
@@ -24,6 +24,7 @@ class IMP_Horde_Mime_Viewer_Alternative extends Horde_Mime_Viewer_Driver
         'full' => true,
         'info' => false,
         'inline' => true,
+        'raw' => false
     );
 
     /**
index 06dad0d..c81676f 100644 (file)
@@ -23,7 +23,8 @@ class IMP_Horde_Mime_Viewer_Appledouble extends Horde_Mime_Viewer_Driver
         'forceinline' => true,
         'full' => false,
         'info' => true,
-        'inline' => true
+        'inline' => true,
+        'raw' => false
     );
 
     /**
index fed3e47..29e9624 100644 (file)
@@ -25,7 +25,8 @@ class IMP_Horde_Mime_Viewer_Html extends Horde_Mime_Viewer_Html
         'forceinline' => false,
         'full' => true,
         'info' => true,
-        'inline' => true
+        'inline' => true,
+        'raw' => false
     );
 
     /**
index d647e79..5444fe7 100644 (file)
@@ -23,7 +23,8 @@ class IMP_Horde_Mime_Viewer_Images extends Horde_Mime_Viewer_Images
         'forceinline' => false,
         'full' => true,
         'info' => true,
-        'inline' => true
+        'inline' => true,
+        'raw' => false
     );
 
     /**
index 4eedbeb..2df4ca2 100644 (file)
@@ -25,7 +25,8 @@ class IMP_Horde_Mime_Viewer_Itip extends Horde_Mime_Viewer_Driver
         'forceinline' => false,
         'full' => true,
         'info' => false,
-        'inline' => true
+        'inline' => true,
+        'raw' => false
     );
 
     /**
index ddd73d1..ef29826 100644 (file)
@@ -24,6 +24,7 @@ class IMP_Horde_Mime_Viewer_Mdn extends Horde_Mime_Viewer_Driver
         'full' => false,
         'info' => true,
         'inline' => true,
+        'raw' => false
     );
 
     /**
index 9f5b24b..1568798 100644 (file)
@@ -24,6 +24,7 @@ class IMP_Horde_Mime_Viewer_Partial extends Horde_Mime_Viewer_Driver
         'full' => false,
         'info' => false,
         'inline' => false,
+        'raw' => false
     );
 
     /**
index c091849..f07c70e 100644 (file)
@@ -23,7 +23,8 @@ class IMP_Horde_Mime_Viewer_Pdf extends Horde_Mime_Viewer_Pdf
         'forceinline' => false,
         'full' => true,
         'info' => true,
-        'inline' => false
+        'inline' => false,
+        'raw' => false
     );
 
     /**
index 583404f..4a8f6d9 100644 (file)
@@ -32,7 +32,8 @@ class IMP_Horde_Mime_Viewer_Pgp extends Horde_Mime_Viewer_Driver
         'forceinline' => true,
         'full' => false,
         'info' => false,
-        'inline' => true
+        'inline' => true,
+        'raw' => false
     );
 
     /**
index 7c073c7..ba3f446 100644 (file)
@@ -24,6 +24,7 @@ class IMP_Horde_Mime_Viewer_Related extends Horde_Mime_Viewer_Driver
         'full' => true,
         'info' => false,
         'inline' => true,
+        'raw' => false
     );
 
     /**
index d60e4b7..fd4fad5 100644 (file)
@@ -35,7 +35,8 @@ class IMP_Horde_Mime_Viewer_Smime extends Horde_Mime_Viewer_Driver
         'forceinline' => true,
         'full' => false,
         'info' => false,
-        'inline' => true
+        'inline' => true,
+        'raw' => false
     );
 
     /**
index c4fe0a6..fb67b26 100644 (file)
@@ -24,6 +24,7 @@ class IMP_Horde_Mime_Viewer_Status extends Horde_Mime_Viewer_Driver
         'full' => false,
         'info' => true,
         'inline' => true,
+        'raw' => false
     );
 
     /**
index 220d1ae..7117a04 100644 (file)
@@ -23,7 +23,8 @@ class IMP_Horde_Mime_Viewer_Tnef extends Horde_Mime_Viewer_Tnef
         'forceinline' => true,
         'full' => true,
         'info' => true,
-        'inline' => false
+        'inline' => false,
+        'raw' => false
     );
 
     /**
index 991dbf5..a53a484 100644 (file)
@@ -107,6 +107,12 @@ case 'download_render':
     switch ($actionID) {
     case 'download_attach':
         $mime = $contents->getMIMEPart($id);
+        if ($contents->canDisplay($id, IMP_Contents::RENDER_RAW)) {
+            $render = $contents->renderMIMEPart($id, IMP_Contents::RENDER_RAW);
+            reset($render);
+            $mime->setContents($render[key($render)]['data']);
+        }
+
         if (!$name = $mime->getName(true)) {
             $name = _("unnamed");
         }