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