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