- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/mysql/ratings.php
- Класс: CRatings
- Вызов: CRatings::GetCommunityInfo
static function GetCommunityInfo($ratingId)
{
global $DB;
$connection = BitrixMainApplication::getConnection();
$helper = $connection->getSqlHelper();
$bAllGroups = false;
$arInfo = Array();
$arGroups = Array();
$communityLastVisit = COption::GetOptionString("main", "rating_community_last_visit", '90');
$res = CRatings::GetVoteGroup();
while ($arVoteGroup = $res->Fetch())
{
if ($arVoteGroup['GROUP_ID'] == 2)
{
$bAllGroups = true;
break;
}
$arGroups[] = $arVoteGroup['GROUP_ID'];
}
$strModulesSql = '';
if (IsModuleInstalled("forum"))
{
$strModulesSql .= "
SELECT USER_START_ID as ENTITY_ID
FROM b_forum_topic
WHERE START_DATE > " . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
GROUP BY USER_START_ID
UNION ALL
SELECT AUTHOR_ID as ENTITY_ID
FROM b_forum_message
WHERE POST_DATE > " . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
GROUP BY AUTHOR_ID
UNION ALL
";
}
if (IsModuleInstalled("blog"))
{
$strModulesSql .= "
SELECT AUTHOR_ID as ENTITY_ID
FROM b_blog_post
WHERE DATE_PUBLISH > " . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
GROUP BY AUTHOR_ID
UNION ALL
SELECT AUTHOR_ID as ENTITY_ID
FROM b_blog_comment
WHERE DATE_CREATE > " . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
GROUP BY AUTHOR_ID
UNION ALL";
}
if (IsModuleInstalled("intranet"))
{
$ratingId = COption::GetOptionString("main", "rating_authority_rating", 0);
$strModulesSql .= "
SELECT ENTITY_ID
FROM b_rating_subordinate
WHERE RATING_ID = $ratingId
UNION ALL";
}
if (!empty($strModulesSql))
{
$strModulesSql = "
(
".$strModulesSql."
SELECT USER_ID as ENTITY_ID
FROM b_rating_vote
WHERE CREATED > " . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
GROUP BY USER_ID
) MS,
";
}
// $DB->Query("TRUNCATE TABLE b_rating_prepare");
$DB->Query("DELETE FROM b_rating_prepare");
$strSql = '';
if ($bAllGroups || empty($arGroups))
{
$strSql .= "
INSERT INTO b_rating_prepare (ID)
SELECT DISTINCT U.ID
FROM ".$strModulesSql."
b_user U
WHERE ".(!empty($strModulesSql)? "U.ID = MS.ENTITY_ID AND": "")."
U.ACTIVE = 'Y'
AND (CASE WHEN U.EXTERNAL_AUTH_ID IN ('".join("', '", BitrixMainUserTable::getExternalUserTypes())."') THEN 'Y' ELSE 'N' END) = 'N'
AND U.LAST_LOGIN >" . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
";
}
else
{
$strSql .= "
INSERT INTO b_rating_prepare (ID)
SELECT DISTINCT U.ID
FROM ".$strModulesSql."
b_user U
WHERE ".(!empty($strModulesSql)? "U.ID = MS.ENTITY_ID AND": "")."
U.ACTIVE = 'Y'
AND (CASE WHEN U.EXTERNAL_AUTH_ID IN ('".join("', '", BitrixMainUserTable::getExternalUserTypes())."') THEN 'Y' ELSE 'N' END) = 'N'
AND U.LAST_LOGIN > " . $helper->addDaysToDateTime(-intval($communityLastVisit)) . "
";
}
$DB->Query($strSql);
$strSql = 'SELECT COUNT(*) as COMMUNITY_SIZE, SUM(CURRENT_VALUE) COMMUNITY_AUTHORITY
FROM b_rating_results RC LEFT JOIN b_rating_prepare TT ON RC.ENTITY_ID = TT.ID
WHERE RATING_ID = '.intval($ratingId).' AND TT.ID IS NOT NULL';
$res = $DB->Query($strSql);
return $res->Fetch();
}