示例#1
0
 public static function IncludePackage($namePackage = null)
 {
     //Если имя пакета задано, пакет установлен и не был загружен ранее
     if (!is_null($namePackage) && isset(self::$arPackage[$namePackage]) && !isset(self::$arIncludedPackages[$namePackage])) {
         //Существует ли файл зависимостей пакетов
         if (file_exists(self::$packagesRoot . $namePackage . "/required.php")) {
             //Подключаем файл зависимостей пакетов
             __include_once(self::$packagesRoot . $namePackage . "/required.php");
             //Если массив обязательных пакетов не пуст
             if (!empty($arRequiredPackages)) {
                 //Смотрим все описанные пакеты
                 foreach ($arRequiredPackages as $required) {
                     //Если требуемый пакет установлен
                     if (isset(self::$arPackage[$required])) {
                         //Если требуемый пакет не был еще подключен
                         if (!isset(self::$arIncludedPackages[$required])) {
                             //Запускаем сами себя для подключения требуемого пакета
                             self::IncludePackage($required);
                         }
                     } else {
                         die("ERROR-[" . $namePackage . "]: Необходимо установить обязательный пакет [" . $required . "]");
                     }
                 }
             }
             //Если массив дополнительных пакетов не пуст
             if (!empty($arAdditionalPackages)) {
                 //Смотрим все описанные пакеты
                 foreach ($arAdditionalPackages as $additional) {
                     //Если требуемый пакет не установлен и не был еще подключен
                     if (isset(self::$arPackage[$additional]) && !isset(self::$arIncludedPackages[$additional])) {
                         //Запускаем сами себя для подключения требуемого пакета
                         self::IncludePackage($additional);
                     }
                 }
             }
         }
         //Подключаем основной файл пакета
         __include_once(self::$packagesRoot . $namePackage . "/include.php");
         $defTempl = false;
         //Если у пакета есть файл Опций по-умолчанию
         if (file_exists(self::$packagesRoot . $namePackage . "/default_options.php")) {
             //Сохраняем их
             $arPackageDefaultOptions = array();
             __include_once(self::$packagesRoot . $namePackage . "/default_options.php");
             if (isset($arPackageDefaultOptions) && !empty($arPackageDefaultOptions)) {
                 foreach ($arPackageDefaultOptions as $optionName => $optionValue) {
                     if ($optionName == "TEMPLATE") {
                         $defTempl = $optionValue;
                     }
                     Options::setPackageDefaultOption($optionName, $optionValue);
                 }
             }
         }
         //Если код шаблона не был установлен, устанавливаем шаблон по-умолчанию .default
         if (!$defTempl) {
             $defTempl = '.default';
         }
         //Загружаем языковые файлы для пакета
         Loc::setModuleMessages($namePackage);
         //Путь к публичной директории
         self::$arPackage[$namePackage]["PUBLIC"] = self::$packagesRoot . $namePackage . "/public/";
         //Относительный путь к публичной директории
         self::$arPackage[$namePackage]["SITE_PUBLIC"] = str_replace(Config::getConfig('SITE_ROOT'), "", self::$arPackage[$namePackage]["PUBLIC"]);
         self::$arPackage[$namePackage]["SITE_PUBLIC"] = str_replace('\\', "/", self::$arPackage[$namePackage]["SITE_PUBLIC"]);
         //Путь к загружаемым файлам пакета
         self::$arPackage[$namePackage]["UPLOAD"] = static::$uploadRoot . $namePackage . "/";
         //Путь к действующему шаблону пакета
         static::$arPackage[$namePackage]["TEMPLATE"] = static::$packagesRoot . $namePackage . "/templates/" . $defTempl . "/";
         //Относительный путь к действующему шаблону пакета
         static::$arPackage[$namePackage]["SITE_TEMPLATE"] = str_replace(Config::getConfig("SITE_ROOT"), "", static::$arPackage[$namePackage]["TEMPLATE"]);
         //Устанавливаем флаг успешной загрузки пакета
         self::$arIncludedPackages[$namePackage] = true;
         return true;
     } else {
         return false;
     }
 }