Overview

Packages

  • Mime
    • Viewer

Classes

  • Horde_Mime_Viewer
  • Horde_Mime_Viewer_Audio
  • Horde_Mime_Viewer_Base
  • Horde_Mime_Viewer_Deb
  • Horde_Mime_Viewer_Default
  • Horde_Mime_Viewer_Enriched
  • Horde_Mime_Viewer_Exception
  • Horde_Mime_Viewer_Html
  • Horde_Mime_Viewer_Images
  • Horde_Mime_Viewer_Msexcel
  • Horde_Mime_Viewer_Mspowerpoint
  • Horde_Mime_Viewer_Msword
  • Horde_Mime_Viewer_Ooo
  • Horde_Mime_Viewer_Pdf
  • Horde_Mime_Viewer_Plain
  • Horde_Mime_Viewer_Rar
  • Horde_Mime_Viewer_Report
  • Horde_Mime_Viewer_Rfc822
  • Horde_Mime_Viewer_Richtext
  • Horde_Mime_Viewer_Rpm
  • Horde_Mime_Viewer_Rtf
  • Horde_Mime_Viewer_Security
  • Horde_Mime_Viewer_Simple
  • Horde_Mime_Viewer_Smil
  • Horde_Mime_Viewer_Syntaxhighlighter
  • Horde_Mime_Viewer_Tgz
  • Horde_Mime_Viewer_Tnef
  • Horde_Mime_Viewer_Translation
  • Horde_Mime_Viewer_Wordperfect
  • Horde_Mime_Viewer_Zip
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * The Horde_Mime_Viewer_Rar class renders out the contents of .rar archives
  4:  * in HTML format.
  5:  *
  6:  * Copyright 1999-2012 Horde LLC (http://www.horde.org/)
  7:  *
  8:  * See the enclosed file COPYING for license information (LGPL). If you
  9:  * did not receive this file, see http://www.horde.org/licenses/lgpl21.
 10:  *
 11:  * @author   Anil Madhavapeddy <anil@recoil.org>
 12:  * @author   Michael Cochrane <mike@graftonhall.co.nz>
 13:  * @category Horde
 14:  * @license  http://www.horde.org/licenses/lgpl21 LGPL 2.1
 15:  * @package  Mime_Viewer
 16:  */
 17: class Horde_Mime_Viewer_Rar extends Horde_Mime_Viewer_Base
 18: {
 19:     /**
 20:      * This driver's display capabilities.
 21:      *
 22:      * @var array
 23:      */
 24:     protected $_capability = array(
 25:         'full' => false,
 26:         'info' => true,
 27:         'inline' => false,
 28:         'raw' => false
 29:     );
 30: 
 31:     /**
 32:      * Metadata for the current viewer/data.
 33:      *
 34:      * @var array
 35:      */
 36:     protected $_metadata = array(
 37:         'compressed' => true,
 38:         'embedded' => false,
 39:         'forceinline' => false
 40:     );
 41: 
 42:    /**
 43:      * Constructor.
 44:      *
 45:      * @param Horde_Mime_Part $mime_part  The object with the data to be
 46:      *                                    rendered.
 47:      * @param array $conf                 Configuration:
 48:      * <pre>
 49:      * 'monospace' - (string) A class to use to display monospace text inline.
 50:      *               DEFAULT: Uses style="font-family:monospace"
 51:      * 'rar' - (Horde_Compress_Rar) A zip object.
 52:      * </pre>
 53:      */
 54:     public function __construct(Horde_Mime_Part $part, array $conf = array())
 55:     {
 56:         parent::__construct($part, $conf);
 57:     }
 58: 
 59:     /**
 60:      * Return the rendered information about the Horde_Mime_Part object.
 61:      *
 62:      * @return array  See parent::render().
 63:      * @throws Horde_Exception
 64:      */
 65:     protected function _renderInfo()
 66:     {
 67:         $charset = $this->getConfigParam('charset');
 68:         $contents = $this->_mimepart->getContents();
 69: 
 70:         if (!$this->getConfigParam('rar')) {
 71:             $this->setConfigParam('rar', Horde_Compress::factory('rar'));
 72:         }
 73:         $rarData = $this->getConfigParam('rar')->decompress($contents);
 74:         $fileCount = count($rarData);
 75: 
 76:         $name = $this->_mimepart->getName(true);
 77:         if (empty($name)) {
 78:             $name = Horde_Mime_Viewer_Translation::t("unnamed");
 79:         }
 80: 
 81:         $monospace = $this->getConfigParam('monospace');
 82: 
 83:         $text = '<table><tr><td align="left"><span ' .
 84:             ($monospace ? 'class="' . $monospace . '">' : 'style="font-family:monospace">') .
 85:             $this->_textFilter(Horde_Mime_Viewer_Translation::t("Archive Name") . ':  ' . $name, 'space2html', array(
 86:                 'charset' => $charset,
 87:                 'encode' => true,
 88:                 'encode_all' => true
 89:             )) . "\n" .
 90:             $this->_textFilter(Horde_Mime_Viewer_Translation::t("Archive File Size") . ': ' . strlen($contents) . ' bytes', 'space2html', array(
 91:                 'charset' => $charset,
 92:                 'encode' => true,
 93:                 'encode_all' => true
 94:             )) . "\n" .
 95:             $this->_textFilter(sprintf(Horde_Mime_Viewer_Translation::ngettext("File Count: %d file", "File Count: %d files", $fileCount), $fileCount), 'space2html', array(
 96:                 'charset' => $charset,
 97:                 'encode' => true,
 98:                 'encode_all' => true
 99:             )) .
100:             "\n\n" .
101:             $this->_textFilter(
102:                 Horde_String::pad(Horde_Mime_Viewer_Translation::t("File Name"), 50, ' ', STR_PAD_RIGHT) .
103:                 Horde_String::pad(Horde_Mime_Viewer_Translation::t("Attributes"), 10, ' ', STR_PAD_LEFT) .
104:                 Horde_String::pad(Horde_Mime_Viewer_Translation::t("Size"), 10, ' ', STR_PAD_LEFT) .
105:                 Horde_String::pad(Horde_Mime_Viewer_Translation::t("Modified Date"), 19, ' ', STR_PAD_LEFT) .
106:                 Horde_String::pad(Horde_Mime_Viewer_Translation::t("Method"), 10, ' ', STR_PAD_LEFT) .
107:                 Horde_String::pad(Horde_Mime_Viewer_Translation::t("Ratio"), 10, ' ', STR_PAD_LEFT),
108:                 'space2html',
109:                 array(
110:                     'charset' => $charset,
111:                     'encode' => true,
112:                     'encode_all' => true
113:                 )
114:             ) . "\n" . str_repeat('-', 109) . "\n";
115: 
116:         foreach ($rarData as $val) {
117:             $ratio = empty($val['size'])
118:                 ? 0
119:                 : 100 * ($val['csize'] / $val['size']);
120: 
121:             $text .= $this->_textFilter(
122:                 Horde_String::pad($val['name'], 50, ' ', STR_PAD_RIGHT) .
123:                 Horde_String::pad($val['attr'], 10, ' ', STR_PAD_LEFT) .
124:                 Horde_String::pad($val['size'], 10, ' ', STR_PAD_LEFT) .
125:                 Horde_String::pad(strftime("%d-%b-%Y %H:%M", $val['date']), 19, ' ', STR_PAD_LEFT) .
126:                 Horde_String::pad($val['method'], 10, ' ', STR_PAD_LEFT) .
127:                 Horde_String::pad(sprintf("%1.1f%%", $ratio), 10, ' ', STR_PAD_LEFT),
128:                 'space2html',
129:                 array(
130:                     'encode' => true,
131:                     'encode_all' => true
132:                 )
133:             ) . "\n";
134:         }
135: 
136:         return $this->_renderReturn(
137:             nl2br($text . str_repeat('-', 106) . "\n</span></td></tr></table>"),
138:             'text/html; charset=' . $charset
139:         );
140:     }
141: 
142: }
143: 
API documentation generated by ApiGen