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 'plugins/API/SegmentMetadata.php')
-rw-r--r--plugins/API/SegmentMetadata.php38
1 files changed, 35 insertions, 3 deletions
diff --git a/plugins/API/SegmentMetadata.php b/plugins/API/SegmentMetadata.php
index 1cce5fd3dd..03f6f64336 100644
--- a/plugins/API/SegmentMetadata.php
+++ b/plugins/API/SegmentMetadata.php
@@ -8,12 +8,19 @@
*/
namespace Piwik\Plugins\API;
+use Piwik\Category\CategoryList;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
use Piwik\Plugin\Segment;
class SegmentMetadata
{
+ /**
+ * Map of category name to order
+ * @var array
+ */
+ private $categoryOrder = array();
+
public function getSegmentsMetadata($idSites = array(), $_hideImplementationData = true, $isAuthenticatedWithViewAccess)
{
$segments = array();
@@ -55,9 +62,21 @@ class SegmentMetadata
$segments[] = $segment->toArray();
}
+ $categoryList = CategoryList::get();
+
foreach ($segments as &$segment) {
+ $categoryId = $segment['category'];
$segment['name'] = Piwik::translate($segment['name']);
- $segment['category'] = Piwik::translate($segment['category']);
+ $segment['category'] = Piwik::translate($categoryId);
+
+ if (!isset($this->categoryOrder[$segment['category']])) {
+ $category = $categoryList->getCategory($categoryId);
+ if (!empty($category)) {
+ $this->categoryOrder[$segment['category']] = $category->getOrder();
+ } else {
+ $this->categoryOrder[$segment['category']] = 999;
+ }
+ }
if ($_hideImplementationData) {
unset($segment['sqlFilter']);
@@ -81,12 +100,25 @@ class SegmentMetadata
{
$customVarCategory = Piwik::translate('CustomVariables_CustomVariables');
- $columns = array('type', 'category', 'name', 'segment');
+ $columns = array('category', 'type', 'name', 'segment');
foreach ($columns as $column) {
// Keep segments ordered alphabetically inside categories..
$type = -1;
- if ($column == 'name') $type = 1;
+ if ($column == 'name') {
+ $type = 1;
+ }
+
+ if ($column === 'category') {
+ $idOrder1 = $this->categoryOrder[$row1[$column]];
+ $idOrder2 = $this->categoryOrder[$row2[$column]];
+
+ if ($idOrder1 === $idOrder2) {
+ continue;
+ }
+
+ return $idOrder1 > $idOrder2 ? 1 : -1;
+ }
$compare = $type * strcmp($row1[$column], $row2[$column]);