* 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;
/**
* 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;
}
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.
/**
* 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;
}
}