mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-26 03:30:48 +03:00
Проверка совместимости плагина при активации с уже активированными
This commit is contained in:
parent
3ce2307ec2
commit
84c487c64d
|
@ -57,10 +57,12 @@ class ActionAdmin extends Action {
|
|||
|
||||
$aPluginsDelete=getRequest('plugins_del');
|
||||
if (is_array($aPluginsDelete)) {
|
||||
$this->Plugin_Delete(array_keys($aPluginsDelete));
|
||||
$this->Plugin_Delete(array_keys($aPluginsDelete));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Получаем название плагина и действие
|
||||
*/
|
||||
if($sPlugin=getRequest('plugin',null,'get') and $sAction=getRequest('action',null,'get')) {
|
||||
return $this->SubmitManagePlugin($sPlugin,$sAction);
|
||||
}
|
||||
|
@ -91,7 +93,7 @@ class ActionAdmin extends Action {
|
|||
*/
|
||||
protected function SubmitManagePlugin($sPlugin,$sAction) {
|
||||
if(!in_array($sAction,array('activate','deactivate'))) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('plugins_unknown_action'),$this->Lang_Get('error'),true);
|
||||
$this->Message_AddError($this->Lang_Get('plugins_unknown_action'),$this->Lang_Get('error'),true);
|
||||
Router::Location(Router::GetPath('plugins'));
|
||||
}
|
||||
/**
|
||||
|
@ -100,7 +102,7 @@ class ActionAdmin extends Action {
|
|||
if($bResult=$this->Plugin_Toggle($sPlugin,$sAction)) {
|
||||
$this->Message_AddNotice($this->Lang_Get('plugins_action_ok'),$this->Lang_Get('attention'),true);
|
||||
} else {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'),true);
|
||||
if(!($aMessages=$this->Message_GetErrorSession()) or !count($aMessages)) $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'),true);
|
||||
}
|
||||
/**
|
||||
* Возвращаем на страницу управления плагинами
|
||||
|
|
|
@ -281,6 +281,7 @@ class Engine extends Object {
|
|||
|
||||
$sClassName="Plugin{$sPluginName}";
|
||||
$oPlugin=new $sClassName;
|
||||
$oPlugin->Delegate();
|
||||
$oPlugin->Init();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,9 @@
|
|||
*
|
||||
*/
|
||||
abstract class Plugin extends Object {
|
||||
|
||||
|
||||
protected $aDelegates=array();
|
||||
|
||||
public function __construct() {
|
||||
|
||||
}
|
||||
|
@ -32,6 +34,32 @@ abstract class Plugin extends Object {
|
|||
public function Init() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Передает информацию о делегатах на Plugin-модуль
|
||||
* Вызывается Engine перед инициализацией плагина
|
||||
*/
|
||||
final function Delegate() {
|
||||
if(is_array($this->aDelegates) and count($this->aDelegates)) {
|
||||
foreach ($this->aDelegates as $sObjectName=>$aParams) {
|
||||
if(is_array($aParams) and count($aParams)) {
|
||||
foreach ($aParams as $sFrom=>$sTo) {
|
||||
$this->Plugin_Delegate($sObjectName,$sFrom,$sTo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает массив делегатов
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
final function GetDelegates() {
|
||||
return $this->aDelegates;
|
||||
}
|
||||
|
||||
/**
|
||||
* Функция активации плагина
|
||||
*
|
||||
|
|
|
@ -52,7 +52,7 @@ class LsPlugin extends Module {
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aDelegate=array(
|
||||
protected $aDelegates=array(
|
||||
'module' => array(),
|
||||
'action' => array(),
|
||||
'entity' => array(),
|
||||
|
@ -121,6 +121,25 @@ class LsPlugin extends Module {
|
|||
|
||||
$sClassName="Plugin{$sPluginName}";
|
||||
$oPlugin=new $sClassName;
|
||||
|
||||
if($sAction=='Activate') {
|
||||
/**
|
||||
* Проверяем, не вступает ли данный плагин в конфликт с уже активированными
|
||||
* (по поводу объявленных делегатов)
|
||||
*/
|
||||
$aPluginDelegates=$oPlugin->GetDelegates();
|
||||
$iConflict=0;
|
||||
foreach ($this->aDelegates as $sGroup=>$aReplaceList) {
|
||||
$iCount=0;
|
||||
if(isset($aPluginDelegates[$sGroup])
|
||||
and is_array($aPluginDelegates[$sGroup])
|
||||
and $iCount=count($aOverlap=array_intersect_key($aReplaceList,$aPluginDelegates[$sGroup]))) {
|
||||
$iConflict+=$iCount;
|
||||
}
|
||||
if($iCount){ $this->Message_AddErrorSingle($this->Lang_Get('plugins_activation_overlap'), $this->Lang_Get('error'), true); return; }
|
||||
}
|
||||
}
|
||||
|
||||
$bResult=$oPlugin->$sAction();
|
||||
}
|
||||
|
||||
|
@ -208,8 +227,8 @@ class LsPlugin extends Module {
|
|||
* @param string $sTo
|
||||
*/
|
||||
public function Delegate($sType,$sFrom,$sTo) {
|
||||
if(!in_array($sType,array_keys($this->aDelegate)) or !$sFrom or !$sTo) return null;
|
||||
$this->aDelegate[$sType][trim($sFrom)]=trim($sTo);
|
||||
if(!in_array($sType,array_keys($this->aDelegates)) or !$sFrom or !$sTo) return null;
|
||||
$this->aDelegates[$sType][trim($sFrom)]=trim($sTo);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -221,7 +240,7 @@ class LsPlugin extends Module {
|
|||
* @return string
|
||||
*/
|
||||
public function GetDelegate($sType,$sFrom) {
|
||||
return $this->isDelegated($sType,$sFrom)?$this->aDelegate[$sType][$sFrom]:$sFrom;
|
||||
return $this->isDelegated($sType,$sFrom)?$this->aDelegates[$sType][$sFrom]:$sFrom;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -232,8 +251,8 @@ class LsPlugin extends Module {
|
|||
* @return bool
|
||||
*/
|
||||
public function isDelegated($sType,$sFrom) {
|
||||
if(!in_array($sType,array_keys($this->aDelegate)) or !$sFrom) return false;
|
||||
return isset($this->aDelegate[$sType][$sFrom]);
|
||||
if(!in_array($sType,array_keys($this->aDelegates)) or !$sFrom) return false;
|
||||
return isset($this->aDelegates[$sType][$sFrom]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,4 +3,5 @@ Author: LiveStreet Developers Team
|
|||
Homepage: http://livestreet.ru/
|
||||
Version: 1.0.0
|
||||
Requires: 0.4.0
|
||||
Description: Профилирование работы движка LiveStreet-движка.
|
||||
Description: Профилирование работы движка LiveStreet-движка.
|
||||
Delegate:
|
|
@ -777,6 +777,7 @@ return array(
|
|||
'plugins_plugin_deactivate' => 'Деактивировать',
|
||||
'plugins_unknown_action' => 'Указано неизвестное действие',
|
||||
'plugins_action_ok' => 'Успешно выполнено',
|
||||
'plugins_activation_overlap' => 'Данный плагин невозможно активировать, так как он вступает в конфликт с уже активированными',
|
||||
'plugins_submit_delete' => 'Удалить плагины',
|
||||
'plugins_delete_confirm' => 'Вы уверены, что желаете удалить указанные плагины?',
|
||||
|
||||
|
|
Loading…
Reference in a new issue