• Модуль: 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();
}