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/Sort.php')
-rw-r--r--core/DataTable/Filter/Sort.php395
1 files changed, 187 insertions, 208 deletions
diff --git a/core/DataTable/Filter/Sort.php b/core/DataTable/Filter/Sort.php
index 89d5ee9e4c..ef56f70cad 100644
--- a/core/DataTable/Filter/Sort.php
+++ b/core/DataTable/Filter/Sort.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
*/
@@ -18,217 +18,196 @@
*/
class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
{
- protected $columnToSort;
- protected $order;
+ protected $columnToSort;
+ protected $order;
+
+ /**
+ * @param Piwik_DataTable $table
+ * @param string $columnToSort name of the column to sort by
+ * @param string $order order (asc|desc)
+ * @param bool $naturalSort use natural sort?
+ * @param bool $recursiveSort sort recursively?
+ */
+ public function __construct($table, $columnToSort, $order = 'desc', $naturalSort = true, $recursiveSort = false)
+ {
+ parent::__construct($table);
+ if ($recursiveSort) {
+ $table->enableRecursiveSort();
+ }
+ $this->columnToSort = $columnToSort;
+ $this->naturalSort = $naturalSort;
+ $this->setOrder($order);
+ }
+
+ /**
+ * Updates the order
+ *
+ * @param string $order asc|desc
+ */
+ public function setOrder($order)
+ {
+ if ($order == 'asc') {
+ $this->order = 'asc';
+ $this->sign = 1;
+ } else {
+ $this->order = 'desc';
+ $this->sign = -1;
+ }
+ }
+
+ /**
+ * Sorting method used for sorting numbers
+ *
+ * @param number $a
+ * @param number $b
+ * @return int
+ */
+ public function sort($a, $b)
+ {
+ return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+
+ ? 0
+ : (
+ !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? 1
+ : (
+ !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? -1
+ : (($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort] != $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+ || !isset($a->c[Piwik_DataTable_Row::COLUMNS]['label']))
+ ? ($this->sign * (
+ $a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+ < $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+ ? -1
+ : 1)
+ )
+ : -1 * $this->sign * strnatcasecmp(
+ $a->c[Piwik_DataTable_Row::COLUMNS]['label'],
+ $b->c[Piwik_DataTable_Row::COLUMNS]['label'])
+ )
+ )
+ );
+ }
+
+ /**
+ * Sorting method used for sorting values natural
+ *
+ * @param mixed $a
+ * @param mixed $b
+ * @return int
+ */
+ function naturalSort($a, $b)
+ {
+ return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? 0
+ : (!isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? 1
+ : (!isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? -1
+ : $this->sign * strnatcasecmp(
+ $a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort],
+ $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+ )
+ )
+ );
+ }
+
+ /**
+ * Sorting method used for sorting values
+ *
+ * @param mixed $a
+ * @param mixed $b
+ * @return int
+ */
+ function sortString($a, $b)
+ {
+ return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? 0
+ : (!isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? 1
+ : (!isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+ ? -1
+ : $this->sign *
+ strcasecmp($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort],
+ $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+ )
+ )
+ );
+ }
- /**
- * @param Piwik_DataTable $table
- * @param string $columnToSort name of the column to sort by
- * @param string $order order (asc|desc)
- * @param bool $naturalSort use natural sort?
- * @param bool $recursiveSort sort recursively?
- */
- public function __construct( $table, $columnToSort, $order = 'desc', $naturalSort = true, $recursiveSort = false )
- {
- parent::__construct($table);
- if($recursiveSort)
- {
- $table->enableRecursiveSort();
- }
- $this->columnToSort = $columnToSort;
- $this->naturalSort = $naturalSort;
- $this->setOrder($order);
- }
+ /**
+ * Sets the column to be used for sorting
+ *
+ * @param Piwik_DataTable_Row $row
+ * @return int
+ */
+ protected function selectColumnToSort($row)
+ {
+ $value = $row->getColumn($this->columnToSort);
+ if ($value !== false) {
+ return $this->columnToSort;
+ }
- /**
- * Updates the order
- *
- * @param string $order asc|desc
- */
- public function setOrder($order)
- {
- if($order == 'asc')
- {
- $this->order = 'asc';
- $this->sign = 1;
- }
- else
- {
- $this->order = 'desc';
- $this->sign = -1;
- }
- }
+ // sorting by "nb_visits" but the index is Piwik_Archive::INDEX_NB_VISITS in the table
+ if (isset(Piwik_Archive::$mappingFromNameToId[$this->columnToSort])) {
+ $column = Piwik_Archive::$mappingFromNameToId[$this->columnToSort];
+ $value = $row->getColumn($column);
- /**
- * Sorting method used for sorting numbers
- *
- * @param number $a
- * @param number $b
- * @return int
- */
- public function sort($a, $b)
- {
- return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
- && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
-
- ? 0
- : (
- !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
- ? 1
- : (
- !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
- ? -1
- : ( ($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort] != $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
- || !isset($a->c[Piwik_DataTable_Row::COLUMNS]['label']))
- ? ( $this->sign * (
- $a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
- < $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
- ? -1
- : 1)
- )
- : -1 * $this->sign * strnatcasecmp(
- $a->c[Piwik_DataTable_Row::COLUMNS]['label'],
- $b->c[Piwik_DataTable_Row::COLUMNS]['label'])
- )
- )
- )
- ;
- }
+ if ($value !== false) {
+ return $column;
+ }
+ }
- /**
- * Sorting method used for sorting values natural
- *
- * @param mixed $a
- * @param mixed $b
- * @return int
- */
- function naturalSort($a, $b)
- {
- return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
- && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort] )
- ? 0
- : (!isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
- ? 1
- : (!isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort] )
- ? -1
- : $this->sign * strnatcasecmp(
- $a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort],
- $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
- )
- )
- )
- ;
- }
+ // eg. was previously sorted by revenue_per_visit, but this table
+ // doesn't have this column; defaults with nb_visits
+ $column = Piwik_Archive::INDEX_NB_VISITS;
+ $value = $row->getColumn($column);
+ if ($value !== false) {
+ return $column;
+ }
- /**
- * Sorting method used for sorting values
- *
- * @param mixed $a
- * @param mixed $b
- * @return int
- */
- function sortString($a, $b)
- {
- return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
- && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort] )
- ? 0
- : (!isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
- ? 1
- : (!isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort] )
- ? -1
- : $this->sign *
- strcasecmp($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort],
- $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
- )
- )
- )
- ;
- }
-
- /**
- * Sets the column to be used for sorting
- *
- * @param Piwik_DataTable_Row $row
- * @return int
- */
- protected function selectColumnToSort($row)
- {
- $value = $row->getColumn($this->columnToSort);
- if($value !== false)
- {
- return $this->columnToSort;
- }
-
- // sorting by "nb_visits" but the index is Piwik_Archive::INDEX_NB_VISITS in the table
- if(isset(Piwik_Archive::$mappingFromNameToId[$this->columnToSort]))
- {
- $column = Piwik_Archive::$mappingFromNameToId[$this->columnToSort];
- $value = $row->getColumn($column);
+ // even though this column is not set properly in the table,
+ // we select it for the sort, so that the table's internal state is set properly
+ return $this->columnToSort;
+ }
- if($value !== false)
- {
- return $column;
- }
- }
-
- // eg. was previously sorted by revenue_per_visit, but this table
- // doesn't have this column; defaults with nb_visits
- $column = Piwik_Archive::INDEX_NB_VISITS;
- $value = $row->getColumn($column);
- if($value !== false)
- {
- return $column;
- }
-
- // even though this column is not set properly in the table,
- // we select it for the sort, so that the table's internal state is set properly
- return $this->columnToSort;
- }
+ /**
+ * Sorts the given data table by defined column and sorting method
+ *
+ * @param Piwik_DataTable $table
+ * @return mixed
+ */
+ public function filter($table)
+ {
+ if ($table instanceof Piwik_DataTable_Simple) {
+ return;
+ }
+ if (empty($this->columnToSort)) {
+ return;
+ }
+ $rows = $table->getRows();
+ if (count($rows) == 0) {
+ return;
+ }
+ $row = current($rows);
+ if ($row === false) {
+ return;
+ }
+ $this->columnToSort = $this->selectColumnToSort($row);
- /**
- * Sorts the given data table by defined column and sorting method
- *
- * @param Piwik_DataTable $table
- * @return mixed
- */
- public function filter($table)
- {
- if($table instanceof Piwik_DataTable_Simple)
- {
- return;
- }
- if(empty($this->columnToSort))
- {
- return;
- }
- $rows = $table->getRows();
- if(count($rows) == 0)
- {
- return;
- }
- $row = current($rows);
- if($row === false)
- {
- return;
- }
- $this->columnToSort = $this->selectColumnToSort($row);
-
- $value = $row->getColumn($this->columnToSort);
- if( is_numeric($value))
- {
- $methodToUse = "sort";
- }
- else
- {
- if($this->naturalSort)
- {
- $methodToUse = "naturalSort";
- }
- else
- {
- $methodToUse = "sortString";
- }
- }
- $table->sort( array($this,$methodToUse), $this->columnToSort );
- }
+ $value = $row->getColumn($this->columnToSort);
+ if (is_numeric($value)) {
+ $methodToUse = "sort";
+ } else {
+ if ($this->naturalSort) {
+ $methodToUse = "naturalSort";
+ } else {
+ $methodToUse = "sortString";
+ }
+ }
+ $table->sort(array($this, $methodToUse), $this->columnToSort);
+ }
}