/** * Обновляет юзера * * @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; }
/** * Расчет рейтинга и силы при гоосовании за пост на форуме * * @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; }
/** * Получаем число доступных приглашений для юзера * * @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; }
/** * Получаем число доступных приглашений для юзера * * @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; }
/** * Расчет рейтинга и силы при голосовании за пользователя * * @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; }
/** * Расчет рейтинга и силы при голосовании за пользователя * * @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; }
/** * Расчет рейтинга и силы при голосовании за пользователя * * @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; }