/** * Отображение главной страницы админки */ protected function EventIndex() { /** * Определяем доступность установки расширенной админ-панели */ $aPluginsAll = func_list_plugins(true); if (in_array('admin', $aPluginsAll)) { $this->Viewer_Assign('availableAdminPlugin', true); } }
/** * Загрузка плагинов и делегирование * */ protected function LoadPlugins() { if ($aPluginList = func_list_plugins()) { foreach ($aPluginList as $sPluginName) { $sClassName = 'Plugin' . func_camelize($sPluginName); $oPlugin = new $sClassName(); $oPlugin->Delegate(); $this->aPlugins[$sPluginName] = $oPlugin; } } }
/** * Возвращает список плагинов с XML описанием * * @param array $aFilter * * @return array */ public function GetPluginsItems($aFilter = array()) { $aPluginItemsReturn = array(); $aPluginCodes = func_list_plugins(true); $aPluginItemsActive = $this->GetPluginsActive(); /** * Получаем версии из БД для всех плагинов */ if ($aPluginCodes) { $aVersionItems = $this->GetVersionItemsByFilter(array('code in' => $aPluginCodes, '#index-from' => 'code')); } else { $aVersionItems = array(); } foreach ($aPluginCodes as $sPluginCode) { /** * Получаем из XML файла описания */ if ($oXml = $this->GetPluginXmlInfo($sPluginCode)) { if (isset($aVersionItems[$sPluginCode])) { $sVersionDb = $aVersionItems[$sPluginCode]->getVersion(); } else { $sVersionDb = null; } $aInfo = array('code' => $sPluginCode, 'is_active' => in_array($sPluginCode, $aPluginItemsActive), 'property' => $oXml, 'apply_update' => (is_null($sVersionDb) or version_compare($sVersionDb, (string) $oXml->version, '<')) ? true : false); $aPluginItemsReturn[$sPluginCode] = $aInfo; } } /** * Если нужно сортировать плагины */ if (isset($aFilter['order'])) { if ($aFilter['order'] == 'name') { uasort($aPluginItemsReturn, function ($a, $b) { if ((string) $a['property']->name->data == (string) $b['property']->name->data) { return 0; } return (string) $a['property']->name->data < (string) $b['property']->name->data ? -1 : 1; }); } } return $aPluginItemsReturn; }