/** * Загружает список виджетов и конфигурирует их * * @return array */ protected function _loadWidgetsList() { // Список виджетов из основного конфига $aWidgets = (array) Config::Get('widgets'); // Добавляем списки виджетов из конфигов плагинов $aPlugins = F::GetPluginsList(); if ($aPlugins) { foreach ($aPlugins as $sPlugin) { if ($aPluginWidgets = Config::Get('plugin.' . $sPlugin . '.widgets')) { foreach ($aPluginWidgets as $xKey => $aWidgetData) { // ID виджета может задаваться либо ключом элемента массива, либо параметром 'id' if (isset($aWidgetData['id'])) { $sWidgetId = $aWidgetData['id']; } elseif (!is_integer($xKey)) { $sWidgetId = $aWidgetData['id'] = $xKey; } else { $sWidgetId = null; } $aWidgetData = $this->_getWidgetData($sWidgetId, $aWidgetData, $aWidgets); if ($sWidgetId) { $aWidgets[$sWidgetId] = $aWidgetData; } else { $aWidgets[] = $aWidgetData; } } //$aWidgets = F::Array_MergeCombo($aWidgets, $aPluginWidgets); } } } $aResult = array(); if ($aWidgets) { // формируем окончательный список виджетов foreach ($aWidgets as $sKey => $aWidgetData) { if ($aWidgetData) { // Если ID виджета не задан, то он формируется автоматически if (!isset($aWidgetData['id']) && !is_numeric($sKey)) { $aWidgetData['id'] = $sKey; } $oWidget = $this->MakeWidget($aWidgetData); $aResult[$oWidget->getId()] = $oWidget; } } } return $aResult; }
/** * Возвращает информацию о пути до файла класса. * Используется в {@link autoload автозагрузке} * * @static * * @param LsObject|string $oObject Объект - модуль, экшен, плагин, хук, сущность * @param int $iArea В какой области проверять (классы движка, общие классы, плагины) * * @return null|string */ public static function GetClassPath($oObject, $iArea = self::CI_AREA_ACTUAL) { $aInfo = static::GetClassInfo($oObject, self::CI_OBJECT); $sPluginDir = ''; if ($aInfo[self::CI_PLUGIN]) { $sPlugin = F::StrUnderscore($aInfo[self::CI_PLUGIN]); $aPlugins = F::GetPluginsList($iArea & self::CI_AREA_ALL_PLUGINS, false); if (isset($aPlugins[$sPlugin]['dirname'])) { $sPluginDir = $aPlugins[$sPlugin]['dirname']; } else { $sPluginDir = $sPlugin; } } $aPathSeek = Config::Get('path.root.seek'); if ($aInfo[self::CI_ENTITY]) { // Сущность if ($aInfo[self::CI_PLUGIN]) { // Сущность модуля плагина $sFile = 'plugins/' . $sPluginDir . '/classes/modules/' . F::StrUnderscore($aInfo[self::CI_MODULE]) . '/entity/' . $aInfo[self::CI_ENTITY] . '.entity.class.php'; } else { // Сущность модуля ядра $sFile = 'classes/modules/' . strtolower($aInfo[self::CI_MODULE]) . '/entity/' . $aInfo[self::CI_ENTITY] . '.entity.class.php'; } } elseif ($aInfo[self::CI_MAPPER]) { // Маппер if ($aInfo[self::CI_PLUGIN]) { // Маппер модуля плагина $sFile = 'plugins/' . $sPluginDir . '/classes/modules/' . F::StrUnderscore($aInfo[self::CI_MODULE]) . '/mapper/' . $aInfo[self::CI_MAPPER] . '.mapper.class.php'; } else { // Маппер модуля ядра $sFile = 'classes/modules/' . strtolower($aInfo[self::CI_MODULE]) . '/mapper/' . $aInfo[self::CI_MAPPER] . '.mapper.class.php'; } } elseif ($aInfo[self::CI_ACTION]) { // Экшн if ($aInfo[self::CI_PLUGIN]) { // Экшн плагина $sFile = 'plugins/' . $sPluginDir . '/classes/actions/Action' . $aInfo[self::CI_ACTION] . '.class.php'; } else { // Экшн ядра $sFile = 'classes/actions/Action' . $aInfo[self::CI_ACTION] . '.class.php'; } } elseif ($aInfo[self::CI_MODULE]) { // Модуль if ($aInfo[self::CI_PLUGIN]) { // Модуль плагина $sFile = 'plugins/' . $sPluginDir . '/classes/modules/' . F::StrUnderscore($aInfo[self::CI_MODULE]) . '/' . $aInfo[self::CI_MODULE] . '.class.php'; } else { // Модуль ядра $sFile = 'classes/modules/' . strtolower($aInfo[self::CI_MODULE]) . '/' . $aInfo[self::CI_MODULE] . '.class.php'; } } elseif ($aInfo[self::CI_HOOK]) { // Хук if ($aInfo[self::CI_PLUGIN]) { // Хук плагина $sFile = 'plugins/' . $sPluginDir . '/classes/hooks/Hook' . $aInfo[self::CI_HOOK] . '.class.php'; } else { // Хук ядра $sFile = 'classes/hooks/Hook' . $aInfo[self::CI_HOOK] . '.class.php'; } } elseif ($aInfo[self::CI_BLOCK]) { // LS-compatible if ($aInfo[self::CI_PLUGIN]) { // Блок плагина $sFile = 'plugins/' . $sPluginDir . '/classes/blocks/Block' . $aInfo[self::CI_BLOCK] . '.class.php'; } else { // Блок ядра $sFile = 'classes/blocks/Block' . $aInfo[self::CI_BLOCK] . '.class.php'; } } elseif ($aInfo[self::CI_WIDGET]) { // Виджет if ($aInfo[self::CI_PLUGIN]) { // Виджет плагина $sFile = 'plugins/' . $sPluginDir . '/classes/widgets/Widget' . $aInfo[self::CI_WIDGET] . '.class.php'; } else { // Блок ядра $sFile = 'classes/widgets/Widget' . $aInfo[self::CI_WIDGET] . '.class.php'; } } elseif ($aInfo[self::CI_PLUGIN]) { // Плагин $sFile = 'plugins/' . $sPluginDir . '/Plugin' . $aInfo[self::CI_PLUGIN] . '.class.php'; } else { $sClassName = is_string($oObject) ? $oObject : get_class($oObject); $sFile = $sClassName . '.class.php'; $aPathSeek = array(Config::Get('path.dir.engine') . '/classes/core/', Config::Get('path.dir.engine') . '/classes/abstract/'); } $sPath = F::File_Exists($sFile, $aPathSeek); return $sPath ? $sPath : null; }
/** * Загружает текстовки из языковых файлов * * @param $sLangName - Язык для загрузки * @param $sLangFor - Для какого языка выполняется загрузка */ protected function LoadLangFiles($sLangName, $sLangFor = null) { if (!$sLangFor) { $sLangFor = $this->sCurrentLang; } // Подключаем основной языковой файл $this->_loadFiles($this->aLangPaths, $sLangName, null, $sLangFor); // * Ищем языковые файлы модулей и объединяем их с текущим $sMask = '/modules/*/' . static::LANG_PATTERN . '.php'; $this->_loadFileByMask($this->aLangPaths, $sMask, $sLangName, 'module', $sLangFor); // * Ищет языковые файлы экшенов и объединяет их с текущим $sMask = '/actions/*/' . static::LANG_PATTERN . '.php'; $this->_loadFileByMask($this->aLangPaths, $sMask, $sLangName, 'action', $sLangFor); // * Ищем языковые файлы активированных плагинов if ($aPluginList = F::GetPluginsList()) { foreach ($aPluginList as $sPluginName) { $aDirs = Plugin::GetDirLang($sPluginName); foreach ($aDirs as $sDir) { $aParams = array('name' => $sPluginName, 'category' => 'plugin'); $this->_loadFiles($sDir, $sLangName, $aParams, $sLangFor); } } } // * Ищет языковой файл текущего шаблона $this->LoadLangFileTemplate($sLangName, $sLangFor); }
/** * Returns array of dirs with language files of the plugin * * @param object|string $xPlugin * * @return array */ public static function GetDirLang($xPlugin) { $aResult = array(); $aSeekDirs = Config::Get('path.root.seek'); $sPluginDirName = self::_pluginDirName($xPlugin); $aPluginList = F::GetPluginsList(true, false); $sManifestFile = null; if (isset($aPluginList[$sPluginDirName]['dirname'])) { $sPluginDirName = $aPluginList[$sPluginDirName]['dirname']; } foreach ($aSeekDirs as $sDir) { $sPluginDir = $sDir . '/plugins/' . $sPluginDirName . '/templates/language/'; if (is_dir($sPluginDir)) { $aResult[] = F::File_NormPath($sPluginDir); } } return $aResult; }
/** * Возвращает список активированных плагинов в системе * * @return array */ public function GetActivePlugins() { if (is_null($this->aActivePlugins)) { $this->aActivePlugins = F::GetPluginsList(false, false); } return $this->aActivePlugins; }
/** * Автоопределение класса или файла экшена * * @param string $sAction * @param string $sEvent * @param bool $bFullPath * * @return string|null */ public static function SeekActionClass($sAction, $sEvent = null, $bFullPath = false) { $bOk = false; $sActionClass = ''; $sFileName = 'Action' . ucfirst($sAction) . '.class.php'; // Сначала проверяем файл экшена среди стандартных $aSeekDirs = array(Config::Get('path.dir.app'), Config::Get('path.dir.common')); if ($sActionFile = F::File_Exists('/classes/actions/' . $sFileName, $aSeekDirs)) { $sActionClass = 'Action' . ucfirst($sAction); $bOk = true; } else { // Если нет, то проверяем файл экшена среди плагинов $aPlugins = F::GetPluginsList(false, false); foreach ($aPlugins as $sPlugin => $aPluginInfo) { if ($sActionFile = F::File_Exists('plugins/' . $aPluginInfo['dirname'] . '/classes/actions/' . $sFileName, $aSeekDirs)) { $sActionClass = 'Plugin' . F::StrCamelize($sPlugin) . '_Action' . ucfirst($sAction); $bOk = true; break; } } } if ($bOk) { return $bFullPath ? $sActionFile : $sActionClass; } return null; }
function func_list_plugins($bAll = false) { return F::GetPluginsList($bAll); }
/** * @return string */ protected static function _getHash() { return md5(ALTO_VERSION . serialize(F::GetPluginsList(false, true))); }