- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/classes/mysql/ratings_components.php
- Класс: CRatingsComponentsForum
- Вызов: CRatingsComponentsForum::CalcUserRatingForumActivity
static function CalcUserRatingForumActivity($arConfigs)
{
global $DB;
$err_mess = (CRatings::err_mess())."
Function: CalcUserRatingForumActivity
Line: ";
CRatings::AddComponentResults($arConfigs);
$strSql = "DELETE FROM b_rating_component_results WHERE RATING_ID = '".intval($arConfigs['RATING_ID'])."' AND COMPLEX_NAME = '".$DB->ForSql($arConfigs['COMPLEX_NAME'])."'";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
$sqlAllTopic = '';
if (isset($arConfigs['CONFIG']['ALL_TOPIC_COEF']) && $arConfigs['CONFIG']['ALL_TOPIC_COEF'] != 0) {
$sqlAllTopic = "
SELECT
USER_START_ID as ENTITY_ID,
COUNT(*)*".floatval($arConfigs['CONFIG']['ALL_TOPIC_COEF'])." as CURRENT_VALUE
FROM b_forum_topic
WHERE START_DATE < DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY USER_START_ID
UNION ALL ";
}
$sqlAllMessage = '';
if (isset($arConfigs['CONFIG']['ALL_POST_COEF']) && $arConfigs['CONFIG']['ALL_POST_COEF'] != 0) {
$sqlAllMessage = "
SELECT
AUTHOR_ID as ENTITY_ID,
COUNT(*)*".floatval($arConfigs['CONFIG']['ALL_POST_COEF'])." as CURRENT_VALUE
FROM b_forum_message
WHERE POST_DATE < DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY AUTHOR_ID
UNION ALL ";
}
$strSql = "INSERT INTO b_rating_component_results (RATING_ID, MODULE_ID, RATING_TYPE, NAME, COMPLEX_NAME, ENTITY_ID, ENTITY_TYPE_ID, CURRENT_VALUE)
SELECT
'".intval($arConfigs['RATING_ID'])."' as RATING_ID,
'".$DB->ForSql($arConfigs['MODULE_ID'])."' as MODULE_ID,
'".$DB->ForSql($arConfigs['RATING_TYPE'])."' as RATING_TYPE,
'".$DB->ForSql($arConfigs['NAME'])."' as NAME,
'".$DB->ForSql($arConfigs['COMPLEX_NAME'])."' as COMPLEX_NAME,
ENTITY_ID,
'".$DB->ForSql($arConfigs['ENTITY_ID'])."' ENTITY_TYPE_ID,
SUM(CURRENT_VALUE) CURRENT_VALUE
FROM (
".$sqlAllMessage."
SELECT
AUTHOR_ID as ENTITY_ID,
SUM(IF(TO_DAYS(POST_DATE) > TO_DAYS(NOW())-1, 1, 0))*".floatval($arConfigs['CONFIG']['TODAY_POST_COEF'])." +
SUM(IF(TO_DAYS(POST_DATE) > TO_DAYS(NOW())-7, 1, 0))*".floatval($arConfigs['CONFIG']['WEEK_POST_COEF'])."+
COUNT(*)*".floatval($arConfigs['CONFIG']['MONTH_POST_COEF'])." as CURRENT_VALUE
FROM b_forum_message
WHERE POST_DATE > DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY AUTHOR_ID
UNION ALL
".$sqlAllTopic."
SELECT
USER_START_ID as ENTITY_ID,
SUM(IF(TO_DAYS(START_DATE) > TO_DAYS(NOW())-1, 1, 0))*".floatval($arConfigs['CONFIG']['TODAY_TOPIC_COEF'])." +
SUM(IF(TO_DAYS(START_DATE) > TO_DAYS(NOW())-7, 1, 0))*".floatval($arConfigs['CONFIG']['WEEK_TOPIC_COEF'])." +
COUNT(*)*".floatval($arConfigs['CONFIG']['MONTH_TOPIC_COEF'])." as CURRENT_VALUE
FROM b_forum_topic
WHERE START_DATE > DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY USER_START_ID
) q
WHERE ENTITY_ID > 0
GROUP BY ENTITY_ID";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return true;
}