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:
Diffstat (limited to 'core/DataTable/Filter/GroupBy.php')
-rwxr-xr-xcore/DataTable/Filter/GroupBy.php155
1 files changed, 75 insertions, 80 deletions
diff --git a/core/DataTable/Filter/GroupBy.php b/core/DataTable/Filter/GroupBy.php
index 5c521e7ca2..4b42e8d2ba 100755
--- a/core/DataTable/Filter/GroupBy.php
+++ b/core/DataTable/Filter/GroupBy.php
@@ -1,10 +1,10 @@
<?php
/**
* Piwik - Open source web analytics
- *
+ *
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
+ *
* @category Piwik
* @package Piwik
*/
@@ -12,88 +12,83 @@
/**
* DataTable filter that will group DataTable rows together based on the results
* of a reduce function. Rows with the same reduce result will be summed and merged.
- *
+ *
* NOTE: This filter should never be queued, it must be applied directly on a DataTable.
- *
+ *
* @package Piwik
* @subpackage Piwik_DataTable
*/
class Piwik_DataTable_Filter_GroupBy extends Piwik_DataTable_Filter
{
- /**
- * The name of the columns to reduce.
- * @var string
- */
- private $groupByColumn;
-
- /**
- * A callback that modifies the $groupByColumn of each row in some way. Rows with
- * the same reduction result will be added together.
- */
- private $reduceFunction;
-
- /**
- * Extra parameters to pass to the reduce function.
- */
- private $parameters;
-
- /**
- * Constructor.
- *
- * @param Piwik_DataTable $table The DataTable to filter.
- * @param string $groupByColumn The column name to reduce.
- * @param mixed $reduceFunction The reduce function. This must alter the $groupByColumn in some way.
- * @param array $parameters Extra parameters to supply to the reduce function.
- */
- public function __construct( $table, $groupByColumn, $reduceFunction, $parameters = array() )
- {
- parent::__construct($table);
-
- $this->groupByColumn = $groupByColumn;
- $this->reduceFunction = $reduceFunction;
- $this->parameters = $parameters;
- }
-
- /**
- * Applies the reduce function to each row and merges rows w/ the same reduce result.
- *
- * @param Piwik_DataTable $table
- */
- public function filter( $table )
- {
- $groupByRows = array();
- $nonGroupByRowIds = array();
-
- foreach ($table->getRows() as $rowId => $row)
- {
- // skip the summary row
- if ($rowId == Piwik_DataTable::ID_SUMMARY_ROW)
- {
- continue;
- }
-
- // reduce the group by column of this row
- $groupByColumnValue = $row->getColumn($this->groupByColumn);
- $parameters = array_merge(array($groupByColumnValue), $this->parameters);
- $groupByValue = call_user_func_array($this->reduceFunction, $parameters);
-
- if (!isset($groupByRows[$groupByValue]))
- {
- // if we haven't encountered this group by value before, we mark this row as a
- // row to keep, and change the group by column to the reduced value.
- $groupByRows[$groupByValue] = $row;
- $row->setColumn($this->groupByColumn, $groupByValue);
- }
- else
- {
- // if we have already encountered this group by value, we add this row to the
- // row that will be kept, and mark this one for deletion
- $groupByRows[$groupByValue]->sumRow($row);
- $nonGroupByRowIds[] = $rowId;
- }
- }
-
- // delete the unneeded rows.
- $table->deleteRows($nonGroupByRowIds);
- }
+ /**
+ * The name of the columns to reduce.
+ * @var string
+ */
+ private $groupByColumn;
+
+ /**
+ * A callback that modifies the $groupByColumn of each row in some way. Rows with
+ * the same reduction result will be added together.
+ */
+ private $reduceFunction;
+
+ /**
+ * Extra parameters to pass to the reduce function.
+ */
+ private $parameters;
+
+ /**
+ * Constructor.
+ *
+ * @param Piwik_DataTable $table The DataTable to filter.
+ * @param string $groupByColumn The column name to reduce.
+ * @param mixed $reduceFunction The reduce function. This must alter the $groupByColumn in some way.
+ * @param array $parameters Extra parameters to supply to the reduce function.
+ */
+ public function __construct($table, $groupByColumn, $reduceFunction, $parameters = array())
+ {
+ parent::__construct($table);
+
+ $this->groupByColumn = $groupByColumn;
+ $this->reduceFunction = $reduceFunction;
+ $this->parameters = $parameters;
+ }
+
+ /**
+ * Applies the reduce function to each row and merges rows w/ the same reduce result.
+ *
+ * @param Piwik_DataTable $table
+ */
+ public function filter($table)
+ {
+ $groupByRows = array();
+ $nonGroupByRowIds = array();
+
+ foreach ($table->getRows() as $rowId => $row) {
+ // skip the summary row
+ if ($rowId == Piwik_DataTable::ID_SUMMARY_ROW) {
+ continue;
+ }
+
+ // reduce the group by column of this row
+ $groupByColumnValue = $row->getColumn($this->groupByColumn);
+ $parameters = array_merge(array($groupByColumnValue), $this->parameters);
+ $groupByValue = call_user_func_array($this->reduceFunction, $parameters);
+
+ if (!isset($groupByRows[$groupByValue])) {
+ // if we haven't encountered this group by value before, we mark this row as a
+ // row to keep, and change the group by column to the reduced value.
+ $groupByRows[$groupByValue] = $row;
+ $row->setColumn($this->groupByColumn, $groupByValue);
+ } else {
+ // if we have already encountered this group by value, we add this row to the
+ // row that will be kept, and mark this one for deletion
+ $groupByRows[$groupByValue]->sumRow($row);
+ $nonGroupByRowIds[] = $rowId;
+ }
+ }
+
+ // delete the unneeded rows.
+ $table->deleteRows($nonGroupByRowIds);
+ }
}