ModuleRating

Package modules.rating
Inheritance class ModuleRating » Module » LsObject
Since 1.0
Source Code /classes/modules/rating/Rating.class.php
Модуль управления рейтингами и силой

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oEngine Engine Объект ядра Module

Public Methods

Hide inherited methods

MethodDescriptionDefined By
Init() Инициализация модуля ModuleRating
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
VoteBlog() Расчет рейтинга и силы при голосовании за блог ModuleRating
VoteComment() Расчет рейтинга при голосовании за комментарий ModuleRating
VoteTopic() Расчет рейтинга и силы при гоосовании за топик ModuleRating
VoteUser() Расчет рейтинга и силы при голосовании за пользователя ModuleRating
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
__clone() Блокируем копирование/клонирование объекта Module

Method Details

Init() method
public void Init()
Source Code: /classes/modules/rating/Rating.class.php#30 (show)
public function Init() {

}

Инициализация модуля

VoteBlog() method
public int VoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog, int $iValue)
$oUser ModuleUser_EntityUser Объект пользователя, который голосует
$oBlog ModuleBlog_EntityBlog Объект блога
$iValue int
{return} int
Source Code: /classes/modules/rating/Rating.class.php#138 (show)
public function VoteBlog(ModuleUser_EntityUser $oUserModuleBlog_EntityBlog $oBlog$iValue) {
    
/**
     * Устанавливаем рейтинг блога, используя логарифмическое распределение
     */
    
$skill=$oUser->getSkill();
    
$iMinSize=1.13;
    
$iMaxSize=15;
    
$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/20;
    } elseif (
$skill>=200) {
        
$skill_new=$skill/10;
    } else {
        
$skill_new=$skill/50;
    }
    
$iDelta=$iMinSize+(log($skill_new+1)-$iMinCount)*($iSizeRange/$iCountRange);
    
/**
     * Сохраняем рейтинг
     */
    
$oBlog->setRating($oBlog->getRating()+$iValue*$iDelta);
    return 
$iValue*$iDelta;
}

Расчет рейтинга и силы при голосовании за блог

VoteComment() method
public int VoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment, int $iValue)
$oUser ModuleUser_EntityUser Объект пользователя, который голосует
$oComment ModuleComment_EntityComment Объект комментария
$iValue int
{return} int
Source Code: /classes/modules/rating/Rating.class.php#41 (show)
public function VoteComment(ModuleUser_EntityUser $oUserModuleComment_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) ? $iSkillNew;
    
$oUserComment->setSkill($iSkillNew);
    
$this->User_Update($oUserComment);
    return 
$iValue;
}

Расчет рейтинга при голосовании за комментарий

VoteTopic() method
public int VoteTopic(ModuleUser_EntityUser $oUser, ModuleTopic_EntityTopic $oTopic, int $iValue)
$oUser ModuleUser_EntityUser Объект пользователя, который голосует
$oTopic ModuleTopic_EntityTopic Объект топика
$iValue int
{return} int
Source Code: /classes/modules/rating/Rating.class.php#85 (show)
public function VoteTopic(ModuleUser_EntityUser $oUserModuleTopic_EntityTopic $oTopic$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;
    }
    
$oTopic->setRating($oTopic->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);
    
/**
     * Сохраняем силу и рейтинг
     */
    
$oUserTopic=$this->User_GetUserById($oTopic->getUserId());
    
$iSkillNew=$oUserTopic->getSkill()+$iValue*$iDelta;
    
$iSkillNew=($iSkillNew<0) ? $iSkillNew;
    
$oUserTopic->setSkill($iSkillNew);
    
$oUserTopic->setRating($oUserTopic->getRating()+$iValue*$iDelta/2.73);
    
$this->User_Update($oUserTopic);
    return 
$iDeltaRating;
}

Расчет рейтинга и силы при гоосовании за топик

VoteUser() method
public float VoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget, int $iValue)
$oUser ModuleUser_EntityUser
$oUserTarget ModuleUser_EntityUser
$iValue int
{return} float
Source Code: /classes/modules/rating/Rating.class.php#174 (show)
public function VoteUser(ModuleUser_EntityUser $oUserModuleUser_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;
}

Расчет рейтинга и силы при голосовании за пользователя