1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-08 09:24:25 +03:00

Документация классов

This commit is contained in:
Mzhelskiy Maxim 2012-04-16 12:06:31 +04:00
parent 8487a151f2
commit adc20c767d
2 changed files with 449 additions and 218 deletions

View file

@ -16,25 +16,73 @@
*/
/**
* Абстрактный класс экшена
* Абстрактный класс экшена.
*
* От этого класса наследуются все экшены в движке.
* Предоставляет базовые метода для работы с параметрами и шаблоном при запросе страницы в браузере.
*
* @package engine
* @since 1.0
*/
abstract class Action extends LsObject {
/**
* Список зарегистрированных евентов
*
* @var array
*/
protected $aRegisterEvent=array();
/**
* Список параметров из URL
* <pre>/action/event/param0/param1/../paramN/</pre>
*
* @var array
*/
protected $aParams=array();
/**
* Список совпадений по регулярному выражению для евента
*
* @var array
*/
protected $aParamsEventMatch=array('event'=>array(),'params'=>array());
/**
* Объект ядра
*
* @var Engine|null
*/
protected $oEngine=null;
/**
* Шаблон экшена
* @see SetTemplate
* @see SetTemplateAction
*
* @var string|null
*/
protected $sActionTemplate=null;
/**
* Дефолтный евент
* @see SetDefaultEvent
*
* @var string|null
*/
protected $sDefaultEvent=null;
/**
* Текущий евент
*
* @var string|null
*/
protected $sCurrentEvent=null;
/**
* Текущий экшен
*
* @var null|string
*/
protected $sCurrentAction=null;
/**
* Конструктор
*
* @param Engine $oEngine
* @param string $sAction
* @param Engine $oEngine Объект ядра
* @param string $sAction Название экшена
*/
public function __construct(Engine $oEngine, $sAction) {
$this->RegisterEvent();
@ -46,6 +94,7 @@ abstract class Action extends LsObject {
/**
* Добавляет евент в экшен
* По сути является оберткой для AddEventPreg(), оставлен для простоты и совместимости с прошлыми версиями ядра
* @see AddEventPreg
*
* @param string $sEventName Название евента
* @param string $sEventFunction Какой метод ему соответствует
@ -80,7 +129,7 @@ abstract class Action extends LsObject {
* Запускает евент на выполнение
* Если текущий евент не определен то запускается тот которые определен по умолчанию(default event)
*
* @return unknown
* @return mixed
*/
public function ExecEvent() {
$this->sCurrentEvent=Router::GetActionEvent();
@ -112,7 +161,7 @@ abstract class Action extends LsObject {
/**
* Устанавливает евент по умолчанию
*
* @param string $sEvent
* @param string $sEvent Имя евента
*/
public function SetDefaultEvent($sEvent) {
$this->sDefaultEvent=$sEvent;
@ -130,8 +179,8 @@ abstract class Action extends LsObject {
/**
* Возвращает элементы совпадения по регулярному выражению для евента
*
* @param unknown_type $iItem
* @return unknown
* @param int|null $iItem Номер совпадения
* @return string|null
*/
protected function GetEventMatch($iItem=null) {
if ($iItem) {
@ -147,9 +196,9 @@ abstract class Action extends LsObject {
/**
* Возвращает элементы совпадения по регулярному выражению для параметров евента
*
* @param unknown_type $iParamNum
* @param unknown_type $iItem
* @return unknown
* @param int $iParamNum Номер параметра, начинается с нуля
* @param int|null $iItem Номер совпадения, начинается с нуля
* @return string|null
*/
protected function GetParamEventMatch($iParamNum,$iItem=null) {
if (!is_null($iItem)) {
@ -170,8 +219,8 @@ abstract class Action extends LsObject {
/**
* Получает параметр из URL по его номеру, если его нет то null
*
* @param unknown_type $iOffset
* @return unknown
* @param int $iOffset Номер параметра, начинается с нуля
* @return mixed
*/
public function GetParam($iOffset,$default=null) {
$iOffset=(int)$iOffset;
@ -181,7 +230,7 @@ abstract class Action extends LsObject {
/**
* Получает список параметров из УРЛ
*
* @return unknown
* @return array
*/
public function GetParams() {
return $this->aParams;
@ -192,8 +241,8 @@ abstract class Action extends LsObject {
* Установить значение параметра(эмуляция параметра в URL).
* После установки занова считывает параметры из роутера - для корректной работы
*
* @param int $iOffset - по идеи может быть не только числом
* @param unknown_type $value
* @param int $iOffset Номер параметра, но по идеи может быть не только числом
* @param string $value
*/
public function SetParam($iOffset,$value) {
Router::SetParam($iOffset,$value);
@ -238,7 +287,7 @@ abstract class Action extends LsObject {
* Получить шаблон
* Если шаблон не определен то возвращаем дефолтный шаблон евента: action/{Action}.{event}.tpl
*
* @return unknown
* @return string
*/
public function GetTemplate() {
if (is_null($this->sActionTemplate)) {
@ -249,8 +298,9 @@ abstract class Action extends LsObject {
/**
* Получить каталог с шаблонами экшена(совпадает с именем класса)
* @see Router::GetActionClass
*
* @return unknown
* @return string
*/
public function GetActionClass() {
return Router::GetActionClass();
@ -258,9 +308,10 @@ abstract class Action extends LsObject {
/**
* Вызывается в том случаи если не найден евент который запросили через URL
* По дефолту происходит перекидывание на страницу ошибки, это можно переопределить в наследнике, а в ряде случаев и необходимо :) Для примера смотри экшен Profile
* По дефолту происходит перекидывание на страницу ошибки, это можно переопределить в наследнике
* @see Router::Action
*
* @return unknown
* @return string
*/
protected function EventNotFound() {
return Router::Action('error','404');
@ -276,10 +327,11 @@ abstract class Action extends LsObject {
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* @see Engine::_CallModule
*
* @param string $sName
* @param array $aArgs
* @return unknown
* @param string $sName Имя метода
* @param array $aArgs Аргументы
* @return mixed
*/
public function __call($sName,$aArgs) {
return $this->oEngine->_CallModule($sName,$aArgs);

View file

@ -36,8 +36,19 @@ require_once("ManyToManyRelation.class.php");
/**
* Основной класс движка, который позволяет напрямую обращаться к любому модулю
* Основной класс движка. Ядро.
*
* Производит инициализацию плагинов, модулей, хуков.
* Через этот класс происходит выполнение методов всех модулей, которые вызываются как <pre>$this->Module_Method();</pre>
* Также отвечает за автозагрузку остальных классов движка.
*
* В произвольном месте (не в классах движка у которых нет обработки метода __call() на выполнение модулей) метод модуля можно вызвать так:
* <pre>
* Engine::getInstance()->Module_Method();
* </pre>
*
* @package engine
* @since 1.0
*/
class Engine extends LsObject {
@ -133,17 +144,57 @@ class Engine extends LsObject {
*/
const CI_OBJECT = 351 ;
/**
* Текущий экземпляр движка, используется для синглтона.
* @see getInstance использование синглтона
*
* @var Engine
*/
static protected $oInstance=null;
/**
* Список загруженных модулей
*
* @var array
*/
protected $aModules=array();
/**
* Список загруженных плагинов
*
* @var array
*/
protected $aPlugins=array();
/**
* Содержит конфиг модулей.
* Используется для получания списка модулей для авто-загрузки. Остальные модули загружаются при первом обращении.
* В конфиге определен так:
* <pre>
* $config['module']['autoLoad'] = array('Hook','Cache','Security','Session','Lang','Message','User');
* </pre>
*
* @var array
*/
protected $aConfigModule;
/**
* Время загрузки модулей в микросекундах
*
* @var int
*/
public $iTimeLoadModule=0;
/**
* Текущее время в микросекундах на момент инициализации ядра(движка).
* Определается так:
* <pre>
* $this->iTimeInit=microtime(true);
* </pre>
*
* @var int|null
*/
protected $iTimeInit=null;
/**
* При создании объекта делаем инициализацию
* Вызывается при создании объекта ядра.
* Устанавливает время старта инициализации и обрабатывает входные параметры PHP
*
*/
protected function __construct() {
@ -157,7 +208,13 @@ class Engine extends LsObject {
}
/**
* Ограничиваем объект только одним экземпляром
* Ограничиваем объект только одним экземпляром.
* Функционал синглтона.
*
* Используется так:
* <pre>
* Engine::getInstance()->Module_Method();
* </pre>
*
* @return Engine
*/
@ -171,7 +228,7 @@ class Engine extends LsObject {
}
/**
* Инициализация
* Инициализация ядра движка
*
*/
public function Init() {
@ -201,7 +258,8 @@ class Engine extends LsObject {
$this->Hook_Run('engine_init_complete');
}
/**
* Завершение работы модуля
* Завершение работы движка
* Завершает все модули.
*
*/
public function Shutdown() {
@ -230,8 +288,8 @@ class Engine extends LsObject {
/**
* Инициализирует модуль
*
* @param unknown_type $oModule
* @param unknown_type $bHookParent
* @param Module $oModule Объект модуля
* @param bool $bHookParent Вызывает хук на родительском модуле, от которого наследуется текущий
*/
protected function InitModule($oModule, $bHookParent = true){
$sOrigClassName = $sClassName = get_class($oModule);
@ -269,8 +327,8 @@ class Engine extends LsObject {
/**
* Проверяет модуль на инициализацию
*
* @param unknown_type $sModuleClass
* @return unknown
* @param string $sModuleClass Класс модуля
* @return bool
*/
public function isInitModule($sModuleClass) {
if(!in_array($sModuleClass,array('ModulePlugin','ModuleHook'))) {
@ -303,8 +361,8 @@ class Engine extends LsObject {
/**
* Выполняет загрузку модуля по его названию
*
* @param string $sModuleClass
* @param bool $bInit - инициализировать модуль или нет
* @param string $sModuleClass Класс модуля
* @param bool $bInit Инициализировать модуль или нет
* @return Module
*/
public function LoadModule($sModuleClass,$bInit=false) {
@ -325,7 +383,7 @@ class Engine extends LsObject {
}
/**
* Загружает все используемые модули и передает им в конструктор ядро
* Загружает модули из авто-загрузки и передает им в конструктор ядро
*
*/
protected function LoadModules() {
@ -377,8 +435,6 @@ class Engine extends LsObject {
*/
protected function InitPluginHooks() {
if($aPluginList = func_list_plugins()) {
$aFiles=array();
$sDirHooks=Config::Get('path.root.server').'/plugins/';
foreach ($aPluginList as $sPluginName) {
@ -414,7 +470,7 @@ class Engine extends LsObject {
}
/**
* Инициализация активированных плагинов
* Инициализация активированных(загруженных) плагинов
*
*/
protected function InitPlugins() {
@ -426,7 +482,7 @@ class Engine extends LsObject {
/**
* Возвращает список активных плагинов
*
* @return unknown
* @return array
*/
public function GetPlugins() {
return $this->aPlugins;
@ -435,8 +491,9 @@ class Engine extends LsObject {
/**
* Проверяет файл на существование, если используется кеширование memcache то кеширует результат работы
*
* @param string $sFile
* @return mixed
* @param string $sFile Полный путь до файла
* @param int $iTime Время жизни кеша
* @return bool
*/
public function isFileExists($sFile,$iTime=3600) {
// пока так
@ -458,9 +515,10 @@ class Engine extends LsObject {
/**
* Вызывает метод нужного модуля
*
* @param string $sName
* @param array $aArgs
* @return unknown
* @param string $sName Название метода в полном виде.
* Например <pre>Module_Method</pre>
* @param array $aArgs Список аргументов
* @return mixed
*/
public function _CallModule($sName,$aArgs) {
list($oModule,$sModuleName,$sMethod)=$this->GetModule($sName);
@ -469,7 +527,9 @@ class Engine extends LsObject {
// comment for ORM testing
//throw new Exception("The module has no required method: ".$sModuleName.'->'.$sMethod.'()');
}
/**
* Замеряем время выполнения метода
*/
$oProfiler=ProfilerSimple::getInstance();
$iTimeId=$oProfiler->Start('callModule',$sModuleName.'->'.$sMethod.'()');
@ -478,7 +538,9 @@ class Engine extends LsObject {
if (!in_array($sModuleName,array('plugin','hook'))) {
$aResultHook=$this->_CallModule('Hook_Run',array('module_'.$sModuleName.'_'.strtolower($sMethod).'_before',&$aArgs));
}
/**
* Хук может делегировать результат выполнения метода модуля, сам метод при этом не выполняется, происходит только подмена результата
*/
if (array_key_exists('delegate_result',$aResultHook)) {
$result=$aResultHook['delegate_result'];
} else {
@ -500,7 +562,8 @@ class Engine extends LsObject {
/**
* Возвращает объект модуля, имя модуля и имя вызванного метода
*
* @param string $sName
* @param string $sName Имя метода модуля в полном виде
* Например <pre>Module_Method</pre>
* @return array
*/
public function GetModule($sName) {
@ -549,10 +612,20 @@ class Engine extends LsObject {
return array($oModule,$sModuleName,$sMethod);
}
/**
* Возвращает статистику выполнения
*
* @return array
*/
public function getStats() {
return array('sql'=>$this->Database_GetStats(),'cache'=>$this->Cache_GetStats(),'engine'=>array('time_load_module'=>round($this->iTimeLoadModule,3)));
}
/**
* Возвращает время старта выполнения движка в микросекундах
*
* @return int
*/
public function GetTimeInit() {
return $this->iTimeInit;
}
@ -560,9 +633,9 @@ class Engine extends LsObject {
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
*
* @param string $sName
* @param array $aArgs
* @return unknown
* @param string $sName Имя метода
* @param array $aArgs Аргументы
* @return mixed
*/
public function __call($sName,$aArgs) {
return $this->_CallModule($sName,$aArgs);
@ -579,8 +652,13 @@ class Engine extends LsObject {
/**
* Получает объект маппера
*
* @param string $sClassName
* @param string $sName
* @param string $sClassName Класс модуля маппера
* @param string|null $sName Имя маппера
* @param DbSimple_Mysql|null $oConnect Объект коннекта к БД
* Можно получить так:
* <pre>
* Engine::getInstance()->Database_GetConnect($aConfig);
* </pre>
* @return mixed
*/
public static function GetMapper($sClassName,$sName=null,$oConnect=null) {
@ -606,9 +684,10 @@ class Engine extends LsObject {
/**
* Создает объект сущности, контролируя варианты кастомизации
*
* @param string $sName
* @param mixed $aParams
* @return mixed
* @param string $sName Имя сущности, возможны сокращенные варианты.
* Например <pre>ModuleUser_EntityUser</pre> эквивалентно <pre>User_User</pre> и эквивалентно <pre>User</pre> т.к. имя сущности совпадает с именем модуля
* @param array $aParams
* @return Entity
*/
public static function GetEntity($sName,$aParams=array()) {
/**
@ -710,27 +789,76 @@ class Engine extends LsObject {
return $oEntity;
}
/**
* Возвращает имя плагина моудля если модул принадлежит плагину.
* Например <pre>Openid</pre>
*
* @static
* @param Module $oModule Объект модуля
* @return string|null
*/
public static function GetPluginName($oModule) {
return self::GetClassInfo($oModule, self::CI_PLUGIN, true);
}
/**
* Возвращает префикс плагина
* Например <pre>PluginOpenid_</pre>
*
* @static
* @param Module $oModule Объект модуля
* @return string Если плагина нет, возвращает пустую строку
*/
public static function GetPluginPrefix($oModule) {
return self::GetClassInfo($oModule, self::CI_PPREFIX, true);
}
/**
* Возвращает имя модуля
*
* @static
* @param Module $oModule Объект модуля
* @return string|null
*/
public static function GetModuleName($oModule) {
return self::GetClassInfo($oModule, self::CI_MODULE, true);
}
/**
* Возвращает имя сущности
*
* @static
* @param Entity $oEntity Объект сущности
* @return string|null
*/
public static function GetEntityName($oEntity) {
return self::GetClassInfo($oEntity, self::CI_ENTITY, true);
}
/**
* Возвращает имя экшена
*
* @static
* @param $oAction Объект экшена
* @return string|null
*/
public static function GetActionName($oAction) {
return self::GetClassInfo($oAction, self::CI_ACTION, true);
}
/**
* Возвращает информацию об объекта или классе
*
* @static
* @param LsObject|string $oObject Объект или имя класса
* @param int $iFlag Маска по которой нужно вернуть рузультат. Доступные маски определены в константах CI_*
* Например, получить информацию о плагине и модуле:
* <pre>
* Engine::GetClassInfo($oObject,Engine::CI_PLUGIN | Engine::CI_MODULE);
* </pre>
* @param bool $bSingle Возвращать полный результат или только первый элемент
* @return array|string|null
*/
public static function GetClassInfo($oObject,$iFlag=self::CI_DEFAULT,$bSingle=false){
$sClassName = is_string($oObject) ? $oObject : get_class($oObject);
$aResult = array();
@ -825,7 +953,14 @@ class Engine extends LsObject {
return $bSingle ? array_pop($aResult) : $aResult;
}
/**
* Возвращает информацию о пути до файла класса.
* Используется в {@link autoload автозагрузке}
*
* @static
* @param LsObject $oObject Объект - модуль, экшен, плагин, хук, сущность
* @return null|string
*/
public static function GetClassPath($oObject){
$aInfo = self::GetClassInfo(
$oObject,
@ -937,7 +1072,8 @@ class Engine extends LsObject {
/**
* Автозагрузка классов
*
* @param unknown_type $sClassName
* @param string $sClassName Название класса
* @return bool
*/
public static function autoload($sClassName) {
$aInfo = Engine::GetClassInfo(
@ -965,13 +1101,18 @@ class Engine extends LsObject {
}
/**
* Регистрация автозагрузки классов
*/
spl_autoload_register(array('Engine','autoload'));
/**
* Short aliases for Engine basic methods
* Короткий алиас для вызова основных методов движка
*
* @package engine
* @since 1.0
*/
class LS {
class LS extends LsObject {
static protected $oInstance=null;
@ -983,38 +1124,76 @@ class LS {
return self::$oInstance;
}
}
/**
* Возвращает ядро
* @see Engine::GetInstance
*
* @return Engine
*/
public function E() {
return Engine::GetInstance();
}
/**
* Возвращает объект сущности
* @see Engine::GetEntity
*
* @param $sName Название сущности
* @param array $aParams Параметры для передачи в конструктор
* @return Entity
*/
public function Ent($sName,$aParams=array()) {
return Engine::GetEntity($sName,$aParams);
}
/**
* Возвращает объект маппера
* @see Engine::GetMapper
*
* @param $sClassName Класс модуля маппера
* @param string|null $sName Имя маппера
* @param DbSimple_Mysql|null $oConnect Объект коннекта к БД
* @return mixed
*/
public function Mpr($sClassName,$sName=null,$oConnect=null) {
return Engine::GetMapper($sClassName,$sName,$oConnect);
}
/**
* Возвращает текущего авторизованного пользователя
* @see ModuleUser::GetUserCurrent
*
* @return ModuleUser_EntityUser
*/
public function CurUsr() {
return self::E()->User_GetUserCurrent();
}
/**
* Возвращает true если текущий пользователь администратор
* @see ModuleUser::GetUserCurrent
* @see ModuleUser_EntityUser::isAdministrator
*
* @return bool
*/
public function Adm() {
return self::CurUsr() && self::CurUsr()->isAdministrator();
}
/**
* In templates we have $LS and can use $LS->Module_Method() instead of $LS->E()->Module_Method();
* Вызов метода модуля
* Например <pre>$LS->Module_Method()</pre>
*
* @param $sName Полное название метода, например <pre>Module_Method</pre>
* @param array $aArgs Список аргуметов метода
* @return mixed
*/
public function __call($sName,$aArgs=array()) {
return call_user_func_array(array(self::E(),$sName),$aArgs);
}
/**
* With PHP 5.3+ we can use LS::Module_Method() instead of LS::E()->Module_Method();
* Статический вызов метода модуля для PHP >= 5.3
* Например <pre>LS::Module_Method()</pre>
*
* @static
* @param $sName Полное название метода, например <pre>Module_Method</pre>
* @param array $aArgs Список аргуметов метода
* @return mixed
*/
public static function __callStatic($sName,$aArgs=array()) {
return call_user_func_array(array(self::E(),$sName),$aArgs);