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-17 21:58:32 +04:00
parent 573cfbf42b
commit 3982af66eb
11 changed files with 545 additions and 393 deletions

View file

@ -17,31 +17,22 @@
require_once('Action.class.php'); require_once('Action.class.php');
/** /**
* Абстрактный класс экшена * Абстрактный класс экшена плагина.
* От этого класса необходимо наследовать экшены плагина, эот позволит корректно определять текущий шаблон плагина для рендеринга экшена
* *
* @package engine
* @since 1.0
*/ */
abstract class ActionPlugin extends Action { abstract class ActionPlugin extends Action {
/** /**
* Путь к шаблонам с учетом наличия соответствующего skin`a * Полный серверный путь до текущего шаблона плагина
* *
* @var string * @var string|null
*/ */
protected $sTemplatePathPlugin=null; protected $sTemplatePathPlugin=null;
/** /**
* Конструктор * Возвращает путь к текущему шаблону плагина
*
* @param Engine $oEngine
* @param string $sAction
*/
public function __construct(Engine $oEngine, $sAction) {
parent::__construct($oEngine, $sAction);
$this->Viewer_Assign('sTemplatePathPlugin',rtrim($this->getTemplatePathPlugin(),'/'));
$this->Viewer_Assign('sTemplateWebPathPlugin',Plugin::GetTemplateWebPath(get_class($this)));
}
/**
* Возвращает путь к шаблонам плагина
* *
* @return string * @return string
*/ */
@ -74,9 +65,9 @@ abstract class ActionPlugin extends Action {
} }
/** /**
* Установить значение пути к директории шаблонов плагина * Установить значение пути к директории шаблона плагина
* *
* @param string $sTemplatePath * @param string $sTemplatePath Полный серверный путь до каталога с шаблоном
* @return bool * @return bool
*/ */
public function setTemplatePathPlugin($sTemplatePath) { public function setTemplatePathPlugin($sTemplatePath) {

View file

@ -19,16 +19,39 @@
* Абстрактный класс блока * Абстрактный класс блока
* Это те блоки которые обрабатывают шаблоны Smarty перед выводом(например блок "Облако тегов") * Это те блоки которые обрабатывают шаблоны Smarty перед выводом(например блок "Облако тегов")
* *
* @package engine
* @since 1.0
*/ */
abstract class Block extends LsObject { abstract class Block extends LsObject {
/**
* Ядро движка
*
* @var Engine|null
*/
protected $oEngine=null; protected $oEngine=null;
/**
* Список параметров блока
*
* @var array
*/
protected $aParams=array(); protected $aParams=array();
/**
* При создании блока передаем в него параметры
*
* @param array $aParams Список параметров блока
*/
public function __construct($aParams) { public function __construct($aParams) {
$this->aParams=$aParams; $this->aParams=$aParams;
$this->oEngine=Engine::getInstance(); $this->oEngine=Engine::getInstance();
} }
/**
* Возвращает параметр по имени
*
* @param string $sName Имя параметра
* @param null|mixed $def Дефолтное значение параметра, возвращается если такого параметра нет
* @return mixed
*/
protected function GetParam($sName,$def=null) { protected function GetParam($sName,$def=null) {
if (isset($this->aParams[$sName])) { if (isset($this->aParams[$sName])) {
return $this->aParams[$sName]; return $this->aParams[$sName];
@ -36,11 +59,23 @@ abstract class Block extends LsObject {
return $def; return $def;
} }
} }
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* @see Engine::_CallModule
*
* @param string $sName Имя метода
* @param array $aArgs Аргументы
* @return mixed
*/
public function __call($sName,$aArgs) { public function __call($sName,$aArgs) {
return $this->oEngine->_CallModule($sName,$aArgs); return $this->oEngine->_CallModule($sName,$aArgs);
} }
/**
* Метод запуска обработки блока.
* Его необходимо определять в конкретном блоге.
*
* @abstract
*/
abstract public function Exec(); abstract public function Exec();
} }
?> ?>

View file

@ -18,15 +18,23 @@
require_once("Engine.class.php"); require_once("Engine.class.php");
/** /**
* Абстрактный слой работы с крон-процессами * Абстрактный класс для работы с крон-процессами.
* Например, его использует отложенная рассылка почтовых уведомлений для пользователей.
* Обработчик крона не запускается автоматически(!!), его необходимо добавлять в системный крон (nix*: crontab -e)
*
* @package engine
* @since 1.0
*/ */
class Cron extends LsObject { class Cron extends LsObject {
/** /**
* Объект ядра
*
* @var Engine * @var Engine
*/ */
protected $oEngine=null; protected $oEngine=null;
/** /**
* Дескриптор блокирующего файла * Дескриптор блокирующего файла
* Если этот файл существует, то крон не запустится повторно.
* *
* @var string * @var string
*/ */
@ -38,6 +46,9 @@ class Cron extends LsObject {
*/ */
protected $sProcessName; protected $sProcessName;
/**
* @param string|null $sLockFile Полный путь до лок файла, например <pre>Config::Get('sys.cache.dir').'notify.lock'</pre>
*/
public function __construct($sLockFile=null) { public function __construct($sLockFile=null) {
$this->sProcessName=get_class($this); $this->sProcessName=get_class($this);
$this->oEngine=Engine::getInstance(); $this->oEngine=Engine::getInstance();
@ -49,19 +60,16 @@ class Cron extends LsObject {
if(!empty($sLockFile)) { if(!empty($sLockFile)) {
$this->oLockFile=fopen($sLockFile,'a'); $this->oLockFile=fopen($sLockFile,'a');
} }
/** /**
* Инициализируем лог и делает пометку о старте процесса * Инициализируем лог и делает пометку о старте процесса
*/ */
$this->oEngine->Logger_SetFileName(Config::Get('sys.logs.cron_file')); $this->oEngine->Logger_SetFileName(Config::Get('sys.logs.cron_file'));
$this->Log('Cron process started'); $this->Log('Cron process started');
} }
/** /**
* Делает запись в лог * Делает запись в лог
* *
* @param string $sMsg * @param string $sMsg Сообщение для записи в лог
* @return
*/ */
public function Log($sMsg) { public function Log($sMsg) {
if (Config::Get('sys.logs.cron')) { if (Config::Get('sys.logs.cron')) {
@ -69,27 +77,27 @@ class Cron extends LsObject {
$this->oEngine->Logger_Notice($sMsg); $this->oEngine->Logger_Notice($sMsg);
} }
} }
/** /**
* Проверяет уникальность создаваемого процесса * Проверяет уникальность создаваемого процесса
*
* @return bool
*/ */
public function isLock() { public function isLock() {
return ($this->oLockFile && !flock($this->oLockFile, LOCK_EX|LOCK_NB)); return ($this->oLockFile && !flock($this->oLockFile, LOCK_EX|LOCK_NB));
} }
/** /**
* Снимает блокировку на повторный процесс * Снимает блокировку на повторный процесс
*
* @return bool
*/ */
public function unsetLock() { public function unsetLock() {
return ($this->oLockFile && @flock($this->oLockFile, LOCK_UN)); return ($this->oLockFile && @flock($this->oLockFile, LOCK_UN));
} }
/** /**
* Основная функция слоя. Реализует логику работы * Основной метод крон-процесса.
* крон процесса с последующей передачей управления * Реализует логику работы крон процесса с последующей передачей управления на пользовательскую функцию
* на пользовательскую функцию
* *
* @param ( string|array ) $sFunction * @return string
* @param array $aArgs
*/ */
public function Exec() { public function Exec() {
/** /**
@ -113,15 +121,16 @@ class Cron extends LsObject {
return $sContent; return $sContent;
} }
/** /**
* Здесь будет реализована логика завершения работы cron-процесса * Завершение крон-процесса
*/ */
public function Shutdown() { public function Shutdown() {
$this->unsetLock(); $this->unsetLock();
$this->Log('Cron process ended'); $this->Log('Cron process ended');
} }
/**
* Вызывается при уничтожении объекта
*/
public function __destruct() { public function __destruct() {
$this->Shutdown(); $this->Shutdown();
} }
@ -132,7 +141,14 @@ class Cron extends LsObject {
public function Client(){ public function Client(){
throw new Exception('Call undefined client function'); throw new Exception('Call undefined client function');
} }
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* @see Engine::_CallModule
*
* @param string $sName Имя метода
* @param array $aArgs Аргументы
* @return mixed
*/
public function __call($sName,$aArgs) { public function __call($sName,$aArgs) {
return $this->oEngine->_CallModule($sName,$aArgs); return $this->oEngine->_CallModule($sName,$aArgs);
} }

View file

@ -16,34 +16,79 @@
*/ */
/** /**
* Абстрактный класс сущности * Абстрактный класс сущности.
* При запросе к базе данных удобно возвращать не просто массив данных, а данные в виде специального объекта - Entity.
* Основные методы такого объекта делятся на два вида: get-методы и set-методы.
* Первые получают свойство объекта по его имени, а вторые устанавливают.
* Сущности поддерживает "магические" методы set* и get* , например
* <pre>
* $oEntity->getMyProperty()
* </pre> вернет данные по ключу/полю my_property
* *
* @package engine
* @since 1.0
*/ */
abstract class Entity extends LsObject { abstract class Entity extends LsObject {
/**
* Данные сущности, на этот массив мапятся методы set* и get*
*
* @var array
*/
protected $_aData=array(); protected $_aData=array();
/**
* Имя поля с первичным ключом в БД
*
* @var null|string
*/
protected $sPrimaryKey = null; protected $sPrimaryKey = null;
/**
* Список правил валидации полей
* @see ModuleValidate
*
* @var array
*/
protected $aValidateRules=array(); protected $aValidateRules=array();
/**
* Список ошибок валидации в разрезе полей, например
* <pre>
* array(
* 'title' => array('error one','error two'),
* 'name' => array('error one','error two'),
* )
* </pre>
*
* @var array
*/
protected $aValidateErrors=array(); protected $aValidateErrors=array();
/**
* Сценарий валиадции полей
* @see _setValidateScenario
*
* @var string
*/
protected $sValidateScenario=''; protected $sValidateScenario='';
/** /**
* Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность * Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность
* *
* @param array|null $aParam * @param array|false $aParam Ассоциативный массив данных сущности
*/ */
public function __construct($aParam = false) { public function __construct($aParam = false) {
$this->_setData($aParam); $this->_setData($aParam);
$this->Init(); $this->Init();
} }
/** /**
* Метод инициализации сущности, вызывается при её создании * Метод инициализации сущности, вызывается при её создании
*/ */
public function Init() { public function Init() {
} }
/**
* Устанавливает данные сущности
*
* @param array $aData Ассоциативный массив данных сущности
*/
public function _setData($aData) { public function _setData($aData) {
if(is_array($aData)) { if(is_array($aData)) {
foreach ($aData as $sKey => $val) { foreach ($aData as $sKey => $val) {
@ -51,7 +96,12 @@ abstract class Entity extends LsObject {
} }
} }
} }
/**
* Получает массив данных сущности
*
* @param array|null $aKeys Список полей, данные по которым необходимо вернуть, если не передан, то возвращаются все данные
* @return array
*/
public function _getData($aKeys=array()) { public function _getData($aKeys=array()) {
if(!is_array($aKeys) or !count($aKeys)) return $this->_aData; if(!is_array($aKeys) or !count($aKeys)) return $this->_aData;
@ -63,19 +113,24 @@ abstract class Entity extends LsObject {
} }
return $aReturn; return $aReturn;
} }
/**
* Возвращает данные по конкретному полю
*
* @param string $sKey Название поля, например <pre>'my_property'</pre>
* @return null|mixed
*/
public function _getDataOne($sKey) { public function _getDataOne($sKey) {
if(array_key_exists($sKey,$this->_aData)) { if(array_key_exists($sKey,$this->_aData)) {
return $this->_aData[$sKey]; return $this->_aData[$sKey];
} }
return null; return null;
} }
/** /**
* Рекурсивное преобразование объекта и вложенных объектов в массив * Рекурсивное преобразование объекта и вложенных объектов в массив
*
* @return array
*/ */
public function _getDataArray() public function _getDataArray() {
{
$aResult = array(); $aResult = array();
foreach ($this->_aData as $sKey => $sValue) { foreach ($this->_aData as $sKey => $sValue) {
if (is_object($sValue) && $sValue instanceOf Entity) { if (is_object($sValue) && $sValue instanceOf Entity) {
@ -86,13 +141,14 @@ abstract class Entity extends LsObject {
} }
return $aResult; return $aResult;
} }
/** /**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля * Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* Также производит обработку методов set* и get*
* @see Engine::_CallModule
* *
* @param string $sName * @param string $sName Имя метода
* @param array $aArgs * @param array $aArgs Аргументы
* @return unknown * @return mixed
*/ */
public function __call($sName,$aArgs) { public function __call($sName,$aArgs) {
$sType=strtolower(substr($sName,0,3)); $sType=strtolower(substr($sName,0,3));
@ -117,12 +173,13 @@ abstract class Entity extends LsObject {
return Engine::getInstance()->_CallModule($sName,$aArgs); return Engine::getInstance()->_CallModule($sName,$aArgs);
} }
} }
/** /**
* Получение первичного ключа сущности (ключ, а не значение!) * Получение первичного ключа сущности (ключ, а не значение!)
* @see _getPrimaryKeyValue
*
* @return null|string
*/ */
public function _getPrimaryKey() public function _getPrimaryKey() {
{
if (!$this->sPrimaryKey) { if (!$this->sPrimaryKey) {
if (isset($this->_aData['id'])) { if (isset($this->_aData['id'])) {
$this->sPrimaryKey = 'id'; $this->sPrimaryKey = 'id';
@ -134,32 +191,32 @@ abstract class Entity extends LsObject {
return $this->sPrimaryKey; return $this->sPrimaryKey;
} }
/**
* Возвращает значение первичного ключа/поля
*
* @return mixed|null
*/
public function _getPrimaryKeyValue() { public function _getPrimaryKeyValue() {
return $this->_getDataOne($this->_getPrimaryKey()); return $this->_getDataOne($this->_getPrimaryKey());
} }
/** /**
* Выполняет валидацию данных сущности * Выполняет валидацию данных сущности
* Если $aFields=null, то выполняется валидация по всем полям из $this->aValidateRules, иначе по пересечению * Если $aFields=null, то выполняется валидация по всем полям из $this->aValidateRules, иначе по пересечению
* *
* @param null $attributes * @param null|array $aFields Список полей для валидации, если null то по всем полям
* @param bool $clearErrors * @param bool $bClearErrors Очищать или нет стек ошибок перед валидацией
* *
* @return bool * @return bool
*/ */
public function _Validate($aFields=null, $clearErrors=true) { public function _Validate($aFields=null, $bClearErrors=true) {
if($clearErrors) { if($bClearErrors) {
$this->_clearValidateErrors(); $this->_clearValidateErrors();
} }
foreach($this->_getValidators() as $validator) { foreach($this->_getValidators() as $validator) {
$validator->validateEntity($this,$aFields); $validator->validateEntity($this,$aFields);
} }
return !$this->_hasValidateErrors(); return !$this->_hasValidateErrors();
} }
/** /**
* Возвращает список валидаторов с учетом текущего сценария * Возвращает список валидаторов с учетом текущего сценария
* *
@ -184,9 +241,9 @@ abstract class Entity extends LsObject {
} }
return $aValidatorsReturn; return $aValidatorsReturn;
} }
/** /**
* Создает и возвращает список валидаторов для сущности * Создает и возвращает список валидаторов для сущности
* @see ModuleValidate::CreateValidator
* *
* @return array * @return array
* @throws Exception * @throws Exception
@ -202,7 +259,6 @@ abstract class Entity extends LsObject {
} }
return $aValidators; return $aValidators;
} }
/** /**
* Проверяет есть ли ошибки валидации * Проверяет есть ли ошибки валидации
* *
@ -217,7 +273,6 @@ abstract class Entity extends LsObject {
return isset($this->aValidateErrors[$sField]); return isset($this->aValidateErrors[$sField]);
} }
} }
/** /**
* Возвращает список ошибок для всех полей или одного поля * Возвращает список ошибок для всех полей или одного поля
* *
@ -232,7 +287,6 @@ abstract class Entity extends LsObject {
return isset($this->aValidateErrors[$sField]) ? $this->aValidateErrors[$sField] : array(); return isset($this->aValidateErrors[$sField]) ? $this->aValidateErrors[$sField] : array();
} }
} }
/** /**
* Возвращает первую ошибку для поля или среди всех полей * Возвращает первую ошибку для поля или среди всех полей
* *
@ -249,17 +303,15 @@ abstract class Entity extends LsObject {
return isset($this->aValidateErrors[$sField]) ? reset($this->aValidateErrors[$sField]) : null; return isset($this->aValidateErrors[$sField]) ? reset($this->aValidateErrors[$sField]) : null;
} }
} }
/** /**
* Добавляет для поля ошибку в список ошибок * Добавляет для поля ошибку в список ошибок
* *
* @param string $sField Поле сущности * @param string $sField Поле сущности
* @param string $error Сообщение об ошибке * @param string $sError Сообщение об ошибке
*/ */
public function _addValidateError($sField,$error) { public function _addValidateError($sField,$sError) {
$this->aValidateErrors[$sField][]=$error; $this->aValidateErrors[$sField][]=$sError;
} }
/** /**
* Очищает список всех ошибок или для конкретного поля * Очищает список всех ошибок или для конкретного поля
* *
@ -272,7 +324,6 @@ abstract class Entity extends LsObject {
unset($this->aValidateErrors[$sField]); unset($this->aValidateErrors[$sField]);
} }
} }
/** /**
* Возвращает текущий сценарий валидации * Возвращает текущий сценарий валидации
* *
@ -281,9 +332,10 @@ abstract class Entity extends LsObject {
public function _getValidateScenario() { public function _getValidateScenario() {
return $this->sValidateScenario; return $this->sValidateScenario;
} }
/** /**
* Устанавливает сценарий валидации * Устанавливает сценарий валидации
* Если использовать валидацию без сценария, то будут использоваться только те правила, где нет никаких сценариев, либо указан пустой сценарий ''
* Если указать сценарий, то проверка будет только по правилом, где в списке сценарией есть указанный
* *
* @param string $sValue * @param string $sValue
*/ */

View file

@ -17,10 +17,25 @@
/** /**
* Абстрактный класс сущности ORM - аналог active record * Абстрактный класс сущности ORM - аналог active record
* Позволяет без написания SQL запросов работать с базой данных.
* <pre>
* $oUser=$this->User_GetUserById(1);
* $oUser->setName('Claus');
* $oUser->Update();
* </pre>
* Возможно получать списки объектов по фильтру:
* <pre>
* $aUsers=$this->User_GetUserItemsByAgeAndSex(18,'male');
* // эквивалентно
* $aUsers=$this->User_GetUserItemsByFilter(array('age'=>18,'sex'=>'male'));
* // эквивалентно
* $aUsers=$this->User_GetUserItemsByFilter(array('#where'=>array('age = ?d and sex = ?' => array(18,'male'))));
* </pre>
* *
* @package engine
* @since 1.0
*/ */
abstract class EntityORM extends Entity { abstract class EntityORM extends Entity {
/** /**
* Типы связей сущностей * Типы связей сущностей
* *
@ -31,53 +46,57 @@ abstract class EntityORM extends Entity {
const RELATION_TYPE_MANY_TO_MANY='many_to_many'; const RELATION_TYPE_MANY_TO_MANY='many_to_many';
const RELATION_TYPE_TREE='tree'; const RELATION_TYPE_TREE='tree';
/**
* Массив исходных данных сущности
*
* @var array
*/
protected $_aOriginalData=array(); protected $_aOriginalData=array();
/** /**
* Список полей таблицы сущности * Список полей таблицы сущности
* *
* @var unknown_type * @var array
*/ */
protected $aFields=array(); protected $aFields=array();
/** /**
* Список связей * Список связей
* *
* @var unknown_type * @var array
*/ */
protected $aRelations=array(); protected $aRelations=array();
/** /**
* Список данных связей * Список данных связей
* *
* @var unknown_type * @var array
*/ */
protected $aRelationsData=array(); protected $aRelationsData=array();
// Объекты связей many_to_many
protected $_aManyToManyRelations = array();
/** /**
* Primary key таблицы сущности * Объекты связей many_to_many
* *
* @var unknown_type * @var array
*/ */
protected $sPrimaryKey=null; protected $_aManyToManyRelations = array();
/** /**
* Флаг новая или нет сущность * Флаг новая или нет сущность
* *
* @var unknown_type * @var bool
*/ */
protected $bIsNew=true; protected $bIsNew=true;
/**
* Установка связей
* @see Entity::__construct
*
* @param bool $aParam Ассоциативный массив данных сущности
*/
public function __construct($aParam=false) { public function __construct($aParam=false) {
parent::__construct($aParam); parent::__construct($aParam);
$this->aRelations=$this->_getRelations(); $this->aRelations=$this->_getRelations();
} }
/** /**
* Получение primary key из схемы таблицы * Получение primary key из схемы таблицы
* *
* @return string | array * @return string|array Если индекс составной, то возвращает массив полей
*/ */
public function _getPrimaryKey() { public function _getPrimaryKey() {
if(!$this->sPrimaryKey) { if(!$this->sPrimaryKey) {
@ -92,38 +111,35 @@ abstract class EntityORM extends Entity {
} }
return $this->sPrimaryKey; return $this->sPrimaryKey;
} }
/** /**
* Получение значения primary key * Получение значения primary key
* *
* @return unknown * @return string
*/ */
public function _getPrimaryKeyValue() { public function _getPrimaryKeyValue() {
return $this->_getDataOne($this->_getPrimaryKey()); return $this->_getDataOne($this->_getPrimaryKey());
} }
/** /**
* Новая или нет сущность * Новая или нет сущность
* Новая - еще не сохранялась в БД
* *
* @return unknown * @return bool
*/ */
public function _isNew() { public function _isNew() {
return $this->bIsNew; return $this->bIsNew;
} }
/** /**
* Установка флага "новая" * Установка флага "новая"
* *
* @param unknown_type $bIsNew * @param bool $bIsNew Флаг - новая сущность или нет
*/ */
public function _SetIsNew($bIsNew) { public function _SetIsNew($bIsNew) {
$this->bIsNew=$bIsNew; $this->bIsNew=$bIsNew;
} }
/** /**
* Добавление сущности в БД * Добавление сущности в БД
* *
* @return unknown * @return Entity|false
*/ */
public function Add() { public function Add() {
if ($this->beforeSave()) if ($this->beforeSave())
@ -133,11 +149,10 @@ abstract class EntityORM extends Entity {
} }
return false; return false;
} }
/** /**
* Обновление сущности в БД * Обновление сущности в БД
* *
* @return unknown * @return Entity|false
*/ */
public function Update() { public function Update() {
if ($this->beforeSave()) if ($this->beforeSave())
@ -147,11 +162,10 @@ abstract class EntityORM extends Entity {
} }
return false; return false;
} }
/** /**
* Сохранение сощности в БД (если новая то создается) * Сохранение сущности в БД (если новая то создается)
* *
* @return unknown * @return Entity|false
*/ */
public function Save() { public function Save() {
if ($this->beforeSave()) if ($this->beforeSave())
@ -161,11 +175,10 @@ abstract class EntityORM extends Entity {
} }
return false; return false;
} }
/** /**
* Удаление сущности из БД * Удаление сущности из БД
* *
* @return unknown * @return Entity|false
*/ */
public function Delete() { public function Delete() {
if ($this->beforeDelete()) if ($this->beforeDelete())
@ -175,43 +188,38 @@ abstract class EntityORM extends Entity {
} }
return false; return false;
} }
/** /**
* Обновляет данные сущности из БД * Обновляет данные сущности из БД
* *
* @return unknown * @return Entity|false
*/ */
public function Reload() { public function Reload() {
return $this->_Method(__FUNCTION__); return $this->_Method(__FUNCTION__);
} }
/** /**
* Список полей сущности * Возвращает список полей сущности
* *
* @return unknown * @return array
*/ */
public function ShowColumns() { public function ShowColumns() {
return $this->_Method(__FUNCTION__ .'From'); return $this->_Method(__FUNCTION__ .'From');
} }
/** /**
* Primary индекс сущности * Возвращает primary индекс сущности
* *
* @return unknown * @return array
*/ */
public function ShowPrimaryIndex() { public function ShowPrimaryIndex() {
return $this->_Method(__FUNCTION__ .'From'); return $this->_Method(__FUNCTION__ .'From');
} }
/** /**
* Хук, срабатывает перед сохранением сущности * Хук, срабатывает перед сохранением сущности
* *
* @return unknown * @return bool
*/ */
protected function beforeSave() { protected function beforeSave() {
return true; return true;
} }
/** /**
* Хук, срабатывает после сохранением сущности * Хук, срабатывает после сохранением сущности
* *
@ -219,16 +227,14 @@ abstract class EntityORM extends Entity {
protected function afterSave() { protected function afterSave() {
} }
/** /**
* Хук, срабатывает перед удалением сущности * Хук, срабатывает перед удалением сущности
* *
* @return unknown * @return bool
*/ */
protected function beforeDelete() { protected function beforeDelete() {
return true; return true;
} }
/** /**
* Хук, срабатывает после удаления сущности * Хук, срабатывает после удаления сущности
* *
@ -236,60 +242,54 @@ abstract class EntityORM extends Entity {
protected function afterDelete() { protected function afterDelete() {
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE возвращает список прямых потомков * Для сущности со связью RELATION_TYPE_TREE возвращает список прямых потомков
* *
* @return unknown * @return array
*/ */
public function getChildren() { public function getChildren() {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
return $this->_Method(__FUNCTION__ .'Of'); return $this->_Method(__FUNCTION__ .'Of');
} }
return $this->__call(__FUNCTION__); return $this->__call(__FUNCTION__,array());
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE возвращает список всех потомков * Для сущности со связью RELATION_TYPE_TREE возвращает список всех потомков
* *
* @return unknown * @return array
*/ */
public function getDescendants() { public function getDescendants() {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
return $this->_Method(__FUNCTION__ .'Of'); return $this->_Method(__FUNCTION__ .'Of');
} }
return $this->__call(__FUNCTION__); return $this->__call(__FUNCTION__,array());
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE возвращает предка * Для сущности со связью RELATION_TYPE_TREE возвращает предка
* *
* @return unknown * @return Entity
*/ */
public function getParent() { public function getParent() {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
return $this->_Method(__FUNCTION__ .'Of'); return $this->_Method(__FUNCTION__ .'Of');
} }
return $this->__call(__FUNCTION__); return $this->__call(__FUNCTION__,array());
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE возвращает список всех предков * Для сущности со связью RELATION_TYPE_TREE возвращает список всех предков
* *
* @return unknown * @return array
*/ */
public function getAncestors() { public function getAncestors() {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
return $this->_Method(__FUNCTION__ .'Of'); return $this->_Method(__FUNCTION__ .'Of');
} }
return $this->__call(__FUNCTION__); return $this->__call(__FUNCTION__,array());
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE устанавливает потомков * Для сущности со связью RELATION_TYPE_TREE устанавливает потомков
* *
* @param unknown_type $aChildren * @param array $aChildren Список потомков
* @return unknown
*/ */
public function setChildren($aChildren=array()) { public function setChildren($aChildren=array()) {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
@ -299,12 +299,10 @@ abstract class EntityORM extends Entity {
return $this->__call(__FUNCTION__,$aArgs); return $this->__call(__FUNCTION__,$aArgs);
} }
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE устанавливает потомков * Для сущности со связью RELATION_TYPE_TREE устанавливает потомков
* *
* @param unknown_type $aDescendants * @param array $aDescendants Список потомков
* @return unknown
*/ */
public function setDescendants($aDescendants=array()) { public function setDescendants($aDescendants=array()) {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
@ -314,12 +312,10 @@ abstract class EntityORM extends Entity {
return $this->__call(__FUNCTION__,$aArgs); return $this->__call(__FUNCTION__,$aArgs);
} }
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE устанавливает предка * Для сущности со связью RELATION_TYPE_TREE устанавливает предка
* *
* @param unknown_type $oParent * @param Entity $oParent Родитель
* @return unknown
*/ */
public function setParent($oParent=null) { public function setParent($oParent=null) {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
@ -329,12 +325,10 @@ abstract class EntityORM extends Entity {
return $this->__call(__FUNCTION__,$aArgs); return $this->__call(__FUNCTION__,$aArgs);
} }
} }
/** /**
* Для сущности со связью RELATION_TYPE_TREE устанавливает предков * Для сущности со связью RELATION_TYPE_TREE устанавливает предков
* *
* @param unknown_type $oParent * @param array $oParent Родитель
* @return unknown
*/ */
public function setAncestors($oParent=null) { public function setAncestors($oParent=null) {
if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) { if(in_array(self::RELATION_TYPE_TREE,$this->aRelations)) {
@ -344,12 +338,11 @@ abstract class EntityORM extends Entity {
return $this->__call(__FUNCTION__,$aArgs); return $this->__call(__FUNCTION__,$aArgs);
} }
} }
/** /**
* Проксирует вызов методов в модуль сущности * Проксирует вызов методов в модуль сущности
* *
* @param unknown_type $sName * @param string $sName Название метода
* @return unknown * @return mixed
*/ */
protected function _Method($sName) { protected function _Method($sName) {
$sModuleName=Engine::GetModuleName($this); $sModuleName=Engine::GetModuleName($this);
@ -365,11 +358,10 @@ abstract class EntityORM extends Entity {
} }
return Engine::GetInstance()->_CallModule("{$sPluginPrefix}{$sModuleName}_{$sName}{$sEntityName}",array($this)); return Engine::GetInstance()->_CallModule("{$sPluginPrefix}{$sModuleName}_{$sName}{$sEntityName}",array($this));
} }
/** /**
* Устанавливает данные сущности * Устанавливает данные сущности
* *
* @param unknown_type $aData * @param array $aData Ассоциативный массив данных сущности
*/ */
public function _setData($aData) { public function _setData($aData) {
if(is_array($aData)) { if(is_array($aData)) {
@ -383,20 +375,18 @@ abstract class EntityORM extends Entity {
$this->_aOriginalData = $this->_aData; $this->_aOriginalData = $this->_aData;
} }
} }
/** /**
* Возвращает все данные сущности * Возвращает все данные сущности
* *
* @return unknown * @return array
*/ */
public function _getOriginalData() { public function _getOriginalData() {
return $this->_aOriginalData; return $this->_aOriginalData;
} }
/** /**
* Возвращает список полей сущности * Возвращает список полей сущности
* *
* @return unknown * @return array
*/ */
public function _getFields() { public function _getFields() {
if(empty($this->aFields)) { if(empty($this->aFields)) {
@ -404,13 +394,12 @@ abstract class EntityORM extends Entity {
} }
return $this->aFields; return $this->aFields;
} }
/** /**
* Возвращает поле в нужном формате * Возвращает поле в нужном формате
* *
* @param unknown_type $sField * @param string $sField Название поля
* @param unknown_type $iPersistence * @param int $iPersistence Тип "глубины" определения поля
* @return unknown * @return null|string
*/ */
public function _getField($sField,$iPersistence=3) { public function _getField($sField,$iPersistence=3) {
if($aFields=$this->_getFields()) { if($aFields=$this->_getFields()) {
@ -442,11 +431,10 @@ abstract class EntityORM extends Entity {
} }
return $sField; return $sField;
} }
/** /**
* Возвращает список связей * Возвращает список связей
* *
* @return unknown * @return array
*/ */
public function _getRelations() { public function _getRelations() {
$sParent=get_parent_class($this); $sParent=get_parent_class($this);
@ -460,31 +448,31 @@ abstract class EntityORM extends Entity {
} }
return array_merge($aParentRelations,$this->aRelations); return array_merge($aParentRelations,$this->aRelations);
} }
/** /**
* Возвращает список данный связей * Возвращает список данный связей
* *
* @return unknown * @return array
*/ */
public function _getRelationsData() { public function _getRelationsData() {
return $this->aRelationsData; return $this->aRelationsData;
} }
/** /**
* Устанавливает данные связей * Устанавливает данные связей
* *
* @param unknown_type $aData * @param array $aData Список связанных данных
*/ */
public function _setRelationsData($aData) { public function _setRelationsData($aData) {
$this->aRelationsData=$aData; $this->aRelationsData=$aData;
} }
/** /**
* Вызов методов сущности * Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* Также производит обработку методов set* и get*
* Учитывает связи и может возвращать связанные данные
* @see Engine::_CallModule
* *
* @param unknown_type $sName * @param string $sName Имя метода
* @param unknown_type $aArgs * @param array $aArgs Аргументы
* @return unknown * @return mixed
*/ */
public function __call($sName,$aArgs) { public function __call($sName,$aArgs) {
$sType=substr($sName,0,strpos(func_underscore($sName),'_')); $sType=substr($sName,0,strpos(func_underscore($sName),'_'));
@ -593,7 +581,12 @@ abstract class EntityORM extends Entity {
return Engine::getInstance()->_CallModule($sName,$aArgs); return Engine::getInstance()->_CallModule($sName,$aArgs);
} }
} }
/**
* Используется для доступа к связанным данным типа MANY_TO_MANY
*
* @param string $sName Название свойства к которому обращаемсяя
* @return mixed
*/
public function __get($sName) { public function __get($sName) {
// Обработка обращений к обёрткам связей MANY_TO_MANY // Обработка обращений к обёрткам связей MANY_TO_MANY
// Если связь загружена, возвращаем объект связи // Если связь загружена, возвращаем объект связи
@ -611,11 +604,10 @@ abstract class EntityORM extends Entity {
return $this->$sName; return $this->$sName;
} }
} }
/** /**
* Сбрасывает данные необходимой связи * Сбрасывает данные необходимой связи
* *
* @param unknown_type $sKey * @param string $sKey Ключ(поле) связи
*/ */
public function resetRelationsData($sKey) { public function resetRelationsData($sKey) {
if (isset($this->aRelationsData[$sKey])) { if (isset($this->aRelationsData[$sKey])) {

View file

@ -17,30 +17,56 @@
/** /**
* Абстракция хука, от которой наследуются все хуки * Абстракция хука, от которой наследуются все хуки
* Дает возможность создавать обработчики хуков в каталоге /hooks/
* *
* @package engine
* @since 1.0
*/ */
abstract class Hook extends LsObject { abstract class Hook extends LsObject {
/**
public function __construct() { * Добавляет обработчик на хук
* @see ModuleHook::AddExecHook
} *
* @param string $sName Название хука на который вешается обработчик
* @param string $sCallBack Название метода обработчика
* @param null|string $sClassNameHook Название класса обработчика, по умолчанию это текущий класс хука
* @param int $iPriority Приоритет обработчика хука, чем выше число, тем больше приоритет - хук обработчик выполнится раньше остальных
*/
protected function AddHook($sName,$sCallBack,$sClassNameHook=null,$iPriority=1) { protected function AddHook($sName,$sCallBack,$sClassNameHook=null,$iPriority=1) {
if (is_null($sClassNameHook)) { if (is_null($sClassNameHook)) {
$sClassNameHook=get_class($this); $sClassNameHook=get_class($this);
} }
$this->Hook_AddExecHook($sName,$sCallBack,$iPriority,array('sClassName'=>$sClassNameHook)); $this->Hook_AddExecHook($sName,$sCallBack,$iPriority,array('sClassName'=>$sClassNameHook));
} }
/**
* Добавляет делегирующий обработчик на хук. Актуален для хуков на выполнение методов модулей.
* После него другие обработчики не выполняются, а результат метода моуля заменяется на рузультат обработчика.
*
* @param $sName Название хука на который вешается обработчик
* @param $sCallBack Название метода обработчика
* @param null $sClassNameHook Название класса обработчика, по умолчанию это текущий класс хука
* @param int $iPriority Приоритет обработчика хука
*/
protected function AddDelegateHook($sName,$sCallBack,$sClassNameHook=null,$iPriority=1) { protected function AddDelegateHook($sName,$sCallBack,$sClassNameHook=null,$iPriority=1) {
if (is_null($sClassNameHook)) { if (is_null($sClassNameHook)) {
$sClassNameHook=get_class($this); $sClassNameHook=get_class($this);
} }
$this->Hook_AddDelegateHook($sName,$sCallBack,$iPriority,array('sClassName'=>$sClassNameHook)); $this->Hook_AddDelegateHook($sName,$sCallBack,$iPriority,array('sClassName'=>$sClassNameHook));
} }
/**
* Обязательный метод в хуке - в нем происходит регистрация обработчиков хуков
*
* @abstract
*/
abstract public function RegisterHook(); abstract public function RegisterHook();
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* @see Engine::_CallModule
*
* @param string $sName Имя метода
* @param array $aArgs Аргументы
* @return mixed
*/
public function __call($sName,$aArgs) { public function __call($sName,$aArgs) {
return Engine::getInstance()->_CallModule($sName,$aArgs); return Engine::getInstance()->_CallModule($sName,$aArgs);
} }

View file

@ -16,38 +16,51 @@
*/ */
/** /**
* Класс. представляющий собой обёертку для связей MANY_TO_MANY. * Класс представляющий собой обёертку для связей MANY_TO_MANY.
* Позволяет оперровать коллекцией загруженных по связи эдементов через имя связи * Позволяет оперировать коллекцией загруженных по связи элементов через имя связи
* Например, $oTopic->Tags->add($oTag) или $oTopic->Tags->delete($oTag->getId()) при * Например, $oTopic->Tags->add($oTag) или $oTopic->Tags->delete($oTag->getId()) при
* наличии настроенной MANY_TO_MANY связи 'tags' * наличии настроенной MANY_TO_MANY связи 'tags'
*
* @package engine
* @since 1.0
*/ */
class LS_ManyToManyRelation extends LsObject { class LS_ManyToManyRelation extends LsObject {
// Ссылка на $oEntityORM->aRelationsData[<relation_name>], /**
// где relation_name - имя сязи, которую представляет объект * Список объектов связи
*
* @var array
*/
protected $_aCollection = array(); protected $_aCollection = array();
/**
* Флаг обновления списка объектов связи
*
* @var bool
*/
protected $bUpdated = false; protected $bUpdated = false;
public function __construct($aCollection) /**
{ * Устанавливает список объектов
*
* @param $aCollection Список объектов связи
*/
public function __construct($aCollection) {
$this->_aCollection = $aCollection; $this->_aCollection = $aCollection;
} }
/** /**
* Добавление объекта в коллекцию * Добавление объекта в список
* @param <type> $oEntity *
* @param Entity $oEntity
*/ */
public function add($oEntity) public function add($oEntity) {
{
$this->bUpdated = true; $this->bUpdated = true;
$this->_aCollection[$oEntity->_getPrimaryKeyValue()] = $oEntity; $this->_aCollection[$oEntity->_getPrimaryKeyValue()] = $oEntity;
} }
/** /**
* Удаление объекта из коллекции по его id или массиву id * Удаление объекта из списка по его id или массиву id
* @param <type> $iId *
* @param int|array $iId
*/ */
public function delete($iId) public function delete($iId) {
{
$this->bUpdated = true; $this->bUpdated = true;
if (is_array($iId)) { if (is_array($iId)) {
foreach ($iId as $id) { foreach ($iId as $id) {
@ -59,14 +72,20 @@ class LS_ManyToManyRelation extends LsObject {
unset($this->_aCollection[$iId]); unset($this->_aCollection[$iId]);
} }
} }
/**
public function getCollection() * Возвращает список объектов связи
{ *
* @return array
*/
public function getCollection() {
return $this->_aCollection; return $this->_aCollection;
} }
/**
public function isUpdated() * Проверка списка на обновление
{ *
* @return bool
*/
public function isUpdated() {
return $this->bUpdated; return $this->bUpdated;
} }
} }

View file

@ -17,13 +17,21 @@
/** /**
* Абстрактный класс мапера * Абстрактный класс мапера
* Вся задача маппера сводится в выполнению запроса к базе данных (или либому другому источнику данных) и возвращения результата в модуль.
* *
* @package engine
* @since 1.0
*/ */
abstract class Mapper extends LsObject { abstract class Mapper extends LsObject {
/**
* Объект подключения к базе данных
*
* @var DbSimple_Generic_Database
*/
protected $oDb; protected $oDb;
/** /**
* Сохраняем коннект к БД * Передаем коннект к БД
* *
* @param DbSimple_Generic_Database $oDb * @param DbSimple_Generic_Database $oDb
*/ */

View file

@ -17,16 +17,18 @@
/** /**
* Абстракция модуля, от которой наследуются все модули * Абстракция модуля, от которой наследуются все модули
* Модули предназначены для объединения часто используемого функционала, т.е. некие аналоги внутренних библиотек.
* *
* @package engine
* @since 1.0
*/ */
abstract class Module extends LsObject { abstract class Module extends LsObject {
/** /**
* Engine object * Объект ядра
* *
* @var Engine * @var Engine
*/ */
protected $oEngine=null; protected $oEngine=null;
/** /**
* Указывает на то, была ли проведенна инициализация модуля * Указывает на то, была ли проведенна инициализация модуля
* *
@ -34,52 +36,52 @@ abstract class Module extends LsObject {
*/ */
protected $bIsInit=false; protected $bIsInit=false;
/**
* При создании модуля передаем объект ядра
*
* @param Engine $oEngine
*/
final public function __construct(Engine $oEngine) { final public function __construct(Engine $oEngine) {
$this->oEngine=$oEngine; $this->oEngine=$oEngine;
} }
/** /**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля * Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* @see Engine::_CallModule
* *
* @param string $sName * @param string $sName Имя метода
* @param array $aArgs * @param array $aArgs Аргументы
* @return unknown * @return mixed
*/ */
public function __call($sName,$aArgs) { public function __call($sName,$aArgs) {
return $this->oEngine->_CallModule($sName,$aArgs); return $this->oEngine->_CallModule($sName,$aArgs);
} }
/** /**
* Блокируем копирование/клонирование объекта роутинга * Блокируем копирование/клонирование объекта
* *
*/ */
protected function __clone() { protected function __clone() {
} }
/** /**
* Абстрактный метод инициализации модуля, должен быть переопределен в модуле * Абстрактный метод инициализации модуля, должен быть переопределен в модуле
* *
*/ */
abstract public function Init(); abstract public function Init();
/** /**
* Метод срабатывает после отработки цепочки экшенов(action) * Метод срабатывает при завершении работы ядра
* *
*/ */
public function Shutdown() { public function Shutdown() {
} }
/** /**
* Возвращает значение флага инициализации * Возвращает значение флага инициализации модуля
* *
* @return bool * @return bool
*/ */
public function isInit() { public function isInit() {
return $this->bIsInit; return $this->bIsInit;
} }
/** /**
* Помечает модуль как инициализированный * Помечает модуль как инициализированный
* *

View file

@ -18,6 +18,8 @@
/** /**
* От этого класса наследуются все остальные * От этого класса наследуются все остальные
* *
* @package engine
* @since 1.0
*/ */
abstract class LsObject { abstract class LsObject {

View file

@ -17,7 +17,10 @@
/** /**
* Абстракция плагина, от которой наследуются все плагины * Абстракция плагина, от которой наследуются все плагины
* Файл плагина должен находиться в каталоге /plugins/plgname/ и иметь название PluginPlgname.class.php
* *
* @package engine
* @since 1.0
*/ */
abstract class Plugin extends LsObject { abstract class Plugin extends LsObject {
/** /**
@ -45,28 +48,18 @@ abstract class Plugin extends LsObject {
*/ */
protected $aInherits=array(); protected $aInherits=array();
public function __construct() {
}
/** /**
* Функция инициализации плагина * Метод инициализации плагина
* *
*/ */
public function Init() { public function Init() {
} }
/** /**
* Передает информацию о делегатах на Plugin-модуль * Передает информацию о делегатах в модуль ModulePlugin
* Вызывается Engine перед инициализацией плагина * Вызывается Engine перед инициализацией плагина
* @see Engine::LoadPlugins
*/ */
final function Delegate() { final function Delegate() {
/**
* Получаем название плагина
*/
preg_match('/^Plugin([\w]+)$/i',get_class($this),$aMatches);
$sPluginName=strtolower($aMatches[1]);
$aDelegates=$this->GetDelegates(); $aDelegates=$this->GetDelegates();
foreach ($aDelegates as $sObjectName=>$aParams) { foreach ($aDelegates as $sObjectName=>$aParams) {
foreach ($aParams as $sFrom=>$sTo) { foreach ($aParams as $sFrom=>$sTo) {
@ -81,9 +74,8 @@ abstract class Plugin extends LsObject {
} }
} }
} }
/** /**
* Возвращает массив делегатов * Возвращает массив наследников
* *
* @return array * @return array
*/ */
@ -106,7 +98,7 @@ abstract class Plugin extends LsObject {
return $aReturn; return $aReturn;
} }
/** /**
* Возвращает массив наследников * Возвращает массив делегатов
* *
* @return array * @return array
*/ */
@ -128,7 +120,15 @@ abstract class Plugin extends LsObject {
} }
return $aReturn; return $aReturn;
} }
/**
* Преобразовывает краткую форму имен делегатов в полную
*
* @param $sObjectName Название типа объекта делегата
* @see ModulePlugin::aDelegates
* @param $sFrom Что делегируем
* @param $sTo Что делегирует
* @return array
*/
public function MakeDelegateParams($sObjectName,$sFrom,$sTo) { public function MakeDelegateParams($sObjectName,$sFrom,$sTo) {
/** /**
* Если не указан делегат TO, считаем, что делегатом является * Если не указан делегат TO, считаем, что делегатом является
@ -149,56 +149,61 @@ abstract class Plugin extends LsObject {
} }
return array($sFrom,$sTo); return array($sFrom,$sTo);
} }
/** /**
* Функция активации плагина * Метод активации плагина
* *
* @return bool
*/ */
public function Activate() { public function Activate() {
return true; return true;
} }
/** /**
* Функция деактивации плагина * Метод деактивации плагина
* *
* @return bool
*/ */
public function Deactivate() { public function Deactivate() {
return true; return true;
} }
/** /**
* Транслирует на базу данных запросы из указанного файла * Транслирует на базу данных запросы из указанного файла
* @see ModuleDatabase::ExportSQL
* *
* @param string $sFilePath * @param string $sFilePath Полный путь до файла с SQL
* @return array * @return array
*/ */
protected function ExportSQL($sFilePath) { protected function ExportSQL($sFilePath) {
return $this->Database_ExportSQL($sFilePath); return $this->Database_ExportSQL($sFilePath);
} }
/** /**
* Выполняет SQL * Выполняет SQL
* @see ModuleDatabase::ExportSQLQuery
* *
* @param string $sSql * @param string $sSql Строка SQL запроса
* @return array * @return array
*/ */
protected function ExportSQLQuery($sSql) { protected function ExportSQLQuery($sSql) {
return $this->Database_ExportSQLQuery($sSql); return $this->Database_ExportSQLQuery($sSql);
} }
/** /**
* Проверяет наличие таблицы в БД * Проверяет наличие таблицы в БД
* @see ModuleDatabase::isTableExists
* *
* @param unknown_type $sTableName * @param string $sTableName Название таблицы, необходимо перед именем таблицы добавлять "prefix_", это позволит учитывать произвольный префикс таблиц у пользователя
* <pre>
* prefix_topic
* </pre>
* @return bool * @return bool
*/ */
protected function isTableExists($sTableName) { protected function isTableExists($sTableName) {
return $this->Database_isTableExists($sTableName); return $this->Database_isTableExists($sTableName);
} }
/** /**
* Проверяет наличие поля в таблице * Проверяет наличие поля в таблице
* @see ModuleDatabase::isFieldExists
* *
* @param string $sTableName * @param string $sTableName Название таблицы, необходимо перед именем таблицы добавлять "prefix_", это позволит учитывать произвольный префикс таблиц у пользователя
* @param string $sFieldName * @param string $sFieldName Название поля в таблице
* @return bool * @return bool
*/ */
protected function isFieldExists($sTableName,$sFieldName) { protected function isFieldExists($sTableName,$sFieldName) {
@ -206,20 +211,20 @@ abstract class Plugin extends LsObject {
} }
/** /**
* Добавляет тип в поле enum * Добавляет новый тип в поле enum(перечисление)
* @see ModuleDatabase::addEnumType
* *
* @param string $sTableName * @param string $sTableName Название таблицы, необходимо перед именем таблицы добавлять "prefix_", это позволит учитывать произвольный префикс таблиц у пользователя
* @param string $sFieldName * @param string $sFieldName Название поля в таблице
* @param string $sType * @param string $sType Название типа
*/ */
protected function addEnumType($sTableName,$sFieldName,$sType) { protected function addEnumType($sTableName,$sFieldName,$sType) {
$this->Database_addEnumType($sTableName,$sFieldName,$sType); $this->Database_addEnumType($sTableName,$sFieldName,$sType);
} }
/** /**
* Получает версию плагина * Возвращает версию плагина
* *
* @return unknown * @return string|null
*/ */
public function GetVersion() { public function GetVersion() {
preg_match('/^Plugin([\w]+)$/i',get_class($this),$aMatches); preg_match('/^Plugin([\w]+)$/i',get_class($this),$aMatches);
@ -229,16 +234,22 @@ abstract class Plugin extends LsObject {
} }
return null; return null;
} }
/**
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
* @see Engine::_CallModule
*
* @param string $sName Имя метода
* @param array $aArgs Аргументы
* @return mixed
*/
public function __call($sName,$aArgs) { public function __call($sName,$aArgs) {
return Engine::getInstance()->_CallModule($sName,$aArgs); return Engine::getInstance()->_CallModule($sName,$aArgs);
} }
/** /**
* Возвращает полный путь до плагина * Возвращает полный серверный путь до плагина
* *
* @param unknown_type $sName * @param string $sName
* @return unknown * @return string
*/ */
static public function GetPath($sName) { static public function GetPath($sName) {
$sName = preg_match('/^Plugin([\w]+)(_[\w]+)?$/Ui',$sName,$aMatches) $sName = preg_match('/^Plugin([\w]+)(_[\w]+)?$/Ui',$sName,$aMatches)
@ -247,11 +258,12 @@ abstract class Plugin extends LsObject {
return Config::Get('path.root.server').'/plugins/'.$sName.'/'; return Config::Get('path.root.server').'/plugins/'.$sName.'/';
} }
/** /**
* Возвращает правильный путь к директории шаблонов * Возвращает правильный серверный путь к директории шаблонов с учетом текущего шаблона
* Если пользователь использует шаблон которого нет в плагине, то возвращает путь до шабона плагина 'default'
* *
* @return string * @param string $sName Название плагина или его класс
* @return string|null
*/ */
static public function GetTemplatePath($sName) { static public function GetTemplatePath($sName) {
$sName = preg_match('/^Plugin([\w]+)(_[\w]+)?$/Ui',$sName,$aMatches) $sName = preg_match('/^Plugin([\w]+)(_[\w]+)?$/Ui',$sName,$aMatches)
@ -266,13 +278,13 @@ abstract class Plugin extends LsObject {
$sDir=Config::Get('path.root.server')."/plugins/{$sName}/templates/skin/{$sTemplateName}/"; $sDir=Config::Get('path.root.server')."/plugins/{$sName}/templates/skin/{$sTemplateName}/";
self::$aTemplatePath[$sName] = is_dir($sDir) ? $sDir : null; self::$aTemplatePath[$sName] = is_dir($sDir) ? $sDir : null;
} }
return self::$aTemplatePath[$sName]; return self::$aTemplatePath[$sName];
} }
/** /**
* Возвращает правильный web-адрес директории шаблонов * Возвращает правильный web-адрес директории шаблонов
* Если пользователь использует шаблон которого нет в плагине, то возвращает путь до шабона плагина 'default'
* *
* @param string $sName Название плагина или его класс
* @return string * @return string
*/ */
static public function GetTemplateWebPath($sName) { static public function GetTemplateWebPath($sName) {
@ -287,28 +299,25 @@ abstract class Plugin extends LsObject {
self::$aTemplateWebPath[$sName]=Config::Get('path.root.web')."/plugins/{$sName}/templates/skin/{$sTemplateName}/"; self::$aTemplateWebPath[$sName]=Config::Get('path.root.web')."/plugins/{$sName}/templates/skin/{$sTemplateName}/";
} }
return self::$aTemplateWebPath[$sName]; return self::$aTemplateWebPath[$sName];
} }
/** /**
* Устанавливает значение пути до шаблонов плагина * Устанавливает значение серверного пути до шаблонов плагина
* *
* @param string $sName * @param string $sName Имя плагина
* @param string $sTemplatePath * @param string $sTemplatePath Серверный путь до шаблона
* @return bool * @return bool
*/ */
static public function SetTemplatePath($sName,$sTemplatePath) { static public function SetTemplatePath($sName,$sTemplatePath) {
if(!is_dir($sTemplatePath)) return false; if(!is_dir($sTemplatePath)) return false;
self::$aTemplatePath[$sName]=$sTemplatePath; self::$aTemplatePath[$sName]=$sTemplatePath;
return true;
} }
/** /**
* Устанавливает значение web-пути до шаблонов плагина * Устанавливает значение web-пути до шаблонов плагина
* *
* @param string $sName * @param string $sName Имя плагина
* @param string $sTemplatePath * @param string $sTemplatePath Серверный путь до шаблона
* @return bool
*/ */
static public function SetTemplateWebPath($sName,$sTemplatePath) { static public function SetTemplateWebPath($sName,$sTemplatePath) {
self::$aTemplateWebPath[$sName]=$sTemplatePath; self::$aTemplateWebPath[$sName]=$sTemplatePath;