From: Michael M Slusarz Date: Wed, 12 Nov 2008 21:39:51 +0000 (-0700) Subject: Require (again) a Horde_Mime_Part object when creating X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=bcb598283a5360288b07bf97929c62f1f9ad05ea;p=horde.git Require (again) a Horde_Mime_Part object when creating Bite the bullet and required the Horde_Mime_Part object when creating a Horde_Mime_Viewer instance. Especially for embedded parts, or for multiparts that may have to recursively look through the subparts, the information stored in the MIME part may be needed for things like determining whether a driver can display a part with the given mode. --- diff --git a/framework/Mime/lib/Horde/Mime/Viewer.php b/framework/Mime/lib/Horde/Mime/Viewer.php index 9eec8882c..b2d5bae82 100644 --- a/framework/Mime/lib/Horde/Mime/Viewer.php +++ b/framework/Mime/lib/Horde/Mime/Viewer.php @@ -36,18 +36,25 @@ class Horde_Mime_Viewer * Attempts to return a concrete Horde_Mime_Viewer_* object based on the * MIME type. * - * @param string $mime_type The MIME type. + * @param Horde_Mime_Part &$mime_part Reference to an object with the + * information to be rendered. + * @param string $mime_type The MIME type (overrides the value + * in the MIME part). * * @return Horde_Mime_Viewer The Horde_Mime_Viewer object, or false on * error. */ - static final public function factory($mime_type) + static final public function factory(&$mime_part, $mime_type = null) { + if (is_null($mime_type)) { + $mime_type = $mime_part->getType(); + } + /* Spawn the relevant driver, and return it (or false on failure). */ if (($ob = self::_getDriver($mime_type, $GLOBALS['registry']->getApp())) && self::_resolveDriver($ob['driver'], $ob['app']) && class_exists($ob['class'])) { - return new $ob['class'](self::$_config['mime_drivers'][$ob['app']][$ob['driver']]); + return new $ob['class']($mime_part, self::$_config['mime_drivers'][$ob['app']][$ob['driver']]); } return false; diff --git a/framework/Mime/lib/Horde/Mime/Viewer/Driver.php b/framework/Mime/lib/Horde/Mime/Viewer/Driver.php index 22140054c..dc469215d 100644 --- a/framework/Mime/lib/Horde/Mime/Viewer/Driver.php +++ b/framework/Mime/lib/Horde/Mime/Viewer/Driver.php @@ -49,10 +49,14 @@ class Horde_Mime_Viewer_Driver /** * Constructor. * - * @param array $conf Configuration specific to the driver. + * @param Horde_Mime_Part &$mime_part Reference to an object with the + * information to be rendered. + * @param array $conf Configuration specific to the + * driver. */ - function __construct($conf = array()) + function __construct(&$mime_part, $conf = array()) { + $this->_mimepart = $mime_part; $this->_conf = $conf; } diff --git a/framework/Mime/lib/Horde/Mime/Viewer/report.php b/framework/Mime/lib/Horde/Mime/Viewer/report.php index 85c6956be..2393f9e27 100644 --- a/framework/Mime/lib/Horde/Mime/Viewer/report.php +++ b/framework/Mime/lib/Horde/Mime/Viewer/report.php @@ -14,16 +14,30 @@ class Horde_Mime_Viewer_report extends Horde_Mime_Viewer_Driver { /** - * Can this driver render various views? + * Can this driver render the the data? * - * @var boolean + * @param string $mode The mode. Either 'full', 'inline', or 'info'. + * + * @return boolean True if the driver can render the data for the given + * view. */ - protected $_capability = array( - 'embedded' => false, - 'full' => true, - 'info' => false, - 'inline' => true, - ); + public function canRender($mode) + { + $viewer = $this->_getViewer(); + return $viewer ? $viewer->canRender($mode) : false; + } + + /** + * Does this MIME part possibly contain embedded MIME parts? + * + * @return boolean True if this driver supports parsing embedded MIME + * parts. + */ + public function embeddedMimeParts() + { + $viewer = $this->_getViewer(); + return $viewer ? $viewer->embeddedMimeParts() : false; + } /** * Return the full rendered version of the Horde_Mime_Part object. @@ -48,24 +62,31 @@ class Horde_Mime_Viewer_report extends Horde_Mime_Viewer_Driver /** * Return an HTML rendered version of the part. * - * @param boolean + * @param boolean Viewing inline? * * @return array See Horde_Mime_Viewer_Driver::render(). */ protected function _toHTML($inline) { + $viewer = $this->_getViewer(); + return $viewer + ? $viewer->render($inline ? 'inline' : 'full') + : false; + } + + /** + * Return the underlying MIME Viewer for this part. + * + * @return mixed A Horde_Mime_Viewer object, or false if not found. + */ + protected function _getViewer() + { if (!($type = $this->_mimepart->getContentTypeParameter('report-type'))) { - return array(); + return false; } - $viewer = Horde_Mime_Viewer::factory('message/' . String::lower($type)); - if (!$viewer) { - return array(); - } - $viewer->setMIMEPart($this->_mimepart); + $viewer = Horde_Mime_Viewer::factory($this->_mimepart, 'message/' . String::lower($type)); $viewer->setParams($this->_params); - - /* Render using the loaded Horde_Mime_Viewer object. */ - return $viewer->render($inline ? 'inline' : 'full'); + return $viewer; } }