/** * Метод вызывается из Ajax для выполнения действия над комментарием */ public final function executeCommentAction($msgId, $action) { $msg = $this->getMsgById($msgId); check_condition(!$msg->isDeleted(), 'Сообщение удалено'); $this->validateThreadId($msg->getThreadId()); $USER = PsUser::inst(); $msgId = $msg->getId(); $userId = $USER->getId(); $authorId = $msg->getUser()->getId(); $RESPONSE = ''; switch ($action) { //УДАЛЕНИЕ case self::COMMENT_ACTION_DELETE: check_condition($USER->isAuthorisedAsAdmin() || $USER->isIt($authorId), 'Недостаточно прав'); $RESPONSE = $this->BEAN->deleteMsg($msg); $RESPONSE['known'] = $this->convertMsgIdsToUniques($RESPONSE['known']); break; //ПОДТВЕРЖДЕНИЕ //ПОДТВЕРЖДЕНИЕ case self::COMMENT_ACTION_CONFIRM: check_condition($USER->isAuthorisedAsAdmin(), 'Недостаточно прав'); $this->BEAN->confirmMsg($msg); if ($msg->isToUser($USER)) { $this->BEAN->markMsgAsKnownDb($msg); } break; //ОТМЕТКА О ПРОЧИТАННОСТИ //ОТМЕТКА О ПРОЧИТАННОСТИ case self::COMMENT_ACTION_KNOWN: check_condition($msg->isToUser($USER), 'Это сообщение отправлено не вам'); $this->BEAN->markMsgAsKnownDb($msg); if ($USER->isAuthorisedAsAdmin()) { $this->BEAN->confirmMsg($msg); } break; case self::COMMENT_ACTION_LIKE: case self::COMMENT_ACTION_DISLIKE: case self::COMMENT_ACTION_UNVOTE: check_condition($this->SETTINGS->isVotable(), 'Голосование запрещено'); check_condition(!$USER->isIt($authorId), 'Запрещено голосовать за своё сообщение'); $threadUnique = $this->SETTINGS->getThreadUnique($msg->getThreadId()); switch ($action) { case self::COMMENT_ACTION_LIKE: VotesManager::inst()->addVote($threadUnique, $msgId, $userId, $authorId, 1); break; case self::COMMENT_ACTION_DISLIKE: VotesManager::inst()->addVote($threadUnique, $msgId, $userId, $authorId, -1); break; case self::COMMENT_ACTION_UNVOTE: VotesManager::inst()->removeVote($threadUnique, $msgId, $userId); break; } $RESPONSE = VotesManager::inst()->getVotesCount($threadUnique, $msgId); break; default: raise_error("Неизвестное действие [{$action}]."); } return $RESPONSE; }