[РЕШЕНО] Что за аномалия?

Хочу реализовать прибавление рейтинга за публикацию топика:
В Action.Topic.class.php добавляю 3 строчки:
if ($this->Topic_AddTopic($oTopic)) {
			$this->Hook_Run('topic_add_after', array('oTopic'=>$oTopic,'oBlog'=>$oBlog));
			/**
			 * Получаем топик, чтоб подцепить связанные данные
			 */
			$oTopic=$this->Topic_GetTopicById($oTopic->getId());
			/**
			 * Прибавляем 0.4 рейтинга за публикацию топика
			 */
			$oUserTopic = $this->oUserCurrent;
            $oUserTopic->setRating($oUserTopic->getRating()+0.4); // можно в конфиге val вместо 0.4
            $this->User_Update($oUserTopic);


Всё ок, работает на ура!
В этом же файле, только ниже, в функции удаления (вконце) добавляю 3 строчки отнимания рейтинга при удалении топика:
protected function EventDelete() {
		$this->Security_ValidateSendForm();
		/**
		 * Получаем номер топика из УРЛ и проверяем существует ли он
		 */
		$sTopicId=$this->GetParam(0);
		if (!($oTopic=$this->Topic_GetTopicById($sTopicId))) {
			return parent::EventNotFound();
		}
		/**
		 * проверяем есть ли право на удаление топика
		 */
		if (!$this->ACL_IsAllowDeleteTopic($oTopic,$this->oUserCurrent)) {
			return parent::EventNotFound();
		}
		
		/**
		 * Удаляем топик
		 */
		$this->Hook_Run('topic_delete_before', array('oTopic'=>$oTopic));
		$this->Topic_DeleteTopic($oTopic);
		$this->Hook_Run('topic_delete_after', array('oTopic'=>$oTopic));
		/**
		 * Отнимаем 0.4 рейтинга
		 */
		$oUserTopic = $this->oUserCurrent;
        $oUserTopic->setRating($oUserTopic->getRating()-0.4);
        $this->User_Update($oUserTopic);

Теже 3 строчки, но только знак минус. НЕ РАБОТАЕТ. РЕЙТИНГ НЕ ОТНИМАЕТСЯ!

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

Пределал:
$oUserTopic=$this->User_GetUserById($oTopic->getUserId());
		$oUserTopic->setRating($oUserTopic->getRating()-0.4);
        $this->User_Update($oUserTopic);

Заменил, и всё равно рейтинг не отнимается. Что не так?

2 комментария

avatar
Мне кажется, что вы удаляете рейтинг уже после того как топик удалён, т.е. уже нет ID.
avatar
Путём комментирования кода, оказалось, что процесс удаления обрабатывается по адресу:
\plugins\aceadminpanel\classes\actions\ActionTopic.class.php

вставил там код
// * Гарантировано удаляем топик и его зависимости
		$this->Hook_Run('topic_delete_before', array('oTopic' => $oTopic));
        $this->PluginAceadminpanel_Admin_DelTopic($oTopic->GetId());
        $this->Hook_Run('topic_delete_after', array('oTopic' => $oTopic));
         /**
		 * Отнимаем 0.4 рейтинга
		 */
		$oUserTopic=$this->User_GetUserById($oTopic->getUserId());
		$oUserTopic->setRating($oUserTopic->getRating()-0.4);
        $this->User_Update($oUserTopic);

Всё заработало! А кто бы мог подумать...
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.