mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-29 04:55:02 +03:00
Документация классов
This commit is contained in:
parent
47f17cd5f3
commit
8f84688a07
46
engine/modules/cache/Cache.class.php
vendored
46
engine/modules/cache/Cache.class.php
vendored
|
@ -99,11 +99,11 @@ class ModuleCache extends Module {
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aStats=array(
|
protected $aStats=array(
|
||||||
'time' =>0,
|
'time' =>0,
|
||||||
'count' => 0,
|
'count' => 0,
|
||||||
'count_get' => 0,
|
'count_get' => 0,
|
||||||
'count_set' => 0,
|
'count_set' => 0,
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
* Хранилище для кеша на время сессии
|
* Хранилище для кеша на время сессии
|
||||||
* @see SetLife
|
* @see SetLife
|
||||||
|
@ -128,7 +128,7 @@ class ModuleCache extends Module {
|
||||||
public function Init() {
|
public function Init() {
|
||||||
$this->bUseCache=Config::Get('sys.cache.use');
|
$this->bUseCache=Config::Get('sys.cache.use');
|
||||||
$this->sCacheType=Config::Get('sys.cache.type');
|
$this->sCacheType=Config::Get('sys.cache.type');
|
||||||
|
|
||||||
if (!$this->bUseCache) {
|
if (!$this->bUseCache) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -142,28 +142,28 @@ class ModuleCache extends Module {
|
||||||
'cache_dir' => Config::Get('sys.cache.dir'),
|
'cache_dir' => Config::Get('sys.cache.dir'),
|
||||||
'file_name_prefix' => Config::Get('sys.cache.prefix'),
|
'file_name_prefix' => Config::Get('sys.cache.prefix'),
|
||||||
'read_control_type' => 'crc32',
|
'read_control_type' => 'crc32',
|
||||||
'hashed_directory_level' => Config::Get('sys.cache.directory_level'),
|
'hashed_directory_level' => Config::Get('sys.cache.directory_level'),
|
||||||
'read_control' => true,
|
'read_control' => true,
|
||||||
'file_locking' => true,
|
'file_locking' => true,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$this->oBackendCache = new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats'));
|
$this->oBackendCache = new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats'));
|
||||||
/**
|
/**
|
||||||
* Кеш на основе Memcached
|
* Кеш на основе Memcached
|
||||||
*/
|
*/
|
||||||
} elseif ($this->sCacheType==SYS_CACHE_TYPE_MEMORY) {
|
} elseif ($this->sCacheType==SYS_CACHE_TYPE_MEMORY) {
|
||||||
require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Memcached.php');
|
require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Memcached.php');
|
||||||
$aConfigMem=Config::Get('memcache');
|
$aConfigMem=Config::Get('memcache');
|
||||||
|
|
||||||
$oCahe = new Dklab_Cache_Backend_MemcachedMultiload($aConfigMem);
|
$oCahe = new Dklab_Cache_Backend_MemcachedMultiload($aConfigMem);
|
||||||
$this->oBackendCache = new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats')));
|
$this->oBackendCache = new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats')));
|
||||||
/**
|
/**
|
||||||
* Кеш на основе XCache
|
* Кеш на основе XCache
|
||||||
*/
|
*/
|
||||||
} elseif ($this->sCacheType==SYS_CACHE_TYPE_XCACHE) {
|
} elseif ($this->sCacheType==SYS_CACHE_TYPE_XCACHE) {
|
||||||
require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Xcache.php');
|
require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Xcache.php');
|
||||||
$aConfigMem=Config::Get('xcache');
|
$aConfigMem=Config::Get('xcache');
|
||||||
|
|
||||||
$oCahe = new Zend_Cache_Backend_Xcache(is_array($aConfigMem) ? $aConfigMem : array());
|
$oCahe = new Zend_Cache_Backend_Xcache(is_array($aConfigMem) ? $aConfigMem : array());
|
||||||
$this->oBackendCache = new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats')));
|
$this->oBackendCache = new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats')));
|
||||||
} else {
|
} else {
|
||||||
|
@ -172,8 +172,8 @@ class ModuleCache extends Module {
|
||||||
/**
|
/**
|
||||||
* Дабы не засорять место протухшим кешем, удаляем его в случайном порядке, например 1 из 50 раз
|
* Дабы не засорять место протухшим кешем, удаляем его в случайном порядке, например 1 из 50 раз
|
||||||
*/
|
*/
|
||||||
if (rand(1,50)==33) {
|
if (rand(1,50)==33) {
|
||||||
$this->Clean(Zend_Cache::CLEANING_MODE_OLD);
|
$this->Clean(Zend_Cache::CLEANING_MODE_OLD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -242,7 +242,7 @@ class ModuleCache extends Module {
|
||||||
if ($data and is_array($data)) {
|
if ($data and is_array($data)) {
|
||||||
$aData=array();
|
$aData=array();
|
||||||
foreach ($data as $key => $value) {
|
foreach ($data as $key => $value) {
|
||||||
$aData[$aKv[$key]]=$value;
|
$aData[$aKv[$key]]=$value;
|
||||||
}
|
}
|
||||||
if (count($aData)>0) {
|
if (count($aData)>0) {
|
||||||
return $aData;
|
return $aData;
|
||||||
|
@ -271,7 +271,7 @@ class ModuleCache extends Module {
|
||||||
* @param int $iTimeLife Время жизни кеша в секундах
|
* @param int $iTimeLife Время жизни кеша в секундах
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function Set($data,$sName,$aTags=array(),$iTimeLife=false) {
|
public function Set($data,$sName,$aTags=array(),$iTimeLife=false) {
|
||||||
if (!$this->bUseCache) {
|
if (!$this->bUseCache) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -279,7 +279,7 @@ class ModuleCache extends Module {
|
||||||
* Т.к. название кеша может быть любым то предварительно хешируем имя кеша
|
* Т.к. название кеша может быть любым то предварительно хешируем имя кеша
|
||||||
*/
|
*/
|
||||||
$sName=md5(Config::Get('sys.cache.prefix').$sName);
|
$sName=md5(Config::Get('sys.cache.prefix').$sName);
|
||||||
if ($this->sCacheType==SYS_CACHE_TYPE_FILE) {
|
if ($this->sCacheType==SYS_CACHE_TYPE_FILE) {
|
||||||
$data=serialize($data);
|
$data=serialize($data);
|
||||||
}
|
}
|
||||||
return $this->oBackendCache->save($data,$sName,$aTags,$iTimeLife);
|
return $this->oBackendCache->save($data,$sName,$aTags,$iTimeLife);
|
||||||
|
@ -335,13 +335,13 @@ class ModuleCache extends Module {
|
||||||
*/
|
*/
|
||||||
public function CalcStats($iTime,$sMethod) {
|
public function CalcStats($iTime,$sMethod) {
|
||||||
$this->aStats['time']+=$iTime;
|
$this->aStats['time']+=$iTime;
|
||||||
$this->aStats['count']++;
|
$this->aStats['count']++;
|
||||||
if ($sMethod=='Dklab_Cache_Backend_Profiler::load') {
|
if ($sMethod=='Dklab_Cache_Backend_Profiler::load') {
|
||||||
$this->aStats['count_get']++;
|
$this->aStats['count_get']++;
|
||||||
}
|
}
|
||||||
if ($sMethod=='Dklab_Cache_Backend_Profiler::save') {
|
if ($sMethod=='Dklab_Cache_Backend_Profiler::save') {
|
||||||
$this->aStats['count_set']++;
|
$this->aStats['count_set']++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Возвращает статистику использования кеша
|
* Возвращает статистику использования кеша
|
||||||
|
@ -360,7 +360,7 @@ class ModuleCache extends Module {
|
||||||
public function SetLife($data,$sName) {
|
public function SetLife($data,$sName) {
|
||||||
$this->aStoreLife[$sName]=$data;
|
$this->aStoreLife[$sName]=$data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает значение из текущего кеша сессии
|
* Получает значение из текущего кеша сессии
|
||||||
*
|
*
|
||||||
|
|
|
@ -34,13 +34,13 @@ class ModuleDatabase extends Module {
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aInstance=array();
|
protected $aInstance=array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Получает объект БД
|
* Получает объект БД
|
||||||
|
@ -55,7 +55,7 @@ class ModuleDatabase extends Module {
|
||||||
if (is_null($aConfig)) {
|
if (is_null($aConfig)) {
|
||||||
$aConfig = Config::Get('db.params');
|
$aConfig = Config::Get('db.params');
|
||||||
}
|
}
|
||||||
$sDSN=$aConfig['type'].'wrapper://'.$aConfig['user'].':'.$aConfig['pass'].'@'.$aConfig['host'].':'.$aConfig['port'].'/'.$aConfig['dbname'];
|
$sDSN=$aConfig['type'].'wrapper://'.$aConfig['user'].':'.$aConfig['pass'].'@'.$aConfig['host'].':'.$aConfig['port'].'/'.$aConfig['dbname'];
|
||||||
/**
|
/**
|
||||||
* Создаём хеш подключения, уникальный для каждого конфига
|
* Создаём хеш подключения, уникальный для каждого конфига
|
||||||
*/
|
*/
|
||||||
|
@ -69,7 +69,7 @@ class ModuleDatabase extends Module {
|
||||||
/**
|
/**
|
||||||
* Если такого коннекта еще не было то создаём его
|
* Если такого коннекта еще не было то создаём его
|
||||||
*/
|
*/
|
||||||
$oDbSimple=DbSimple_Generic::connect($sDSN);
|
$oDbSimple=DbSimple_Generic::connect($sDSN);
|
||||||
/**
|
/**
|
||||||
* Устанавливаем хук на перехват ошибок при работе с БД
|
* Устанавливаем хук на перехват ошибок при работе с БД
|
||||||
*/
|
*/
|
||||||
|
@ -80,20 +80,20 @@ class ModuleDatabase extends Module {
|
||||||
if (Config::Get('sys.logs.sql_query')) {
|
if (Config::Get('sys.logs.sql_query')) {
|
||||||
$oDbSimple->setLogger('databaseLogger');
|
$oDbSimple->setLogger('databaseLogger');
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Устанавливаем настройки соединения, по хорошему этого здесь не должно быть :)
|
* Устанавливаем настройки соединения, по хорошему этого здесь не должно быть :)
|
||||||
* считайте это костылём
|
* считайте это костылём
|
||||||
*/
|
*/
|
||||||
$oDbSimple->query("set character_set_client='utf8', character_set_results='utf8', collation_connection='utf8_bin' ");
|
$oDbSimple->query("set character_set_client='utf8', character_set_results='utf8', collation_connection='utf8_bin' ");
|
||||||
/**
|
/**
|
||||||
* Сохраняем коннект
|
* Сохраняем коннект
|
||||||
*/
|
*/
|
||||||
$this->aInstance[$sDSNKey]=$oDbSimple;
|
$this->aInstance[$sDSNKey]=$oDbSimple;
|
||||||
/**
|
/**
|
||||||
* Возвращаем коннект
|
* Возвращаем коннект
|
||||||
*/
|
*/
|
||||||
return $oDbSimple;
|
return $oDbSimple;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Возвращает статистику использования БД - время и количество запросов
|
* Возвращает статистику использования БД - время и количество запросов
|
||||||
|
@ -127,7 +127,7 @@ class ModuleDatabase extends Module {
|
||||||
$sFileQuery = file_get_contents($sFilePath);
|
$sFileQuery = file_get_contents($sFilePath);
|
||||||
return $this->ExportSQLQuery($sFileQuery,$aConfig);
|
return $this->ExportSQLQuery($sFileQuery,$aConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Экспорт SQL в БД
|
* Экспорт SQL в БД
|
||||||
*
|
*
|
||||||
|
@ -155,14 +155,14 @@ class ModuleDatabase extends Module {
|
||||||
* Заменяем движек, если таковой указан в запросе
|
* Заменяем движек, если таковой указан в запросе
|
||||||
*/
|
*/
|
||||||
if(Config::Get('db.tables.engine')!='InnoDB') $sQuery=str_ireplace('ENGINE=InnoDB', "ENGINE=".Config::Get('db.tables.engine'),$sQuery);
|
if(Config::Get('db.tables.engine')!='InnoDB') $sQuery=str_ireplace('ENGINE=InnoDB', "ENGINE=".Config::Get('db.tables.engine'),$sQuery);
|
||||||
|
|
||||||
if($sQuery!='') {
|
if($sQuery!='') {
|
||||||
$bResult=$this->GetConnect($aConfig)->query($sQuery);
|
$bResult=$this->GetConnect($aConfig)->query($sQuery);
|
||||||
if($bResult===false) $aErrors[] = mysql_error();
|
if($bResult===false) $aErrors[] = mysql_error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Возвращаем результат выполнения, взависимости от количества ошибок
|
* Возвращаем результат выполнения, взависимости от количества ошибок
|
||||||
*/
|
*/
|
||||||
if(count($aErrors)==0) {
|
if(count($aErrors)==0) {
|
||||||
return array('result'=>true,'errors'=>null);
|
return array('result'=>true,'errors'=>null);
|
||||||
|
@ -213,9 +213,9 @@ class ModuleDatabase extends Module {
|
||||||
* @param array|null $aConfig Конфиг подключения к БД
|
* @param array|null $aConfig Конфиг подключения к БД
|
||||||
*/
|
*/
|
||||||
public function addEnumType($sTableName,$sFieldName,$sType,$aConfig=null) {
|
public function addEnumType($sTableName,$sFieldName,$sType,$aConfig=null) {
|
||||||
$sTableName = str_replace('prefix_', Config::Get('db.table.prefix'), $sTableName);
|
$sTableName = str_replace('prefix_', Config::Get('db.table.prefix'), $sTableName);
|
||||||
$sQuery="SHOW COLUMNS FROM `{$sTableName}`";
|
$sQuery="SHOW COLUMNS FROM `{$sTableName}`";
|
||||||
|
|
||||||
if ($aRows=$this->GetConnect($aConfig)->select($sQuery)) {
|
if ($aRows=$this->GetConnect($aConfig)->select($sQuery)) {
|
||||||
foreach ($aRows as $aRow){
|
foreach ($aRows as $aRow){
|
||||||
if ($aRow['Field'] == $sFieldName) break;
|
if ($aRow['Field'] == $sFieldName) break;
|
||||||
|
@ -229,7 +229,7 @@ class ModuleDatabase extends Module {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -238,11 +238,11 @@ class ModuleDatabase extends Module {
|
||||||
* @param string $message Сообщение об ошибке
|
* @param string $message Сообщение об ошибке
|
||||||
* @param array $info Список информации об ошибке
|
* @param array $info Список информации об ошибке
|
||||||
*/
|
*/
|
||||||
function databaseErrorHandler($message, $info) {
|
function databaseErrorHandler($message, $info) {
|
||||||
/**
|
/**
|
||||||
* Записываем информацию об ошибке в переменную $msg
|
* Записываем информацию об ошибке в переменную $msg
|
||||||
*/
|
*/
|
||||||
$msg="SQL Error: $message<br>\n";
|
$msg="SQL Error: $message<br>\n";
|
||||||
$msg.=print_r($info,true);
|
$msg.=print_r($info,true);
|
||||||
/**
|
/**
|
||||||
* Если нужно логировать SQL ошибке то пишем их в лог
|
* Если нужно логировать SQL ошибке то пишем их в лог
|
||||||
|
@ -278,8 +278,8 @@ function databaseLogger($db, $sql) {
|
||||||
/**
|
/**
|
||||||
* Получаем информацию о запросе и сохраняем её в переменной $msg
|
* Получаем информацию о запросе и сохраняем её в переменной $msg
|
||||||
*/
|
*/
|
||||||
$caller = $db->findLibraryCaller();
|
$caller = $db->findLibraryCaller();
|
||||||
$msg=print_r($sql,true);
|
$msg=print_r($sql,true);
|
||||||
/**
|
/**
|
||||||
* Получаем ядро и сохраняем в логе SQL запрос
|
* Получаем ядро и сохраняем в логе SQL запрос
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
* @package engine.modules
|
* @package engine.modules
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleHook extends Module {
|
class ModuleHook extends Module {
|
||||||
/**
|
/**
|
||||||
* Содержит список хуков
|
* Содержит список хуков
|
||||||
*
|
*
|
||||||
|
@ -98,8 +98,8 @@ class ModuleHook extends Module {
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Добавление обработчика на хук
|
* Добавление обработчика на хук
|
||||||
|
@ -223,13 +223,13 @@ class ModuleHook extends Module {
|
||||||
/**
|
/**
|
||||||
* Все хуки делим на обычные(exec) и делигирующие(delegate)
|
* Все хуки делим на обычные(exec) и делигирующие(delegate)
|
||||||
*/
|
*/
|
||||||
for ($i=0;$i<count($this->aHooks[$sName]);$i++) {
|
for ($i=0;$i<count($this->aHooks[$sName]);$i++) {
|
||||||
if (isset($this->aHooks[$sName][$i]['params']['delegate']) and $this->aHooks[$sName][$i]['params']['delegate']) {
|
if (isset($this->aHooks[$sName][$i]['params']['delegate']) and $this->aHooks[$sName][$i]['params']['delegate']) {
|
||||||
$aHookNumDelegate[$i]=$this->aHooks[$sName][$i]['priority'];
|
$aHookNumDelegate[$i]=$this->aHooks[$sName][$i]['priority'];
|
||||||
} else {
|
} else {
|
||||||
$aHookNum[$i]=$this->aHooks[$sName][$i]['priority'];
|
$aHookNum[$i]=$this->aHooks[$sName][$i]['priority'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arsort($aHookNum,SORT_NUMERIC);
|
arsort($aHookNum,SORT_NUMERIC);
|
||||||
arsort($aHookNumDelegate,SORT_NUMERIC);
|
arsort($aHookNumDelegate,SORT_NUMERIC);
|
||||||
/**
|
/**
|
||||||
|
@ -239,7 +239,7 @@ class ModuleHook extends Module {
|
||||||
$aHook=$this->aHooks[$sName][$iKey];
|
$aHook=$this->aHooks[$sName][$iKey];
|
||||||
if ($bTemplateHook) {
|
if ($bTemplateHook) {
|
||||||
/**
|
/**
|
||||||
* Если это шаблонных хук то сохраняем результат
|
* Если это шаблонных хук то сохраняем результат
|
||||||
*/
|
*/
|
||||||
$result['template_result'][]=$this->RunType($aHook,$aVars);
|
$result['template_result'][]=$this->RunType($aHook,$aVars);
|
||||||
} else {
|
} else {
|
||||||
|
@ -249,10 +249,10 @@ class ModuleHook extends Module {
|
||||||
/**
|
/**
|
||||||
* Теперь запускаем делигирующие
|
* Теперь запускаем делигирующие
|
||||||
* Делегирующий хук должен вернуть результат в формате:
|
* Делегирующий хук должен вернуть результат в формате:
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
foreach ($aHookNumDelegate as $iKey => $iPr) {
|
foreach ($aHookNumDelegate as $iKey => $iPr) {
|
||||||
$aHook=$this->aHooks[$sName][$iKey];
|
$aHook=$this->aHooks[$sName][$iKey];
|
||||||
$result=array(
|
$result=array(
|
||||||
'delegate_result'=>$this->RunType($aHook,$aVars)
|
'delegate_result'=>$this->RunType($aHook,$aVars)
|
||||||
);
|
);
|
||||||
|
|
|
@ -21,6 +21,8 @@ require_once Config::Get('path.root.engine').'/lib/external/LiveImage/Image.php'
|
||||||
* Модуль обработки изображений
|
* Модуль обработки изображений
|
||||||
* Использует библиотеку LiveImage
|
* Использует библиотеку LiveImage
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleImage extends Module {
|
class ModuleImage extends Module {
|
||||||
/**
|
/**
|
||||||
|
@ -39,25 +41,24 @@ class ModuleImage extends Module {
|
||||||
* Ошибка чтения файла при загрузке изображения
|
* Ошибка чтения файла при загрузке изображения
|
||||||
*/
|
*/
|
||||||
const UPLOAD_IMAGE_ERROR_READ = 8;
|
const UPLOAD_IMAGE_ERROR_READ = 8;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Настройки модуля по умолчанию
|
* Настройки модуля по умолчанию
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aParamsDefault = array();
|
protected $aParamsDefault = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тескт последней ошибки
|
* Тескт последней ошибки
|
||||||
*
|
*
|
||||||
* @var unknown_type
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $sLastErrorText = null;
|
protected $sLastErrorText = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
$this->aParamsDefault = array(
|
$this->aParamsDefault = array(
|
||||||
'watermark_use'=>false,
|
'watermark_use'=>false,
|
||||||
'round_corner' =>false
|
'round_corner' =>false
|
||||||
|
@ -66,7 +67,7 @@ class ModuleImage extends Module {
|
||||||
/**
|
/**
|
||||||
* Получает текст последней ошибки
|
* Получает текст последней ошибки
|
||||||
*
|
*
|
||||||
* @return unknown
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function GetLastError() {
|
public function GetLastError() {
|
||||||
return $this->sLastErrorText;
|
return $this->sLastErrorText;
|
||||||
|
@ -74,7 +75,7 @@ class ModuleImage extends Module {
|
||||||
/**
|
/**
|
||||||
* Устанавливает текст последней ошибки
|
* Устанавливает текст последней ошибки
|
||||||
*
|
*
|
||||||
* @param unknown_type $sText
|
* @param string $sText Текст ошибки
|
||||||
*/
|
*/
|
||||||
public function SetLastError($sText) {
|
public function SetLastError($sText) {
|
||||||
$this->sLastErrorText=$sText;
|
$this->sLastErrorText=$sText;
|
||||||
|
@ -87,36 +88,36 @@ class ModuleImage extends Module {
|
||||||
$this->sLastErrorText=null;
|
$this->sLastErrorText=null;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Merge default and named params for images
|
* Возврашает параметры для группы, если каких то параметров в группе нет, то используются дефолтные
|
||||||
*
|
*
|
||||||
* @param string $sName
|
* @param string $sName Имя группы
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function BuildParams($sName=null) {
|
public function BuildParams($sName=null) {
|
||||||
if(is_null($sName)) {
|
if(is_null($sName)) {
|
||||||
return Config::Get('module.image.default');
|
return Config::Get('module.image.default');
|
||||||
}
|
}
|
||||||
|
|
||||||
$aDefault = (array)Config::Get('module.image.default');
|
$aDefault = (array)Config::Get('module.image.default');
|
||||||
$aNamed = (array)Config::Get('module.image.'.strtolower($sName));
|
$aNamed = (array)Config::Get('module.image.'.strtolower($sName));
|
||||||
|
|
||||||
return func_array_merge_assoc($aDefault,$aNamed);
|
return func_array_merge_assoc($aDefault,$aNamed);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Resize,copy image,
|
* Resize,copy image,
|
||||||
* make rounded corners and add watermark
|
* make rounded corners and add watermark
|
||||||
*
|
*
|
||||||
* @param string $sFileSrc
|
* @param string $sFileSrc Исходный файл изображения
|
||||||
* @param string $sDirDest
|
* @param string $sDirDest Директория куда нужно сохранить изображение относительно корня сайта (path.root.server)
|
||||||
* @param string $sFileDest
|
* @param string $sFileDest Имя файла для сохранения, без расширения
|
||||||
* @param int $iWidthMax
|
* @param int $iWidthMax Максимально допустимая ширина изображения
|
||||||
* @param int $iHeightMax
|
* @param int $iHeightMax Максимало допустимая высота изображения
|
||||||
* @param int $iWidthDest
|
* @param int|null $iWidthDest Ширина необходимого изображения на выходе
|
||||||
* @param int $iHeightDest
|
* @param int|null $iHeightDest Высота необходимого изображения на выходе
|
||||||
* @param bool $bForcedMinSize
|
* @param bool $bForcedMinSize Растягивать изображение по ширине или нет, если исходное меньше. При false - изображение будет растянуто
|
||||||
* @param array $aParams
|
* @param array|null $aParams Параметры
|
||||||
* @param object $oImage
|
* @param LiveImage|null $oImage Объект изображения, если null то будет содано автоматически
|
||||||
* @return string
|
* @return string|bool Полный серверный путь до сохраненного изображения
|
||||||
*/
|
*/
|
||||||
public function Resize($sFileSrc,$sDirDest,$sFileDest,$iWidthMax,$iHeightMax,$iWidthDest=null,$iHeightDest=null,$bForcedMinSize=true,$aParams=null,$oImage=null) {
|
public function Resize($sFileSrc,$sDirDest,$sFileDest,$iWidthMax,$iHeightMax,$iWidthDest=null,$iHeightDest=null,$bForcedMinSize=true,$aParams=null,$oImage=null) {
|
||||||
$this->ClearLastError();
|
$this->ClearLastError();
|
||||||
|
@ -127,22 +128,22 @@ class ModuleImage extends Module {
|
||||||
$aParams=$this->aParamsDefault;
|
$aParams=$this->aParamsDefault;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Если объект не передан как параметр,
|
* Если объект не передан как параметр,
|
||||||
* создаем новый
|
* создаем новый
|
||||||
*/
|
*/
|
||||||
if(!$oImage) $oImage=new LiveImage($sFileSrc);
|
if(!$oImage) $oImage=new LiveImage($sFileSrc);
|
||||||
|
|
||||||
if($oImage->get_last_error()){
|
if($oImage->get_last_error()){
|
||||||
$this->SetLastError($oImage->get_last_error());
|
$this->SetLastError($oImage->get_last_error());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sFileDest.='.'.$oImage->get_image_params('format');
|
$sFileDest.='.'.$oImage->get_image_params('format');
|
||||||
if (($oImage->get_image_params('width')>$iWidthMax)
|
if (($oImage->get_image_params('width')>$iWidthMax)
|
||||||
or ($oImage->get_image_params('height')>$iHeightMax)) {
|
or ($oImage->get_image_params('height')>$iHeightMax)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($iWidthDest) {
|
if ($iWidthDest) {
|
||||||
if ($bForcedMinSize and ($iWidthDest>$oImage->get_image_params('width'))) {
|
if ($bForcedMinSize and ($iWidthDest>$oImage->get_image_params('width'))) {
|
||||||
$iWidthDest=$oImage->get_image_params('width');
|
$iWidthDest=$oImage->get_image_params('width');
|
||||||
|
@ -153,7 +154,7 @@ class ModuleImage extends Module {
|
||||||
* Если нужно добавить Watermark, то запрещаем ручное управление alfa-каналом
|
* Если нужно добавить Watermark, то запрещаем ручное управление alfa-каналом
|
||||||
*/
|
*/
|
||||||
$oImage->resize($iWidthDest,$iHeightDest,(!$iHeightDest),(!$aParams['watermark_use']));
|
$oImage->resize($iWidthDest,$iHeightDest,(!$iHeightDest),(!$aParams['watermark_use']));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляем watermark согласно в конфигурации заданым параметрам
|
* Добавляем watermark согласно в конфигурации заданым параметрам
|
||||||
*/
|
*/
|
||||||
|
@ -209,7 +210,7 @@ class ModuleImage extends Module {
|
||||||
/**
|
/**
|
||||||
* Вырезает максимально возможный квадрат
|
* Вырезает максимально возможный квадрат
|
||||||
*
|
*
|
||||||
* @param LiveImage $oImage
|
* @param LiveImage $oImage Объект изображения
|
||||||
* @return LiveImage
|
* @return LiveImage
|
||||||
*/
|
*/
|
||||||
public function CropSquare(LiveImage $oImage,$bCenter=true) {
|
public function CropSquare(LiveImage $oImage,$bCenter=true) {
|
||||||
|
@ -222,15 +223,15 @@ class ModuleImage extends Module {
|
||||||
* Если высота и ширина совпадают, то возвращаем изначальный вариант
|
* Если высота и ширина совпадают, то возвращаем изначальный вариант
|
||||||
*/
|
*/
|
||||||
if($iWidth==$iHeight){ return $oImage; }
|
if($iWidth==$iHeight){ return $oImage; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вырезаем квадрат из центра
|
* Вырезаем квадрат из центра
|
||||||
*/
|
*/
|
||||||
$iNewSize = min($iWidth,$iHeight);
|
$iNewSize = min($iWidth,$iHeight);
|
||||||
|
|
||||||
if ($bCenter) {
|
if ($bCenter) {
|
||||||
$oImage->crop($iNewSize,$iNewSize,($iWidth-$iNewSize)/2,($iHeight-$iNewSize)/2);
|
$oImage->crop($iNewSize,$iNewSize,($iWidth-$iNewSize)/2,($iHeight-$iNewSize)/2);
|
||||||
} else {
|
} else {
|
||||||
$oImage->crop($iNewSize,$iNewSize,0,0);
|
$oImage->crop($iNewSize,$iNewSize,0,0);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -238,18 +239,17 @@ class ModuleImage extends Module {
|
||||||
*/
|
*/
|
||||||
return $oImage;
|
return $oImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вырезает максимально возможный прямоугольный в нужной пропорции
|
* Вырезает максимально возможный прямоугольный в нужной пропорции
|
||||||
*
|
*
|
||||||
* @param LiveImage $oImage
|
* @param LiveImage $oImage Объект изображения
|
||||||
* @param int $iW
|
* @param int $iW Ширина для определения пропорции
|
||||||
* @param int $iH
|
* @param int $iH Высота для определения пропорции
|
||||||
* @param bool $bCenter
|
* @param bool $bCenter Вырезать из центра
|
||||||
* @return unknown
|
* @return LiveImage
|
||||||
*/
|
*/
|
||||||
public function CropProportion(LiveImage $oImage,$iW,$iH,$bCenter=true) {
|
public function CropProportion(LiveImage $oImage,$iW,$iH,$bCenter=true) {
|
||||||
|
|
||||||
if(!$oImage || $oImage->get_last_error()) {
|
if(!$oImage || $oImage->get_last_error()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -260,21 +260,21 @@ class ModuleImage extends Module {
|
||||||
*/
|
*/
|
||||||
$iProp=round($iW/$iH, 2);
|
$iProp=round($iW/$iH, 2);
|
||||||
if(round($iWidth/$iHeight, 2)==$iProp){ return $oImage; }
|
if(round($iWidth/$iHeight, 2)==$iProp){ return $oImage; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вырезаем прямоугольник из центра
|
* Вырезаем прямоугольник из центра
|
||||||
*/
|
*/
|
||||||
if (round($iWidth/$iHeight, 2)<=$iProp) {
|
if (round($iWidth/$iHeight, 2)<=$iProp) {
|
||||||
$iNewWidth=$iWidth;
|
$iNewWidth=$iWidth;
|
||||||
$iNewHeight=round($iNewWidth/$iProp);
|
$iNewHeight=round($iNewWidth/$iProp);
|
||||||
} else {
|
} else {
|
||||||
$iNewHeight=$iHeight;
|
$iNewHeight=$iHeight;
|
||||||
$iNewWidth=$iNewHeight*$iProp;
|
$iNewWidth=$iNewHeight*$iProp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($bCenter) {
|
if ($bCenter) {
|
||||||
$oImage->crop($iNewWidth,$iNewHeight,($iWidth-$iNewWidth)/2,($iHeight-$iNewHeight)/2);
|
$oImage->crop($iNewWidth,$iNewHeight,($iWidth-$iNewWidth)/2,($iHeight-$iNewHeight)/2);
|
||||||
} else {
|
} else {
|
||||||
$oImage->crop($iNewWidth,$iNewHeight,0,0);
|
$oImage->crop($iNewWidth,$iNewHeight,0,0);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -283,20 +283,20 @@ class ModuleImage extends Module {
|
||||||
return $oImage;
|
return $oImage;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Сохраняет(копирует) файл изображения
|
* Сохраняет(копирует) файл изображения на сервер
|
||||||
|
* Если переопределить данный метод, то можно сохранять изображения, например, на Amazon S3
|
||||||
*
|
*
|
||||||
* @param $sFileSource Полный путь до исходного файла
|
* @param string $sFileSource Полный путь до исходного файла
|
||||||
* @param $sDirDest Каталог для сохранения файла относительно корня сайта
|
* @param string $sDirDest Каталог для сохранения файла относительно корня сайта
|
||||||
* @param $sFileDest
|
* @param string $sFileDest Имя файла для сохранения
|
||||||
* @param null $iMode
|
* @param int|null $iMode Права chmod для файла, например, 0777
|
||||||
* @param bool $bRemoveSource
|
* @param bool $bRemoveSource Удалять исходный файл или нет
|
||||||
* @return bool | string
|
* @return bool | string
|
||||||
*/
|
*/
|
||||||
public function SaveFile($sFileSource,$sDirDest,$sFileDest,$iMode=null,$bRemoveSource=false) {
|
public function SaveFile($sFileSource,$sDirDest,$sFileDest,$iMode=null,$bRemoveSource=false) {
|
||||||
$sFileDestFullPath=rtrim(Config::Get('path.root.server'),"/").'/'.trim($sDirDest,"/").'/'.$sFileDest;
|
$sFileDestFullPath=rtrim(Config::Get('path.root.server'),"/").'/'.trim($sDirDest,"/").'/'.$sFileDest;
|
||||||
$this->CreateDirectory($sDirDest);
|
$this->CreateDirectory($sDirDest);
|
||||||
|
|
||||||
|
|
||||||
$bResult=copy($sFileSource,$sFileDestFullPath);
|
$bResult=copy($sFileSource,$sFileDestFullPath);
|
||||||
if ($bResult and !is_null($iMode)) {
|
if ($bResult and !is_null($iMode)) {
|
||||||
chmod($sFileDestFullPath,$iMode);
|
chmod($sFileDestFullPath,$iMode);
|
||||||
|
@ -315,7 +315,7 @@ class ModuleImage extends Module {
|
||||||
/**
|
/**
|
||||||
* Удаление файла изображения
|
* Удаление файла изображения
|
||||||
*
|
*
|
||||||
* @param $sFile
|
* @param string $sFile Полный серверный путь до файла
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function RemoveFile($sFile) {
|
public function RemoveFile($sFile) {
|
||||||
|
@ -327,20 +327,20 @@ class ModuleImage extends Module {
|
||||||
/**
|
/**
|
||||||
* Создает каталог по указанному адресу (с учетом иерархии)
|
* Создает каталог по указанному адресу (с учетом иерархии)
|
||||||
*
|
*
|
||||||
* @param string $sDirDest
|
* @param string $sDirDest Каталог относительно корня сайта
|
||||||
*/
|
*/
|
||||||
public function CreateDirectory($sDirDest) {
|
public function CreateDirectory($sDirDest) {
|
||||||
@func_mkdir(Config::Get('path.root.server'),$sDirDest);
|
@func_mkdir(Config::Get('path.root.server'),$sDirDest);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Возвращает серверный адрес по переданному web-адресу
|
* Возвращает серверный адрес по переданному web-адресу
|
||||||
*
|
*
|
||||||
* @param string $sPath
|
* @param string $sPath WEB адрес изображения
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function GetServerPath($sPath) {
|
public function GetServerPath($sPath) {
|
||||||
/**
|
/**
|
||||||
* Определяем, принадлежит ли этот адрес основному домену
|
* Определяем, принадлежит ли этот адрес основному домену
|
||||||
*/
|
*/
|
||||||
if(parse_url($sPath,PHP_URL_HOST)!=parse_url(Config::Get('path.root.web'),PHP_URL_HOST)) {
|
if(parse_url($sPath,PHP_URL_HOST)!=parse_url(Config::Get('path.root.web'),PHP_URL_HOST)) {
|
||||||
return $sPath;
|
return $sPath;
|
||||||
|
@ -355,9 +355,9 @@ class ModuleImage extends Module {
|
||||||
return rtrim(Config::Get('path.root.server'),'/').'/'.$sPath;
|
return rtrim(Config::Get('path.root.server'),'/').'/'.$sPath;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Возвращает серверный адрес по переданному web-адресу
|
* Возвращает WEB адрес по переданному серверному адресу
|
||||||
*
|
*
|
||||||
* @param string $sPath
|
* @param string $sPath Серверный адрес(путь) изображения
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function GetWebPath($sPath) {
|
public function GetWebPath($sPath) {
|
||||||
|
@ -368,21 +368,21 @@ class ModuleImage extends Module {
|
||||||
/**
|
/**
|
||||||
* Получает директорию для данного пользователя
|
* Получает директорию для данного пользователя
|
||||||
* Используется фомат хранения данных (/images/us/er/id/yyyy/mm/dd/file.jpg)
|
* Используется фомат хранения данных (/images/us/er/id/yyyy/mm/dd/file.jpg)
|
||||||
*
|
*
|
||||||
* @param string $sUserId
|
* @param int $sId Целое число, обычно это ID пользователя
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function GetIdDir($sUserId) {
|
public function GetIdDir($sId) {
|
||||||
return Config::Get('path.uploads.images').'/'.preg_replace('~(.{2})~U', "\\1/", str_pad($sUserId, 6, "0", STR_PAD_LEFT)).date('Y/m/d');
|
return Config::Get('path.uploads.images').'/'.preg_replace('~(.{2})~U', "\\1/", str_pad($sId, 6, "0", STR_PAD_LEFT)).date('Y/m/d');
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Возвращает валидный Html код тега <img>
|
* Возвращает валидный Html код тега <img>
|
||||||
*
|
*
|
||||||
* @param string $sPath
|
* @param string $sPath WEB адрес изображения
|
||||||
* @param array $aParams
|
* @param array $aParams Параметры
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function BuildHTML($sPath,$aParams) {
|
public function BuildHTML($sPath,$aParams) {
|
||||||
$sText='<img src="'.$sPath.'" ';
|
$sText='<img src="'.$sPath.'" ';
|
||||||
if (isset($aParams['title']) and $aParams['title']!='') {
|
if (isset($aParams['title']) and $aParams['title']!='') {
|
||||||
$sText.=' title="'.htmlspecialchars($aParams['title']).'" ';
|
$sText.=' title="'.htmlspecialchars($aParams['title']).'" ';
|
||||||
|
@ -402,14 +402,8 @@ class ModuleImage extends Module {
|
||||||
? ' alt="'.htmlspecialchars($aParams['alt']).'"'
|
? ' alt="'.htmlspecialchars($aParams['alt']).'"'
|
||||||
: ' alt=""';
|
: ' alt=""';
|
||||||
$sText.=$sAlt.' />';
|
$sText.=$sAlt.' />';
|
||||||
|
|
||||||
return $sText;
|
return $sText;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Завершение работы модуля
|
|
||||||
*/
|
|
||||||
public function Shutdown() {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
|
@ -17,6 +17,8 @@
|
||||||
/**
|
/**
|
||||||
* Модуль поддержки языковых файлов
|
* Модуль поддержки языковых файлов
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleLang extends Module {
|
class ModuleLang extends Module {
|
||||||
/**
|
/**
|
||||||
|
@ -29,29 +31,30 @@ class ModuleLang extends Module {
|
||||||
* Язык ресурса, используемый по умолчанию
|
* Язык ресурса, используемый по умолчанию
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $sDefaultLang;
|
protected $sDefaultLang;
|
||||||
/**
|
/**
|
||||||
* Путь к языковым файлам
|
* Путь к языковым файлам
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $sLangPath;
|
protected $sLangPath;
|
||||||
/**
|
/**
|
||||||
|
* Список языковых текстовок
|
||||||
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aLangMsg=array();
|
protected $aLangMsg=array();
|
||||||
/**
|
/**
|
||||||
* Список текстовок для JS
|
* Список текстовок для JS
|
||||||
*
|
*
|
||||||
* @var unknown_type
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aLangMsgJs=array();
|
protected $aLangMsgJs=array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*
|
*
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
$this->Hook_Run('lang_init_start');
|
$this->Hook_Run('lang_init_start');
|
||||||
|
@ -64,7 +67,6 @@ class ModuleLang extends Module {
|
||||||
/**
|
/**
|
||||||
* Инициализирует языковой файл
|
* Инициализирует языковой файл
|
||||||
*
|
*
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
protected function InitLang() {
|
protected function InitLang() {
|
||||||
/**
|
/**
|
||||||
|
@ -112,7 +114,7 @@ class ModuleLang extends Module {
|
||||||
/**
|
/**
|
||||||
* Добавляет текстовку к JS
|
* Добавляет текстовку к JS
|
||||||
*
|
*
|
||||||
* @param unknown_type $aKeys
|
* @param array $aKeys Список текстовок
|
||||||
*/
|
*/
|
||||||
public function AddLangJs($aKeys) {
|
public function AddLangJs($aKeys) {
|
||||||
if (!is_array($aKeys)) {
|
if (!is_array($aKeys)) {
|
||||||
|
@ -123,7 +125,7 @@ class ModuleLang extends Module {
|
||||||
/**
|
/**
|
||||||
* Загружает текстовки из языковых файлов
|
* Загружает текстовки из языковых файлов
|
||||||
*
|
*
|
||||||
* @return null
|
* @param $sLangName Язык для загрузки
|
||||||
*/
|
*/
|
||||||
protected function LoadLangFiles($sLangName) {
|
protected function LoadLangFiles($sLangName) {
|
||||||
$sLangFilePath = $this->sLangPath.'/'.$sLangName.'.php';
|
$sLangFilePath = $this->sLangPath.'/'.$sLangName.'.php';
|
||||||
|
@ -145,7 +147,6 @@ class ModuleLang extends Module {
|
||||||
}
|
}
|
||||||
closedir($hDirConfig);
|
closedir($hDirConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ищет языковые файлы актвиированных плагинов
|
* Ищет языковые файлы актвиированных плагинов
|
||||||
*/
|
*/
|
||||||
|
@ -165,17 +166,15 @@ class ModuleLang extends Module {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ищет языковой файл текущего шаблона
|
* Ищет языковой файл текущего шаблона
|
||||||
*/
|
*/
|
||||||
$this->LoadLangFileTemplate($sLangName);
|
$this->LoadLangFileTemplate($sLangName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Загружает языковой файл текущего шаблона
|
* Загружает языковой файл текущего шаблона
|
||||||
*
|
*
|
||||||
* @param unknown_type $sLangName
|
* @param string $sLangName Язык для загрузки
|
||||||
*/
|
*/
|
||||||
public function LoadLangFileTemplate($sLangName) {
|
public function LoadLangFileTemplate($sLangName) {
|
||||||
$sFile=Config::Get('path.smarty.template').'/settings/language/'.$sLangName.'.php';
|
$sFile=Config::Get('path.smarty.template').'/settings/language/'.$sLangName.'.php';
|
||||||
|
@ -186,7 +185,7 @@ class ModuleLang extends Module {
|
||||||
/**
|
/**
|
||||||
* Установить текущий язык
|
* Установить текущий язык
|
||||||
*
|
*
|
||||||
* @param string $sLang
|
* @param string $sLang Название языка
|
||||||
*/
|
*/
|
||||||
public function SetLang($sLang) {
|
public function SetLang($sLang) {
|
||||||
$this->sCurrentLang=$sLang;
|
$this->sCurrentLang=$sLang;
|
||||||
|
@ -202,7 +201,7 @@ class ModuleLang extends Module {
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Получить дефолтный язык
|
* Получить дефолтный язык
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function GetLangDefault() {
|
public function GetLangDefault() {
|
||||||
|
@ -211,17 +210,17 @@ class ModuleLang extends Module {
|
||||||
/**
|
/**
|
||||||
* Получить список текстовок
|
* Получить список текстовок
|
||||||
*
|
*
|
||||||
* @return unknown
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function GetLangMsg() {
|
public function GetLangMsg() {
|
||||||
return $this->aLangMsg;
|
return $this->aLangMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает текстовку по её имени
|
* Получает текстовку по её имени
|
||||||
*
|
*
|
||||||
* @param string $sName
|
* @param string $sName Имя текстовки
|
||||||
* @param array $aReplace
|
* @param array $aReplace Список параметром для замены в текстовке
|
||||||
|
* @param bool $bDelete Удалять или нет параметры, которые не были заменены
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function Get($sName,$aReplace=array(),$bDelete=true) {
|
public function Get($sName,$aReplace=array(),$bDelete=true) {
|
||||||
|
@ -255,12 +254,12 @@ class ModuleLang extends Module {
|
||||||
}
|
}
|
||||||
return $sLang;
|
return $sLang;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавить к текстовкам массив сообщений
|
* Добавить к текстовкам массив сообщений
|
||||||
*
|
*
|
||||||
* @param array $aMessages
|
* @param array $aMessages Список текстовок для добавления
|
||||||
*/
|
* @param array|null $aBlock Параметры, позволяют хранить текстовки в структурированном виде, например, тестовки плагина "test" получать как Get('plugin.name.test')
|
||||||
|
*/
|
||||||
public function AddMessages($aMessages, $aBlock = null) {
|
public function AddMessages($aMessages, $aBlock = null) {
|
||||||
if (is_array($aMessages)) {
|
if (is_array($aMessages)) {
|
||||||
if (!Config::Get('lang.disable_blocks') && is_array($aBlock)) {
|
if (!Config::Get('lang.disable_blocks') && is_array($aBlock)) {
|
||||||
|
@ -268,7 +267,7 @@ class ModuleLang extends Module {
|
||||||
if (!isset($this->aLangMsg[$aBlock['category']]) || !$this->aLangMsg[$aBlock['category']]) {$this->aLangMsg[$aBlock['category']] = array();}
|
if (!isset($this->aLangMsg[$aBlock['category']]) || !$this->aLangMsg[$aBlock['category']]) {$this->aLangMsg[$aBlock['category']] = array();}
|
||||||
$this->aLangMsg[$aBlock['category']][$aBlock['name']] = $aMessages;
|
$this->aLangMsg[$aBlock['category']][$aBlock['name']] = $aMessages;
|
||||||
} else {
|
} else {
|
||||||
$this->aLangMsg [$aBlock['name']] = $aMessages;
|
$this->aLangMsg[$aBlock['name']] = $aMessages;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count($this->aLangMsg)==0) {
|
if (count($this->aLangMsg)==0) {
|
||||||
|
@ -278,17 +277,15 @@ class ModuleLang extends Module {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавить к текстовкам отдельное сообщение
|
* Добавить к текстовкам отдельное сообщение
|
||||||
*
|
*
|
||||||
* @param string $sKey
|
* @param string $sKey Имя текстовки
|
||||||
* @param string $sMessage
|
* @param string $sMessage Значение текстовки
|
||||||
*/
|
*/
|
||||||
public function AddMessage($sKey, $sMessage) {
|
public function AddMessage($sKey, $sMessage) {
|
||||||
$this->aLangMsg[$sKey] = $sMessage;
|
$this->aLangMsg[$sKey] = $sMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Завершаем работу модуля
|
* Завершаем работу модуля
|
||||||
*
|
*
|
||||||
|
|
|
@ -18,9 +18,14 @@
|
||||||
/**
|
/**
|
||||||
* Модуль логирования
|
* Модуль логирования
|
||||||
* Имеет 3 уровня логирования: 'DEBUG','NOTICE','ERROR'
|
* Имеет 3 уровня логирования: 'DEBUG','NOTICE','ERROR'
|
||||||
|
* <pre>
|
||||||
|
* $this->Logger_Debug('Debug message');
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleLogger extends Module {
|
class ModuleLogger extends Module {
|
||||||
/**
|
/**
|
||||||
* Уровни логгирования
|
* Уровни логгирования
|
||||||
*
|
*
|
||||||
|
@ -66,25 +71,23 @@ class ModuleLogger extends Module {
|
||||||
/**
|
/**
|
||||||
* Случайное число
|
* Случайное число
|
||||||
*
|
*
|
||||||
* @var unknown_type
|
* @var int
|
||||||
*/
|
*/
|
||||||
protected $iRandom;
|
protected $iRandom;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация, устанавливает имя файла лога
|
* Инициализация, устанавливает имя файла лога
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
$this->sPathLogs=Config::Get('path.root.server').'/logs/';
|
$this->sPathLogs=Config::Get('path.root.server').'/logs/';
|
||||||
$this->SetFileName(Config::Get('sys.logs.file'));
|
$this->SetFileName(Config::Get('sys.logs.file'));
|
||||||
$this->iRandom=rand(1000,9999);
|
$this->iRandom=rand(1000,9999);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Уставливает текущий уровень лога, тот уровень при котором будет производиться запись в файл лога
|
* Уставливает текущий уровень лога, тот уровень при котором будет производиться запись в файл лога
|
||||||
*
|
*
|
||||||
* @param int, string('DEBUG','NOTICE','ERROR') $level
|
* @param int, string('DEBUG','NOTICE','ERROR') $level Уровень логирования
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function SetWriteLevel($level) {
|
public function SetWriteLevel($level) {
|
||||||
|
@ -99,7 +102,6 @@ class ModuleLogger extends Module {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает текущий уровень лога
|
* Возвращает текущий уровень лога
|
||||||
*
|
*
|
||||||
|
@ -108,16 +110,14 @@ class ModuleLogger extends Module {
|
||||||
public function GetWriteLevel() {
|
public function GetWriteLevel() {
|
||||||
return $this->writeLevel;
|
return $this->writeLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Использовать трассировку или нет
|
* Использовать трассировку или нет
|
||||||
*
|
*
|
||||||
* @param bool $bool
|
* @param bool $bool Использовать или нет троссировку в логах
|
||||||
*/
|
*/
|
||||||
public function SetUseTrace($bool) {
|
public function SetUseTrace($bool) {
|
||||||
$this->bUseTrace=(bool)$bool;
|
$this->bUseTrace=(bool)$bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Использует трассировку или нет
|
* Использует трассировку или нет
|
||||||
*
|
*
|
||||||
|
@ -126,7 +126,6 @@ class ModuleLogger extends Module {
|
||||||
public function GetUseTrace() {
|
public function GetUseTrace() {
|
||||||
return $this->bUseTrace;
|
return $this->bUseTrace;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Использовать ротацию логов или нет
|
* Использовать ротацию логов или нет
|
||||||
*
|
*
|
||||||
|
@ -135,7 +134,6 @@ class ModuleLogger extends Module {
|
||||||
public function SetUseRotate($bool) {
|
public function SetUseRotate($bool) {
|
||||||
$this->bUseRotate=(bool)$bool;
|
$this->bUseRotate=(bool)$bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Использует ротацию логов или нет
|
* Использует ротацию логов или нет
|
||||||
*
|
*
|
||||||
|
@ -144,16 +142,14 @@ class ModuleLogger extends Module {
|
||||||
public function GetUseRotate() {
|
public function GetUseRotate() {
|
||||||
return $this->bUseRotate;
|
return $this->bUseRotate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает имя файла лога
|
* Устанавливает имя файла лога
|
||||||
*
|
*
|
||||||
* @param string $sFile
|
* @param string $sFile
|
||||||
*/
|
*/
|
||||||
public function SetFileName($sFile){
|
public function SetFileName($sFile){
|
||||||
$this->sFileName=$sFile;
|
$this->sFileName=$sFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает имя файла лога
|
* Получает имя файла лога
|
||||||
*
|
*
|
||||||
|
@ -162,39 +158,35 @@ class ModuleLogger extends Module {
|
||||||
public function GetFileName(){
|
public function GetFileName(){
|
||||||
return $this->sFileName;
|
return $this->sFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запись в лог с уровнем логирования 'DEBUG'
|
* Запись в лог с уровнем логирования 'DEBUG'
|
||||||
*
|
*
|
||||||
* @param string $msg
|
* @param string $msg Сообщение для записи в лог
|
||||||
*/
|
*/
|
||||||
public function Debug($msg) {
|
public function Debug($msg) {
|
||||||
$this->log($msg,'DEBUG');
|
$this->log($msg,'DEBUG');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запись в лог с уровнем логирования 'ERROR'
|
* Запись в лог с уровнем логирования 'ERROR'
|
||||||
*
|
*
|
||||||
* @param string $msg
|
* @param string $msg Сообщение для записи в лог
|
||||||
*/
|
*/
|
||||||
public function Error($msg) {
|
public function Error($msg) {
|
||||||
$this->log($msg,'ERROR');
|
$this->log($msg,'ERROR');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запись в лог с уровнем логирования 'NOTICE'
|
* Запись в лог с уровнем логирования 'NOTICE'
|
||||||
*
|
*
|
||||||
* @param string $msg
|
* @param string $msg Сообщение для записи в лог
|
||||||
*/
|
*/
|
||||||
public function Notice($msg) {
|
public function Notice($msg) {
|
||||||
$this->log($msg,'NOTICE');
|
$this->log($msg,'NOTICE');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записывает лог
|
* Записывает лог
|
||||||
*
|
*
|
||||||
* @param string $msg
|
* @param string $msg Сообщение для записи в лог
|
||||||
* @param string $sLevel
|
* @param string $sLevel Уровень логирования
|
||||||
*/
|
*/
|
||||||
protected function log($msg,$sLevel) {
|
protected function log($msg,$sLevel) {
|
||||||
/**
|
/**
|
||||||
|
@ -212,21 +204,20 @@ class ModuleLogger extends Module {
|
||||||
/**
|
/**
|
||||||
* Если нужно то трассируем
|
* Если нужно то трассируем
|
||||||
*/
|
*/
|
||||||
if ($this->getUseTrace()) {
|
if ($this->getUseTrace()) {
|
||||||
$msgOut.='['.$this->parserTrace(debug_backtrace()).']';
|
$msgOut.='['.$this->parserTrace(debug_backtrace()).']';
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Записываем
|
* Записываем
|
||||||
*/
|
*/
|
||||||
$this->write($msgOut);
|
$this->write($msgOut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выполняет форматирование трассировки
|
* Выполняет форматирование трассировки
|
||||||
*
|
*
|
||||||
* @param array $aTrace
|
* @param array $aTrace
|
||||||
* @return unknown
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function parserTrace($aTrace) {
|
protected function parserTrace($aTrace) {
|
||||||
$msg='';
|
$msg='';
|
||||||
|
@ -243,12 +234,11 @@ class ModuleLogger extends Module {
|
||||||
}
|
}
|
||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Производит сохранение в файл
|
* Производит сохранение в файл
|
||||||
*
|
*
|
||||||
* @param string $msg
|
* @param string $msg Сообщение
|
||||||
* @return unknown
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function write($msg) {
|
protected function write($msg) {
|
||||||
/**
|
/**
|
||||||
|
@ -268,41 +258,41 @@ class ModuleLogger extends Module {
|
||||||
* Запись в файл
|
* Запись в файл
|
||||||
*/
|
*/
|
||||||
if ($fp=fopen($this->sPathLogs.$this->sFileName,"a")) {
|
if ($fp=fopen($this->sPathLogs.$this->sFileName,"a")) {
|
||||||
fwrite($fp,$msg."\n");
|
fwrite($fp,$msg."\n");
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
/**
|
/**
|
||||||
* Если нужно то делаем ротацию
|
* Если нужно то делаем ротацию
|
||||||
*/
|
*/
|
||||||
if ($this->bUseRotate) {
|
if ($this->bUseRotate) {
|
||||||
$this->rotate();
|
$this->rotate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Производит ротацию логов
|
* Производит ротацию логов
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
protected function rotate() {
|
protected function rotate() {
|
||||||
clearstatcache();
|
clearstatcache();
|
||||||
/**
|
/**
|
||||||
* Если размер файло лога привысил максимальный то сохраняем текущий файл в архивный, а текущий становится пустым
|
* Если размер файла лога привысил максимальный то сохраняем текущий файл в архивный, а текущий становится пустым
|
||||||
*/
|
*/
|
||||||
if (filesize($this->sPathLogs.$this->sFileName)>=$this->iSizeForRotate) {
|
if (filesize($this->sPathLogs.$this->sFileName)>=$this->iSizeForRotate) {
|
||||||
$pathinfo=pathinfo($this->sPathLogs.$this->getFileName());
|
$pathinfo=pathinfo($this->sPathLogs.$this->getFileName());
|
||||||
$name=$pathinfo['basename'];
|
$name=$pathinfo['basename'];
|
||||||
$aName=explode('.',$name);
|
$aName=explode('.',$name);
|
||||||
$i=1;
|
$i=1;
|
||||||
while (1) {
|
while (1) {
|
||||||
$sNameNew=$aName[0].".$i.".$aName[1];
|
$sNameNew=$aName[0].".$i.".$aName[1];
|
||||||
$sFullNameNew=$pathinfo['dirname'].'/'.$sNameNew;
|
$sFullNameNew=$pathinfo['dirname'].'/'.$sNameNew;
|
||||||
if (!file_exists($sFullNameNew)) {
|
if (!file_exists($sFullNameNew)) {
|
||||||
$this->rotateRename($i-1);
|
$this->rotateRename($i-1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -310,10 +300,10 @@ class ModuleLogger extends Module {
|
||||||
*
|
*
|
||||||
* @param int $numberLast
|
* @param int $numberLast
|
||||||
*/
|
*/
|
||||||
protected function rotateRename($numberLast) {
|
protected function rotateRename($numberLast) {
|
||||||
$pathinfo=pathinfo($this->sPathLogs.$this->getFileName());
|
$pathinfo=pathinfo($this->sPathLogs.$this->getFileName());
|
||||||
$aName=explode('.',$pathinfo['basename']);
|
$aName=explode('.',$pathinfo['basename']);
|
||||||
for ($i=$numberLast;$i>0;$i--) {
|
for ($i=$numberLast;$i>0;$i--) {
|
||||||
$sFullNameCur=$pathinfo['dirname'].'/'.$aName[0].".$i.".$aName[1];
|
$sFullNameCur=$pathinfo['dirname'].'/'.$aName[0].".$i.".$aName[1];
|
||||||
$sFullNameNew=$pathinfo['dirname'].'/'.$aName[0].'.'.($i+1).'.'.$aName[1];
|
$sFullNameNew=$pathinfo['dirname'].'/'.$aName[0].'.'.($i+1).'.'.$aName[1];
|
||||||
rename($sFullNameCur,$sFullNameNew);
|
rename($sFullNameCur,$sFullNameNew);
|
||||||
|
|
|
@ -23,14 +23,23 @@
|
||||||
* Так же вы можете благодаря этому получать уведомления о новых версиях установленных плагинов и шаблонов.
|
* Так же вы можете благодаря этому получать уведомления о новых версиях установленных плагинов и шаблонов.
|
||||||
* Вы всегда можете отключить передачу данных в конфиге, но просим этого не далать, тем самым вы поможете развитию LS CMS. Это важно для нас.
|
* Вы всегда можете отключить передачу данных в конфиге, но просим этого не далать, тем самым вы поможете развитию LS CMS. Это важно для нас.
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleLs extends Module {
|
class ModuleLs extends Module {
|
||||||
|
/**
|
||||||
|
* Адрес шлюза
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
protected $sUrlLs='http://sender.livestreetcms.com/push/';
|
protected $sUrlLs='http://sender.livestreetcms.com/push/';
|
||||||
|
/**
|
||||||
|
* Список данных для отправки
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
protected $aDataForSend=array();
|
protected $aDataForSend=array();
|
||||||
|
|
||||||
protected $oMapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализируем модуль
|
* Инициализируем модуль
|
||||||
*
|
*
|
||||||
|
@ -38,7 +47,6 @@ class ModuleLs extends Module {
|
||||||
public function Init() {
|
public function Init() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запуск сбора данных
|
* Запуск сбора данных
|
||||||
*
|
*
|
||||||
|
@ -48,7 +56,6 @@ class ModuleLs extends Module {
|
||||||
if (!Config::Get('module.ls.send_general')) {
|
if (!Config::Get('module.ls.send_general')) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вставка счетчика
|
* Вставка счетчика
|
||||||
*/
|
*/
|
||||||
|
@ -56,13 +63,11 @@ class ModuleLs extends Module {
|
||||||
// лучше вставлять в html_head_end, но здесь нужно постараться вставить код в самом конце, чтобы уменьшить вероятность повторного вызова GA, если сайт его использует
|
// лучше вставлять в html_head_end, но здесь нужно постараться вставить код в самом конце, чтобы уменьшить вероятность повторного вызова GA, если сайт его использует
|
||||||
$this->Hook_AddExecModule('template_body_end','Ls_InjectCounter',-10000);
|
$this->Hook_AddExecModule('template_body_end','Ls_InjectCounter',-10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отправка данных
|
* Отправка данных
|
||||||
*/
|
*/
|
||||||
$this->SendToLs();
|
$this->SendToLs();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вставка счетчика GA с учетом его возможного повторного использования
|
* Вставка счетчика GA с учетом его возможного повторного использования
|
||||||
*
|
*
|
||||||
|
@ -92,9 +97,8 @@ class ModuleLs extends Module {
|
||||||
|
|
||||||
return $sCounter;
|
return $sCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отправка данных на сервер LS
|
* Отправка данных на шлюз LS
|
||||||
*/
|
*/
|
||||||
protected function SendToLs() {
|
protected function SendToLs() {
|
||||||
/**
|
/**
|
||||||
|
@ -134,7 +138,6 @@ class ModuleLs extends Module {
|
||||||
$this->ErrorSendToLs();
|
$this->ErrorSendToLs();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отмечает факт ошибки при отправки данных, увеличиваем число попыток
|
* Отмечает факт ошибки при отправки данных, увеличиваем число попыток
|
||||||
*/
|
*/
|
||||||
|
@ -149,18 +152,16 @@ class ModuleLs extends Module {
|
||||||
}
|
}
|
||||||
$this->SetMarkerFile(date("Y-m-d"),$aData);
|
$this->SetMarkerFile(date("Y-m-d"),$aData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отмечает факт успешной отправки данных
|
* Отмечает факт успешной отправки данных
|
||||||
*/
|
*/
|
||||||
protected function SuccessfulSendToLs() {
|
protected function SuccessfulSendToLs() {
|
||||||
$this->SetMarkerFile(date("Y-m-d"),array('is_send'=>1));
|
$this->SetMarkerFile(date("Y-m-d"),array('is_send'=>1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Читает данные из файла
|
* Читает данные из файла
|
||||||
*
|
*
|
||||||
* @param $sDate
|
* @param string $sDate Дата под которой сохранен файл
|
||||||
* @return bool|mixed
|
* @return bool|mixed
|
||||||
*/
|
*/
|
||||||
protected function GetMarkerFile($sDate) {
|
protected function GetMarkerFile($sDate) {
|
||||||
|
@ -173,12 +174,11 @@ class ModuleLs extends Module {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записывает данные в файл
|
* Записывает данные в файл
|
||||||
*
|
*
|
||||||
* @param $sDate
|
* @param string $sDate Дата
|
||||||
* @param $aData
|
* @param array $aData Данные
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function SetMarkerFile($sDate,$aData) {
|
protected function SetMarkerFile($sDate,$aData) {
|
||||||
|
@ -188,7 +188,6 @@ class ModuleLs extends Module {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает строчку для инжекции в шаблон
|
* Возвращает строчку для инжекции в шаблон
|
||||||
*
|
*
|
||||||
|
@ -199,7 +198,6 @@ class ModuleLs extends Module {
|
||||||
$sUrl=$this->sUrlLs.'img/?'.$this->makeGetParams($this->aDataForSend);
|
$sUrl=$this->sUrlLs.'img/?'.$this->makeGetParams($this->aDataForSend);
|
||||||
return '<img width="1" height="1" src="'.$sUrl.'">';
|
return '<img width="1" height="1" src="'.$sUrl.'">';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает данные для отправки
|
* Возвращает данные для отправки
|
||||||
*
|
*
|
||||||
|
@ -227,13 +225,12 @@ class ModuleLs extends Module {
|
||||||
|
|
||||||
return $aData;
|
return $aData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Чтение URL
|
* Чтение URL
|
||||||
*
|
*
|
||||||
* @param $sUrl
|
* @param string $sUrl Урл
|
||||||
* @param $aParams
|
* @param array $aParams параметры
|
||||||
* @return bool|mixed|string
|
* @return bool|string
|
||||||
*/
|
*/
|
||||||
protected function getUrl($sUrl,$aParams) {
|
protected function getUrl($sUrl,$aParams) {
|
||||||
if (function_exists('curl_init')) {
|
if (function_exists('curl_init')) {
|
||||||
|
@ -283,12 +280,11 @@ class ModuleLs extends Module {
|
||||||
return $sData;
|
return $sData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Формирует строку GET параметров
|
* Формирует строку GET параметров
|
||||||
*
|
*
|
||||||
* @param array $aParams
|
* @param array $aParams Параметры
|
||||||
* @return array|string
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function makeGetParams($aParams=array()) {
|
protected function makeGetParams($aParams=array()) {
|
||||||
$sGetParams='';
|
$sGetParams='';
|
||||||
|
@ -297,7 +293,5 @@ class ModuleLs extends Module {
|
||||||
}
|
}
|
||||||
return $sGetParams;
|
return $sGetParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
|
@ -19,19 +19,63 @@ require_once(Config::Get('path.root.engine').'/lib/external/phpMailer/class.phpm
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Модуль для отправки почты(e-mail) через phpMailer
|
* Модуль для отправки почты(e-mail) через phpMailer
|
||||||
|
* <pre>
|
||||||
|
* $this->Mail_SetAdress('claus@mail.ru','Claus');
|
||||||
|
* $this->Mail_SetSubject('Hi!');
|
||||||
|
* $this->Mail_SetBody('How are you?');
|
||||||
|
* $this->Mail_setHTML();
|
||||||
|
* $this->Mail_Send();
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleMail extends Module {
|
class ModuleMail extends Module {
|
||||||
protected $oMailer;
|
|
||||||
/**
|
/**
|
||||||
* Настройки SMTP сервера для отправки писем
|
* Основной объект рассылбщика
|
||||||
*
|
*
|
||||||
|
* @var phpmailer
|
||||||
|
*/
|
||||||
|
protected $oMailer;
|
||||||
|
/**
|
||||||
|
* Настройки SMTP сервера для отправки писем
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Хост smtp
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $sHost;
|
protected $sHost;
|
||||||
|
/**
|
||||||
|
* Порт smtp
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
protected $iPort;
|
protected $iPort;
|
||||||
|
/**
|
||||||
|
* Логин smtp
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
protected $sUsername;
|
protected $sUsername;
|
||||||
|
/**
|
||||||
|
* Пароль smtp
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
protected $sPassword;
|
protected $sPassword;
|
||||||
|
/**
|
||||||
|
* Треубется или нет авторизация на smtp
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
protected $bSmtpAuth;
|
protected $bSmtpAuth;
|
||||||
|
/**
|
||||||
|
* Префикс соединения к smtp - "", "ssl" или "tls"
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
protected $sSmtpSecure;
|
protected $sSmtpSecure;
|
||||||
/**
|
/**
|
||||||
* Метод отправки почты
|
* Метод отправки почты
|
||||||
|
@ -51,7 +95,7 @@ class ModuleMail extends Module {
|
||||||
* @var int
|
* @var int
|
||||||
*/
|
*/
|
||||||
protected $iWordWrap=0;
|
protected $iWordWrap=0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Мыло от кого отправляется вся почта
|
* Мыло от кого отправляется вся почта
|
||||||
*
|
*
|
||||||
|
@ -64,22 +108,32 @@ class ModuleMail extends Module {
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $sFromName;
|
protected $sFromName;
|
||||||
|
/**
|
||||||
|
* Тема письма
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
protected $sSubject='';
|
protected $sSubject='';
|
||||||
|
/**
|
||||||
|
* Текст письма
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
protected $sBody='';
|
protected $sBody='';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
/**
|
/**
|
||||||
* Настройки SMTP сервера для отправки писем
|
* Настройки SMTP сервера для отправки писем
|
||||||
*/
|
*/
|
||||||
$this->sHost = Config::Get('sys.mail.smtp.host');
|
$this->sHost = Config::Get('sys.mail.smtp.host');
|
||||||
$this->iPort = Config::Get('sys.mail.smtp.port');
|
$this->iPort = Config::Get('sys.mail.smtp.port');
|
||||||
$this->sUsername = Config::Get('sys.mail.smtp.user');
|
$this->sUsername = Config::Get('sys.mail.smtp.user');
|
||||||
$this->sPassword = Config::Get('sys.mail.smtp.password');
|
$this->sPassword = Config::Get('sys.mail.smtp.password');
|
||||||
$this->bSmtpAuth = Config::Get('sys.mail.smtp.auth');
|
$this->bSmtpAuth = Config::Get('sys.mail.smtp.auth');
|
||||||
$this->sSmtpSecure = Config::Get('sys.mail.smtp.secure');
|
$this->sSmtpSecure = Config::Get('sys.mail.smtp.secure');
|
||||||
/**
|
/**
|
||||||
* Метод отправки почты
|
* Метод отправки почты
|
||||||
|
@ -88,7 +142,7 @@ class ModuleMail extends Module {
|
||||||
/**
|
/**
|
||||||
* Кодировка писем
|
* Кодировка писем
|
||||||
*/
|
*/
|
||||||
$this->sCharSet=Config::Get('sys.mail.charset');
|
$this->sCharSet=Config::Get('sys.mail.charset');
|
||||||
/**
|
/**
|
||||||
* Мыло от кого отправляется вся почта
|
* Мыло от кого отправляется вся почта
|
||||||
*/
|
*/
|
||||||
|
@ -97,12 +151,12 @@ class ModuleMail extends Module {
|
||||||
* Имя от кого отправляется вся почта
|
* Имя от кого отправляется вся почта
|
||||||
*/
|
*/
|
||||||
$this->sFromName=Config::Get('sys.mail.from_name');
|
$this->sFromName=Config::Get('sys.mail.from_name');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создаём объект phpMailer и устанвливаем ему необходимые настройки
|
* Создаём объект phpMailer и устанвливаем ему необходимые настройки
|
||||||
*/
|
*/
|
||||||
$this->oMailer = new phpmailer();
|
$this->oMailer = new phpmailer();
|
||||||
$this->oMailer->Host=$this->sHost;
|
$this->oMailer->Host=$this->sHost;
|
||||||
$this->oMailer->Port=$this->iPort;
|
$this->oMailer->Port=$this->iPort;
|
||||||
$this->oMailer->Username=$this->sUsername;
|
$this->oMailer->Username=$this->sUsername;
|
||||||
$this->oMailer->Password=$this->sPassword;
|
$this->oMailer->Password=$this->sPassword;
|
||||||
|
@ -111,50 +165,45 @@ class ModuleMail extends Module {
|
||||||
$this->oMailer->Mailer=$this->sMailerType;
|
$this->oMailer->Mailer=$this->sMailerType;
|
||||||
$this->oMailer->WordWrap=$this->iWordWrap;
|
$this->oMailer->WordWrap=$this->iWordWrap;
|
||||||
$this->oMailer->CharSet=$this->sCharSet;
|
$this->oMailer->CharSet=$this->sCharSet;
|
||||||
|
|
||||||
$this->oMailer->From=$this->sFrom;
|
$this->oMailer->From=$this->sFrom;
|
||||||
$this->oMailer->FromName=$this->sFromName;
|
$this->oMailer->FromName=$this->sFromName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает тему сообщения
|
* Устанавливает тему сообщения
|
||||||
*
|
*
|
||||||
* @param string $sText
|
* @param string $sText Тема сообщения
|
||||||
*/
|
*/
|
||||||
public function SetSubject($sText) {
|
public function SetSubject($sText) {
|
||||||
$this->sSubject=$sText;
|
$this->sSubject=$sText;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает текст сообщения
|
* Устанавливает текст сообщения
|
||||||
*
|
*
|
||||||
* @param string $sText
|
* @param string $sText Текст сообщения
|
||||||
*/
|
*/
|
||||||
public function SetBody($sText) {
|
public function SetBody($sText) {
|
||||||
$this->sBody=$sText;
|
$this->sBody=$sText;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляем новый адрес получателя
|
* Добавляем новый адрес получателя
|
||||||
*
|
*
|
||||||
* @param string $sMail
|
* @param string $sMail Емайл
|
||||||
* @param string $sName
|
* @param string $sName Имя
|
||||||
*/
|
*/
|
||||||
public function AddAdress($sMail,$sName=null) {
|
public function AddAdress($sMail,$sName=null) {
|
||||||
$this->oMailer->AddAddress($sMail,$sName);
|
$this->oMailer->AddAddress($sMail,$sName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отправляет сообщение(мыло)
|
* Отправляет сообщение(мыло)
|
||||||
*
|
*
|
||||||
* @return unknown
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function Send() {
|
public function Send() {
|
||||||
$this->oMailer->Subject=$this->sSubject;
|
$this->oMailer->Subject=$this->sSubject;
|
||||||
$this->oMailer->Body=$this->sBody;
|
$this->oMailer->Body=$this->sBody;
|
||||||
return $this->oMailer->Send();
|
return $this->oMailer->Send();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Очищает все адреса получателей
|
* Очищает все адреса получателей
|
||||||
*
|
*
|
||||||
|
@ -162,18 +211,16 @@ class ModuleMail extends Module {
|
||||||
public function ClearAddresses() {
|
public function ClearAddresses() {
|
||||||
$this->oMailer->ClearAddresses();
|
$this->oMailer->ClearAddresses();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает единственный адрес получателя
|
* Устанавливает единственный адрес получателя
|
||||||
*
|
*
|
||||||
* @param string $sMail
|
* @param string $sMail Емайл
|
||||||
* @param string $sName
|
* @param string $sName Имя
|
||||||
*/
|
*/
|
||||||
public function SetAdress($sMail,$sName=null) {
|
public function SetAdress($sMail,$sName=null) {
|
||||||
$this->ClearAddresses();
|
$this->ClearAddresses();
|
||||||
$this->oMailer->AddAddress($sMail,$sName);
|
$this->oMailer->AddAddress($sMail,$sName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает режим отправки письма как HTML
|
* Устанавливает режим отправки письма как HTML
|
||||||
*
|
*
|
||||||
|
@ -181,7 +228,6 @@ class ModuleMail extends Module {
|
||||||
public function setHTML() {
|
public function setHTML() {
|
||||||
$this->oMailer->IsHTML(true);
|
$this->oMailer->IsHTML(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает режим отправки письма как Text(Plain)
|
* Устанавливает режим отправки письма как Text(Plain)
|
||||||
*
|
*
|
||||||
|
|
|
@ -17,7 +17,13 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Модуль системных сообщений
|
* Модуль системных сообщений
|
||||||
|
* Позволяет показывать пользователю сообщения двух видов - об ошибке и об успешном действии.
|
||||||
|
* <pre>
|
||||||
|
* $this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleMessage extends Module {
|
class ModuleMessage extends Module {
|
||||||
/**
|
/**
|
||||||
|
@ -32,103 +38,100 @@ class ModuleMessage extends Module {
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aMsgNotice=array();
|
protected $aMsgNotice=array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Массив сообщений, который будут показаны на СЛЕДУЮЩЕЙ страничке
|
* Массив сообщений, который будут показаны на СЛЕДУЮЩЕЙ страничке
|
||||||
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aMsgNoticeSession=array();
|
protected $aMsgNoticeSession=array();
|
||||||
/**
|
/**
|
||||||
* Массив ошибок, который будут показаны на СЛЕДУЮЩЕЙ страничке
|
* Массив ошибок, который будут показаны на СЛЕДУЮЩЕЙ страничке
|
||||||
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aMsgErrorSession=array();
|
protected $aMsgErrorSession=array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
/**
|
/**
|
||||||
* Добавляем сообщения и ошибки, которые содержались в сессии
|
* Добавляем сообщения и ошибки, которые содержались в сессии
|
||||||
*/
|
*/
|
||||||
$aNoticeSession = $this->Session_Get('message_notice_session');
|
$aNoticeSession = $this->Session_Get('message_notice_session');
|
||||||
if(is_array($aNoticeSession) and count($aNoticeSession)) {
|
if(is_array($aNoticeSession) and count($aNoticeSession)) {
|
||||||
$this->aMsgNotice = $aNoticeSession;
|
$this->aMsgNotice = $aNoticeSession;
|
||||||
}
|
}
|
||||||
$aErrorSession = $this->Session_Get('message_error_session');
|
$aErrorSession = $this->Session_Get('message_error_session');
|
||||||
if(is_array($aErrorSession) and count($aErrorSession)) {
|
if(is_array($aErrorSession) and count($aErrorSession)) {
|
||||||
$this->aMsgError = $aErrorSession;
|
$this->aMsgError = $aErrorSession;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* При завершении работы модуля передаем списки сообщений в шаблоны Smarty
|
* При завершении работы модуля передаем списки сообщений в шаблоны Smarty
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Shutdown() {
|
public function Shutdown() {
|
||||||
/**
|
/**
|
||||||
* Добавляем в сессию те соощения, которые были отмечены для сессионого использования
|
* Добавляем в сессию те соощения, которые были отмечены для сессионого использования
|
||||||
*/
|
*/
|
||||||
$this->Session_Set('message_notice_session', $this->GetNoticeSession());
|
$this->Session_Set('message_notice_session', $this->GetNoticeSession());
|
||||||
$this->Session_Set('message_error_session', $this->GetErrorSession());
|
$this->Session_Set('message_error_session', $this->GetErrorSession());
|
||||||
|
|
||||||
$this->Viewer_Assign('aMsgError',$this->GetError());
|
$this->Viewer_Assign('aMsgError',$this->GetError());
|
||||||
$this->Viewer_Assign('aMsgNotice',$this->GetNotice());
|
$this->Viewer_Assign('aMsgNotice',$this->GetNotice());
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Добавляет новое сообщение об ошибке
|
* Добавляет новое сообщение об ошибке
|
||||||
*
|
*
|
||||||
* @param string $sMsg
|
* @param string $sMsg Сообщение
|
||||||
* @param string $sTitle
|
* @param string $sTitle Заголовок
|
||||||
* @param bool $bUseSession
|
* @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту
|
||||||
*/
|
*/
|
||||||
public function AddError($sMsg,$sTitle=null,$bUseSession=false) {
|
public function AddError($sMsg,$sTitle=null,$bUseSession=false) {
|
||||||
if(!$bUseSession) {
|
if(!$bUseSession) {
|
||||||
$this->aMsgError[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
$this->aMsgError[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
||||||
} else {
|
} else {
|
||||||
$this->aMsgErrorSession[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
$this->aMsgErrorSession[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создаёт идинственное сообщение об ошибке(т.е. очищает все предыдущие)
|
* Создаёт идинственное сообщение об ошибке(т.е. очищает все предыдущие)
|
||||||
*
|
*
|
||||||
* @param string $sMsg
|
* @param string $sMsg Сообщение
|
||||||
* @param string $sTitle
|
* @param string $sTitle Заголовок
|
||||||
* @param bool $bUseSession
|
* @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту
|
||||||
*/
|
*/
|
||||||
public function AddErrorSingle($sMsg,$sTitle=null,$bUseSession=false) {
|
public function AddErrorSingle($sMsg,$sTitle=null,$bUseSession=false) {
|
||||||
$this->ClearError();
|
$this->ClearError();
|
||||||
$this->AddError($sMsg,$sTitle,$bUseSession);
|
$this->AddError($sMsg,$sTitle,$bUseSession);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Добавляет новое сообщение
|
* Добавляет новое сообщение
|
||||||
*
|
*
|
||||||
* @param string $sMsg
|
* @param string $sMsg Сообщение
|
||||||
* @param string $sTitle
|
* @param string $sTitle Заголовок
|
||||||
* @param bool $bUseSession
|
* @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту
|
||||||
*/
|
*/
|
||||||
public function AddNotice($sMsg,$sTitle=null,$bUseSession=false) {
|
public function AddNotice($sMsg,$sTitle=null,$bUseSession=false) {
|
||||||
if(!$bUseSession) {
|
if(!$bUseSession) {
|
||||||
$this->aMsgNotice[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
$this->aMsgNotice[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
||||||
} else {
|
} else {
|
||||||
$this->aMsgNoticeSession[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
$this->aMsgNoticeSession[]=array('msg'=>$sMsg,'title'=>$sTitle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создаёт идинственное сообщение, удаляя предыдущие
|
* Создаёт идинственное сообщение, удаляя предыдущие
|
||||||
*
|
*
|
||||||
* @param string $sMsg
|
* @param string $sMsg Сообщение
|
||||||
* @param string $sTitle
|
* @param string $sTitle Заголовок
|
||||||
* @param bool $bUseSession
|
* @param bool $bUseSession Показать сообщение при следующем обращии пользователя к сайту
|
||||||
*/
|
*/
|
||||||
public function AddNoticeSingle($sMsg,$sTitle=null,$bUseSession=false) {
|
public function AddNoticeSingle($sMsg,$sTitle=null,$bUseSession=false) {
|
||||||
$this->ClearNotice();
|
$this->ClearNotice();
|
||||||
$this->AddNotice($sMsg,$sTitle,$bUseSession);
|
$this->AddNotice($sMsg,$sTitle,$bUseSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Очищает стек сообщений
|
* Очищает стек сообщений
|
||||||
*
|
*
|
||||||
|
@ -137,7 +140,6 @@ class ModuleMessage extends Module {
|
||||||
$this->aMsgNotice=array();
|
$this->aMsgNotice=array();
|
||||||
$this->aMsgNoticeSession=array();
|
$this->aMsgNoticeSession=array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Очищает стек ошибок
|
* Очищает стек ошибок
|
||||||
*
|
*
|
||||||
|
@ -146,7 +148,6 @@ class ModuleMessage extends Module {
|
||||||
$this->aMsgError=array();
|
$this->aMsgError=array();
|
||||||
$this->aMsgErrorSession=array();
|
$this->aMsgErrorSession=array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает список сообщений об ошибке
|
* Получает список сообщений об ошибке
|
||||||
*
|
*
|
||||||
|
@ -155,7 +156,6 @@ class ModuleMessage extends Module {
|
||||||
public function GetError() {
|
public function GetError() {
|
||||||
return $this->aMsgError;
|
return $this->aMsgError;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает список сообщений
|
* Получает список сообщений
|
||||||
*
|
*
|
||||||
|
@ -164,25 +164,23 @@ class ModuleMessage extends Module {
|
||||||
public function GetNotice() {
|
public function GetNotice() {
|
||||||
return $this->aMsgNotice;
|
return $this->aMsgNotice;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает список сообщений,
|
* Возвращает список сообщений,
|
||||||
* которые необходимо поместить в сессию
|
* которые необходимо поместить в сессию
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function GetNoticeSession() {
|
public function GetNoticeSession() {
|
||||||
return $this->aMsgNoticeSession;
|
return $this->aMsgNoticeSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает список ошибок,
|
* Возвращает список ошибок,
|
||||||
* которые необходимо поместить в сессию
|
* которые необходимо поместить в сессию
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function GetErrorSession() {
|
public function GetErrorSession() {
|
||||||
return $this->aMsgErrorSession;
|
return $this->aMsgErrorSession;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
|
@ -16,8 +16,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Модуль управления плагинами сообщений
|
* Модуль управления плагинами
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModulePlugin extends Module {
|
class ModulePlugin extends Module {
|
||||||
/**
|
/**
|
||||||
|
@ -32,16 +34,15 @@ class ModulePlugin extends Module {
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $sPluginsDir;
|
protected $sPluginsDir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список плагинов
|
* Список плагинов
|
||||||
*
|
*
|
||||||
* @var unknown_type
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aPluginsList=array();
|
protected $aPluginsList=array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список engine-rewrite`ов (модули, экшены, сущности, шаблоны)
|
* Список engine-rewrite`ов (модули, экшены, сущности, шаблоны)
|
||||||
|
* Определяет типы объектов, которые может переопределить/унаследовать плагин
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
|
@ -53,7 +54,6 @@ class ModulePlugin extends Module {
|
||||||
'template' => array(),
|
'template' => array(),
|
||||||
'block' => array(),
|
'block' => array(),
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Стек наследований
|
* Стек наследований
|
||||||
*
|
*
|
||||||
|
@ -68,7 +68,6 @@ class ModulePlugin extends Module {
|
||||||
public function Init() {
|
public function Init() {
|
||||||
$this->sPluginsDir=Config::Get('path.root.server').'/plugins/';
|
$this->sPluginsDir=Config::Get('path.root.server').'/plugins/';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает список информации о всех плагинах, загруженных в plugin-директорию
|
* Получает список информации о всех плагинах, загруженных в plugin-директорию
|
||||||
*
|
*
|
||||||
|
@ -122,13 +121,12 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return $this->aPluginsList;
|
return $this->aPluginsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает значение параметра из XML на основе языковой разметки
|
* Получает значение параметра из XML на основе языковой разметки
|
||||||
*
|
*
|
||||||
* @param SimpleXMLElement $oXml
|
* @param SimpleXMLElement $oXml XML узел
|
||||||
* @param string $sProperty
|
* @param string $sProperty Свойство, которое нужно вернуть
|
||||||
* @param string $sLang
|
* @param string $sLang Название языка
|
||||||
*/
|
*/
|
||||||
protected function Xlang($oXml,$sProperty,$sLang) {
|
protected function Xlang($oXml,$sProperty,$sLang) {
|
||||||
$sProperty=trim($sProperty);
|
$sProperty=trim($sProperty);
|
||||||
|
@ -138,7 +136,13 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
$oXml->$sProperty->data=$this->Text_Parser(trim((string)array_shift($data)));
|
$oXml->$sProperty->data=$this->Text_Parser(trim((string)array_shift($data)));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Переключает состояние плагина активный/не активный
|
||||||
|
*
|
||||||
|
* @param string $sPlugin Название плагина(код)
|
||||||
|
* @param $sAction Действие - activate/deactivate
|
||||||
|
* @return null|bool
|
||||||
|
*/
|
||||||
public function Toggle($sPlugin,$sAction) {
|
public function Toggle($sPlugin,$sAction) {
|
||||||
$aPlugins=$this->GetList();
|
$aPlugins=$this->GetList();
|
||||||
if(!isset($aPlugins[$sPlugin])) return null;
|
if(!isset($aPlugins[$sPlugin])) return null;
|
||||||
|
@ -309,7 +313,6 @@ class ModulePlugin extends Module {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает список активированных плагинов в системе
|
* Возвращает список активированных плагинов в системе
|
||||||
*
|
*
|
||||||
|
@ -324,16 +327,15 @@ class ModulePlugin extends Module {
|
||||||
|
|
||||||
return $aPlugins;
|
return $aPlugins;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записывает список активных плагинов в файл PLUGINS.DAT
|
* Записывает список активных плагинов в файл PLUGINS.DAT
|
||||||
*
|
*
|
||||||
* @param array|string $aPlugins
|
* @param array|string $aPlugins Список плагинов
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function SetActivePlugins($aPlugins) {
|
public function SetActivePlugins($aPlugins) {
|
||||||
if(!is_array($aPlugins)) $aPlugins = array($aPlugins);
|
if(!is_array($aPlugins)) $aPlugins = array($aPlugins);
|
||||||
$aPlugins=array_unique(array_map('trim',$aPlugins));
|
$aPlugins=array_unique(array_map('trim',$aPlugins));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записываем данные в файл PLUGINS.DAT
|
* Записываем данные в файл PLUGINS.DAT
|
||||||
*/
|
*/
|
||||||
|
@ -342,11 +344,10 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Удаляет плагины с сервера
|
* Удаляет плагины с сервера
|
||||||
*
|
*
|
||||||
* @param array $aPlugins
|
* @param array $aPlugins Список плагинов для удаления
|
||||||
*/
|
*/
|
||||||
public function Delete($aPlugins) {
|
public function Delete($aPlugins) {
|
||||||
if(!is_array($aPlugins)) $aPlugins=array($aPlugins);
|
if(!is_array($aPlugins)) $aPlugins=array($aPlugins);
|
||||||
|
@ -364,7 +365,6 @@ class ModulePlugin extends Module {
|
||||||
func_rmdir($this->sPluginsDir.$sPluginCode);
|
func_rmdir($this->sPluginsDir.$sPluginCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Перенаправление вызовов на модули, экшены, сущности
|
* Перенаправление вызовов на модули, экшены, сущности
|
||||||
*
|
*
|
||||||
|
@ -385,7 +385,6 @@ class ModulePlugin extends Module {
|
||||||
'sign'=>$sSign
|
'sign'=>$sSign
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет в стек наследника класса
|
* Добавляет в стек наследника класса
|
||||||
*
|
*
|
||||||
|
@ -403,13 +402,12 @@ class ModulePlugin extends Module {
|
||||||
);
|
);
|
||||||
$this->aInherits[trim($sFrom)]['position']=count($this->aInherits[trim($sFrom)]['items'])-1;
|
$this->aInherits[trim($sFrom)]['position']=count($this->aInherits[trim($sFrom)]['items'])-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает следующего родителя у наследника.
|
* Получает следующего родителя у наследника.
|
||||||
* ВНИМАНИЕ! Данный метод нужно вызвать только из __autoload()
|
* ВНИМАНИЕ! Данный метод нужно вызвать только из __autoload()
|
||||||
*
|
*
|
||||||
* @param unknown_type $sFrom
|
* @param string $sFrom
|
||||||
* @return unknown
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function GetParentInherit($sFrom) {
|
public function GetParentInherit($sFrom) {
|
||||||
if (!isset($this->aInherits[$sFrom]['items']) or count($this->aInherits[$sFrom]['items'])<=1 or $this->aInherits[$sFrom]['position']<1) {
|
if (!isset($this->aInherits[$sFrom]['items']) or count($this->aInherits[$sFrom]['items'])<=1 or $this->aInherits[$sFrom]['position']<1) {
|
||||||
|
@ -418,14 +416,24 @@ class ModulePlugin extends Module {
|
||||||
$this->aInherits[$sFrom]['position']--;
|
$this->aInherits[$sFrom]['position']--;
|
||||||
return $this->aInherits[$sFrom]['items'][$this->aInherits[$sFrom]['position']]['inherit'];
|
return $this->aInherits[$sFrom]['items'][$this->aInherits[$sFrom]['position']]['inherit'];
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Возвращает список наследуемых классов
|
||||||
|
*
|
||||||
|
* @param string $sFrom
|
||||||
|
* @return null|array
|
||||||
|
*/
|
||||||
public function GetInherits($sFrom) {
|
public function GetInherits($sFrom) {
|
||||||
if (isset($this->aInherits[trim($sFrom)])) {
|
if (isset($this->aInherits[trim($sFrom)])) {
|
||||||
return $this->aInherits[trim($sFrom)]['items'];
|
return $this->aInherits[trim($sFrom)]['items'];
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Возвращает последнего наследника в цепочке
|
||||||
|
*
|
||||||
|
* @param $sFrom
|
||||||
|
* @return null|string
|
||||||
|
*/
|
||||||
public function GetLastInherit($sFrom) {
|
public function GetLastInherit($sFrom) {
|
||||||
if (isset($this->aInherits[trim($sFrom)])) {
|
if (isset($this->aInherits[trim($sFrom)])) {
|
||||||
return $this->aInherits[trim($sFrom)]['items'][count($this->aInherits[trim($sFrom)]['items'])-1];
|
return $this->aInherits[trim($sFrom)]['items'][count($this->aInherits[trim($sFrom)]['items'])-1];
|
||||||
|
@ -448,7 +456,11 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return $sFrom;
|
return $sFrom;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param string $sType
|
||||||
|
* @param string $sFrom
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
public function GetDelegates($sType,$sFrom) {
|
public function GetDelegates($sType,$sFrom) {
|
||||||
if (isset($this->aDelegates[$sType][$sFrom]['delegate'])) {
|
if (isset($this->aDelegates[$sType][$sFrom]['delegate'])) {
|
||||||
return array($this->aDelegates[$sType][$sFrom]['delegate']);
|
return array($this->aDelegates[$sType][$sFrom]['delegate']);
|
||||||
|
@ -457,12 +469,24 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Возвращает цепочку делегатов
|
||||||
|
*
|
||||||
|
* @param string $sType
|
||||||
|
* @param string $sTo
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
public function GetDelegationChain($sType,$sTo) {
|
public function GetDelegationChain($sType,$sTo) {
|
||||||
$sRootDelegater = $this->GetRootDelegater($sType,$sTo);
|
$sRootDelegater = $this->GetRootDelegater($sType,$sTo);
|
||||||
return $this->collectAllDelegatesRecursive($sType,array($sRootDelegater));
|
return $this->collectAllDelegatesRecursive($sType,array($sRootDelegater));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Возвращает делегируемый класс
|
||||||
|
*
|
||||||
|
* @param string $sType
|
||||||
|
* @param string $sTo
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function GetRootDelegater($sType,$sTo) {
|
public function GetRootDelegater($sType,$sTo) {
|
||||||
$sItem = $sTo;
|
$sItem = $sTo;
|
||||||
$sItemDelegater = $this->GetDelegater($sType,$sTo);
|
$sItemDelegater = $this->GetDelegater($sType,$sTo);
|
||||||
|
@ -475,7 +499,13 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return $sRootDelegater;
|
return $sRootDelegater;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Составляет цепочку делегатов
|
||||||
|
*
|
||||||
|
* @param string $sType
|
||||||
|
* @param string $aDelegates
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
public function collectAllDelegatesRecursive($sType,$aDelegates) {
|
public function collectAllDelegatesRecursive($sType,$aDelegates) {
|
||||||
foreach($aDelegates as $sClass) {
|
foreach($aDelegates as $sClass) {
|
||||||
if($aNewDelegates=$this->GetDelegates($sType,$sClass)) {
|
if($aNewDelegates=$this->GetDelegates($sType,$sClass)) {
|
||||||
|
@ -484,7 +514,6 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return $aDelegates;
|
return $aDelegates;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает делегирующий объект по имени делегата
|
* Возвращает делегирующий объект по имени делегата
|
||||||
*
|
*
|
||||||
|
@ -511,7 +540,6 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return $sTo;
|
return $sTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает подпись делегата модуля, экшена, сущности.
|
* Возвращает подпись делегата модуля, экшена, сущности.
|
||||||
*
|
*
|
||||||
|
@ -528,7 +556,6 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает true, если установлено правило делегирования
|
* Возвращает true, если установлено правило делегирования
|
||||||
* и класс является базовым в данном правиле
|
* и класс является базовым в данном правиле
|
||||||
|
@ -545,7 +572,6 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает true, если устано
|
* Возвращает true, если устано
|
||||||
*
|
*
|
||||||
|
@ -555,7 +581,7 @@ class ModulePlugin extends Module {
|
||||||
*/
|
*/
|
||||||
public function isDelegated($sType,$sTo) {
|
public function isDelegated($sType,$sTo) {
|
||||||
/**
|
/**
|
||||||
* Фильтруем меппер делегатов/наследников
|
* Фильтруем маппер делегатов/наследников
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
$aDelegateMapper=array_filter(
|
$aDelegateMapper=array_filter(
|
||||||
|
@ -576,7 +602,6 @@ class ModulePlugin extends Module {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает список объектов, доступных для делегирования
|
* Возвращает список объектов, доступных для делегирования
|
||||||
*
|
*
|
||||||
|
@ -585,12 +610,5 @@ class ModulePlugin extends Module {
|
||||||
public function GetDelegateObjectList() {
|
public function GetDelegateObjectList() {
|
||||||
return array_keys($this->aDelegates);
|
return array_keys($this->aDelegates);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* При завершении работы модуля
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function Shutdown() {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
|
@ -16,8 +16,18 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Модуль безопасности
|
* Модуль безопасности
|
||||||
|
* Необходимо использовать перед обработкой отправленной формы:
|
||||||
|
* <pre>
|
||||||
|
* if (getRequest('submit_add')) {
|
||||||
|
* $this->Security_ValidateSendForm();
|
||||||
|
* // далее код обработки формы
|
||||||
|
* ......
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleSecurity extends Module {
|
class ModuleSecurity extends Module {
|
||||||
/**
|
/**
|
||||||
|
@ -25,23 +35,28 @@ class ModuleSecurity extends Module {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Производит валидацию отправки формы/запроса от пользователя, позволяет избежать атаки CSRF
|
||||||
|
*/
|
||||||
public function ValidateSendForm() {
|
public function ValidateSendForm() {
|
||||||
if (!($this->ValidateSessionKey() && 1)) {
|
if (!($this->ValidateSessionKey())) {
|
||||||
die("Hacking attemp!");
|
die("Hacking attemp!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Проверка на соотвествие реферала
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
public function ValidateReferal() {
|
public function ValidateReferal() {
|
||||||
if (isset($_SERVER['HTTP_REFERER'])) {
|
if (isset($_SERVER['HTTP_REFERER'])) {
|
||||||
$aUrl=parse_url($_SERVER['HTTP_REFERER']);
|
$aUrl=parse_url($_SERVER['HTTP_REFERER']);
|
||||||
if (strcasecmp($aUrl['host'],$_SERVER['HTTP_HOST'])==0) {
|
if (strcasecmp($aUrl['host'],$_SERVER['HTTP_HOST'])==0) {
|
||||||
return true;
|
return true;
|
||||||
} elseif (preg_match("/\.".quotemeta($_SERVER['HTTP_HOST'])."$/i",$aUrl['host'])) {
|
} elseif (preg_match("/\.".quotemeta($_SERVER['HTTP_HOST'])."$/i",$aUrl['host'])) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -49,6 +64,7 @@ class ModuleSecurity extends Module {
|
||||||
/**
|
/**
|
||||||
* Проверяет наличие security-ключа в сессии
|
* Проверяет наличие security-ключа в сессии
|
||||||
*
|
*
|
||||||
|
* @param null|string $sCode Код для проверки, если нет то берется из реквеста
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function ValidateSessionKey($sCode=null) {
|
public function ValidateSessionKey($sCode=null) {
|
||||||
|
@ -63,7 +79,7 @@ class ModuleSecurity extends Module {
|
||||||
public function SetSessionKey() {
|
public function SetSessionKey() {
|
||||||
$sCode = $this->GenerateSessionKey();
|
$sCode = $this->GenerateSessionKey();
|
||||||
$this->Viewer_Assign('LIVESTREET_SECURITY_KEY',$sCode);
|
$this->Viewer_Assign('LIVESTREET_SECURITY_KEY',$sCode);
|
||||||
|
|
||||||
return $sCode;
|
return $sCode;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -74,9 +90,11 @@ class ModuleSecurity extends Module {
|
||||||
protected function GenerateSessionKey() {
|
protected function GenerateSessionKey() {
|
||||||
return md5($this->Session_GetId().Config::Get('module.security.hash'));
|
return md5($this->Session_GetId().Config::Get('module.security.hash'));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Завершение модуля
|
||||||
|
*/
|
||||||
public function Shutdown() {
|
public function Shutdown() {
|
||||||
$this->SetSessionKey();
|
$this->SetSessionKey();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
|
@ -17,28 +17,41 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Модуль для работы с сессиями
|
* Модуль для работы с сессиями
|
||||||
* Заменяет стандартный механизм сессий(session)
|
* Выступает в качестве врапера для стандартного механизма сессий
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleSession extends Module {
|
class ModuleSession extends Module {
|
||||||
|
/**
|
||||||
|
* ID сессии
|
||||||
|
*
|
||||||
|
* @var null|string
|
||||||
|
*/
|
||||||
protected $sId=null;
|
protected $sId=null;
|
||||||
protected $aData=array();
|
/**
|
||||||
|
* Данные сессии
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $aData=array();
|
||||||
/**
|
/**
|
||||||
* Список user-agent'ов для флеш плеера
|
* Список user-agent'ов для флеш плеера
|
||||||
|
* Используется для передачи ID сессии при обращениии к сайту через flash, например, загрузка файлов через flash
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aFlashUserAgent=array(
|
protected $aFlashUserAgent=array(
|
||||||
'Shockwave Flash'
|
'Shockwave Flash'
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Использовать или нет стандартный механизм сессий
|
* Использовать или нет стандартный механизм сессий
|
||||||
|
* ВНИМАНИЕ! Не рекомендуется ставить false - т.к. этот режим до конца не протестирован
|
||||||
*
|
*
|
||||||
* @var bool
|
* @var bool
|
||||||
*/
|
*/
|
||||||
protected $bUseStandartSession;
|
protected $bUseStandartSession=true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*
|
*
|
||||||
|
@ -50,14 +63,13 @@ class ModuleSession extends Module {
|
||||||
*/
|
*/
|
||||||
$this->Start();
|
$this->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Старт сессии
|
* Старт сессии
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
protected function Start() {
|
protected function Start() {
|
||||||
if ($this->bUseStandartSession) {
|
if ($this->bUseStandartSession) {
|
||||||
session_name(Config::Get('sys.session.name'));
|
session_name(Config::Get('sys.session.name'));
|
||||||
session_set_cookie_params(
|
session_set_cookie_params(
|
||||||
Config::Get('sys.session.timeout'),
|
Config::Get('sys.session.timeout'),
|
||||||
Config::Get('sys.session.path'),
|
Config::Get('sys.session.path'),
|
||||||
|
@ -67,7 +79,7 @@ class ModuleSession extends Module {
|
||||||
/**
|
/**
|
||||||
* Даем возможность флешу задавать id сессии
|
* Даем возможность флешу задавать id сессии
|
||||||
*/
|
*/
|
||||||
$sUserAgent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
|
$sUserAgent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
|
||||||
if ($sUserAgent and (in_array($sUserAgent,$this->aFlashUserAgent) or strpos($sUserAgent,"Adobe Flash Player")===0) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {
|
if ($sUserAgent and (in_array($sUserAgent,$this->aFlashUserAgent) or strpos($sUserAgent,"Adobe Flash Player")===0) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {
|
||||||
session_id(getRequest('SSID'));
|
session_id(getRequest('SSID'));
|
||||||
} else {
|
} else {
|
||||||
|
@ -80,8 +92,6 @@ class ModuleSession extends Module {
|
||||||
$this->ReadData();
|
$this->ReadData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает уникальный идентификатор сессии
|
* Устанавливает уникальный идентификатор сессии
|
||||||
*
|
*
|
||||||
|
@ -105,11 +115,10 @@ class ModuleSession extends Module {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает идентификатор текущей сессии
|
* Получает идентификатор текущей сессии
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function GetId() {
|
public function GetId() {
|
||||||
if ($this->bUseStandartSession) {
|
if ($this->bUseStandartSession) {
|
||||||
return session_id();
|
return session_id();
|
||||||
|
@ -117,24 +126,21 @@ class ModuleSession extends Module {
|
||||||
return $this->sId;
|
return $this->sId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Гинерирует уникальный идентификатор
|
* Гинерирует уникальный идентификатор
|
||||||
*
|
*
|
||||||
* @return unknown
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function GenerateId() {
|
protected function GenerateId() {
|
||||||
return md5(func_generator().time());
|
return md5(func_generator().time());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Читает данные сессии
|
* Читает данные сессии в aData
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
protected function ReadData() {
|
protected function ReadData() {
|
||||||
$this->aData=$this->Cache_Get($this->sId);
|
$this->aData=$this->Cache_Get($this->sId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сохраняет данные сессии
|
* Сохраняет данные сессии
|
||||||
*
|
*
|
||||||
|
@ -142,12 +148,11 @@ class ModuleSession extends Module {
|
||||||
protected function Save() {
|
protected function Save() {
|
||||||
$this->Cache_Set($this->aData,$this->sId,array(),Config::Get('sys.session.timeout'));
|
$this->Cache_Set($this->aData,$this->sId,array(),Config::Get('sys.session.timeout'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает значение из сессии
|
* Получает значение из сессии
|
||||||
*
|
*
|
||||||
* @param string $sName
|
* @param string $sName Имя параметра
|
||||||
* @return unknown
|
* @return mixed|null
|
||||||
*/
|
*/
|
||||||
public function Get($sName) {
|
public function Get($sName) {
|
||||||
if ($this->bUseStandartSession) {
|
if ($this->bUseStandartSession) {
|
||||||
|
@ -156,12 +161,11 @@ class ModuleSession extends Module {
|
||||||
return isset($this->aData[$sName]) ? $this->aData[$sName] : null;
|
return isset($this->aData[$sName]) ? $this->aData[$sName] : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записывает значение в сессию
|
* Записывает значение в сессию
|
||||||
*
|
*
|
||||||
* @param string $sName
|
* @param string $sName Имя параметра
|
||||||
* @param unknown_type $data
|
* @param mixed $data Данные
|
||||||
*/
|
*/
|
||||||
public function Set($sName,$data) {
|
public function Set($sName,$data) {
|
||||||
if ($this->bUseStandartSession) {
|
if ($this->bUseStandartSession) {
|
||||||
|
@ -169,13 +173,12 @@ class ModuleSession extends Module {
|
||||||
} else {
|
} else {
|
||||||
$this->aData[$sName]=$data;
|
$this->aData[$sName]=$data;
|
||||||
$this->Save();
|
$this->Save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Удаляет значение из сессии
|
* Удаляет значение из сессии
|
||||||
*
|
*
|
||||||
* @param string $sName
|
* @param string $sName Имя параметра
|
||||||
*/
|
*/
|
||||||
public function Drop($sName) {
|
public function Drop($sName) {
|
||||||
if ($this->bUseStandartSession) {
|
if ($this->bUseStandartSession) {
|
||||||
|
@ -185,7 +188,6 @@ class ModuleSession extends Module {
|
||||||
$this->Save();
|
$this->Save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получает разом все данные сессии
|
* Получает разом все данные сессии
|
||||||
*
|
*
|
||||||
|
@ -198,7 +200,6 @@ class ModuleSession extends Module {
|
||||||
return $this->aData;
|
return $this->aData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Завершает сессию, дропая все данные
|
* Завершает сессию, дропая все данные
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,7 +19,14 @@ require_once(Config::Get('path.root.engine').'/lib/external/Jevix/jevix.class.ph
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Модуль обработки текста на основе типографа Jevix
|
* Модуль обработки текста на основе типографа Jevix
|
||||||
|
* Позволяет вырезать из текста лишние HTML теги и предотвращает различные попытки внедрить в текст JavaScript
|
||||||
|
* <pre>
|
||||||
|
* $sText=$this->Text_Parser($sTestSource);
|
||||||
|
* </pre>
|
||||||
|
* Настройки парсинга находятся в конфиге /config/jevix.php
|
||||||
*
|
*
|
||||||
|
* @package engine.modules
|
||||||
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
class ModuleText extends Module {
|
class ModuleText extends Module {
|
||||||
/**
|
/**
|
||||||
|
@ -27,20 +34,19 @@ class ModuleText extends Module {
|
||||||
*
|
*
|
||||||
* @var Jevix
|
* @var Jevix
|
||||||
*/
|
*/
|
||||||
protected $oJevix;
|
protected $oJevix;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация модуля
|
* Инициализация модуля
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Init() {
|
public function Init() {
|
||||||
/**
|
/**
|
||||||
* Создаем объект типографа и запускаем его конфигурацию
|
* Создаем объект типографа и запускаем его конфигурацию
|
||||||
*/
|
*/
|
||||||
$this->oJevix = new Jevix();
|
$this->oJevix = new Jevix();
|
||||||
$this->JevixConfig();
|
$this->JevixConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Конфигурирует типограф
|
* Конфигурирует типограф
|
||||||
*
|
*
|
||||||
|
@ -49,12 +55,11 @@ class ModuleText extends Module {
|
||||||
// загружаем конфиг
|
// загружаем конфиг
|
||||||
$this->LoadJevixConfig();
|
$this->LoadJevixConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Загружает конфиг Jevix'а
|
* Загружает конфиг Jevix'а
|
||||||
*
|
*
|
||||||
* @param string $sType Тип конфига
|
* @param string $sType Тип конфига
|
||||||
* @param bool $bClear
|
* @param bool $bClear Очищать предыдущий конфиг или нет
|
||||||
*/
|
*/
|
||||||
public function LoadJevixConfig($sType='default',$bClear=true) {
|
public function LoadJevixConfig($sType='default',$bClear=true) {
|
||||||
if ($bClear) {
|
if ($bClear) {
|
||||||
|
@ -81,11 +86,10 @@ class ModuleText extends Module {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает объект Jevix
|
* Возвращает объект Jevix
|
||||||
*
|
*
|
||||||
* @return unknown
|
* @return Jevix
|
||||||
*/
|
*/
|
||||||
public function GetJevix() {
|
public function GetJevix() {
|
||||||
return $this->oJevix;
|
return $this->oJevix;
|
||||||
|
@ -93,8 +97,8 @@ class ModuleText extends Module {
|
||||||
/**
|
/**
|
||||||
* Парсинг текста с помощью Jevix
|
* Парсинг текста с помощью Jevix
|
||||||
*
|
*
|
||||||
* @param string $sText
|
* @param string $sText Исходный текст
|
||||||
* @param array $aError
|
* @param array $aError Возвращает список возникших ошибок
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function JevixParser($sText,&$aError=null) {
|
public function JevixParser($sText,&$aError=null) {
|
||||||
|
@ -105,57 +109,59 @@ class ModuleText extends Module {
|
||||||
$sResult=$this->oJevix->parse($sText,$aError);
|
$sResult=$this->oJevix->parse($sText,$aError);
|
||||||
return $sResult;
|
return $sResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Парсинг текста на предмет видео
|
* Парсинг текста на предмет видео
|
||||||
|
* Находит теги <pre><video></video></pre> и реобразовываетих в видео
|
||||||
*
|
*
|
||||||
* @param string $sText
|
* @param string $sText Исходный текст
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function VideoParser($sText) {
|
public function VideoParser($sText) {
|
||||||
/**
|
/**
|
||||||
* youtube.com
|
* youtube.com
|
||||||
*/
|
*/
|
||||||
$sText = preg_replace('/<video>http:\/\/(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/$1&hl=en"></param><param name="wmode" value="opaque"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="opaque" width="425" height="344"></embed></object>', $sText);
|
$sText = preg_replace('/<video>http:\/\/(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/$1&hl=en"></param><param name="wmode" value="opaque"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="opaque" width="425" height="344"></embed></object>', $sText);
|
||||||
/**
|
/**
|
||||||
* rutube.ru
|
* rutube.ru
|
||||||
*/
|
*/
|
||||||
$sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/$1"></PARAM><PARAM name="wmode" value="opaque"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="flashVars" value="uid=662118"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="opaque" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></EMBED></OBJECT>', $sText);
|
$sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui', '<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/$1"></PARAM><PARAM name="wmode" value="opaque"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="flashVars" value="uid=662118"></PARAM><EMBED src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="opaque" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></EMBED></OBJECT>', $sText);
|
||||||
return $sText;
|
return $sText;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Парсит текст
|
* Парсит текст, применя все парсеры
|
||||||
*
|
*
|
||||||
* @param string $sText
|
* @param string $sText Исходный текст
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function Parser($sText) {
|
public function Parser($sText) {
|
||||||
$sResult=$this->FlashParamParser($sText);
|
$sResult=$this->FlashParamParser($sText);
|
||||||
$sResult=$this->JevixParser($sResult);
|
$sResult=$this->JevixParser($sResult);
|
||||||
$sResult=$this->VideoParser($sResult);
|
$sResult=$this->VideoParser($sResult);
|
||||||
$sResult=$this->CodeSourceParser($sResult);
|
$sResult=$this->CodeSourceParser($sResult);
|
||||||
return $sResult;
|
return $sResult;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Заменяет все вхождения короткого тега <param/> на длиную версию <param></param>
|
* Заменяет все вхождения короткого тега <param/> на длиную версию <param></param>
|
||||||
* Заменяет все вхождения короткого тега <embed/> на длиную версию <embed></embed>
|
* Заменяет все вхождения короткого тега <embed/> на длиную версию <embed></embed>
|
||||||
*
|
*
|
||||||
|
* @param string $sText Исходный текст
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function FlashParamParser($sText) {
|
protected function FlashParamParser($sText) {
|
||||||
if (preg_match_all("@(<\s*param\s*name\s*=\s*(?:\"|').*(?:\"|')\s*value\s*=\s*(?:\"|').*(?:\"|'))\s*/?\s*>(?!</param>)@Ui",$sText,$aMatch)) {
|
if (preg_match_all("@(<\s*param\s*name\s*=\s*(?:\"|').*(?:\"|')\s*value\s*=\s*(?:\"|').*(?:\"|'))\s*/?\s*>(?!</param>)@Ui",$sText,$aMatch)) {
|
||||||
foreach ($aMatch[1] as $key => $str) {
|
foreach ($aMatch[1] as $key => $str) {
|
||||||
$str_new=$str.'></param>';
|
$str_new=$str.'></param>';
|
||||||
$sText=str_replace($aMatch[0][$key],$str_new,$sText);
|
$sText=str_replace($aMatch[0][$key],$str_new,$sText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (preg_match_all("@(<\s*embed\s*.*)\s*/?\s*>(?!</embed>)@Ui",$sText,$aMatch)) {
|
if (preg_match_all("@(<\s*embed\s*.*)\s*/?\s*>(?!</embed>)@Ui",$sText,$aMatch)) {
|
||||||
foreach ($aMatch[1] as $key => $str) {
|
foreach ($aMatch[1] as $key => $str) {
|
||||||
$str_new=$str.'></embed>';
|
$str_new=$str.'></embed>';
|
||||||
$sText=str_replace($aMatch[0][$key],$str_new,$sText);
|
$sText=str_replace($aMatch[0][$key],$str_new,$sText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Удаляем все <param name="wmode" value="*"></param>
|
* Удаляем все <param name="wmode" value="*"></param>
|
||||||
*/
|
*/
|
||||||
if (preg_match_all("@(<param\s.*name=(?:\"|')wmode(?:\"|').*>\s*</param>)@Ui",$sText,$aMatch)) {
|
if (preg_match_all("@(<param\s.*name=(?:\"|')wmode(?:\"|').*>\s*</param>)@Ui",$sText,$aMatch)) {
|
||||||
foreach ($aMatch[1] as $key => $str) {
|
foreach ($aMatch[1] as $key => $str) {
|
||||||
|
@ -171,56 +177,64 @@ class ModuleText extends Module {
|
||||||
$sText=str_replace($aMatch[0][$key],$aMatch[0][$key].'<param name="wmode" value="opaque"></param>',$sText);
|
$sText=str_replace($aMatch[0][$key],$aMatch[0][$key].'<param name="wmode" value="opaque"></param>',$sText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $sText;
|
return $sText;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Подсветка исходного кода
|
||||||
|
*
|
||||||
|
* @param string $sText Исходный текст
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
public function CodeSourceParser($sText) {
|
public function CodeSourceParser($sText) {
|
||||||
$sText=str_replace("<code>",'<pre class="prettyprint"><code>',$sText);
|
$sText=str_replace("<code>",'<pre class="prettyprint"><code>',$sText);
|
||||||
$sText=str_replace("</code>",'</code></pre>',$sText);
|
$sText=str_replace("</code>",'</code></pre>',$sText);
|
||||||
return $sText;
|
return $sText;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Производить резрезание текста по тегу <cut>.
|
* Производить резрезание текста по тегу cut.
|
||||||
* Возвращаем массив вида:
|
* Возвращаем массив вида:
|
||||||
|
* <pre>
|
||||||
* array(
|
* array(
|
||||||
* $sTextShort - текст до тега <cut>
|
* $sTextShort - текст до тега <cut>
|
||||||
* $sTextNew - весь текст за исключением удаленного тега
|
* $sTextNew - весь текст за исключением удаленного тега
|
||||||
* $sTextCut - именованное значение <cut>
|
* $sTextCut - именованное значение <cut>
|
||||||
* )
|
* )
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
* @param string $sText
|
* @param string $sText Исходный текст
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function Cut($sText) {
|
public function Cut($sText) {
|
||||||
$sTextShort = $sText;
|
$sTextShort = $sText;
|
||||||
$sTextNew = $sText;
|
$sTextNew = $sText;
|
||||||
$sTextCut = null;
|
$sTextCut = null;
|
||||||
|
|
||||||
$sTextTemp=str_replace("\r\n",'[<rn>]',$sText);
|
$sTextTemp=str_replace("\r\n",'[<rn>]',$sText);
|
||||||
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
|
$sTextTemp=str_replace("\n",'[<n>]',$sTextTemp);
|
||||||
|
|
||||||
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
|
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui",$sTextTemp,$aMatch)) {
|
||||||
$aMatch[1]=str_replace('[<rn>]',"\r\n",$aMatch[1]);
|
$aMatch[1]=str_replace('[<rn>]',"\r\n",$aMatch[1]);
|
||||||
$aMatch[1]=str_replace('[<n>]',"\r\n",$aMatch[1]);
|
$aMatch[1]=str_replace('[<n>]',"\r\n",$aMatch[1]);
|
||||||
$aMatch[3]=str_replace('[<rn>]',"\r\n",$aMatch[3]);
|
$aMatch[3]=str_replace('[<rn>]',"\r\n",$aMatch[3]);
|
||||||
$aMatch[3]=str_replace('[<n>]',"\r\n",$aMatch[3]);
|
$aMatch[3]=str_replace('[<n>]',"\r\n",$aMatch[3]);
|
||||||
$sTextShort=$aMatch[1];
|
$sTextShort=$aMatch[1];
|
||||||
$sTextNew=$aMatch[1].' <a name="cut"></a> '.$aMatch[3];
|
$sTextNew=$aMatch[1].' <a name="cut"></a> '.$aMatch[3];
|
||||||
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*\/?$/Ui',$aMatch[2],$aMatchCut)) {
|
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*\/?$/Ui',$aMatch[2],$aMatchCut)) {
|
||||||
$sTextCut=trim($aMatchCut[1]);
|
$sTextCut=trim($aMatchCut[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array($sTextShort,$sTextNew,$sTextCut ? htmlspecialchars($sTextCut) : null);
|
return array($sTextShort,$sTextNew,$sTextCut ? htmlspecialchars($sTextCut) : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обработка тега <ls> в тексте
|
* Обработка тега ls в тексте
|
||||||
|
* <pre>
|
||||||
|
* <ls user="admin" />
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
* @param unknown_type $sTag
|
* @param string $sTag Тег на ктором сработал колбэк
|
||||||
* @param unknown_type $aParams
|
* @param array $aParams Список параметров тега
|
||||||
* @return unknown
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function CallbackTagLs($sTag,$aParams) {
|
public function CallbackTagLs($sTag,$aParams) {
|
||||||
$sText='';
|
$sText='';
|
||||||
|
|
Loading…
Reference in a new issue