/** * Расчет рейтинга при голосовании за комментарий * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleComment_EntityComment $oComment Объект комментария * @param int $iValue * * @return int */ public function VoteComment($oUser, $oComment, $iValue) { if (!C::Get('plugin.simplerating.comment.vote')) { return 0; } if (!C::Get('plugin.simplerating.comment.dislike') && $iValue < 0) { return 0; } /** * Устанавливаем рейтинг комментария */ $oComment->setRating($oComment->getRating() + $iValue); /** * Начисляем рейтинг автору комментария */ if (C::Get('plugin.simplerating.comment.user_add')) { $oUserComment = $this->User_GetUserById($oComment->getUserId()); $oUserComment->setRating((double) $oUserComment->getRating() + $iValue * (double) C::Get('plugin.simplerating.comment.user_add')); $this->User_Update($oUserComment); } /** * Убавляем рейтинг голосующего, если нужно */ if (C::Get('plugin.simplerating.comment.user_remove')) { $oUser->setRating((double) $oUser->getRating() + (double) C::Get('plugin.simplerating.comment.user_remove')); $this->User_Update($oUser); } return $iValue; }
public function UpdateEditCommentData(ModuleComment_EntityComment $oComment) { $sql = "UPDATE " . Config::Get('db.table.comment') . "\r\n SET\r\n comment_edit_count= ?d,\r\n comment_edit_date=?\r\n WHERE\r\n comment_id = ?d\r\n "; if ($this->oDb->query($sql, $oComment->getEditCount(), $oComment->getEditDate(), $oComment->getId()) !== false) { return true; } return false; }
/** * Расчет рейтинга при голосовании за комментарий * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleComment_EntityComment $oComment Объект комментария * @param int $iValue * * @return int */ public function VoteComment($oUser, $oComment, $iValue) { if (!C::Get('plugin.rating.comment.vote')) { return 0; } if (!C::Get('plugin.rating.comment.dislike') && $iValue < 0) { return 0; } /** * Устанавливаем рейтинг комментария */ $oComment->setRating($oComment->getRating() + $iValue); /** * Начисляем силу автору коммента, используя логарифмическое распределение */ $skill = $oUser->getSkill(); $iMinSize = C::Get('plugin.rating.comment.min_change'); //0.004; $iMaxSize = C::Get('plugin.rating.comment.max_change'); //0.5; $iSizeRange = $iMaxSize - $iMinSize; $iMinCount = log(0 + 1); $iMaxCount = log(C::Get('plugin.rating.comment.max_rating') + 1); //500 $iCountRange = $iMaxCount - $iMinCount; if ($iCountRange == 0) { $iCountRange = 1; } if ($skill > C::Get('plugin.rating.comment.left_border') and $skill < C::Get('plugin.rating.comment.right_border')) { //50-200 $skill_new = $skill / C::Get('plugin.rating.comment.mid_divider'); //70 } elseif ($skill >= C::Get('plugin.rating.comment.right_border')) { //200 $skill_new = $skill / C::Get('plugin.rating.comment.right_divider'); //10 } else { $skill_new = $skill / C::Get('plugin.rating.comment.left_divider'); //130 } $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange); /** * Сохраняем силу */ $oUserComment = $this->User_GetUserById($oComment->getUserId()); $iSkillNew = $oUserComment->getSkill() + $iValue * $iDelta; $iSkillNew = $iSkillNew < 0 ? 0 : $iSkillNew; $oUserComment->setSkill($iSkillNew); $this->User_Update($oUserComment); return $iValue; }
/** * Расчет рейтинга при голосовании за комментарий * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleComment_EntityComment $oComment Объект комментария * @param int $iValue * @return int */ public function VoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment, $iValue) { /** * Устанавливаем рейтинг комментария */ $oComment->setRating($oComment->getRating() + $iValue); /** * Меняем рейтинг автора коммента */ $fDeltaUser = ($iValue < 0 ? -1 : 1) * Config::Get('module.rating.comment_multiplier'); $oUserComment = $this->User_GetUserById($oComment->getUserId()); $oUserComment->setRating($oUserComment->getRating() + $fDeltaUser); $this->User_Update($oUserComment); return $iValue; }
/** * Расчет рейтинга при голосовании за комментарий * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleComment_EntityComment $oComment Объект комментария * @param int $iValue * @return int */ public function VoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment, $iValue) { /** * Устанавливаем рейтинг комментария */ $oComment->setRating($oComment->getRating() + $iValue); /** * Начисляем силу автору коммента, используя логарифмическое распределение */ $skill = $oUser->getSkill(); /** * Сохраняем силу */ $oUserComment = $this->User_GetUserById($oComment->getUserId()); $iSkillNew = $oUserComment->getSkill() + $iValue / 10; $oUserComment->setSkill($iSkillNew); $this->User_Update($oUserComment); return $iValue; }
/** * Расчет рейтинга при голосовании за комментарий * * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует * @param ModuleComment_EntityComment $oComment Объект комментария * @param int $iValue * @return int */ public function VoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment, $iValue) { /** * Устанавливаем рейтинг комментария */ $oComment->setRating($oComment->getRating() + $iValue); /** * Начисляем силу автору коммента, используя логарифмическое распределение */ $skill = $oUser->getSkill(); $iMinSize = 0.004; $iMaxSize = 0.5; $iSizeRange = $iMaxSize - $iMinSize; $iMinCount = log(0 + 1); $iMaxCount = log(500 + 1); $iCountRange = $iMaxCount - $iMinCount; if ($iCountRange == 0) { $iCountRange = 1; } if ($skill > 50 and $skill < 200) { $skill_new = $skill / 70; } elseif ($skill >= 200) { $skill_new = $skill / 10; } else { $skill_new = $skill / 130; } $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange); /** * Сохраняем силу */ $oUserComment = $this->User_GetUserById($oComment->getUserId()); $iSkillNew = $oUserComment->getSkill() + $iValue * $iDelta; $iSkillNew = $iSkillNew < 0 ? 0 : $iSkillNew; $oUserComment->setSkill($iSkillNew); $this->User_Update($oUserComment); return $iValue; }
/** * Отправляет юзеру уведомление о новом комментарии в его топике * * @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем * @param ModuleTopic_EntityTopic $oTopic Объект топика * @param ModuleComment_EntityComment $oComment Объект комментария * @param ModuleUser_EntityUser $oUserComment Объект пользователя, написавшего комментарий * * @return bool */ public function SendCommentNewToAuthorTopic(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleComment_EntityComment $oComment, ModuleUser_EntityUser $oUserComment) { /** * Автор топика не должен получать уведомлений о своём комментарии * к своему же топику */ if ($oUserTo->getId() == $oComment->getUserId()) { return false; } /** * Проверяем можно ли юзеру рассылать уведомление */ if (!$oUserTo->getSettingsNoticeNewComment()) { return false; } return $this->Send($oUserTo, 'comment_new.tpl', E::ModuleLang()->Get('notify_subject_comment_new'), array('oUserTo' => $oUserTo, 'oTopic' => $oTopic, 'oComment' => $oComment, 'oUserComment' => $oUserComment)); }
/** * Проверяет может ли пользователь голосовать за конкретный комментарий * * @param ModuleUser_EntityUser $oUser Пользователь * @param ModuleComment_EntityComment $oComment Комментарий * * @return bool */ public function CanVoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment) { if (!C::Get('rating.enabled')) { return self::CAN_VOTE_COMMENT_FALSE; } /** @var ModuleBlog_EntityBlog $oBlog */ $oBlog = $oComment->getTargetBlog(); if ($oBlog && $oBlog->getBlogType()) { $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId()); if ($oBlogUser && $oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_BAN) { return self::CAN_VOTE_COMMENT_ERROR_BAN; } } if ($oUser->getRating() >= Config::Get('acl.vote.comment.rating')) { return self::CAN_VOTE_COMMENT_TRUE; } return self::CAN_VOTE_COMMENT_FALSE; }
/** * Обновляет коммент * * @param ModuleComment_EntityComment $oComment Объект комментария * @return bool */ public function UpdateComment(ModuleComment_EntityComment $oComment) { $sql = "UPDATE " . Config::Get('db.table.comment') . "\n\t\t\tSET \n\t\t\t\tcomment_text= ?,\n\t\t\t\tcomment_text_source= ?,\n\t\t\t\tcomment_rating= ?f,\n\t\t\t\tcomment_count_vote= ?d,\n\t\t\t\tcomment_count_favourite= ?d,\n\t\t\t\tcomment_count_edit= ?d,\n\t\t\t\tcomment_date_edit= ?,\n\t\t\t\tcomment_delete = ?d ,\n\t\t\t\tcomment_publish = ?d ,\n\t\t\t\tcomment_text_hash = ?\n\t\t\tWHERE\n\t\t\t\tcomment_id = ?d\n\t\t"; $res = $this->oDb->query($sql, $oComment->getText(), $oComment->getTextSource(), $oComment->getRating(), $oComment->getCountVote(), $oComment->getCountFavourite(), $oComment->getCountEdit(), $oComment->getDateEdit(), $oComment->getDelete(), $oComment->getPublish(), $oComment->getTextHash(), $oComment->getId()); return $this->IsSuccessful($res); }
/** * Проверка на соответсвие коментария родительскому коментарию * * @param ModuleTopic_EntityTopic $oTopic * @param string $sText * @param ModuleComment_EntityComment $oCommentParent * * @return bool result */ protected function CheckParentComment($oTopic, $sText, $oCommentParent) { $sParentId = 0; if ($oCommentParent) { $sParentId = $oCommentParent->GetCommentId(); } $bOk = true; /** * Проверям на какой коммент отвечаем */ if (!func_check($sParentId, 'id')) { $this->Message_AddErrorSingle($this->Lang_Get('common.error.system.base'), $this->Lang_Get('common.error.error')); $bOk = false; } if ($sParentId) { /** * Проверяем существует ли комментарий на который отвечаем */ if (!$oCommentParent) { $this->Message_AddErrorSingle($this->Lang_Get('common.error.system.base'), $this->Lang_Get('common.error.error')); $bOk = false; } /** * Проверяем из одного топика ли новый коммент и тот на который отвечаем */ if ($oCommentParent->getTargetId() != $oTopic->getId()) { $this->Message_AddErrorSingle($this->Lang_Get('common.error.system.base'), $this->Lang_Get('common.error.error')); $bOk = false; } } else { $sParentId = null; } /** * Проверка на дублирующий коммент */ if ($this->Comment_GetCommentUnique($oTopic->getId(), 'topic', $this->oUserCurrent->getId(), $sParentId, md5($sText))) { $this->Message_AddErrorSingle($this->Lang_Get('topic.comments.notices.spam'), $this->Lang_Get('common.error.error')); $bOk = false; } $this->Hook_Run('comment_check_parent', array('oTopic' => $oTopic, 'sText' => $sText, 'oCommentParent' => $oCommentParent, 'bOk' => &$bOk)); return $bOk; }
public function UpdateComment(ModuleComment_EntityComment $oComment) { $sql = "UPDATE " . Config::Get('db.table.comment') . " \n\t\t\tSET \n\t\t\t\tcomment_text= ?,\n\t\t\t\tcomment_rating= ?f,\n\t\t\t\tcomment_count_vote= ?d,\n\t\t\t\tcomment_delete = ?d ,\n\t\t\t\tcomment_publish = ?d ,\n\t\t\t\tcomment_text_hash = ?\n\t\t\tWHERE\n\t\t\t\tcomment_id = ?d\n\t\t"; if ($this->oDb->query($sql, $oComment->getText(), $oComment->getRating(), $oComment->getCountVote(), $oComment->getDelete(), $oComment->getPublish(), $oComment->getTextHash(), $oComment->getId())) { return true; } return false; }
public function AddComment(ModuleComment_EntityComment $oComment) { $sql = "INSERT INTO " . Config::Get('db.table.comment') . " \n\t\t\t(comment_pid,\n\t\t\ttarget_id,\n\t\t\ttarget_type,\n\t\t\ttarget_parent_id,\n\t\t\tuser_id,\n\t\t\tcomment_text,\n\t\t\tcomment_date,\n\t\t\tcomment_user_ip,\n\t\t\tcomment_text_hash,\n guest_name,\n guest_email\t\t\n\t\t\t)\n\t\t\tVALUES(?, ?d, ?, ?d, ?d, ?, ?, ?, ?, ?, ?)\n\t\t"; if ($iId = $this->oDb->query($sql, $oComment->getPid(), $oComment->getTargetId(), $oComment->getTargetType(), $oComment->getTargetParentId(), $oComment->getUserId(), $oComment->getText(), $oComment->getDate(), $oComment->getUserIp(), $oComment->getTextHash(), $oComment->getGuestName(), $oComment->getGuestEmail())) { return $iId; } return false; }
/** * Проверка на редактирование комментария * * @param ModuleComment_EntityComment $oComment * @param ModuleUser_EntityUser $oUser * * @return bool */ public function IsAllowEditComment($oComment, $oUser) { if (!$oUser) { return false; } if (!in_array($oComment->getTargetType(), (array) Config::Get('module.comment.edit_target_allow'))) { return false; } if ($oUser->isAdministrator()) { return true; } if ($oComment->getUserId() == $oUser->getId() and $oUser->getRating() >= Config::Get('acl.update.comment.rating')) { /** * Проверяем на лимит времени */ if (!Config::Get('acl.update.comment.limit_time') or time() - strtotime($oComment->getDate()) <= Config::Get('acl.update.comment.limit_time')) { return true; } } return false; }
/** * Проверяет может ли пользователь голосовать за конкретный комментарий * * @param ModuleUser_EntityUser $oUser Пользователь * @param ModuleComment_EntityComment $oComment Комментарий * @return bool */ public function CanVoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment) { //if ($oUser->getRating()<Config::Get('acl.vote.comment.rating')) { // return false; //} if ($oComment->getTargetType() == 'talk') { return false; } if (!in_array($oComment->getTarget()->getBlogId(), $this->ModuleBlog_GetAccessibleBlogsByUser($oUser)) and $oComment->getTarget()->getBlog()->getType() != "open") { return false; } return true; }
/** * Обновляет коммент * * @param ModuleComment_EntityComment $oComment Объект комментария * * @return bool */ public function UpdateComment(ModuleComment_EntityComment $oComment) { $sql = "UPDATE ?_comment\n\t\t\tSET \n\t\t\t\tcomment_text= ?,\n\t\t\t\tcomment_rating= ?f,\n\t\t\t\tcomment_count_vote= ?d,\n\t\t\t\tcomment_count_favourite= ?d,\n\t\t\t\tcomment_delete = ?d ,\n\t\t\t\tcomment_publish = ?d ,\n\t\t\t\tcomment_date_edit = CASE comment_text_hash WHEN ? THEN comment_date_edit ELSE ? END,\n\t\t\t\tcomment_text_hash = ?\n\t\t\tWHERE\n\t\t\t\tcomment_id = ?d\n\t\t"; $bResult = $this->oDb->query($sql, $oComment->getText(), $oComment->getRating(), $oComment->getCountVote(), $oComment->getCountFavourite(), $oComment->getDelete(), $oComment->getPublish(), $oComment->getTextHash(), F::Now(), $oComment->getTextHash(), $oComment->getId()); return $bResult !== false; }