2017-04-15 01:34:36 +03:00

157 lines
5.6 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Класс настроечных функций ExtraPacker-а
*
* @author Zmi
*/
class ExtraPacker_Config
{
private static function GetDocRoot()
{
$path = BASEPATH;
if (SITE_IN_DIR)
{
$path = substr($path, 0, strrpos($path, SITE_IN_DIR));
}
return $path;
}
private static function GetPathFromUrl($url)
{
$url = substr($url, strpos($url, SITE_ROOT) + strlen(SITE_ROOT));
return self::GetDocRoot() . $url;
}
public static function GetPathJsFileFromUrl($url)
{
return self::GetPathFromUrl($url);
}
public static function GetPathCssFileFromUrl($url)
{
return self::GetPathFromUrl($url);
}
private static function GetAddrPackFile($path)
{
return str_replace(self::GetDocRoot(), '/', $path);
}
public static function GetAddrJsPackFile($path)
{
return self::GetAddrPackFile($path);
}
public static function GetAddrCssPackFile($path)
{
return self::GetAddrPackFile($path);
}
public static function ChangeCssUrl($m)
{
// Если сайт в папке то надо добавить эту папку в пути поиска
$docRoot = str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']);
$docRoot = substr($docRoot, -1, 1) == '/' ? substr($docRoot, 0, -1) : $docRoot;
$dir = str_replace($docRoot, '', BASEPATH);
$dir = trim($dir, '/');
$dir = empty($dir) ? '' : "/{$dir}";
$curUrl = $dir . $GLOBALS['__engineExtraPackerChangeCssUrl__curUrl__'];
$url = isset($m[1]) ? trim($m[1], '\'"') : '';
if ($url)
{
// Это не Less-переменная, не путь вида http://google.com/ и не url(data:image/png;base64,....
if (strpos($url, "@") === false && strpos($url, "://") === false && strpos($url, "data:") !== 0)
{
// Это не абсолютный адрес
if ($url[0] !== '/')
{
$url = "$curUrl/$url";
}
// Если это абсолтный путь но к корню это сайта, но сайт запущен из каталога то переделываем пути так что бы они были как-будто из каталога
elseif (strlen($dir) && strpos($url, $dir) === false)
{
$url = $dir . $url;
}
}
}
return $url;
}
public static function ChangeCssUrl_Url($url)
{
$url = self::ChangeCssUrl($url);
return "url('$url')";
}
public static function ChangeCssUrl_Src($url)
{
$url = self::ChangeCssUrl($url);
return "src='$url'";
}
/**
* Предобработка каждого файла перед помещением в общий архив
*
* @param string $content
* @param string $file
* @param string $type либо js либо css
*/
public static function PrepareEachFile($content, $path, $type)
{
global $g_config;
$url = str_replace(BASEPATH, '/', $path);
if ($type == 'css')
{
// Меняем пути к файлам
$GLOBALS['__engineExtraPackerChangeCssUrl__curUrl__'] = dirname($url);
$content = preg_replace_callback("~url\((.*?)\)~is", array(__CLASS__, "ChangeCssUrl_Url"), $content);
unset($GLOBALS['__engineExtraPackerChangeCssUrl__curUrl__']);
}
return $content;
}
/**
* Подготовка спакованного js-контента перед записью в файл
*
* Данная функция по умолчанию дописывает пустой обработчик ошибок в начало js файла если это production
*/
public static function PrepareAllJs($content)
{
global $g_config;
$noErrorsCode = '';
// Если не debug режим то выключаем javascript ошибки
if (!$g_config['phpIni']['display_errors'])
{
ob_start();
?>
function __MyErrHandler(msg)
{
return true;
}
window.onerror = __MyErrHandler;
<?php
$noErrorsCode = ob_get_clean();
}
return $noErrorsCode . $content;
}
/**
* Подготовка всего спакованного контента css перед записью в файл
*
* Пример использования:
* Пусть у нас галит ф-я переписывания путей к картинкам в css, и она ставит BASEPATH тогда можно сделать что-то вроде такого:
* return str_replace("/home/Sites/test.com/i/", "/i/")
*/
public static function PrepareAllCss($content)
{
return $content;
}
};
?>