На что влияет? — просто не активируется плагин, пока не будет активирован плагин из requires.
Правда здесь есть косяк — при деактивации плагина движок не проверяет есть ли другие активные плагины, зависящие от него. Поэтому если деактивировать какой-нибудь плагин от которого зависят другие — все может упасть))
Поэтому перед деактивацией плагина я проверяю нет ли активных плагинов, которые зависят от него.
/**
* Перед деактивацией проверяем активны ли зависимые плагины.
* Это важно, если деактивировать этот плагин с оставленными зависимостями - все вывалится в fatal.
*
* @return bool
*/
public function Deactivate() {
$aPlugins = $this->Plugin_GetList();
$aActivePlugins = $this->Plugin_GetActivePlugins();
$aDependentPlugins = array();
foreach ($aPlugins as $sPluginName => $oPlugin) {
if (!in_array($sPluginName, $aActivePlugins)) {
continue;
}
if ($oPlugin['property']->requires->plugins) {
foreach ($oPlugin['property']->requires->plugins->children() as $sReqPlugin) {
if ($sReqPlugin == 'realtime') {
$aDependentPlugins[] = func_camelize($oPlugin['code']);
}
}
}
}
if (!empty($aDependentPlugins)) {
$this->Message_AddError(
$this->Lang_Get(
'plugin.realtime.deactivation_dependency_error',
array('plugins_codes' => implode(', ', $aDependentPlugins))
),
null,
true
);
return false;
}
return true;
}
Это ошибка в логике LS из-за того, что в prefix_favourite_tag не выставлено значение по дефолту. Здесь нужно самому реализовать метод addEnumType из модуля Database с фиксом это проблемы.
Вот такой метод должен работать:
public function addEnumType($sTableName,$sFieldName,$sType,$aConfig=null) {
$sTableName = str_replace('prefix_', Config::Get('db.table.prefix'), $sTableName);
$sQuery="SHOW COLUMNS FROM `{$sTableName}`";
if ($aRows=$this->GetConnect($aConfig)->select($sQuery)) {
foreach ($aRows as $aRow){
if ($aRow['Field'] == $sFieldName) break;
}
if (strpos($aRow['Type'], "'{$sType}'") === FALSE) {
$aRow['Type'] =str_ireplace('enum(', "enum('{$sType}',", $aRow['Type']);
$sQuery="ALTER TABLE `{$sTableName}` MODIFY `{$sFieldName}` ".$aRow['Type'];
$sQuery.= ($aRow['Null']=='NO') ? ' NOT NULL ' : ' NULL ';
if ($aRow['Null']=='NO' and is_null($aRow['Default'])) {
$aRow['Default']='';
}
$sQuery.= is_null($aRow['Default']) ? ' DEFAULT NULL ' : " DEFAULT '{$aRow['Default']}' ";
$this->GetConnect($aConfig)->select($sQuery);
}
}
}
Параллельно нашел мелкий баг в текущей версии движка: при предпросмотре топика, если не заполнено поле «тект» предпросмотр все равно срабатывает, хотя валидация данного поля заложена, только там вместо topic_text_source прописано topic_text.
На что влияет? — просто не активируется плагин, пока не будет активирован плагин из requires.
Правда здесь есть косяк — при деактивации плагина движок не проверяет есть ли другие активные плагины, зависящие от него. Поэтому если деактивировать какой-нибудь плагин от которого зависят другие — все может упасть))
Поэтому перед деактивацией плагина я проверяю нет ли активных плагинов, которые зависят от него.
Для исправления добавь в свой маппер такой метод:
И при insert/update/delete в методах маппера возвращай результат так:
Вот такой метод должен работать:
\classes\hooks\HookTalkBan.class.php