fileManager = $fileManager; $this->dataCache = $dataCache; $this->useCache = $useCache; } /** * Get module parameters. * * @param string|array|null $key * @param mixed $defaultValue * @return mixed */ public function get($key = null, $defaultValue = null) { if ($this->data === null) { $this->init(); } if ($key === null) { return $this->data; } return Util::getValueByKey($this->data, $key, $defaultValue); } private function init(): void { if ($this->useCache && $this->dataCache->has($this->cacheKey)) { $this->data = $this->dataCache->get($this->cacheKey); return; } $this->data = $this->loadData(); if ($this->useCache) { $this->dataCache->store($this->cacheKey, $this->data); } } /** * Get an ordered list of modules. * * @return string[] * * @todo Use cache if available. */ public function getOrderedList(): array { $moduleNameList = $this->getList(); $modulesToSort = []; foreach ($moduleNameList as $moduleName) { if (empty($moduleName)) { continue; } if (isset($modulesToSort[$moduleName])) { continue; } $modulesToSort[$moduleName] = $this->get([$moduleName, 'order'], self::DEFAULT_ORDER); } array_multisort( array_values($modulesToSort), SORT_ASC, array_keys($modulesToSort), SORT_ASC, $modulesToSort ); return array_keys($modulesToSort); } private function getList(): array { if ($this->list === null) { $this->list = $this->fileManager->getDirList($this->pathToModules); } return $this->list; } private function loadData(): array { $data = []; foreach ($this->getList() as $moduleName) { $path = $this->pathToModules . '/' . $moduleName . '/' . $this->moduleFilePath; $itemContents = $this->fileManager->getContents($path); $data[$moduleName] = Json::decode($itemContents, true); $data[$moduleName]['order'] = $data[$moduleName]['order'] ?? self::DEFAULT_ORDER; } return $data; } }