/**
  * Обновляет юзера
  *
  * @param ModuleUser_EntityUser $oUser Объект пользователя
  * @return bool
  */
 public function Update(ModuleUser_EntityUser $oUser)
 {
     $sql = "UPDATE " . Config::Get('db.table.user') . "\n      SET\n        user_password = ? ,\n        user_mail = ? ,\n        user_skill = ? ,\n        user_date_activate = ? ,\n        user_date_comment_last = ? ,\n        user_rating = ? ,\n        user_count_vote = ? ,\n        user_activate = ? ,\n                user_activate_key = ? ,\n        user_profile_name = ? ,\n        user_profile_sex = ? ,\n        user_profile_country = ? ,\n        user_profile_region = ? ,\n        user_profile_city = ? ,\n        user_profile_birthday = ? ,\n        user_profile_about = ? ,\n        user_profile_date = ? ,\n        user_profile_avatar = ?  ,\n        user_profile_foto = ? ,\n        user_settings_notice_new_topic = ?  ,\n        user_settings_notice_new_comment = ? ,\n        user_settings_notice_new_talk = ?  ,\n        user_settings_notice_reply_comment = ? ,\n        user_settings_notice_new_friend = ? ,\n        user_settings_timezone = ?\n      WHERE user_id = ?\n    ";
     if ($this->oDb->query($sql, $oUser->getPassword(), $oUser->getMail(), $oUser->getSkill(), $oUser->getDateActivate(), $oUser->getDateCommentLast(), $oUser->getRating(), $oUser->getCountVote(), $oUser->getActivate(), $oUser->getActivateKey(), $oUser->getProfileName(), $oUser->getProfileSex(), $oUser->getProfileCountry(), $oUser->getProfileRegion(), $oUser->getProfileCity(), $oUser->getProfileBirthday(), $oUser->getProfileAbout(), $oUser->getProfileDate(), $oUser->getProfileAvatar(), $oUser->getProfileFoto(), $oUser->getSettingsNoticeNewTopic(), $oUser->getSettingsNoticeNewComment(), $oUser->getSettingsNoticeNewTalk(), $oUser->getSettingsNoticeReplyComment(), $oUser->getSettingsNoticeNewFriend(), $oUser->getSettingsTimezone(), $oUser->getId())) {
         return true;
     }
     return false;
 }
 /**
  * Vote for image
  * 
  * @param ModuleUser_EntityUser $oUser
  * @param PluginLsgallery_ModuleImage_EntityImage $oImage
  * @param int $iValue
  * @return int
  */
 public function VoteImage(ModuleUser_EntityUser $oUser, PluginLsgallery_ModuleImage_EntityImage $oImage, $iValue)
 {
     $skill = $oUser->getSkill();
     $iDeltaRating = $iValue;
     if ($skill >= 100 and $skill < 250) {
         $iDeltaRating = $iValue * 2;
     } elseif ($skill >= 250 and $skill < 400) {
         $iDeltaRating = $iValue * 3;
     } elseif ($skill >= 400) {
         $iDeltaRating = $iValue * 4;
     }
     $oImage->setRating($oImage->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;
     }
     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);
     /**
      * Сохраняем силу и рейтинг
      */
     $oUserImage = $this->User_GetUserById($oImage->getUserId());
     $iSkillNew = $oUserImage->getSkill() + $iValue * $iDelta;
     $iSkillNew = $iSkillNew < 0 ? 0 : $iSkillNew;
     $oUserImage->setSkill($iSkillNew);
     $oUserImage->setRating($oUserImage->getRating() + $iValue * $iDelta / 2.73);
     $this->User_Update($oUserImage);
     return $iDeltaRating;
 }
예제 #3
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;
 }
예제 #4
0
 /**
  * Получаем число доступных приглашений для юзера
  *
  * @param ModuleUser_EntityUser $oUserFrom Объект пользователя
  *
  * @return int
  */
 public function GetCountInviteAvailable($oUserFrom)
 {
     $sDay = 7;
     $iCountUsed = $this->GetCountInviteUsedByDate($oUserFrom->getId(), date('Y-m-d 00:00:00', mktime(0, 0, 0, date('m'), date('d') - $sDay, date('Y'))));
     $iCountAllAvailable = round($oUserFrom->getRating() + $oUserFrom->getSkill());
     $iCountAllAvailable = $iCountAllAvailable < 0 ? 0 : $iCountAllAvailable;
     $iCountAvailable = $iCountAllAvailable - $iCountUsed;
     $iCountAvailable = $iCountAvailable < 0 ? 0 : $iCountAvailable;
     return $iCountAvailable;
 }
예제 #5
0
 /**
  * Получаем число доступных приглашений для юзера
  *
  * @param unknown_type $oUserFrom
  * @return unknown
  */
 public function GetCountInviteAvailable(ModuleUser_EntityUser $oUserFrom)
 {
     $sDay = 7;
     $iCountUsed = $this->GetCountInviteUsedByDate($oUserFrom->getId(), date("Y-m-d 00:00:00", mktime(0, 0, 0, date("m"), date("d") - $sDay, date("Y"))));
     $iCountAllAvailable = round($oUserFrom->getRating() + $oUserFrom->getSkill());
     $iCountAllAvailable = $iCountAllAvailable < 0 ? 0 : $iCountAllAvailable;
     $iCountAvailable = $iCountAllAvailable - $iCountUsed;
     $iCountAvailable = $iCountAvailable < 0 ? 0 : $iCountAvailable;
     return $iCountAvailable;
 }
예제 #6
0
 /**
  * Расчет рейтинга и силы при голосовании за пользователя
  *
  * @param ModuleUser_EntityUser $oUser
  * @param ModuleUser_EntityUser $oUserTarget
  * @param int                   $iValue
  *
  * @return float
  */
 public function VoteUser($oUser, $oUserTarget, $iValue)
 {
     if (!C::Get('plugin.rating.user.vote')) {
         return 0;
     }
     if (!C::Get('plugin.rating.user.dislike') && $iValue < 0) {
         return 0;
     }
     /**
      * Начисляем силу и рейтинг юзеру, используя логарифмическое распределение
      */
     $skill = $oUser->getSkill();
     $iMinSize = C::Get('plugin.rating.user.min_change');
     //0.42;
     $iMaxSize = C::Get('plugin.rating.user.max_change');
     //3.2;
     $iSizeRange = $iMaxSize - $iMinSize;
     $iMinCount = log(0 + 1);
     $iMaxCount = log(C::Get('plugin.rating.user.max_rating') + 1);
     // 500
     $iCountRange = $iMaxCount - $iMinCount;
     if ($iCountRange == 0) {
         $iCountRange = 1;
     }
     if ($skill > C::Get('plugin.rating.user.left_border') and $skill < C::Get('plugin.rating.user.right_border')) {
         // 50-200
         $skill_new = $skill / C::Get('plugin.rating.user.mid_divider');
         //70
     } elseif ($skill >= C::Get('plugin.rating.user.right_border')) {
         // 200
         $skill_new = $skill / C::Get('plugin.rating.user.right_divider');
         //2
     } else {
         $skill_new = $skill / C::Get('plugin.rating.user.left_divider');
         //40
     }
     $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange);
     /**
      * Определяем новый рейтинг
      */
     $iRatingNew = $oUserTarget->getRating() + $iValue * $iDelta;
     $oUserTarget->setRating($iRatingNew);
     return $iValue * $iDelta;
 }
예제 #7
0
 /**
  * Расчет рейтинга и силы при голосовании за пользователя
  *
  * @param ModuleUser_EntityUser $oUser
  * @param ModuleUser_EntityUser $oUserTarget
  * @param int $iValue
  * @return float
  */
 public function VoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget, $iValue)
 {
     /**
      * Начисляем силу и рейтинг юзеру, используя логарифмическое распределение
      */
     $skill = $oUser->getSkill();
     $iMinSize = 0.42;
     $iMaxSize = 3.2;
     $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 / 40;
     } elseif ($skill >= 200) {
         $skill_new = $skill / 2;
     } else {
         $skill_new = $skill / 70;
     }
     $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange);
     /**
      * Определяем новый рейтинг
      */
     $iRatingNew = $oUserTarget->getRating() + $iValue * $iDelta;
     $oUserTarget->setRating($iRatingNew);
     return $iValue * $iDelta;
 }
 /**
  * @param string $sParam
  * @param mixed $xValue
  * @param ModuleUser_EntityUser $oUser
  * @param array $aParams
  *
  * @return bool
  */
 public function CheckRuleActionParam($sParam, $xValue, $oUser, $aParams = array())
 {
     if ($sParam == 'registration_time') {
         if (time() - strtotime($oUser->getDateRegister()) >= $xValue) {
             return TRUE;
         } else {
             return FALSE;
         }
     }
     if ($sParam == 'rating') {
         if ($oUser->getRating() >= $xValue) {
             return TRUE;
         } else {
             return FALSE;
         }
     }
     if ($sParam == 'skill') {
         if ($oUser->getSkill() >= $xValue) {
             return TRUE;
         } else {
             return FALSE;
         }
     }
     if ($sParam == 'count_comment') {
         if (E::ModuleComment()->GetCountCommentsByUserId($oUser->getId(), 'topic') >= $xValue) {
             return TRUE;
         } else {
             return FALSE;
         }
     }
     if ($sParam == 'count_topic') {
         if (E::ModuleTopic()->GetCountTopicsPersonalByUser($oUser->getId(), 1) >= $xValue) {
             return TRUE;
         } else {
             return FALSE;
         }
     }
     if ($sParam == 'rating_sum_topic') {
         if (is_array($xValue) && count($xValue) > 1) {
             $iRating = $xValue[0];
             $iTime = $xValue[1];
         } else {
             $iRating = $xValue;
             $iTime = 60 * 60 * 24 * 14;
         }
         if ($this->GetSumRatingTopic($oUser->getId(), date('Y-m-d H:i:s', time() - $iTime)) >= $iRating) {
             return TRUE;
         } else {
             return FALSE;
         }
     }
     if ($sParam == 'rating_sum_comment') {
         if (is_array($xValue) && count($xValue) > 1) {
             $iRating = $xValue[0];
             $iTime = $xValue[1];
         } else {
             $iRating = $xValue;
             $iTime = 60 * 60 * 24 * 7;
         }
         if ($this->GetSumRatingComment($oUser->getId(), date('Y-m-d H:i:s', time() - $iTime)) >= $iRating) {
             return TRUE;
         } else {
             return FALSE;
         }
     }
     return FALSE;
 }
예제 #9
0
 /**
  * Расчет рейтинга и силы при голосовании за пользователя
  *
  * @param ModuleUser_EntityUser $oUser
  * @param ModuleUser_EntityUser $oUserTarget
  * @param int $iValue
  * @return float
  */
 public function VoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget, $iValue, $voted = false)
 {
     $iRatingNew = $oUserTarget->getRating() + $iValue;
     $oUserCurrent = $this->User_GetUserCurrent();
     $oUserTarget->setRating($iRatingNew);
     if (!$voted) {
         if ($iValue > 0) {
             $oUserTarget->setSkill($oUserTarget->getSkill() + 10.0);
         } else {
             $oUserTarget->setSkill($oUserTarget->getSkill() - 10.0);
         }
     }
     $this->User_Update($oUserTarget);
     return $iValue;
 }