/** * @return CategoryList */ public static function get() { $list = new CategoryList(); $categories = StaticContainer::get('Piwik\\Plugin\\Categories'); foreach ($categories->getAllCategories() as $category) { $list->addCategory($category); } // move subcategories into categories foreach ($categories->getAllSubcategories() as $subcategory) { $categoryId = $subcategory->getCategoryId(); if (!$categoryId) { continue; } if ($list->hasCategory($categoryId)) { $category = $list->getCategory($categoryId); } else { $category = new Category(); $category->setId($categoryId); $list->addCategory($category); } $category->addSubcategory($subcategory); } return $list; }
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); }
/** * Get a list of all widgetizable widgets. * * @param int $idSite * @return array */ public function getWidgetMetadata($idSite) { Piwik::checkUserHasViewAccess($idSite); $widgetsList = WidgetsList::get(); $categoryList = CategoryList::get(); $metadata = new WidgetMetadata(); return $metadata->getWidgetMetadata($categoryList, $widgetsList); }
/** * @param CategoryList $categoryList * @param WidgetsList $widgetsList * @return array */ private function buildPagesMetadata(CategoryList $categoryList, WidgetsList $widgetsList) { $pages = array(); $widgets = array(); foreach ($widgetsList->getWidgetConfigs() as $config) { $pageId = $this->buildPageId($config->getCategoryId(), $config->getSubcategoryId()); if (!isset($widgets[$pageId])) { $widgets[$pageId] = array(); } $widgets[$pageId][] = $config; } foreach ($categoryList->getCategories() as $category) { foreach ($category->getSubcategories() as $subcategory) { $pageId = $this->buildPageId($category->getId(), $subcategory->getId()); if (!empty($widgets[$pageId])) { $pages[] = $this->buildPageMetadata($category, $subcategory, $widgets[$pageId]); } } } return $pages; }