• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/mysql/ratings.php
  • Класс: CRatings
  • Вызов: CRatings::DeleteByUser
static function DeleteByUser($ID)
{
	global $CACHE_MANAGER;
	$connection = BitrixMainApplication::getConnection();
	$helper = $connection->getSqlHelper();

	$ID = intval($ID);

	$strSql = $helper->prepareCorrelatedUpdate("b_rating_voting_reaction", "RVR", [
			'TOTAL_VOTES' => 'RP.TOTAL_POSITIVE_VOTES',
		], "
			(SELECT
				ENTITY_TYPE_ID,
				ENTITY_ID,
				SUM(case when VALUE > 0 AND USER_ID <> $ID then '1' else '0' end) as TOTAL_POSITIVE_VOTES
			FROM b_rating_vote
			WHERE RATING_VOTING_ID IN (
				SELECT DISTINCT RV0.RATING_VOTING_ID FROM b_rating_vote RV0 WHERE RV0.USER_ID=$ID
			)
			GROUP BY RATING_VOTING_ID
			) as RP
		", "
			RVR.ENTITY_TYPE_ID = RP.ENTITY_TYPE_ID
			AND RVR.ENTITY_ID = RP.ENTITY_ID
		"
	);
	$connection->query($strSql);

	$strSql = $helper->prepareCorrelatedUpdate("b_rating_voting", "RV", [
			'TOTAL_VALUE' => 'RP.TOTAL_VALUE',
			'TOTAL_VOTES' => 'RP.TOTAL_VOTES',
			'TOTAL_POSITIVE_VOTES' => 'RP.TOTAL_POSITIVE_VOTES',
			'TOTAL_NEGATIVE_VOTES' => 'RP.TOTAL_NEGATIVE_VOTES',
		], "
			(SELECT
				RATING_VOTING_ID,
				SUM(case when USER_ID <> $ID then VALUE else '0' end) as TOTAL_VALUE,
				SUM(case when USER_ID <> $ID then '1' else '0' end) as TOTAL_VOTES,
				SUM(case when VALUE > 0 AND USER_ID <> $ID then '1' else '0' end) as TOTAL_POSITIVE_VOTES,
				SUM(case when VALUE < 0 AND USER_ID <> $ID then '1' else '0' end) as TOTAL_NEGATIVE_VOTES
			FROM b_rating_vote
			WHERE RATING_VOTING_ID IN (
				SELECT DISTINCT RV0.RATING_VOTING_ID FROM b_rating_vote RV0 WHERE RV0.USER_ID=$ID
			)
			GROUP BY RATING_VOTING_ID
			) as RP
		", "
			RV.ID = RP.RATING_VOTING_ID
		"
	);

	$connection->query($strSql);

	$connection->query("DELETE FROM b_rating_vote WHERE USER_ID = $ID");
	$connection->query("DELETE FROM b_rating_user WHERE ENTITY_ID = $ID");
	$CACHE_MANAGER->ClearByTag('RV_CACHE');

	return true;
}