コード例 #1
0
ファイル: Lang.class.php プロジェクト: ZeoNish/altocms
 /**
  * Инициализация модуля
  *
  */
 public function Init()
 {
     E::ModuleHook()->Run('lang_init_start');
     $this->sDefaultLang = Config::Get('lang.default');
     $this->aLangPaths = F::File_NormPath(Config::Get('lang.paths'));
     // Проверку на языки делаем, только если сайт мультиязычный
     if (Config::Get('lang.multilang')) {
         // Время хранение языка в куках
         $nSavePeriod = F::ToSeconds(Config::Get('lang.save'));
         $sLangKey = is_string(Config::Get('lang.in_get')) ? Config::Get('lang.in_get') : 'lang';
         // Получаем язык, если он был задан в URL
         $this->sCurrentLang = R::GetLang();
         // Проверка куки, если требуется
         if (!$this->sCurrentLang && $nSavePeriod) {
             $sLang = (string) E::ModuleSession()->GetCookie($sLangKey);
             if ($sLang) {
                 $this->sCurrentLang = $sLang;
             }
         }
         if (!$this->sCurrentLang) {
             $this->sCurrentLang = Config::Get('lang.current');
         }
     } else {
         $this->sCurrentLang = Config::Get('lang.current');
     }
     // Проверяем на случай старого обозначения языков
     $this->sDefaultLang = $this->_checkLang($this->sDefaultLang);
     $this->sCurrentLang = $this->_checkLang($this->sCurrentLang);
     if ($this->sCurrentLang && Config::Get('lang.multilang') && $nSavePeriod) {
         // Пишем в куки, если требуется
         E::ModuleSession()->SetCookie($sLangKey, $this->sCurrentLang, $nSavePeriod);
     }
     $this->InitLang();
 }
コード例 #2
0
ファイル: function.asset.php プロジェクト: AntiqS/altocms
/**
 * Plugin for Smarty
 * Returns URL for skin asset file
 *
 * @param   array $aParams
 * @param   Smarty_Internal_Template $oSmartyTemplate
 *
 * @return  string
 */
function smarty_function_asset($aParams, $oSmartyTemplate)
{
    if (empty($aParams['skin']) && empty($aParams['file'])) {
        trigger_error('Asset: missing "file" parametr', E_USER_WARNING);
        return '';
    }
    if (isset($aParams['file'])) {
        if (stripos($aParams['file'], 'http://') === 0 || stripos($aParams['file'], 'https://') === 0 || stripos($aParams['file'], 'http://') === 0) {
            $sUrl = $aParams['file'];
        } else {
            if (F::File_LocalDir($aParams['file'])) {
                $sFile = $aParams['file'];
            } else {
                // Need URL to asset file
                if (empty($aParams['skin'])) {
                    $sSkin = E::ModuleViewer()->GetConfigSkin();
                } else {
                    $sSkin = $aParams['skin'];
                }
                if (isset($aParams['theme'])) {
                    if (is_bool($aParams['theme'])) {
                        $sTheme = E::ModuleViewer()->GetConfigTheme();
                    } else {
                        $sTheme = $aParams['theme'];
                    }
                } else {
                    $sTheme = '';
                }
                if ($sTheme) {
                    $sTheme = 'themes/' . $sTheme . '/';
                }
                if (isset($aParams['plugin'])) {
                    $sFile = Plugin::GetTemplateFile($aParams['plugin'], $aParams['file']);
                } else {
                    $sFile = Config::Get('path.skins.dir') . '/' . $sSkin . '/' . $sTheme . $aParams['file'];
                }
            }
            if (isset($aParams['prepare'])) {
                /** @var ModuleViewerAsset $oLocalViewerAsset */
                $oLocalViewerAsset = new ModuleViewerAsset();
                $oLocalViewerAsset->AddFiles(F::File_GetExtension($sFile, true), array($sFile));
                $oLocalViewerAsset->Prepare();
                $sUrl = $oLocalViewerAsset->AssetFileUrl(F::File_NormPath($sFile));
            } else {
                $sUrl = E::ModuleViewerAsset()->File2Link($sFile, 'skin/' . $sSkin . '/');
            }
        }
    } else {
        // Need URL to asset dir
        $sUrl = E::ModuleViewer()->GetAssetUrl() . 'skin/' . $aParams['skin'] . '/';
    }
    return $sUrl;
}
コード例 #3
0
ファイル: ActionSphinx.class.php プロジェクト: AntiqS/altocms
 public function EventConfig()
 {
     $sFile = Plugin::GetPath(__CLASS__) . 'config/sphinx-src.conf';
     $sText = F::File_GetContents($sFile);
     $sPath = F::File_NormPath(Config::Get('plugin.sphinx.path') . '/');
     $sDescription = E::ModuleLang()->Get('plugin.sphinx.conf_description', array('path' => $sPath, 'prefix' => Config::Get('plugin.sphinx.prefix')));
     $sDescription = preg_replace('/\\s\\s+/', ' ', str_replace("\n", "\n## ", $sDescription));
     $sTitle = E::ModuleLang()->Get('plugin.sphinx.conf_title');
     $aData = array('{{title}}' => $sTitle, '{{description}}' => $sDescription, '{{db_type}}' => Config::Get('db.params.type') == 'postgresql' ? 'pgsql' : 'mysql', '{{db_host}}' => Config::Get('db.params.host'), '{{db_user}}' => Config::Get('db.params.user'), '{{db_pass}}' => Config::Get('db.params.pass'), '{{db_name}}' => Config::Get('db.params.dbname'), '{{db_port}}' => Config::Get('db.params.port'), '{{db_prefix}}' => Config::Get('db.table.prefix'), '{{db_socket}}' => Config::Get('plugin.sphinx.db_socket'), '{{spinx_prefix}}' => Config::Get('plugin.sphinx.prefix'), '{{spinx_path}}' => $sPath);
     $sText = str_replace(array_keys($aData), array_values($aData), $sText);
     echo '<pre>';
     echo $sText;
     echo '</pre>';
     exit;
 }
コード例 #4
0
ファイル: ActionPlugin.class.php プロジェクト: AntiqS/altocms
 /**
  * Возвращает путь к текущему шаблону плагина
  *
  * @return string
  */
 public function getTemplatePathPlugin()
 {
     if (is_null($this->sTemplatePathPlugin)) {
         preg_match('/^Plugin([\\w]+)_Action([\\w]+)$/i', $this->GetActionClass(), $aMatches);
         /**
          * Проверяем в списке шаблонов
          */
         $sPlugin = strtolower($aMatches[1]);
         $sAction = strtolower($aMatches[2]);
         $sPluginDir = Plugin::GetDir($sPlugin);
         $aPaths = glob($sPluginDir . '/templates/skin/*/actions/' . $sAction, GLOB_ONLYDIR);
         $sTemplateName = $aPaths && in_array(Config::Get('view.skin'), array_map(create_function('$sPath', 'preg_match("/skin\\/([\\w\\-]+)\\/actions/i",$sPath,$aMatches); return $aMatches[1];'), $aPaths)) ? Config::Get('view.skin') : 'default';
         $sDir = F::File_NormPath($sPluginDir . '/templates/skin/' . $sTemplateName . '/');
         $this->sTemplatePathPlugin = is_dir($sDir) ? $sDir : null;
     }
     return $this->sTemplatePathPlugin;
 }
コード例 #5
0
ファイル: Lang.class.php プロジェクト: anp135/altocms
 /**
  * Инициализация модуля
  *
  */
 public function Init()
 {
     E::ModuleHook()->Run('lang_init_start');
     $this->sDefaultLang = Config::Get('lang.default');
     $this->aLangPaths = F::File_NormPath(Config::Get('lang.paths'));
     $this->bDeleteUndefinedVars = Config::Get('module.lang.delete_undefined');
     // Allowed languages
     $aLangsAllow = (array) Config::Get('lang.allow');
     // Проверку на языки делаем, только если сайт мультиязычный
     if (Config::Get('lang.multilang')) {
         // Время хранение языка в куках
         $iSavePeriod = F::ToSeconds(Config::Get('lang.save'));
         $sLangKey = is_string(Config::Get('lang.in_get')) ? Config::Get('lang.in_get') : 'lang';
         // Получаем язык, если он был задан в URL
         $this->sCurrentLang = R::GetLang();
         // Проверка куки, если требуется
         if (!$this->sCurrentLang && $iSavePeriod) {
             $sLang = (string) E::ModuleSession()->GetCookie($sLangKey);
             if ($sLang) {
                 $this->sCurrentLang = $sLang;
             }
         }
         if (!$this->sCurrentLang) {
             $this->sCurrentLang = Config::Get('lang.current');
         }
     } else {
         $this->sCurrentLang = Config::Get('lang.current');
         $iSavePeriod = 0;
         $sLangKey = null;
     }
     // Current language must be in allowed languages
     if (!in_array($this->sCurrentLang, $aLangsAllow)) {
         $this->sCurrentLang = reset($aLangsAllow);
     }
     // Проверяем на случай старого обозначения языков
     $this->sDefaultLang = $this->_checkLang($this->sDefaultLang);
     $this->sCurrentLang = $this->_checkLang($this->sCurrentLang);
     if ($this->sCurrentLang && Config::Get('lang.multilang') && $iSavePeriod) {
         // Пишем в куки, если требуется
         E::ModuleSession()->SetCookie($sLangKey, $this->sCurrentLang, $iSavePeriod);
     }
     $this->InitLang();
 }
コード例 #6
0
ファイル: Uploader.class.php プロジェクト: AntiqS/altocms
 /**
  * Path to user's upload dir
  *
  * @param int    $iUserId
  * @param string $sDir
  * @param bool   $bAutoMake
  *
  * @return string
  */
 protected function _getUserUploadDir($iUserId, $sDir, $bAutoMake = true)
 {
     $nMaxLen = 6;
     $nSplitLen = 2;
     $sPath = join('/', str_split(str_pad($iUserId, $nMaxLen, '0', STR_PAD_LEFT), $nSplitLen));
     $sResult = F::File_NormPath(F::File_RootDir() . $sDir . $sPath . '/');
     if ($bAutoMake) {
         F::File_CheckDir($sResult, $bAutoMake);
     }
     return $sResult;
 }
コード例 #7
0
ファイル: Loader.class.php プロジェクト: Azany/altocms
 /**
  * @param array $aConfig
  */
 public static function Init($aConfig)
 {
     // Регистрация автозагрузчика классов
     spl_autoload_register('Loader::Autoload');
     Config::Load($aConfig);
     $sConfigDir = Config::Get('path.dir.config');
     // Load main config
     Config::LoadFromFile($sConfigDir . '/config.php', false);
     // Load additional config files if defined
     $aConfigLoad = F::Str2Array(Config::Get('config_load'));
     if ($aConfigLoad) {
         self::_loadConfigSections($sConfigDir, $aConfigLoad);
     }
     // Includes all *.php files from {path.root.engine}/include/
     $sIncludeDir = Config::Get('path.dir.engine') . '/include/';
     self::_includeAllFiles($sIncludeDir);
     // Load main config level (modules, local & plugins)
     self::_loadConfigFiles($sConfigDir, Config::LEVEL_MAIN);
     // Define app config dir
     $sAppConfigDir = Config::Get('path.dir.app') . '/config/';
     // Ups config level
     Config::ResetLevel(Config::LEVEL_APP);
     // Load application config level (modules, local & plugins)
     self::_loadConfigFiles($sAppConfigDir, Config::LEVEL_APP);
     // Load additional config files (the set could be changed in this point)
     $aConfigLoad = F::Str2Array(Config::Get('config_load'));
     if ($aConfigLoad) {
         self::_loadConfigSections($sAppConfigDir, $aConfigLoad, Config::LEVEL_APP);
     }
     // Load include files of plugins
     self::_loadIncludeFiles(Config::LEVEL_MAIN);
     self::_loadIncludeFiles(Config::LEVEL_APP);
     self::_checkRequiredDirs();
     $aSeekDirClasses = array(Config::Get('path.dir.app'), Config::Get('path.dir.common'), Config::Get('path.dir.engine'));
     Config::Set('path.root.seek', $aSeekDirClasses);
     if (is_null(Config::Get('path.root.subdir'))) {
         if (isset($_SERVER['DOCUMENT_ROOT'])) {
             $sPathSubdir = '/' . F::File_LocalPath(ALTO_DIR, $_SERVER['DOCUMENT_ROOT']);
         } elseif ($iOffset = Config::Get('path.offset_request_url')) {
             $aParts = array_slice(explode('/', F::File_NormPath(ALTO_DIR)), -$iOffset);
             $sPathSubdir = '/' . implode('/', $aParts);
         } else {
             $sPathSubdir = '';
         }
         Config::Set('path.root.subdir', $sPathSubdir);
     }
     // Подгружаем конфиг из файлового кеша, если он есть
     Config::ResetLevel(Config::LEVEL_CUSTOM);
     $aConfig = Config::ReadCustomConfig(null, true);
     if ($aConfig) {
         Config::Load($aConfig, false, null, null, 'custom');
     }
     // Задаем локаль по умолчанию
     F::IncludeLib('UserLocale/UserLocale.class.php');
     // Устанавливаем признак того, является ли сайт многоязычным
     $aLangsAllow = (array) Config::Get('lang.allow');
     if (sizeof($aLangsAllow) > 1) {
         UserLocale::initLocales($aLangsAllow);
         Config::Set('lang.multilang', true);
     } else {
         Config::Set('lang.multilang', false);
     }
     UserLocale::setLocale(Config::Get('lang.current'), array('local' => Config::Get('i18n.locale'), 'timezone' => Config::Get('i18n.timezone')));
     Config::Set('i18n', UserLocale::getLocale());
     F::IncludeFile(Config::Get('path.dir.engine') . '/classes/core/Engine.class.php');
 }
コード例 #8
0
ファイル: Notify.class.php プロジェクト: AntiqS/altocms
 /**
  * Returns full path to email templates by name and plugin
  *
  * @param  string        $sName   Template name
  * @param  string|object $xPlugin Name or class of plugin
  *
  * @return string
  */
 public function GetTemplatePath($sName, $xPlugin = null)
 {
     if ($xPlugin) {
         $sPluginName = Plugin::GetPluginName($xPlugin);
     } else {
         $sPluginName = '';
     }
     $sCacheKey = 'template_path_' . $sName . '-' . $sPluginName;
     if (false === ($sResult = E::ModuleCache()->Get($sCacheKey, 'tmp'))) {
         $bFound = false;
         if ($sPluginName) {
             $sDir = Plugin::GetTemplateDir($sPluginName) . $this->sDir . '/';
         } else {
             $sDir = F::File_NormPath(E::ModuleViewer()->GetTemplateDir() . '/' . $this->sDir . '/');
         }
         // Find template by current language
         $sLangDir = $sDir . E::ModuleLang()->GetLang();
         if (is_dir($sLangDir)) {
             $sResult = $sLangDir . '/' . $sName;
             $bFound = true;
         }
         if (!$bFound) {
             // Find by aliases of current language
             if ($aAliases = E::ModuleLang()->GetLangAliases()) {
                 foreach ($aAliases as $sAlias) {
                     if (is_dir($sLangDir = $sDir . $sAlias)) {
                         $sResult = $sLangDir . '/' . $sName;
                         $bFound = true;
                         break;
                     }
                 }
             }
         }
         if (!$bFound) {
             // Find template by default language
             $sLangDir = $sDir . E::ModuleLang()->GetDefaultLang();
             if (is_dir($sLangDir)) {
                 $sResult = $sLangDir . '/' . $sName;
                 $bFound = true;
             }
         }
         if (!$bFound) {
             // Find by aliases of default language
             if ($aAliases = E::ModuleLang()->GetDefaultLangAliases()) {
                 foreach ($aAliases as $sAlias) {
                     if (is_dir($sLangDir = $sDir . $sAlias)) {
                         $sResult = $sLangDir . '/' . $sName;
                         $bFound = true;
                         break;
                     }
                 }
             }
         }
         if (!$bFound) {
             $sResult = $sDir . E::ModuleLang()->GetLangDefault() . '/' . $sName;
         }
         if (is_dir($sResult)) {
             E::ModuleCache()->Set($sResult, $sCacheKey, array(), 'P30D', 'tmp');
         }
     }
     return $sResult;
 }
コード例 #9
0
ファイル: Viewer.class.php プロジェクト: anp135/altocms
 /**
  * Возвращает путь к папке скина
  *
  * @param bool $bSiteSkin - Если задано, то возвращает скин, установленный для сайта (игнорирует скин экшена)
  *
  * @return  string
  */
 public function GetTemplateDir($bSiteSkin = true)
 {
     if ($bSiteSkin) {
         return F::File_NormPath(Config::Get('path.skins.dir') . '/' . $this->GetConfigSkin($bSiteSkin));
     } else {
         return Config::Get('path.smarty.template');
     }
 }
コード例 #10
0
ファイル: ViewerAsset.class.php プロジェクト: AntiqS/altocms
 /**
  * @param string $sType
  * @param array  $aFiles
  * @param array  $aOptions
  */
 public function AddFilesToAssets($sType, $aFiles, $aOptions = array())
 {
     if (!is_array($aFiles)) {
         $aFiles = array(array('file' => (string) $aFiles));
     }
     $aAssetFiles = array();
     $aFileList = array();
     // seek wildcards - if name hase '*' then add files by pattern
     foreach ($aFiles as $sFileName => $aFileParams) {
         if (strpos($sFileName, '*')) {
             unset($aFiles[$sFileName]);
             $aFoundFiles = F::File_ReadFileList($sFileName, 0, true);
             if ($aFoundFiles) {
                 foreach ($aFoundFiles as $sAddFile) {
                     $sAddType = F::File_GetExtension($sAddFile, true);
                     $aFileParams['name'] = $sAddFile;
                     $aFileParams['file'] = $sAddFile;
                     if ($sAddType == $sType) {
                         $aFileList[$sAddFile] = $aFileParams;
                     } else {
                         $this->AddFilesToAssets($sAddType, array($sAddFile => $aFileParams), $aOptions);
                     }
                 }
             }
         } else {
             $aFileList[$sFileName] = $aFileParams;
         }
     }
     foreach ($aFileList as $sFileName => $aFileParams) {
         // extract & normalize full file path
         if (isset($aFileParams['file'])) {
             $sFile = F::File_NormPath($aFileParams['file']);
         } else {
             $sFile = F::File_NormPath((string) $sFileName);
         }
         $sName = isset($aFileParams['name']) ? $aFileParams['name'] : $sFile;
         if (!is_array($aFileParams)) {
             $aFileParams = array();
         }
         $aFileParams['file'] = F::File_NormPath($sFile);
         $aFileParams['name'] = F::File_NormPath($sName);
         $aAssetFiles[$sName] = $aFileParams;
     }
     return $this->_add($sType, $aAssetFiles, $aOptions);
 }
コード例 #11
0
 /**
  * Returns full dir path to media resource
  *
  * @return string
  */
 public function GetFile()
 {
     $sPathFile = $this->GetPathFile();
     if (substr($sPathFile, 0, 1) == '@') {
         $sPathFile = F::File_NormPath(F::File_RootDir() . '/' . substr($sPathFile, 1));
     }
     return $sPathFile;
 }
コード例 #12
0
 /**
  * @param string $sUrl
  *
  * @return string
  */
 public function Url2Dir($sUrl)
 {
     if (F::File_LocalUrl($sUrl)) {
         $sDir = F::File_Url2Dir($sUrl);
         if (strpos($sDir, Config::Get('path.uploads.root')) === 0) {
             $sDir = F::File_NormPath(Config::Get('path.static.dir') . $sDir);
         } elseif (Config::Get('path.root.subdir') && strpos($sDir, Config::Get('path.root.subdir') . Config::Get('path.uploads.root')) === 0) {
             $sRootPath = substr(Config::Get('path.static.dir'), 0, -strlen(Config::Get('path.root.subdir')));
             $sDir = F::File_NormPath($sRootPath . $sDir);
         }
         return $sDir;
     }
 }
コード例 #13
0
 /**
  * Returns dir of template widget
  *
  * @return mixed
  */
 public function GetDir()
 {
     $sDir = $this->getProp('_dir');
     if (is_null($sDir)) {
         $sDir = $this->GetParam('dir');
         if ($sPlugin = $this->GetPluginId()) {
             $sDir = F::File_NormPath(Plugin::GetTemplateDir($sPlugin) . '/' . $sDir);
         }
         $this->setProp('_dir', $sDir);
     }
     return $sDir;
 }
コード例 #14
0
ファイル: Func.php プロジェクト: ZeoNish/altocms
 /**
  * Приведение адреса к абсолютному виду
  *
  * Путь в $sLocation может быть как абсолютным, так и относительным.
  * Абсолютный путь определяется по наличию хоста
  *
  * Если задан относительный путь, то итоговый URL определяется в зависимости от второго парамтера.
  * Если $bRealHost == false (по умолчанию), то за основу берется root-адрес сайта, который задан в конфигурации.
  * В противном случае основа адреса - это реальный адрес хоста из $_SERVER['SERVER_NAME']
  *
  * @param string  $sLocation  - адрес перехода (напр., 'http://ya.ru/demo/', '/123.html', 'blog/add/')
  * @param bool    $bRealHost  - в случае относительной адресации брать адрес хоста из конфига или реальный
  *
  * @return string
  */
 public static function RealUrl($sLocation, $bRealHost = false)
 {
     $sProtocol = static::HttpProtocol();
     $aParts = parse_url($sLocation);
     // если парсером хост не обнаружен, то задан относительный путь
     if (!isset($aParts['host'])) {
         if (!$bRealHost) {
             $sUrl = F::File_RootUrl() . $sLocation;
         } else {
             if (strpos($sProtocol, 'HTTPS') === 0) {
                 $sUrl = 'https://';
             } else {
                 $sUrl = 'http://';
             }
             if (isset($_SERVER['SERVER_NAME'])) {
                 $sUrl .= $_SERVER['SERVER_NAME'];
             }
             if (substr($sLocation, 0, 1) == '/') {
                 $sUrl .= $sLocation;
             } else {
                 if (isset($_SERVER['REQUEST_URI'])) {
                     $sUri = $_SERVER['REQUEST_URI'];
                     if ($n = strpos($sUri, '?')) {
                         $sUri = substr($sUri, 0, $n);
                     }
                     if ($n = strpos($sUri, '#')) {
                         $sUri = substr($sUri, 0, $n);
                     }
                     $sUrl .= '/' . $sUri;
                 }
                 $sUrl .= '/' . $sLocation;
             }
         }
     } else {
         $sUrl = $sLocation;
     }
     return F::File_NormPath($sUrl);
 }
コード例 #15
0
 /**
  * Возвращает ссылку фото определенного размера
  *
  * @param string|null $xSize    Размер фото, например, '100' или '150crop' или '150x100' или 'x100'
  *
  * @return null|string
  */
 public function getLink($xSize = null)
 {
     if ($sUrl = $this->getPath()) {
         if ($xSize) {
             $sResizedUrl = $this->getProp('_size-' . $xSize . '-url');
             if ($sResizedUrl) {
                 return $sResizedUrl;
             }
             $aPathInfo = pathinfo($sUrl);
             if (E::ActivePlugin('ls')) {
                 // Включена совместимость с LS
                 $sResizedUrl = $aPathInfo['dirname'] . '/' . $aPathInfo['filename'] . '_' . $xSize . '.' . $aPathInfo['extension'];
                 if (F::File_LocalUrl($sResizedUrl) && !F::File_Exists(F::File_Url2Dir($sResizedUrl))) {
                     $sResizedUrl = '';
                 }
             }
             if (!$sResizedUrl) {
                 $sModSuffix = F::File_ImgModSuffix($xSize, $aPathInfo['extension']);
                 if ($sModSuffix) {
                     $sResizedUrl = $sUrl . $sModSuffix;
                     if (Config::Get('module.image.autoresize')) {
                         $sFile = E::ModuleUploader()->Url2Dir($sResizedUrl);
                         $this->setProp('_size-' . $xSize . '-file', $sFile);
                         if (!F::File_Exists($sFile)) {
                             E::ModuleImg()->Duplicate($sFile);
                         }
                     }
                 }
             }
             if ($sResizedUrl) {
                 $sUrl = F::File_NormPath($sResizedUrl);
             }
             $this->setProp('_size-' . $xSize . '-url', $sUrl);
         }
     }
     return $sUrl;
 }
コード例 #16
0
ファイル: Plugin.class.php プロジェクト: ZeoNish/altocms
 /**
  * Распаковывает архив с плагином и перемещает его в нужную папку
  *
  * @param $sPackFile
  *
  * @return  bool
  */
 public function UnpackPlugin($sPackFile)
 {
     $zip = new ZipArchive();
     if ($zip->open($sPackFile) === true) {
         $sUnpackDir = F::File_NormPath(dirname($sPackFile) . '/_unpack/');
         if (!$zip->extractTo($sUnpackDir)) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.err_extract_zip_file'), E::ModuleLang()->Get('error'));
             return false;
         } else {
             // Ищем в папках XML-манифест
             $aDirs = glob($sUnpackDir . '*', GLOB_ONLYDIR);
             $sXmlFile = '';
             if ($aDirs) {
                 foreach ($aDirs as $sDir) {
                     if ($sXmlFile = $this->_seekManifest($sDir . '/')) {
                         break;
                     }
                 }
             }
             if (!$sXmlFile) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.file_not_found', array('file' => self::PLUGIN_XML_FILE)), E::ModuleLang()->Get('error'));
                 return false;
             }
             $sPluginSrc = dirname($sXmlFile);
             // try to define plugin's dirname
             $oXml = @simplexml_load_file($sXmlFile);
             if (!$oXml) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.err_read_xml', array('file' => $sXmlFile)), E::ModuleLang()->Get('error'));
                 return false;
             }
             $sPluginDir = (string) $oXml->dirname;
             if (!$sPluginDir) {
                 $sPluginDir = (string) $oXml->id;
             }
             if (!$sPluginDir) {
                 $sPluginDir = basename($sPluginSrc);
             }
             $sPluginPath = $this->GetPluginsDir() . '/' . $sPluginDir . '/';
             if (F::File_CopyDir($sPluginSrc, $sPluginPath)) {
                 E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.plugin_added_ok'));
             } else {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.plugin_added_err'), E::ModuleLang()->Get('error'));
             }
         }
         $zip->close();
     } else {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.err_open_zip_file'), E::ModuleLang()->Get('error'));
     }
     return true;
 }
コード例 #17
0
 /**
  * @param string $sFileName
  * @param array  $aFileParams
  * @param string $sAssetName
  *
  * @return array
  */
 protected function _prepareParams($sFileName, $aFileParams, $sAssetName)
 {
     // Проверка набора параметров файла
     if (!$aFileParams) {
         $aFileParams = array('file' => F::File_NormPath($sFileName));
     } elseif (!isset($aFileParams['file'])) {
         $aFileParams['file'] = F::File_NormPath($sFileName);
     }
     $aFileParams['info'] = F::File_PathInfo($aFileParams['file']);
     // Ссылка или локальный файл
     if (isset($aFileParams['info']['scheme']) && $aFileParams['info']['scheme']) {
         $aFileParams['link'] = true;
     } else {
         $aFileParams['link'] = false;
     }
     // Ссылки пропускаются без обработки
     $aFileParams['throw'] = $aFileParams['link'];
     // По умолчанию файл сливается с остальными,
     // но хаки (с параметром 'browser') и внешние файлы (ссылки) не сливаются
     if (isset($aFileParams['browser']) || $aFileParams['throw']) {
         $aFileParams['merge'] = false;
     }
     if (!isset($aFileParams['merge'])) {
         $aFileParams['merge'] = true;
     }
     if (!isset($aFileParams['compress'])) {
         // Dont need to minify minified files
         if (substr($aFileParams['info']['filename'], -4) == '.min') {
             //$aFileParams['compress'] = false;
         } else {
             $aFileParams['compress'] = $this->bCompress;
         }
     }
     if ($this->bMerge && $aFileParams['merge']) {
         // Определяем имя набора
         if (!$sAssetName) {
             if (isset($aFileParams['asset'])) {
                 $sAssetName = $aFileParams['asset'];
             } elseif (isset($aFileParams['block'])) {
                 $sAssetName = $aFileParams['block'];
             } else {
                 $sAssetName = 'default';
             }
         }
     } else {
         // Если слияние отключено, то каждый набор - это отдельный файл
         $sAssetName = F::File_NormPath($sFileName);
         $aFileParams['merge'] = false;
     }
     $aFileParams['asset'] = $sAssetName;
     if (!isset($aFileParams['name'])) {
         $aFileParams['name'] = $sFileName;
     }
     if (!isset($aFileParams['browser'])) {
         $aFileParams['browser'] = null;
     }
     $aFileParams['prepare'] = isset($aFileParams['prepare']) ? (bool) isset($aFileParams['prepare']) : false;
     $aFileParams['name'] = F::File_NormPath($aFileParams['name']);
     return $aFileParams;
 }
コード例 #18
0
ファイル: Mresource.class.php プロジェクト: hard990/altocms
 /**
  * Нормализация URL
  *
  * @param string|array $xUrl
  * @param string       $sReplace
  * @param string       $sAdditional
  *
  * @return array|string
  */
 public function NormalizeUrl($xUrl, $sReplace = '@', $sAdditional = '')
 {
     if (is_array($xUrl)) {
         foreach ($xUrl as $nI => $sUrl) {
             $xUrl[$nI] = $this->NormalizeUrl((string) $sUrl, $sReplace, $sAdditional);
         }
         return $xUrl;
     }
     $sUrl = str_replace(array('http://@' . $sAdditional, 'https://@' . $sAdditional, 'ftp://@' . $sAdditional), $sReplace, $xUrl);
     return F::File_NormPath($sUrl);
 }
コード例 #19
0
 /**
  * Path to temporary preview image
  *
  * @param string $sFileName
  *
  * @return string
  */
 protected function _getTmpPreviewName($sFileName)
 {
     $sFileName = basename($sFileName) . '-preview.' . pathinfo($sFileName, PATHINFO_EXTENSION);
     $sFileName = F::File_RootDir() . Config::Get('path.uploads.images') . 'tmp/' . $sFileName;
     return F::File_NormPath($sFileName);
 }
コード例 #20
0
ファイル: Func.php プロジェクト: AntiqS/altocms
 /**
  * Приведение адреса к абсолютному виду
  *
  * Путь в $sLocation может быть как абсолютным, так и относительным.
  * Абсолютный путь определяется по наличию хоста
  *
  * Если задан относительный путь, то итоговый URL определяется в зависимости от второго парамтера.
  * Если $bRealHost == false (по умолчанию), то за основу берется root-адрес сайта, который задан в конфигурации.
  * В противном случае основа адреса - это реальный адрес хоста из $_SERVER['SERVER_NAME']
  *
  * @param string  $sLocation  - адрес перехода (напр., 'http://ya.ru/demo/', '/123.html', 'blog/add/')
  * @param bool    $bRealHost  - в случае относительной адресации брать адрес хоста из конфига или реальный
  *
  * @return string
  */
 public static function RealUrl($sLocation, $bRealHost = false)
 {
     // если парсером хост не обнаружен, то задан относительный путь
     if (!parse_url($sLocation, PHP_URL_HOST)) {
         if (!$bRealHost) {
             $sUrl = F::File_RootUrl() . $sLocation;
         } else {
             $sUrl = static::UrlBase() . '/' . $sLocation;
         }
     } else {
         $sUrl = $sLocation;
     }
     return F::File_NormPath($sUrl);
 }
コード例 #21
0
ファイル: Uploader.class.php プロジェクト: anp135/altocms
 /**
  * @param $sDir
  *
  * @return bool
  */
 public function CompleteDir($sDir)
 {
     $sDrive = $this->_getDrive($sDir, $sPath);
     if ($sDrive) {
         $sRootDir = C::Get('module.uploader.drives.' . $sDrive . '.dir');
         // Old version compatibility
         if (!$sRootDir && $sDrive === 'local') {
             $sRootDir = C::Get('path.root.dir');
         }
         if ($sRootDir) {
             return F::File_NormPath($sRootDir . '/' . $sPath);
         }
     }
     return $sDir;
 }
コード例 #22
0
ファイル: Plugin.class.php プロジェクト: ZeoNish/altocms
 /**
  * Возвращает правильный серверный путь к директории шаблонов с учетом текущего скина
  * Если используется скин, которого нет в плагине, то возвращается путь до скина плагина 'default'
  *
  * @param string $sPluginName    Название плагина или его класс
  * @param string $sCompatibility
  *
  * @return string|null
  */
 public static function GetTemplateDir($sPluginName, $sCompatibility = null)
 {
     $sPluginName = self::_pluginName($sPluginName);
     $sViewSkin = Config::Get('view.skin');
     if (!isset(self::$aTemplateDir[$sViewSkin][$sPluginName][''])) {
         $aSkins = self::GetSkins($sPluginName);
         if ($aSkins && in_array(Config::Get('view.skin'), $aSkins)) {
             $sSkinName = Config::Get('view.skin');
         } else {
             $sSkinName = self::GetDefaultSkin($sPluginName, $sCompatibility);
         }
         $sDir = self::GetDir($sPluginName) . '/templates/skin/' . $sSkinName . '/';
         self::$aTemplateDir[$sViewSkin][$sPluginName][''] = is_dir($sDir) ? F::File_NormPath($sDir) : null;
     }
     return self::$aTemplateDir[$sViewSkin][$sPluginName][''];
 }
コード例 #23
0
 /**
  * @param string $sFileName
  * @param array  $aFileParams
  * @param string $sAssetName
  *
  * @return array
  */
 protected function _prepareParams($sFileName, $aFileParams, $sAssetName)
 {
     // Проверка набора параметров файла
     if (!$aFileParams) {
         $aFileParams = array('file' => F::File_NormPath($sFileName));
     } elseif (!isset($aFileParams['file'])) {
         $aFileParams['file'] = F::File_NormPath($sFileName);
     }
     $aFileParams['info'] = F::File_PathInfo($aFileParams['file']);
     // Ссылка или локальный файл
     if (isset($aFileParams['info']['scheme']) && $aFileParams['info']['scheme']) {
         $aFileParams['link'] = true;
     } else {
         $aFileParams['link'] = false;
     }
     // Ссылки пропускаются без обработки
     $aFileParams['throw'] = $aFileParams['link'];
     // По умолчанию файл сливается с остальными,
     // но хаки (с параметром 'browser') и внешние файлы (ссылки) не сливаются
     if (isset($aFileParams['browser']) || $aFileParams['throw']) {
         $aFileParams['merge'] = false;
     }
     if (!isset($aFileParams['merge'])) {
         $aFileParams['merge'] = true;
     }
     if (!isset($aFileParams['compress'])) {
         // Dont need to minify minified files
         if (substr($aFileParams['info']['filename'], -4) == '.min') {
             //$aFileParams['compress'] = false;
         } else {
             $aFileParams['compress'] = $this->bCompress;
         }
     }
     if (!$this->bMerge) {
         $aFileParams['merge'] = false;
     }
     if (!isset($aFileParams['name'])) {
         $aFileParams['name'] = $sFileName;
     }
     if (!isset($aFileParams['browser'])) {
         $aFileParams['browser'] = null;
     }
     $aFileParams['prepare'] = isset($aFileParams['prepare']) ? (bool) isset($aFileParams['prepare']) : false;
     $aFileParams['name'] = F::File_NormPath($aFileParams['name']);
     $aFileParams['asset'] = $this->_defineAssetName($aFileParams, $sAssetName);
     /*
      * Если среди файлов дефолтных наборов встречается ссылка,
      * то может быть нарушен порядок добавления файлов, а он иногда важен.
      * Для того, чтобы этого избежать, мы разбиваем дефолтные наборы на поднаборы,
      * если среди них есть ссылки. Для этого и используется $this->iAssetNum
      */
     // Это необходимо, чтобы файлы из дефолтных наборов шли в том же порядке, как
     if ($aFileParams['link']) {
         $this->iAssetNum += 1;
     }
     return $aFileParams;
 }