Exemplo n.º 1
0
 /**
  * Расчет рейтинга и силы при гоосовании за пост на форуме
  *
  * @param ModuleUser_EntityUser $oUser	Объект пользователя, который голосует
  * @param PluginForum_ModuleForum_EntityPost $oPost	Объект поста
  * @param int $iValue
  * @return int
  */
 public function VoteForumPost(ModuleUser_EntityUser $oUser, PluginForum_ModuleForum_EntityPost $oPost, $iValue)
 {
     /**
      * Устанавливаем рейтинг поста
      */
     $iDeltaRating = $iValue;
     $oPost->setRating($oPost->getRating() + $iDeltaRating);
     /**
      * Начисляем силу и рейтинг автору топика, используя логарифмическое распределение
      */
     $iMinSize = 0.1;
     $iMaxSize = 8;
     $iSizeRange = $iMaxSize - $iMinSize;
     $iMinCount = log(0 + 1);
     $iMaxCount = log(500 + 1);
     $iCountRange = $iMaxCount - $iMinCount;
     if ($iCountRange == 0) {
         $iCountRange = 1;
     }
     $skill = $oUser->getSkill();
     if ($skill > 50 and $skill < 200) {
         $skill_new = $skill / 70;
     } elseif ($skill >= 200) {
         $skill_new = $skill / 10;
     } else {
         $skill_new = $skill / 100;
     }
     $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange);
     /**
      * Сохраняем силу и рейтинг
      */
     $oUser = $this->User_GetUserById($oPost->getUserId());
     $iSkillNew = $oUser->getSkill() + $iValue * $iDelta;
     $iSkillNew = $iSkillNew < 0 ? 0 : $iSkillNew;
     $oUser->setSkill($iSkillNew);
     $oUser->setRating($oUser->getRating() + $iValue * $iDelta / 2.73);
     $this->User_Update($oUser);
     return $iDeltaRating;
 }
Exemplo n.º 2
0
 /**
  * Отправка уведомления на отвеченные посты
  *
  * @param	PluginForum_ModuleForum_EntityPost	$oReply
  * @param	array	$aExcludeMail
  */
 public function SendNotifyReply(PluginForum_ModuleForum_EntityPost $oReply, $aExcludeMail = array())
 {
     if ($oReply) {
         if (preg_match_all("@(<blockquote reply=(?:\"|')(.*)(?:\"|').*>)@Ui", $oReply->getTextSource(), $aMatch)) {
             $aIds = array_values($aMatch[2]);
             /**
              * Получаем список постов
              */
             $aPosts = $this->GetPostItemsByArrayPostId((array) $aIds);
             /**
              * Отправка
              */
             $sTemplate = 'notify.reply.tpl';
             $sSendTitle = $this->Lang_Get('plugin.forum.notify_subject_reply');
             $aSendContent = array('oUser' => $oReply->getUser(), 'oTopic' => $oReply->getTopic(), 'oPost' => $oReply);
             foreach ($aPosts as $oPost) {
                 if ($oUser = $oPost->getUser()) {
                     $sMail = $oUser->getMail();
                     if (!$sMail || in_array($sMail, (array) $aExcludeMail)) {
                         continue;
                     }
                     $this->Notify_Send($sMail, $sTemplate, $sSendTitle, $aSendContent, __CLASS__);
                 }
             }
         }
     }
 }