diff --git a/core/DataTable.php b/core/DataTable.php index 61e8abb1eb29224b1903811b8e0b961aea780db0..53686f2feb4c9b72a429a987a3b2ceb666fb99c0 100644 --- a/core/DataTable.php +++ b/core/DataTable.php @@ -356,10 +356,11 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess if ($this->enableRecursiveSort === true) { foreach ($this->getRows() as $row) { - if (($idSubtable = $row->getIdSubDataTable()) !== null) { - $table = Manager::getInstance()->getTable($idSubtable); - $table->enableRecursiveSort(); - $table->sort($functionCallback, $columnSortedBy); + + $subTable = $row->getSubtable(); + if ($subTable) { + $subTable->enableRecursiveSort(); + $subTable->sort($functionCallback, $columnSortedBy); } } } @@ -868,8 +869,8 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess { $totalCount = 0; foreach ($this->rows as $row) { - if (($idSubTable = $row->getIdSubDataTable()) !== null) { - $subTable = Manager::getInstance()->getTable($idSubTable); + $subTable = $row->getSubtable(); + if ($subTable) { $count = $subTable->getRowsCountRecursive(); $totalCount += $count; } @@ -907,8 +908,9 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess $row->renameColumn($oldName, $newName); if ($doRenameColumnsOfSubTables) { - if (($idSubDataTable = $row->getIdSubDataTable()) !== null) { - Manager::getInstance()->getTable($idSubDataTable)->renameColumn($oldName, $newName); + $subTable = $row->getSubtable(); + if ($subTable) { + $subTable->renameColumn($oldName, $newName); } } } @@ -929,8 +931,9 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess foreach ($names as $name) { $row->deleteColumn($name); } - if (($idSubDataTable = $row->getIdSubDataTable()) !== null) { - Manager::getInstance()->getTable($idSubDataTable)->deleteColumns($names, $deleteRecursiveInSubtables); + $subTable = $row->getSubtable(); + if ($subTable) { + $subTable->deleteColumns($names, $deleteRecursiveInSubtables); } } if (!is_null($this->summaryRow)) { @@ -1110,17 +1113,11 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess // but returns all serialized tables and subtable in an array of 1 dimension $aSerializedDataTable = array(); foreach ($this->rows as $row) { - if (($idSubTable = $row->getIdSubDataTable()) !== null) { - $subTable = null; - try { - $subTable = Manager::getInstance()->getTable($idSubTable); - } catch(TableNotFoundException $e) { - // This occurs is an unknown & random data issue. Catch Exception and remove subtable from the row. - $row->removeSubtable(); - // Go to next row - continue; - } - + $subTable = $row->getSubtable(); + if (!$subTable) { + // Not sure if this code is needed + $row->removeSubtable(); + } else { $depth++; $aSerializedDataTable = $aSerializedDataTable + $subTable->getSerialized($maximumRowsInSubDataTable, $maximumRowsInSubDataTable, $columnToSortByBeforeTruncation); $depth--; @@ -1616,8 +1613,8 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess // we simply add it (cloning the subtable) // if the row has the subtable already // then we have to recursively sum the subtables - if (($idSubTable = $row->getIdSubDataTable()) !== null) { - $subTable = Manager::getInstance()->getTable($idSubTable); + $subTable = $row->getSubtable(); + if ($subTable) { $subTable->metadata[self::COLUMN_AGGREGATION_OPS_METADATA_NAME] = $this->getMetadata(self::COLUMN_AGGREGATION_OPS_METADATA_NAME); $rowFound->sumSubtable($subTable); diff --git a/core/DataTable/BaseFilter.php b/core/DataTable/BaseFilter.php index fb2dc009f9db209f26361e63b4051ae9c73737e6..dc4756d82ed438fc7957d1c96d94051e02b44461 100644 --- a/core/DataTable/BaseFilter.php +++ b/core/DataTable/BaseFilter.php @@ -73,8 +73,8 @@ abstract class BaseFilter if (!$this->enableRecursive) { return; } - if ($row->isSubtableLoaded()) { - $subTable = Manager::getInstance()->getTable($row->getIdSubDataTable()); + $subTable = $row->getSubtable(); + if ($subTable) { $this->filter($subTable); } } diff --git a/core/DataTable/Filter/PatternRecursive.php b/core/DataTable/Filter/PatternRecursive.php index 697403c2e340d3c6b6341a16780958b908e0a56e..f383a132609e427ed8dbb45930474606b365a97a 100644 --- a/core/DataTable/Filter/PatternRecursive.php +++ b/core/DataTable/Filter/PatternRecursive.php @@ -62,18 +62,15 @@ class PatternRecursive extends BaseFilter // AND 2 - the label is not found in the children $patternNotFoundInChildren = false; - try { - $idSubTable = $row->getIdSubDataTable(); - $subTable = Manager::getInstance()->getTable($idSubTable); - + $subTable = $row->getSubtable(); + if(!$subTable) { + $patternNotFoundInChildren = true; + } else { // we delete the row if we couldn't find the pattern in any row in the // children hierarchy if ($this->filter($subTable) == 0) { $patternNotFoundInChildren = true; } - } catch (Exception $e) { - // there is no subtable loaded for example - $patternNotFoundInChildren = true; } if ($patternNotFoundInChildren diff --git a/core/DataTable/Filter/ReplaceSummaryRowLabel.php b/core/DataTable/Filter/ReplaceSummaryRowLabel.php index 3c1e31e2d0cd9a99e22c0fc3c2fb4b55536ae887..1e550f6e3ff2185bd83b0fdcefb29664450967bd 100644 --- a/core/DataTable/Filter/ReplaceSummaryRowLabel.php +++ b/core/DataTable/Filter/ReplaceSummaryRowLabel.php @@ -65,8 +65,8 @@ class ReplaceSummaryRowLabel extends BaseFilter // recurse foreach ($rows as $row) { - if ($row->isSubtableLoaded()) { - $subTable = Manager::getInstance()->getTable($row->getIdSubDataTable()); + $subTable = $row->getSubtable(); + if ($subTable) { $this->filter($subTable); } } diff --git a/core/DataTable/Renderer/Console.php b/core/DataTable/Renderer/Console.php index 0e1c127fb140f3a6186f4ffb0fca9243d9882d98..a4fcbff0c5af2ef9aaff9e4b342f2de3fa91892c 100644 --- a/core/DataTable/Renderer/Console.php +++ b/core/DataTable/Renderer/Console.php @@ -120,14 +120,10 @@ class Console extends Renderer . $row->getIdSubDataTable() . "]<br />\n"; if (!is_null($row->getIdSubDataTable())) { - if ($row->isSubtableLoaded()) { + $subTable = $row->getSubtable(); + if ($subTable) { $depth++; - $output .= $this->renderTable( - Manager::getInstance()->getTable( - $row->getIdSubDataTable() - ), - $prefix . ' ' - ); + $output .= $this->renderTable($subTable, $prefix . ' '); $depth--; } else { $output .= "-- Sub DataTable not loaded<br />\n"; diff --git a/core/DataTable/Renderer/Php.php b/core/DataTable/Renderer/Php.php index 56360b939ca41b2b04739ac098100f246de2cfaa..a3f3a5c0e50060fe75c3bdc9bc716e4acf7c5b18 100644 --- a/core/DataTable/Renderer/Php.php +++ b/core/DataTable/Renderer/Php.php @@ -206,10 +206,10 @@ class Php extends Renderer $newRow['issummaryrow'] = true; } + $subTable = $row->getSubtable(); if ($this->isRenderSubtables() - && $row->isSubtableLoaded() + && $subTable ) { - $subTable = $this->renderTable(Manager::getInstance()->getTable($row->getIdSubDataTable())); $newRow['subtable'] = $subTable; if ($this->hideIdSubDatatable === false && isset($newRow['metadata']['idsubdatatable_in_db']) diff --git a/core/DataTable/Row/DataTableSummaryRow.php b/core/DataTable/Row/DataTableSummaryRow.php index 7d477a304cee1ef7737a45ffcbc9e5bc9d45049d..2c9eda5e8e0e782df461111c4ee08b2d5b9ff590 100644 --- a/core/DataTable/Row/DataTableSummaryRow.php +++ b/core/DataTable/Row/DataTableSummaryRow.php @@ -47,9 +47,8 @@ class DataTableSummaryRow extends Row */ public function recalculate() { - $id = $this->getIdSubDataTable(); - if ($id !== null) { - $subTable = Manager::getInstance()->getTable($id); + $subTable = $this->getSubtable(); + if ($subTable) { $this->sumTable($subTable); } } diff --git a/plugins/Actions/ArchivingHelper.php b/plugins/Actions/ArchivingHelper.php index e168f5d742530d4075d4388d7262164944e83d81..34873eb194a164bd173cdbc3293efe493d8b2cc0 100644 --- a/plugins/Actions/ArchivingHelper.php +++ b/plugins/Actions/ArchivingHelper.php @@ -198,9 +198,9 @@ class ArchivingHelper if (($idSubtable = $row->getIdSubDataTable()) !== null || $id === DataTable::ID_SUMMARY_ROW ) { - if ($idSubtable !== null) { - $subtable = Manager::getInstance()->getTable($idSubtable); - self::deleteInvalidSummedColumnsFromDataTable($subtable); + $subTable = $row->getSubtable(); + if ($subTable) { + self::deleteInvalidSummedColumnsFromDataTable($subTable); } if ($row instanceof DataTableSummaryRow) { diff --git a/plugins/Transitions/API.php b/plugins/Transitions/API.php index 44a39fdcf52a03f28acc42a1f19e23fc470e48ea..7092fee8f89318e7701caadefb6a0c48ecee4335 100644 --- a/plugins/Transitions/API.php +++ b/plugins/Transitions/API.php @@ -523,8 +523,8 @@ class API extends \Piwik\Plugin\API if ($visits) { // load details (i.e. subtables) $details = array(); - if ($idSubTable = $row->getIdSubDataTable()) { - $subTable = Manager::getInstance()->getTable($idSubTable); + $subTable = $row->getSubtable(); + if ($subTable) { foreach ($subTable->getRows() as $subRow) { $details[] = array( 'label' => $subRow->getColumn('label'),