1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-17 07:10:48 +03:00

Делегирование объектов из XML описания файла

This commit is contained in:
Alexey Kachayev 2010-03-11 22:57:30 +00:00
parent 24ec906586
commit e97b63af86
2 changed files with 35 additions and 3 deletions

View file

@ -48,7 +48,6 @@ abstract class Plugin extends Object {
*
*/
public function Init() {
}
/**
@ -56,6 +55,30 @@ abstract class Plugin extends Object {
* Вызывается Engine перед инициализацией плагина
*/
final function Delegate() {
/**
* Получаем название плагина
*/
preg_match('/^Plugin([\w]+)$/i',get_class($this),$aMatches);
$sPluginName=strtolower($aMatches[1]);
/**
* Получаем список объектов, подлежащих делегации
*/
$aObjects=$this->Plugin_GetDelegateObjectList();
/**
* Считываем данные из XML файла описания
*/
$sPluginXML = Config::Get('path.root.server').'/plugins/'.$sPluginName.'/'.LsPlugin::PLUGIN_README_FILE;
if($oXml = @simplexml_load_file($sPluginXML)) {
foreach($aObjects as $sObjectName) {
if(is_array($data=$oXml->xpath("delegate/{$sObjectName}/item"))) {
foreach($data as $aDelegate) {
$this->Plugin_Delegate($sObjectName,$aDelegate->from,$aDelegate->to,get_class($this));
}
}
}
}
if(is_array($this->aDelegates) and count($this->aDelegates)) {
foreach ($this->aDelegates as $sObjectName=>$aParams) {
if(is_array($aParams) and count($aParams)) {

View file

@ -75,7 +75,7 @@ class LsPlugin extends Module {
$aList=array_map('basename',glob($this->sPluginsDir.'*',GLOB_ONLYDIR));
$aActivePlugins=$this->GetActivePlugins();
foreach($aList as $sPlugin) {
foreach($aList as $sPlugin) {
$this->aPluginsList[$sPlugin] = array(
'code' => $sPlugin,
'is_active' => in_array($sPlugin,$aActivePlugins)
@ -318,7 +318,7 @@ class LsPlugin extends Module {
'sign'=>$sSign
);
}
/**
* Возвращает делегат модуля, экшена, сущности.
* Если делегат не определен, отдает переданный в качестве sender`a параметр
@ -354,6 +354,15 @@ class LsPlugin extends Module {
return isset($this->aDelegates[$sType][$sFrom]['delegate']);
}
/**
* Возвращает список объектов, доступных для делегирования
*
* @return array
*/
public function GetDelegateObjectList() {
return array_keys($this->aDelegates);
}
/**
* При завершении работы модуля
*