mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-07-01 05:55:02 +03:00
Проверка совместимости плагина при активации с уже активированными
This commit is contained in:
parent
3ce2307ec2
commit
84c487c64d
|
@ -60,7 +60,9 @@ class ActionAdmin extends Action {
|
||||||
$this->Plugin_Delete(array_keys($aPluginsDelete));
|
$this->Plugin_Delete(array_keys($aPluginsDelete));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Получаем название плагина и действие
|
||||||
|
*/
|
||||||
if($sPlugin=getRequest('plugin',null,'get') and $sAction=getRequest('action',null,'get')) {
|
if($sPlugin=getRequest('plugin',null,'get') and $sAction=getRequest('action',null,'get')) {
|
||||||
return $this->SubmitManagePlugin($sPlugin,$sAction);
|
return $this->SubmitManagePlugin($sPlugin,$sAction);
|
||||||
}
|
}
|
||||||
|
@ -91,7 +93,7 @@ class ActionAdmin extends Action {
|
||||||
*/
|
*/
|
||||||
protected function SubmitManagePlugin($sPlugin,$sAction) {
|
protected function SubmitManagePlugin($sPlugin,$sAction) {
|
||||||
if(!in_array($sAction,array('activate','deactivate'))) {
|
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'));
|
Router::Location(Router::GetPath('plugins'));
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -100,7 +102,7 @@ class ActionAdmin extends Action {
|
||||||
if($bResult=$this->Plugin_Toggle($sPlugin,$sAction)) {
|
if($bResult=$this->Plugin_Toggle($sPlugin,$sAction)) {
|
||||||
$this->Message_AddNotice($this->Lang_Get('plugins_action_ok'),$this->Lang_Get('attention'),true);
|
$this->Message_AddNotice($this->Lang_Get('plugins_action_ok'),$this->Lang_Get('attention'),true);
|
||||||
} else {
|
} 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}";
|
$sClassName="Plugin{$sPluginName}";
|
||||||
$oPlugin=new $sClassName;
|
$oPlugin=new $sClassName;
|
||||||
|
$oPlugin->Delegate();
|
||||||
$oPlugin->Init();
|
$oPlugin->Init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
*/
|
*/
|
||||||
abstract class Plugin extends Object {
|
abstract class Plugin extends Object {
|
||||||
|
|
||||||
|
protected $aDelegates=array();
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,6 +34,32 @@ abstract class Plugin extends Object {
|
||||||
public function Init() {
|
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
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $aDelegate=array(
|
protected $aDelegates=array(
|
||||||
'module' => array(),
|
'module' => array(),
|
||||||
'action' => array(),
|
'action' => array(),
|
||||||
'entity' => array(),
|
'entity' => array(),
|
||||||
|
@ -121,6 +121,25 @@ class LsPlugin extends Module {
|
||||||
|
|
||||||
$sClassName="Plugin{$sPluginName}";
|
$sClassName="Plugin{$sPluginName}";
|
||||||
$oPlugin=new $sClassName;
|
$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();
|
$bResult=$oPlugin->$sAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,8 +227,8 @@ class LsPlugin extends Module {
|
||||||
* @param string $sTo
|
* @param string $sTo
|
||||||
*/
|
*/
|
||||||
public function Delegate($sType,$sFrom,$sTo) {
|
public function Delegate($sType,$sFrom,$sTo) {
|
||||||
if(!in_array($sType,array_keys($this->aDelegate)) or !$sFrom or !$sTo) return null;
|
if(!in_array($sType,array_keys($this->aDelegates)) or !$sFrom or !$sTo) return null;
|
||||||
$this->aDelegate[$sType][trim($sFrom)]=trim($sTo);
|
$this->aDelegates[$sType][trim($sFrom)]=trim($sTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -221,7 +240,7 @@ class LsPlugin extends Module {
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function GetDelegate($sType,$sFrom) {
|
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
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isDelegated($sType,$sFrom) {
|
public function isDelegated($sType,$sFrom) {
|
||||||
if(!in_array($sType,array_keys($this->aDelegate)) or !$sFrom) return false;
|
if(!in_array($sType,array_keys($this->aDelegates)) or !$sFrom) return false;
|
||||||
return isset($this->aDelegate[$sType][$sFrom]);
|
return isset($this->aDelegates[$sType][$sFrom]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -4,3 +4,4 @@ Homepage: http://livestreet.ru/
|
||||||
Version: 1.0.0
|
Version: 1.0.0
|
||||||
Requires: 0.4.0
|
Requires: 0.4.0
|
||||||
Description: Профилирование работы движка LiveStreet-движка.
|
Description: Профилирование работы движка LiveStreet-движка.
|
||||||
|
Delegate:
|
|
@ -777,6 +777,7 @@ return array(
|
||||||
'plugins_plugin_deactivate' => 'Деактивировать',
|
'plugins_plugin_deactivate' => 'Деактивировать',
|
||||||
'plugins_unknown_action' => 'Указано неизвестное действие',
|
'plugins_unknown_action' => 'Указано неизвестное действие',
|
||||||
'plugins_action_ok' => 'Успешно выполнено',
|
'plugins_action_ok' => 'Успешно выполнено',
|
||||||
|
'plugins_activation_overlap' => 'Данный плагин невозможно активировать, так как он вступает в конфликт с уже активированными',
|
||||||
'plugins_submit_delete' => 'Удалить плагины',
|
'plugins_submit_delete' => 'Удалить плагины',
|
||||||
'plugins_delete_confirm' => 'Вы уверены, что желаете удалить указанные плагины?',
|
'plugins_delete_confirm' => 'Вы уверены, что желаете удалить указанные плагины?',
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue