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

Подписывание делегатов плагинами, с целью облегчения процедуры выявления конфликтов.

This commit is contained in:
Alexey Kachayev 2010-01-14 15:45:47 +00:00
parent f81680fef4
commit 1370a533f1
3 changed files with 37 additions and 8 deletions

View file

@ -44,7 +44,7 @@ abstract class Plugin extends Object {
foreach ($this->aDelegates as $sObjectName=>$aParams) {
if(is_array($aParams) and count($aParams)) {
foreach ($aParams as $sFrom=>$sTo) {
$this->Plugin_Delegate($sObjectName,$sFrom,$sTo);
$this->Plugin_Delegate($sObjectName,$sFrom,$sTo,get_class($this));
}
}
}

View file

@ -135,8 +135,18 @@ class LsPlugin extends Module {
and is_array($aPluginDelegates[$sGroup])
and $iCount=count($aOverlap=array_intersect_key($aReplaceList,$aPluginDelegates[$sGroup]))) {
$iConflict+=$iCount;
foreach ($aOverlap as $sResource=>$aConflict) {
$this->Message_AddError(
$this->Lang_Get('plugins_activation_overlap', array(
'resource'=>$sResource,
'delegate'=>$aConflict['delegate'],
'plugin' =>$aConflict['sign']
)),
$this->Lang_Get('error'), true
);
}
}
if($iCount){ $this->Message_AddErrorSingle($this->Lang_Get('plugins_activation_overlap'), $this->Lang_Get('error'), true); return; }
if($iCount){ return; }
}
}
@ -225,10 +235,19 @@ class LsPlugin extends Module {
* @param string $sType
* @param string $sFrom
* @param string $sTo
* @param string $sSign
*/
public function Delegate($sType,$sFrom,$sTo) {
public function Delegate($sType,$sFrom,$sTo,$sSign=__CLASS__) {
/**
* Запрещаем неподписанные делегаты
*/
if(!is_string($sSign) or !strlen($sSign)) return null;
if(!in_array($sType,array_keys($this->aDelegates)) or !$sFrom or !$sTo) return null;
$this->aDelegates[$sType][trim($sFrom)]=trim($sTo);
$this->aDelegates[$sType][trim($sFrom)]=array(
'delegate'=>trim($sTo),
'sign'=>$sSign
);
}
/**
@ -240,7 +259,18 @@ class LsPlugin extends Module {
* @return string
*/
public function GetDelegate($sType,$sFrom) {
return $this->isDelegated($sType,$sFrom)?$this->aDelegates[$sType][$sFrom]:$sFrom;
return $this->isDelegated($sType,$sFrom)?$this->aDelegates[$sType][$sFrom]['delegate']:$sFrom;
}
/**
* Возвращает подпись делегата модуля, экшена, сущности.
*
* @param string $sType
* @param string $sFrom
* @return string|null
*/
public function GetDelegateSign($sType,$sFrom) {
return $this->isDelegated($sType,$sFrom)?$this->aDelegates[$sType][$sFrom]['sign']:null;
}
/**
@ -252,7 +282,7 @@ class LsPlugin extends Module {
*/
public function isDelegated($sType,$sFrom) {
if(!in_array($sType,array_keys($this->aDelegates)) or !$sFrom) return false;
return isset($this->aDelegates[$sType][$sFrom]);
return isset($this->aDelegates[$sType][$sFrom]['delegate']);
}
/**
@ -260,7 +290,6 @@ class LsPlugin extends Module {
*
*/
public function Shutdown() {
}
}
?>

View file

@ -777,7 +777,7 @@ return array(
'plugins_plugin_deactivate' => 'Деактивировать',
'plugins_unknown_action' => 'Указано неизвестное действие',
'plugins_action_ok' => 'Успешно выполнено',
'plugins_activation_overlap' => 'Данный плагин невозможно активировать, так как он вступает в конфликт с уже активированными',
'plugins_activation_overlap' => 'Конфликт с активированным плагином. Ресурс %%resource%% переопределен на %%delegate%% плагином %%plugin%%.',
'plugins_submit_delete' => 'Удалить плагины',
'plugins_delete_confirm' => 'Вы уверены, что желаете удалить указанные плагины?',