Esempio n. 1
0
 /**
  * Расчет рейтинга при голосовании за комментарий
  *
  * @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;
 }
Esempio n. 3
0
 /**
  * Расчет рейтинга при голосовании за комментарий
  *
  * @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;
 }
Esempio n. 4
0
 /**
  * Расчет рейтинга при голосовании за комментарий
  *
  * @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;
 }
Esempio n. 5
0
 /**
  * Расчет рейтинга при голосовании за комментарий
  *
  * @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;
 }
Esempio n. 7
0
 /**
  * Отправляет юзеру уведомление о новом комментарии в его топике
  *
  * @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));
 }
Esempio n. 8
0
 /**
  * Проверяет может ли пользователь голосовать за конкретный комментарий
  *
  * @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);
 }
Esempio n. 10
0
 /**
  * Проверка на соответсвие коментария родительскому коментарию
  *
  * @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;
 }
Esempio n. 11
0
 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;
 }
Esempio n. 13
0
 /**
  * Проверка на редактирование комментария
  *
  * @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;
 }
Esempio n. 14
0
 /**
  * Проверяет может ли пользователь голосовать за конкретный комментарий
  *
  * @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;
 }
Esempio n. 15
0
 /**
  * Обновляет коммент
  *
  * @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;
 }