/** * Инициализация модуля * */ 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(); }
/** * 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; }
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; }
/** * Возвращает путь к текущему шаблону плагина * * @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; }
/** * Инициализация модуля * */ 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(); }
/** * 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; }
/** * @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'); }
/** * 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; }
/** * Возвращает путь к папке скина * * @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'); } }
/** * @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); }
/** * 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; }
/** * @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; } }
/** * 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; }
/** * Приведение адреса к абсолютному виду * * Путь в $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); }
/** * Возвращает ссылку фото определенного размера * * @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; }
/** * Распаковывает архив с плагином и перемещает его в нужную папку * * @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; }
/** * @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; }
/** * Нормализация 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); }
/** * 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); }
/** * Приведение адреса к абсолютному виду * * Путь в $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); }
/** * @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; }
/** * Возвращает правильный серверный путь к директории шаблонов с учетом текущего скина * Если используется скин, которого нет в плагине, то возвращается путь до скина плагина '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]['']; }
/** * @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; }