+29.51
Рейтинг
70.91
Сила

Сергей

  • avatar emmy
  • 4
Вот так.
        <plugins>
            <plugin>realtime</plugin>
        </plugins>


На что влияет? — просто не активируется плагин, пока не будет активирован плагин из 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;
    }
  • avatar ort
  • 2
Это косяк LS.
Для исправления добавь в свой маппер такой метод:
protected function IsSuccessful($mRes)
    {
        return $mRes === false or is_null($mRes) ? false : true;
    }

И при insert/update/delete в методах маппера возвращай результат так:
public function UpdateCategory(PluginQcategories_ModuleQcategories_EntityQcategories $oCategory) {
		$sql = "UPDATE ".Config::Get('plugin.qcategories.table.qcategories')."
			SET
        category_pid = ?,
			  category_url = ?,
			  category_url_full = ?,
			  category_title = ?,
			  category_text = ?,
        category_sort = ?
			WHERE
        category_id = ?d
		";
	$res=$this->oDb->query($sql,$oCategory->getPid(),$oCategory->getUrl(),$oCategory->getUrlFull(),$oCategory->getTitle(),$oCategory->getText(),$oCategory->getSort(),$oCategory->getId());
        return $this->IsSuccessful($res);
}
  • avatar ort
  • 1
{insert name='block' block='tagsFavouriteQuestion' params=[
            'user' => $oUserProfile,
            'plugin' => 'questions'
        ]}
  • avatar ort
  • 0
Это ошибка в логике 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);
			}
		}
}
  • avatar vOFFka
  • 0
Параллельно нашел мелкий баг в текущей версии движка: при предпросмотре топика, если не заполнено поле «тект» предпросмотр все равно срабатывает, хотя валидация данного поля заложена, только там вместо topic_text_source прописано topic_text.
  • avatar sgavka
  • 0
Собственно для них и делался плагин.
  • avatar Chiliec
  • 6
В config.local.php добавьте:
$config['router']['rewrite'] = array(
    'registration' => 'mysecreturl',
);
и регистрация будет доступна по www.сайт.com/mysecreturl/
Хук на вскидку

\classes\hooks\HookTalkBan.class.php
<?php
//===============================================================
class HookTalkBan extends Hook{
//===============================================================
	public function RegisterHook(){
		$this->AddHook('check_talk_fields','CheckTalkFields');
	}
//===============================================================
	public function CheckTalkFields($aVars){
		$aDisabledUserIds=array(1); // id админов через запятую
		$oUserCurrent=$this->User_GetUserCurrent();
		$aUsers=explode(',',(string)getRequest('talk_users'));
		foreach($aUsers as $sUser){
			$sUser=trim($sUser);
			if($sUser=='' || strtolower($sUser)==strtolower($oUserCurrent->getLogin())) continue;
			$oUser=$this->User_GetUserByLogin($sUser);
			if($oUser && $oUser->getActivate()==1){
				if(in_array($oUser->getId(),$aDisabledUserIds)){
					$this->Message_AddError($this->Lang_Get('talk_user_in_blacklist',array('login'=>htmlspecialchars($oUser->getLogin()))),$this->Lang_Get('attention'));
					$aVars['bOk']=false;
				}
			}
		}
	}
//===============================================================
}
?>