Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105>2008-01-17 19:32:37 +0300
committermatt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105>2008-01-17 19:32:37 +0300
commit35d7335b376df01ff5b95e839513f8092b8d4fa9 (patch)
tree03f8a918d8218ea33efbcc41e882cf49e96d8c5e /modules/DataTable/Renderer
parentdebae74ffed006d15487311105d4b98a70bb90d8 (diff)
Work in progress....
Diffstat (limited to 'modules/DataTable/Renderer')
-rw-r--r--modules/DataTable/Renderer/Csv.php23
-rw-r--r--modules/DataTable/Renderer/Html.php5
-rw-r--r--modules/DataTable/Renderer/Json.php3
-rw-r--r--modules/DataTable/Renderer/Php.php43
-rw-r--r--modules/DataTable/Renderer/Xml.php94
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