Skip to content

Commit

Permalink
Refs #3465, remove Piwik_DataTable_Array::metadata and move data to P…
Browse files Browse the repository at this point in the history
…iwik_DataTable::metadata.
  • Loading branch information
diosmosis committed Mar 11, 2013
1 parent 2fa1dca commit 80ac6ac
Show file tree
Hide file tree
Showing 15 changed files with 79 additions and 109 deletions.
1 change: 0 additions & 1 deletion core/API/DataTableManipulator.php
Expand Up @@ -59,7 +59,6 @@ protected function manipulate($dataTable)
if ($dataTable instanceof Piwik_DataTable_Array)
{
$newTableArray = new Piwik_DataTable_Array;
$newTableArray->metadata = $dataTable->metadata;
$newTableArray->setKeyName($dataTable->getKeyName());

foreach ($dataTable->getArray() as $date => $subTable)
Expand Down
25 changes: 2 additions & 23 deletions core/Archive/Array.php
Expand Up @@ -63,19 +63,6 @@ protected function getNewDataTableArray()
return $table;
}



/**
* Adds metadata information to the Piwik_DataTable_Array
* using the information given by the Archive
*
* @param Piwik_DataTable_Array $table
* @param Piwik_Archive $archive
*/
protected function loadMetadata(Piwik_DataTable_Array $table, $archive)
{
}

/**
* Returns a DataTable_Array containing numeric values
* of the element $name from the archives in this Archive_Array.
Expand All @@ -90,11 +77,9 @@ public function getNumeric( $name )
foreach($this->archives as $archive)
{
$numeric = $archive->getNumeric( $name ) ;
$subTable = new Piwik_DataTable_Simple();
$subTable = $archive->makeDataTable($isSimple = true);
$subTable->addRowsFromArray( array( $numeric ) );
$table->addTable($subTable, $this->getDataTableLabelValue($archive));

$this->loadMetadata($table, $archive);
}

return $table;
Expand All @@ -117,11 +102,9 @@ public function getBlob( $name )
foreach($this->archives as $archive)
{
$blob = $archive->getBlob( $name ) ;
$subTable = new Piwik_DataTable_Simple();
$subTable = $archive->makeNewDataTable($isSimple = true);
$subTable->addRowsFromArray( array('blob' => $blob));
$table->addTable($subTable, $this->getDataTableLabelValue($archive));

$this->loadMetadata($table, $archive);
}
return $table;
}
Expand All @@ -142,8 +125,6 @@ public function getDataTable( $name, $idSubTable = null )
{
$subTable = $archive->getDataTable( $name, $idSubTable ) ;
$table->addTable($subTable, $this->getDataTableLabelValue($archive));

$this->loadMetadata($table, $archive);
}
return $table;
}
Expand All @@ -165,8 +146,6 @@ public function getDataTableExpanded($name, $idSubTable = null)
{
$subTable = $archive->getDataTableExpanded( $name, $idSubTable ) ;
$table->addTable($subTable, $this->getDataTableLabelValue($archive));

$this->loadMetadata($table, $archive);
}
return $table;
}
Expand Down
19 changes: 1 addition & 18 deletions core/Archive/Array/IndexedByDate.php
Expand Up @@ -43,22 +43,6 @@ protected function getIndexName()
{
return 'date';
}

/**
* Adds metadata information to the Piwik_DataTable_Array
* using the information given by the Archive
*
* @param Piwik_DataTable_Array $table
* @param Piwik_Archive $archive
*/
protected function loadMetadata(Piwik_DataTable_Array $table, $archive)
{
$table->metadata[$archive->getPrettyDate()] = array(
'timestamp' => $archive->getTimestampStartDate(),
'site' => $archive->getSite(),
'period' => $archive->getPeriod(),
);
}

/**
* @param Piwik_Archive $archive
Expand Down Expand Up @@ -134,7 +118,7 @@ public function getDataTableFromNumeric( $fields )
{
$timestamp = $archive->getTimestampStartDate();
$archiveByTimestamp[$timestamp] = $archive;
$contentArray[$timestamp]['table'] = new Piwik_DataTable_Simple();
$contentArray[$timestamp]['table'] = $archive->makeDataTable($simple = true);
$contentArray[$timestamp]['prettyDate'] = $archive->getPrettyDate();
}

Expand All @@ -151,7 +135,6 @@ public function getDataTableFromNumeric( $fields )
foreach($contentArray as $timestamp => $aData)
{
$tableArray->addTable($aData['table'], $aData['prettyDate']);
$this->loadMetadata($tableArray, $archiveByTimestamp[$timestamp]);
}
return $tableArray;
}
Expand Down
2 changes: 1 addition & 1 deletion core/Archive/Array/IndexedBySite.php
Expand Up @@ -72,7 +72,7 @@ public function getDataTableFromNumeric( $fields )
$values = $this->getValues($fields);
foreach($this->archives as $idSite => $archive)
{
$table = new Piwik_DataTable_Simple();
$table = $archive->makeDataTable($isSimple = true);
if (array_key_exists($idSite, $values))
{
$table->addRowsFromArray($values[$idSite]);
Expand Down
30 changes: 29 additions & 1 deletion core/Archive/Single.php
Expand Up @@ -528,7 +528,7 @@ public function getDataTable( $name, $idSubTable = null )

$data = $this->get($name, 'blob', $tsArchived);

$table = new Piwik_DataTable();
$table = $this->makeDataTable();

if($data !== false)
{
Expand All @@ -547,6 +547,34 @@ public function getDataTable( $name, $idSubTable = null )
return $table;
}

/**
* Creates a new DataTable with some metadata set. Sets the following metadata:
* - 'site' => Piwik_Site instance for this archive
* - 'period' => Piwik_Period instance for this archive
* - 'timestamp' => the timestamp of the first date in this archive
*
* @param bool $isSimple Whether the DataTable should be a DataTable_Simple
* instance or not.
* @return Piwik_DataTable
*/
public function makeDataTable( $isSimple = false )
{
if ($isSimple)
{
$result = new Piwik_DataTable_Simple();
}
else
{
$result = new Piwik_DataTable();
}

$result->setMetadata('site', $this->getSite());
$result->setMetadata('period', $this->getPeriod());
$result->setMetadata('timestamp', $this->getTimestampStartDate());

return $result;
}

public function setRequestedReport($requestedReport )
{
$this->requestedReport = $requestedReport;
Expand Down
3 changes: 2 additions & 1 deletion core/DataTable.php
Expand Up @@ -242,7 +242,7 @@ class Piwik_DataTable
*
* @var array
*/
protected $metadata = array();
public $metadata = array();

/**
* Maximum number of rows allowed in this datatable (including the summary row).
Expand Down Expand Up @@ -537,6 +537,7 @@ public function getEmptyClone()
{
$clone = new Piwik_DataTable;
$clone->queuedFilters = $this->queuedFilters;
$clone->metadata = $this->metadata;
return $clone;
}

Expand Down
16 changes: 4 additions & 12 deletions core/DataTable/Array.php
Expand Up @@ -18,15 +18,6 @@
*/
class Piwik_DataTable_Array
{
/**
* Used to store additional information about the DataTable Array.
* For example if the Array is used to store multiple DataTable of UserCountry,
* we can add the metadata of the 'idSite' they refer to, so we can access it later if necessary.
*
* @var array of mixed
*/
public $metadata = array();

/**
* Array containing the DataTable withing this Piwik_DataTable_Array
*
Expand Down Expand Up @@ -251,7 +242,6 @@ public function getFilteredTableFromLabel($label)
{
$newTableArray = new Piwik_DataTable_Array;
$newTableArray->setKeyName($this->getKeyName());
$newTableArray->metadata = $this->metadata;

foreach ($this->array as $subTableLabel => $subTable)
{
Expand Down Expand Up @@ -319,15 +309,17 @@ public function mergeChildren()
{
$result = new Piwik_DataTable_Array();
$result->setKeyName($firstChild->getKeyName());
$result->metadata = $firstChild->metadata;

foreach ($this->array as $label => $subTableArray)
{
foreach ($subTableArray->array as $innerLabel => $subTable)
{
if (!isset($result->array[$innerLabel]))
{
$result->addTable(new Piwik_DataTable(), $innerLabel);
$dataTable = new Piwik_DataTable();
$dataTable->metadata = $subTable->metadata;

$result->addTable($dataTable, $innerLabel);
}

$this->copyRowsAndSetLabel($result->array[$innerLabel], $subTable, $label);
Expand Down
21 changes: 10 additions & 11 deletions core/DataTable/Renderer/Console.php
Expand Up @@ -74,17 +74,6 @@ protected function renderDataTableArray(Piwik_DataTable_Array $tableArray, $pref
$output .= $prefix . $this->renderTable($table, $prefix . '      ');
$output .= "<hr />";
}
$output .= "Metadata<br />";
foreach($tableArray->metadata as $id => $metadata)
{
$output .= "<br />";
$output .= $prefix . " <b>$id</b><br />";
foreach($metadata as $name => $value)
{
$output .= $prefix . $prefix . "$name => $value";
}
}
$output .= "<hr />";
return $output;
}

Expand Down Expand Up @@ -172,6 +161,16 @@ protected function renderTable($table, $prefix = "")
$i++;
}

$output .= "<hr />Metadata<br />";
foreach($tableArray->metadata as $id => $metadata)
{
$output .= "<br />";
$output .= $prefix . " <b>$id</b><br />";
foreach($metadata as $name => $value)
{
$output .= $prefix . $prefix . "$name => $value";
}
}
return $output;
}
}
4 changes: 2 additions & 2 deletions core/DataTable/Renderer/Rss.php
Expand Up @@ -67,8 +67,8 @@ protected function renderTable($table)
$moreRecentFirst = array_reverse($table->getArray(), true);
foreach($moreRecentFirst as $date => $subtable )
{
$timestamp = $table->metadata[$date]['timestamp'];
$site = $table->metadata[$date]['site'];
$timestamp = $subtable->getMetadata('timestamp');
$site = $subtable->getMetadata('site');

$pudDate = date('r', $timestamp);

Expand Down
12 changes: 6 additions & 6 deletions core/ViewDataTable/GenerateGraphData/ChartEvolution.php
Expand Up @@ -125,10 +125,10 @@ protected function initChartObjectData()

// the X label is extracted from the 'period' object in the table's metadata
$xLabels = $uniqueIdsDataTable = array();
foreach($this->dataTable->metadata as $idDataTable => $metadataDataTable)
foreach($this->dataTable->getArray() as $idDataTable => $metadataDataTable)
{
//eg. "Aug 2009"
$xLabels[] = $metadataDataTable['period']->getLocalizedShortString();
$xLabels[] = $metadataDataTable->getMetadata('period')->getLocalizedShortString();
// we keep track of all unique data table that we need to set a Y value for
$uniqueIdsDataTable[] = $idDataTable;
}
Expand Down Expand Up @@ -193,8 +193,8 @@ protected function initChartObjectData()
$this->view->setAxisYUnits($yAxisLabelToUnit);

$countGraphElements = $this->dataTable->getRowsCount();
$firstDatatable = reset($this->dataTable->metadata);
$period = $firstDatatable['period'];
$firstDatatable = reset($this->dataTable->getArray());

This comment has been minimized.

Copy link
@halfdan

halfdan Mar 12, 2013

Member

This line produces an error in some cases!

<strong>There is an error. Please report the message (Piwik 1.11.1)         and full backtrace in the <a href='?module=Proxy&action=redirect&url=http://forum.piwik.org' target='_blank'>Piwik forums</a> (please do a Search first as it might have been reported already!).<br /><br/>        Strict Notice:</strong> <i>Only variables should be passed by reference</i> in <b>/var/www/htdocs/dev.geekproject.eu/piwik/core/ViewDataTable/GenerateGraphData/ChartEvolution.php</b> on line <b>196</b><br /><br />Backtrace --><div style="font-family:Courier;font-size:10pt"><br />#0  Piwik_ErrorHandler(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/ViewDataTable/GenerateGraphData/ChartEvolution.php:196]<br />#1  Piwik_ViewDataTable_GenerateGraphData_ChartEvolution->initChartObjectData(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/ViewDataTable/GenerateGraphData.php:211]<br />#2  Piwik_ViewDataTable_GenerateGraphData->main(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/Controller.php:236]<br />#3  Piwik_Controller->getLastUnitGraphAcrossPlugins(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/plugins/VisitsSummary/Controller.php:84]<br />#4  Piwik_VisitsSummary_Controller->getEvolutionGraph(...) called at [:]<br />#5  call_user_func_array(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/FrontController.php:136]<br />#6  Piwik_FrontController->dispatch(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/FrontController.php:158]<br />#7  Piwik_FrontController->fetchDispatch(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/ViewDataTable/GenerateGraphHTML.php:195]<br />#8  Piwik_ViewDataTable_GenerateGraphHTML->getGraphData(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/ViewDataTable/GenerateGraphHTML.php:149]<br />#9  Piwik_ViewDataTable_GenerateGraphHTML->buildView(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/ViewDataTable/GenerateGraphHTML.php:133]<br />#10  Piwik_ViewDataTable_GenerateGraphHTML->main(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/Controller.php:236]<br />#11  Piwik_Controller->getLastUnitGraphAcrossPlugins(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/plugins/VisitsSummary/Controller.php:84]<br />#12  Piwik_VisitsSummary_Controller->getEvolutionGraph(...) called at [:]<br />#13  call_user_func_array(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/core/FrontController.php:136]<br />#14  Piwik_FrontController->dispatch(...) called at [/var/www/htdocs/dev.geekproject.eu/piwik/index.php:52]

Please fix this @diosmosis

This comment has been minimized.

Copy link
@halfdan

halfdan Mar 12, 2013

Member

Fixed it myself. Please be more careful with reset().

This comment has been minimized.

Copy link
@mattab

mattab Mar 12, 2013

Member

These errors are sometimes hard to detect. It will help once we have automated controller html testing that fail the build when detecting notice/warning, I put some ideas in: http://dev.piwik.org/trac/ticket/2908#comment:11

$period = $firstDatatable->getMetadata('period');

$stepSize = $this->getXAxisStepSize($period->getLabel(), $countGraphElements);
$this->view->setXSteps($stepSize);
Expand All @@ -203,9 +203,9 @@ protected function initChartObjectData()
{
$axisXOnClick = array();
$queryStringAsHash = $this->getQueryStringAsHash();
foreach($this->dataTable->metadata as $idDataTable => $metadataDataTable)
foreach($this->dataTable->getArray() as $idDataTable => $metadataDataTable)
{
$period = $metadataDataTable['period'];
$period = $metadataDataTable->getMetadata('period');
$dateInUrl = $period->getDateStart();
$parameters = array(
'idSite' => $idSite,
Expand Down
17 changes: 6 additions & 11 deletions plugins/API/API.php
Expand Up @@ -862,8 +862,6 @@ private function handleTableReport($idSite, $dataTable, &$reportMetadata, $hasDi
// Need a new Piwik_DataTable_Array to store the 'human readable' values
$newReport = new Piwik_DataTable_Array();
$newReport->setKeyName("prettyDate");
$dataTableMetadata = $dataTable->metadata;
$newReport->metadata = $dataTableMetadata;

// Need a new Piwik_DataTable_Array to store report metadata
$rowsMetadata = new Piwik_DataTable_Array();
Expand All @@ -873,8 +871,9 @@ private function handleTableReport($idSite, $dataTable, &$reportMetadata, $hasDi
foreach($dataTable->getArray() as $label => $simpleDataTable)
{
list($enhancedSimpleDataTable, $rowMetadata) = $this->handleSimpleDataTable($idSite, $simpleDataTable, $columns, $hasDimension, $showRawMetrics);
$enhancedSimpleDataTable->metadata = $simpleDataTable->metadata;

$period = $dataTableMetadata[$label]['period']->getLocalizedLongString();
$period = $simpleDataTable->metadata['period']->getLocalizedLongString();
$newReport->addTable($enhancedSimpleDataTable, $period);
$rowsMetadata->addTable($rowMetadata, $period);
}
Expand Down Expand Up @@ -1537,16 +1536,11 @@ private function getMultiRowEvolution($idSite, $period, $date, $apiModule, $apiA

// load the tables for each label
$dataTablesPerLabel = array();
$dataTableMetadata = false;
foreach ($labels as $labelIndex => $label)
{
$dataTable = $this->loadRowEvolutionDataFromAPI($idSite, $period, $date, $apiModule, $apiAction, $label, $segment, $idGoal);

$dataTablesPerLabel[$labelIndex] = $dataTable->getArray();
if (!$dataTableMetadata)
{
$dataTableMetadata = $dataTable->metadata;
}

$urlFound = false;
foreach ($dataTablesPerLabel[$labelIndex] as $table)
Expand Down Expand Up @@ -1585,9 +1579,8 @@ private function getMultiRowEvolution($idSite, $period, $date, $apiModule, $apiA
// combine the tables
$dataTableMulti = new Piwik_DataTable_Array;
$dataTableMulti->setKeyName($dataTable->getKeyName());
$dataTableMulti->metadata = $dataTableMetadata;

foreach (array_keys(reset($dataTablesPerLabel)) as $dateLabel)
foreach (reset($dataTablesPerLabel) as $dateLabel => $dataTable)
{
$newRow = new Piwik_DataTable_Row;
foreach ($dataTablesPerLabel as $labelIndex => $tableArray)
Expand All @@ -1610,9 +1603,11 @@ private function getMultiRowEvolution($idSite, $period, $date, $apiModule, $apiA
$label = $column.'_'.$labelIndex;
$newRow->addColumn($label, $value);
}

$newTable = new Piwik_DataTable;
$newTable->addRow($newRow);
$newTable->metadata = $dataTable->metadata;

$dataTableMulti->addTable($newTable, $dateLabel);
}

Expand Down

0 comments on commit 80ac6ac

Please sign in to comment.