diff options
author | matt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105> | 2008-01-17 19:32:37 +0300 |
---|---|---|
committer | matt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105> | 2008-01-17 19:32:37 +0300 |
commit | 35d7335b376df01ff5b95e839513f8092b8d4fa9 (patch) | |
tree | 03f8a918d8218ea33efbcc41e882cf49e96d8c5e /modules/DataTable/Renderer | |
parent | debae74ffed006d15487311105d4b98a70bb90d8 (diff) |
Work in progress....
Diffstat (limited to 'modules/DataTable/Renderer')
-rw-r--r-- | modules/DataTable/Renderer/Csv.php | 23 | ||||
-rw-r--r-- | modules/DataTable/Renderer/Html.php | 5 | ||||
-rw-r--r-- | modules/DataTable/Renderer/Json.php | 3 | ||||
-rw-r--r-- | modules/DataTable/Renderer/Php.php | 43 | ||||
-rw-r--r-- | modules/DataTable/Renderer/Xml.php | 94 |
5 files changed, 148 insertions, 20 deletions
diff --git a/modules/DataTable/Renderer/Csv.php b/modules/DataTable/Renderer/Csv.php index be35d4a270..a1d368cd9a 100644 --- a/modules/DataTable/Renderer/Csv.php +++ b/modules/DataTable/Renderer/Csv.php @@ -29,10 +29,13 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer public $separator = ','; public $exportDetail = true; public $exportIdSubtable = true; - + public $lineEnd = "\n"; + function __construct($table = null) { parent::__construct($table); + + } function render() @@ -47,6 +50,13 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer // keep track of all the existing columns in the csv file $allColumns = array(); + if($table instanceof Piwik_DataTable_Simple + && $table->getRowsCount() ==1) + { + $str = 'value' . $this->lineEnd . $table->getRowFromId(0)->getColumn('value'); + return $this->output($str); + } + foreach($table->getRows() as $row) { $csvRow = array(); @@ -106,7 +116,9 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer // specific case, we have only one column and this column wasn't named properly (indexed by a number)
// we don't print anything in the CSV file => an empty line
- if(sizeof($allColumns) == 1 && reset($allColumns) && !is_string(key($allColumns)) )
+ if(sizeof($allColumns) == 1 + && reset($allColumns) + && !is_string(key($allColumns)) )
{
$str .= '';
}
@@ -123,7 +135,7 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer // we render the CSV foreach($csv as $theRow) { - $rowStr = "\n"; + $rowStr = $this->lineEnd; foreach($allColumns as $columnName => $true) { $rowStr .= $theRow[$columnName] . $this->separator; @@ -134,6 +146,11 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer $str .= $rowStr; } + return $this->output($str); + } + + protected function output( $str ) + { // silent fail otherwise unit tests fail @header("Content-type: application/vnd.ms-excel"); @header("Content-Disposition: attachment; filename=piwik-report-export.csv"); diff --git a/modules/DataTable/Renderer/Html.php b/modules/DataTable/Renderer/Html.php index 5e0c076161..34541bef7f 100644 --- a/modules/DataTable/Renderer/Html.php +++ b/modules/DataTable/Renderer/Html.php @@ -34,6 +34,11 @@ class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer { return "<b><i>Empty table</i></b> <br>\n"; } + if($table instanceof Piwik_DataTable_Simple + && $table->getRowsCount() ==1) + { + $table->deleteColumn('label'); + } static $depth=0; $i = 1;
diff --git a/modules/DataTable/Renderer/Json.php b/modules/DataTable/Renderer/Json.php index f2eca8f001..6c1a83800b 100644 --- a/modules/DataTable/Renderer/Json.php +++ b/modules/DataTable/Renderer/Json.php @@ -31,8 +31,7 @@ class Piwik_DataTable_Renderer_Json extends Piwik_DataTable_Renderer protected function renderTable($table) { $renderer = new Piwik_DataTable_Renderer_Php($table, $serialize = false); - $array = $renderer->flatRender();
-
+ $array = $renderer->flatRender();
$str = json_encode($array); return $str; } diff --git a/modules/DataTable/Renderer/Php.php b/modules/DataTable/Renderer/Php.php index 6b32eea379..0b8d1529b5 100644 --- a/modules/DataTable/Renderer/Php.php +++ b/modules/DataTable/Renderer/Php.php @@ -56,17 +56,40 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer * @return array Php array representing the 'flat' version of the datatable
*
*/
- public function flatRender()
- {
+ public function flatRender( $dataTable = null )
+ { + if(is_null($dataTable)) + { + $dataTable = $this->table; + } + + if($dataTable instanceof Piwik_DataTable_Array) + { + $flatArray = array(); + foreach($dataTable->getArray() as $keyName => $table) + { + $flatArray[$keyName] = $this->flatRender($table); + } + return $flatArray; + } +
// A DataTable_Simple is already flattened so no need to do some crazy stuff to convert it
- if($this->table instanceof Piwik_DataTable_Simple)
+ else if($dataTable instanceof Piwik_DataTable_Simple)
{
- $flatArray = $this->renderSimpleTable($this->table);
+ $flatArray = $this->renderSimpleTable($dataTable); + + // if we return only one numeric value then we print out the result in a simple <result> tag + // keep it simple! + if(count($flatArray) == 1) + { + $flatArray = current($flatArray); + } +
}
// A normal DataTable needs to be handled specifically
else
{
- $array = $this->renderTable($this->table);
+ $array = $this->renderTable($dataTable);
$flatArray = array();
foreach($array as $row)
{
@@ -87,9 +110,13 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer return $flatArray;
}
- public function render()
- {
- $toReturn = $this->flatRender();
+ public function render( $dataTable = null)
+ { + if(is_null($dataTable)) + { + $dataTable = $this->table; + }
+ $toReturn = $this->flatRender( $dataTable );
return $toReturn;
}
diff --git a/modules/DataTable/Renderer/Xml.php b/modules/DataTable/Renderer/Xml.php index 060aafe968..61800f7b85 100644 --- a/modules/DataTable/Renderer/Xml.php +++ b/modules/DataTable/Renderer/Xml.php @@ -36,8 +36,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer $renderer = new Piwik_DataTable_Renderer_Php($table, $serialize = false); $array = $renderer->flatRender(); -// var_dump($array); exit;
- +// var_dump($array); exit; $options = array( XML_SERIALIZER_OPTION_INDENT => ' ', @@ -45,6 +44,82 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer XML_SERIALIZER_OPTION_ROOT_NAME => 'row', XML_SERIALIZER_OPTION_MODE => XML_SERIALIZER_MODE_SIMPLEXML ); + $rootName = 'result'; + + // case DataTable_Array + if($table instanceof Piwik_DataTable_Array) + { + + // CASE 1 + //array + // 'day1' => string '14' (length=2) + // 'day2' => string '6' (length=1) + $firstTable = current($array); + if(!is_array( $firstTable )) + { + $xml = "<results>\n"; + $nameDescriptionAttribute = $table->getNameKey(); + foreach($array as $valueAttribute => $value) + { + $xml .= "\t<result $nameDescriptionAttribute=\"$valueAttribute\">$value</result>\n"; + } + $xml .= "</results>"; + return $this->output($xml); + } + + $subTables = $table->getArray(); + $firstTable = current($subTables); + + // CASE 2 + //array + // 'day1' => + // array + // 'nb_uniq_visitors' => string '18' + // 'nb_visits' => string '101' + // 'day2' => + // array + // 'nb_uniq_visitors' => string '28' + // 'nb_visits' => string '11' + if( $firstTable instanceof Piwik_DataTable_Simple) + { + $xml = "<results>\n"; + $nameDescriptionAttribute = $table->getNameKey(); + foreach($array as $valueAttribute => $value) + { + $xml .= "\t<result $nameDescriptionAttribute=\"$valueAttribute\">".''."</result>\n"; + } + $xml .= "</results>"; + return $this->output($xml); + } + + // CASE 3
+ //array + // 'day1' => + // array + // 0 => + // array + // 'label' => string 'phpmyvisites' + // 'nb_unique_visitors' => int 11 + // 'nb_visits' => int 13 + // 1 => + // array + // 'label' => string 'phpmyvisits' + // 'nb_unique_visitors' => int 2 + // 'nb_visits' => int 2 + // 'day2' => + // array + // 0 => + // array + // 'label' => string 'piwik' + // 'nb_unique_visitors' => int 121 + // 'nb_visits' => int 130 + // 1 => + // array + // 'label' => string 'piwik bis' + // 'nb_unique_visitors' => int 20 + // 'nb_visits' => int 120 + } + $serializer = new XML_Serializer($options); @@ -57,15 +132,20 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer $xmlStr = $serializer->getSerializedData(); - if(get_class($table) == 'Piwik_DataTable') + if($table instanceof Piwik_DataTable + || $table instanceof Piwik_DataTable_Array) { - $xmlStr = "<result>\n".$xmlStr."\n</result>"; + $xmlStr = "<$rootName>\n".$xmlStr."\n</$rootName>"; $xmlStr = str_replace(">\n", ">\n\t",$xmlStr); - $xmlStr = str_replace("\t</result>", "</result>",$xmlStr); + $xmlStr = str_replace("\t</$rootName>", "</$rootName>",$xmlStr); } - + return $this->output($xmlStr); + } + + protected function output( $xml ) + { // silent fail because otherwise it throws an exception in the unit tests @header('Content-type: text/xml'); - return $xmlStr; + return $xml; } }
\ No newline at end of file |