setTable($dataTable); * echo $render; * * @package Piwik * @subpackage Piwik_DataTable */ abstract class Piwik_DataTable_Renderer { protected $table; protected $renderSubTables = false; public function setRenderSubTables($enableRenderSubTable) { $this->renderSubTables = (bool)$enableRenderSubTable; } protected function isRenderSubtables() { return $this->renderSubTables; } /** * Computes the dataTable output and returns the string/binary * * @return string */ abstract public function render(); /** * @see render() * @return string */ public function __toString() { return $this->render(); } /** * Set the DataTable to be rendered * @param Piwik_DataTable|Piwik_DataTable_Simple|Piwik_DataTable_Array $table to be rendered */ public function setTable($table) { if(!($table instanceof Piwik_DataTable) && !($table instanceof Piwik_DataTable_Array)) { throw new Exception("The renderer accepts only a Piwik_DataTable or an array of DataTable (Piwik_DataTable_Array) object."); } $this->table = $table; } /** * Returns the DataTable associated to the output format $name * * @throws exception If the renderer is unknown * @return Piwik_DataTable_Renderer */ static public function factory( $name ) { $name = ucfirst(strtolower($name)); $path = PIWIK_INCLUDE_PATH .'/core/DataTable/Renderer/'.$name.'.php'; $className = 'Piwik_DataTable_Renderer_' . $name; if( Piwik_Common::isValidFilename($name) && Zend_Loader::isReadable($path) ) { require_once $path; // prefixed by PIWIK_INCLUDE_PATH return new $className; } else { throw new Exception("Renderer format '$name' not valid. Try 'xml' or 'json' or 'csv' or 'html' or 'php' or 'original' instead."); } } }