*/ class CategoryRepository { /** * @var CategoryFetcher */ protected $categoryFetcher; /** * @var IFactory */ protected $l10nFactory; /** * @var ConfigProxy */ protected $config; /** * @var IConfig */ protected $iConfig; public function __construct( CategoryFetcher $categoryFetcher, ConfigProxy $config, IConfig $iConfig, IFactory $l10nFactory ) { $this->categoryFetcher = $categoryFetcher; $this->l10nFactory = $l10nFactory; $this->config = $config; $this->iConfig = $iConfig; } /** * Retrieves categories. * * @return array */ public function getOrderedCategories() { $currentLanguage = substr($this->l10nFactory->findLanguage(), 0, 2); $type = $this->config->getAppValue('categories-order-type', 'default'); $order = $this->config->getAppValueArray('categories-order', '[]'); $categoriesLabels = $this->config->getAppValueArray('cache-categories', '[]'); if (empty($categoriesLabels)) { $categoriesLabels = $this->categoryFetcher->get(); $this->iConfig->setAppValue(Application::APP_ID, 'cache-categories', json_encode($categoriesLabels)); } foreach ($categoriesLabels as $k => $category) { $categoriesLabels[$category['id']] = $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name']; unset($categoriesLabels[$k]); } $categoriesLabels['external_links'] = $this->l10nFactory->get('external')->t('External sites'); $categoriesLabels['other'] = ''; asort($categoriesLabels); if ('custom' === $type) { $ordered = []; foreach ($order as $id) { if (isset($categoriesLabels[$id])) { $ordered[$id] = $categoriesLabels[$id]; } } foreach ($categoriesLabels as $id => $value) { if (!isset($ordered[$id])) { $ordered[$id] = $value; } } $categoriesLabels = $ordered; } return $categoriesLabels; } }