mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-29 04:55:02 +03:00
Plugin: возможность делегирования (подмены) модуля\экшена\сущности из плагина.
This commit is contained in:
parent
02060212c3
commit
b0e8a7696a
|
@ -352,6 +352,10 @@ class Engine extends Object {
|
|||
$sModuleName=$aName[0].'_'.$aName[1];
|
||||
$sMethod=$aName[2];
|
||||
}
|
||||
/**
|
||||
* Подхватыем делегат модуля (в случае наличия такового)
|
||||
*/
|
||||
if($sModuleName!='Plugin') $sModuleName=$this->Plugin_GetDelegate('module',$sModuleName);
|
||||
|
||||
if (isset($this->aModules[$sModuleName])) {
|
||||
$oModule=$this->aModules[$sModuleName];
|
||||
|
@ -393,6 +397,10 @@ class Engine extends Object {
|
|||
* @return mixed
|
||||
*/
|
||||
public static function GetEntity($sName,$aParams=array()) {
|
||||
/**
|
||||
* Определяем наличие делегата сущности
|
||||
*/
|
||||
$sName=self::getInstance()->Plugin_GetDelegate('entity',$sName);
|
||||
/**
|
||||
* Сущности, имеющие такое же название как модуль,
|
||||
* можно вызывать сокращенно. Например, вместо User_User -> User
|
||||
|
|
|
@ -155,6 +155,10 @@ class Router extends Object {
|
|||
$oActionInit->InitAction();
|
||||
|
||||
$sActionClass=$this->DefineActionClass();
|
||||
/**
|
||||
* Определяем наличие делегата экшена
|
||||
*/
|
||||
$sActionClass=$this->Plugin_GetDelegate('action',$sActionClass);
|
||||
|
||||
/**
|
||||
* Если класс экешна начинается с Plugin*_, значит необходимо загрузить объект из указанного плагина
|
||||
|
|
|
@ -47,6 +47,17 @@ class LsPlugin extends Module {
|
|||
*/
|
||||
protected $aPluginsList=array();
|
||||
|
||||
/**
|
||||
* Список engine-rewrite`ов (модули, экшены, сущности)
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aDelegate=array(
|
||||
'module' => array(),
|
||||
'action' => array(),
|
||||
'entity' => array()
|
||||
);
|
||||
|
||||
/**
|
||||
* Инициализация модуля
|
||||
*
|
||||
|
@ -188,6 +199,42 @@ class LsPlugin extends Module {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Перенаправление вызовов на модули, экшены, сущности
|
||||
*
|
||||
* @param string $sType
|
||||
* @param string $sFrom
|
||||
* @param string $sTo
|
||||
*/
|
||||
public function Delegate($sType,$sFrom,$sTo) {
|
||||
if(!in_array($sType,array('module','action','entity')) or !$sFrom or !$sTo) return null;
|
||||
$this->aDelegate[$sType][trim($sFrom)]=trim($sTo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает делегат модуля, экшена, сущности.
|
||||
* Если делегат не определен, отдает переданный в качестве sender`a параметр
|
||||
*
|
||||
* @param string $sType
|
||||
* @param string $sFrom
|
||||
* @return string
|
||||
*/
|
||||
public function GetDelegate($sType,$sFrom) {
|
||||
return $this->isDelegated($sType,$sFrom)?$this->aDelegate[$sType][$sFrom]:$sFrom;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает true, если установлено правило делегирования
|
||||
*
|
||||
* @param string $sType
|
||||
* @param string $sFrom
|
||||
* @return bool
|
||||
*/
|
||||
public function isDelegated($sType,$sFrom) {
|
||||
if(!in_array($sType,array('module','action','entity')) or !$sFrom) return false;
|
||||
return isset($this->aDelegate[$sType][$sFrom]);
|
||||
}
|
||||
|
||||
/**
|
||||
* При завершении работы модуля
|
||||
*
|
||||
|
|
|
@ -24,5 +24,11 @@ class PluginProfiler extends Plugin {
|
|||
$this->ExportSQL(dirname(__FILE__).'/sql.sql');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация плагина Profiler
|
||||
*/
|
||||
public function Init() {
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
Reference in a new issue