blob: 12e0c34d2f7c77b1ecc967b70da589f1ffbe57f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
* @version $Id$
*
* @package Piwik_DataTable
*/
/**
* A DataTable Renderer can produce an output given a DataTable object.
* All new Renderers must be copied in DataTable/Renderer and added to the factory() method.
* To use a renderer, simply do:
* $render = new Piwik_DataTable_Renderer_Xml( $myTable );
* echo $render;
*
* @package Piwik_DataTable
* @subpackage Piwik_DataTable_Renderer
*/
abstract class Piwik_DataTable_Renderer
{
protected $table;
/**
* Builds the renderer.
* Works with any kind of DataTable if the renderer used handles this DataTable.
*
* @param Piwik_DataTable|Piwik_DataTable_Simple|Piwik_DataTable_Array $table to be rendered
*/
function __construct($table = null)
{
if(!is_null($table))
{
$this->setTable($table);
}
}
/**
* 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 . "/modules/DataTable/Renderer/".$name.".php";
$className = 'Piwik_DataTable_Renderer_' . $name;
if( Piwik_Common::isValidFilename($name)
&& is_file($path)
)
{
require_once $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.");
}
}
}
|