Piwik\Plugin\ReportsProvider::compareCategories PHP Method

compareCategories() public method

public compareCategories ( $catIdA, $subcatIdA, $orderA, $catIdB, $subcatIdB, $orderB )
    public function compareCategories($catIdA, $subcatIdA, $orderA, $catIdB, $subcatIdB, $orderB)
    {
        if (!isset($this->categoryList)) {
            $this->categoryList = CategoryList::get();
        }
        $catA = $this->categoryList->getCategory($catIdA);
        $catB = $this->categoryList->getCategory($catIdB);
        // in case there is a category class for both reports
        if (isset($catA) && isset($catB)) {
            if ($catA->getOrder() == $catB->getOrder()) {
                // same category order, compare subcategory order
                $subcatA = $catA->getSubcategory($subcatIdA);
                $subcatB = $catB->getSubcategory($subcatIdB);
                // both reports have a subcategory with custom subcategory class
                if ($subcatA && $subcatB) {
                    if ($subcatA->getOrder() == $subcatB->getOrder()) {
                        // same subcategory order, compare order of report
                        if ($orderA == $orderB) {
                            return 0;
                        }
                        return $orderA < $orderB ? -1 : 1;
                    }
                    return $subcatA->getOrder() < $subcatB->getOrder() ? -1 : 1;
                } elseif ($subcatA) {
                    return 1;
                } elseif ($subcatB) {
                    return -1;
                }
                if ($orderA == $orderB) {
                    return 0;
                }
                return $orderA < $orderB ? -1 : 1;
            }
            return $catA->getOrder() < $catB->getOrder() ? -1 : 1;
        } elseif (isset($catA)) {
            return -1;
        } elseif (isset($catB)) {
            return 1;
        }
        if ($catIdA === $catIdB) {
            // both have same category, compare order
            if ($orderA == $orderB) {
                return 0;
            }
            return $orderA < $orderB ? -1 : 1;
        }
        return strnatcasecmp($catIdA, $catIdB);
    }

Usage Example

Example #1
0
 /**
  * API metadata are sorted by category/name,
  * with a little tweak to replicate the standard Piwik category ordering
  *
  * @param array $a
  * @param array $b
  * @return int
  */
 public function sortReports($a, $b)
 {
     return $this->reportsProvider->compareCategories($a['category'], $a['subcategory'], $a['order'], $b['category'], $b['subcategory'], $b['order']);
 }