- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/classes/general/rating_rules.php
- Класс: CRatingRulesIntranet
- Вызов: CRatingRulesIntranet::subordinateCheck
static function subordinateCheck($arConfigs)
{
global $DB, $USER_FIELD_MANAGER;
$err_mess = "File: ".__FILE__."
Function: subordinateCheck
Line: ";
$ratingId = CRatings::GetAuthorityRating();
if ($ratingId == 0)
return true;
$maxVotes = $arConfigs['CONDITION_CONFIG']['SUBORDINATE']['MAX_VOTES'];
$type = $arConfigs['CONDITION_CONFIG']['SUBORDINATE']['TYPE'];
$iblockId = COption::GetOptionInt('intranet', 'iblock_structure', 0);
$fieldId = 0;
$arUserFields = $USER_FIELD_MANAGER->GetUserFields("USER");
if (isset($arUserFields["UF_DEPARTMENT"]["ID"]))
$fieldId = intval($arUserFields["UF_DEPARTMENT"]["ID"]);
if ($iblockId > 0 && $fieldId > 0)
{
// truncate table first
$DB->Query("TRUNCATE TABLE b_rating_subordinate", false, $err_mess.__LINE__);
$squery = "
INSERT INTO b_rating_subordinate (RATING_ID, ENTITY_ID, VOTES)
SELECT '".intval($ratingId)."' RATING_ID, U2U.USER_ID ENTITY_ID, (case when U2U.ID > 0 then SUM(".$DB->IsNull("RU.BONUS", "RUS.BONUS").") else RUS.BONUS end) VOTES
FROM
(
SELECT DISTINCT U.ID USER_ID, UP.VALUE_ID SUBORDINATE_ID, UD.ID
FROM b_user U
LEFT JOIN b_utm_user UD ON UD.VALUE_ID = U.ID AND UD.FIELD_ID = ".$fieldId."
LEFT JOIN b_uts_iblock_".$iblockId."_section BSSV on BSSV.UF_HEAD = U.ID
LEFT JOIN b_iblock_section BS ON BS.ID = BSSV.VALUE_ID
LEFT JOIN b_iblock_section BsubS on BsubS.IBLOCK_ID = BS.IBLOCK_ID AND BsubS.LEFT_MARGIN >= BS.LEFT_MARGIN AND BsubS.RIGHT_MARGIN <= BS.RIGHT_MARGIN
LEFT JOIN b_uts_iblock_".$iblockId."_section NACH_PODOTD on NACH_PODOTD.VALUE_ID = BsubS.ID
LEFT JOIN b_utm_user UP on (UP.VALUE_INT = BsubS.ID) OR (UP.VALUE_ID = NACH_PODOTD.UF_HEAD) AND UP.FIELD_ID = ".$fieldId."
LEFT JOIN b_user U2 on U2.ID = UP.VALUE_ID
WHERE
U.ACTIVE = 'Y'
AND (U.EXTERNAL_AUTH_ID NOT IN ('".implode("','", BitrixMainUserTable::getExternalUserTypes())."') OR U.EXTERNAL_AUTH_ID IS NULL)
AND (U2.ACTIVE = 'Y' OR U2.ID IS NULL)
AND UD.ID > 0
) U2U
LEFT JOIN b_rating_user RU on RU.RATING_ID = ".intval($ratingId)." and RU.ENTITY_ID = U2U.SUBORDINATE_ID
LEFT JOIN b_rating_user RUS on RUS.RATING_ID = ".intval($ratingId)." and RUS.ENTITY_ID = U2U.USER_ID
GROUP BY U2U.USER_ID, U2U.ID, RUS.BONUS";
$DB->Query($squery, false, $err_mess.__LINE__);
}
return true;
}