public static function GetDepartmentManager($arDepartments, $skipUserId = false, $bRecursive = false) { if (!is_array($arDepartments) || empty($arDepartments)) { return array(); } if (null == self::$SECTIONS_SETTINGS_CACHE) { self::_GetDeparmentsTree(); } $arManagers = array(); $arManagerIDs = array(); foreach ($arDepartments as $section_id) { $arSection = self::$SECTIONS_SETTINGS_CACHE['DATA'][$section_id]; if ($arSection['UF_HEAD'] && $arSection['UF_HEAD'] != $skipUserId) { $arManagerIDs[] = $arSection['UF_HEAD']; } } if (count($arManagerIDs) > 0) { $dbRes = CUser::GetList($by = 'ID', $sort = 'ASC', array('ID' => implode('|', array_unique($arManagerIDs)))); while ($arUser = $dbRes->GetNext()) { $arManagers[$arUser['ID']] = $arUser; } } foreach ($arDepartments as $section_id) { $arSection = self::$SECTIONS_SETTINGS_CACHE['DATA'][$section_id]; $bFound = $arSection['UF_HEAD'] && $arSection['UF_HEAD'] != $skipUserId && array_key_exists($arSection['UF_HEAD'], $arManagers); if (!$bFound && $bRecursive && $arSection['IBLOCK_SECTION_ID']) { $ar = CIntranetUtils::GetDepartmentManager(array($arSection['IBLOCK_SECTION_ID']), $skipUserId, $bRecursive); $arManagers = $arManagers + $ar; } } return $arManagers; }
$arResult['DEPARTMENTS'] = array(); $dbRes = CIntranetUtils::GetSubordinateDepartmentsList($arResult["User"]["ID"]); while ($arRes = $dbRes->GetNext()) { $arRes['URL'] = str_replace('#ID#', $arRes['ID'], $arParams['PATH_TO_CONPANY_DEPARTMENT']); $arResult['DEPARTMENTS'][$arRes['ID']] = $arRes; $arResult['DEPARTMENTS'][$arRes['ID']]['EMPLOYEE_COUNT'] = 0; $rsUsers = CIntranetUtils::GetDepartmentEmployees(array($arRes['ID']), $bRecursive = true); while ($arUser = $rsUsers->Fetch()) { if ($arUser['ID'] != $arResult["User"]["ID"]) { //self $arResult['DEPARTMENTS'][$arRes['ID']]['EMPLOYEE_COUNT']++; } } } //managers $arResult['MANAGERS'] = CIntranetUtils::GetDepartmentManager($arResult["User"]["UF_DEPARTMENT"], $arResult["User"]["ID"], true); if ($arParams["CACHE_TIME"] > 0) { $obCache->EndDataCache(array('DEPARTMENTS' => $arResult['DEPARTMENTS'], 'MANAGERS' => $arResult['MANAGERS'])); if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->EndTagCache(); } } } elseif ($arParams["CACHE_TIME"] > 0) { $vars = $obCache->GetVars(); $arResult['DEPARTMENTS'] = $vars['DEPARTMENTS']; $arResult['MANAGERS'] = $vars['MANAGERS']; } if (CModule::IncludeModule("extranet") && CExtranet::IsExtranetSite() && !CExtranet::IsIntranetUser()) { $arResult['MANAGERS'] = array(); } }
public static function OnAfterUserUpdate(&$arFields) { if (isset($arFields["UF_DEPARTMENT"])) { $provider = new CIntranetAuthProvider(); //clear for user himself $provider->DeleteByUser($arFields["ID"]); //clear for users's managers $managers = CIntranetUtils::GetDepartmentManager($arFields["UF_DEPARTMENT"], $arFields["ID"], true); foreach ($managers as $manager) { $provider->DeleteByUser($manager["ID"]); } } }
public static function GetUserManagers($userId, $bReturnIds = false) { if (!isset(self::$userManagers[$userId])) { $rsUser = CUser::GetByID($userId); if ($arUser = $rsUser->Fetch()) { self::SetUserDepartment($userId, $arUser["UF_DEPARTMENT"]); self::$userManagers[$userId] = CIntranetUtils::GetDepartmentManager($arUser["UF_DEPARTMENT"], $arUser["ID"], true); } else { self::$userManagers[$userId] = false; } } if (!$bReturnIds) { return self::$userManagers[$userId]; } $res = array(); if (is_array(self::$userManagers[$userId])) { foreach (self::$userManagers[$userId] as $user) { $res[] = $user['ID']; } } return $res; }
$arResult['DEPARTMENTS'] = array(); $dbRes = CIntranetUtils::GetSubordinateDepartmentsList($arUser["ID"]); while ($arRes = $dbRes->GetNext()) { $arRes['URL'] = str_replace('#ID#', $arRes['ID'], $arParams['PATH_TO_COMPANY_DEPARTMENT']); $arResult['DEPARTMENTS'][$arRes['ID']] = $arRes; $arResult['DEPARTMENTS'][$arRes['ID']]['EMPLOYEE_COUNT'] = 0; $rsUsers1 = CIntranetUtils::GetDepartmentEmployees(array($arRes['ID']), $bRecursive = true); while ($arUser1 = $rsUsers1->Fetch()) { if ($arUser1['ID'] != $arUser["ID"]) { //self $arResult['DEPARTMENTS'][$arRes['ID']]['EMPLOYEE_COUNT']++; } } } //managers $arRes = CIntranetUtils::GetDepartmentManager($arUser["UF_DEPARTMENT"], $arUser["ID"], true); foreach ($arRes as $val) { $arResult["MANAGERS"][$val["ID"]]["ID"] = $val["ID"]; $arResult["MANAGERS"][$val["ID"]]["NAME"] = $val["LAST_NAME"] . " " . $val["NAME"]; $arResult["MANAGERS"][$val["ID"]]["URL"] = str_replace('#ID#', $val['ID'], $arParams['PATH_TO_USER']); $arResult["MANAGERS"][$val["ID"]]["PHOTO"] = CFile::ResizeImageGet($val['PERSONAL_PHOTO'], array("width" => 30, "height" => 30)); } if ($arParams["CACHE_TIME"] > 0) { $obCache->EndDataCache(array('DEPARTMENTS' => $arResult['DEPARTMENTS'], 'MANAGERS' => $arResult['MANAGERS'])); if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->EndTagCache(); } } } elseif ($arParams["CACHE_TIME"] > 0) { $vars = $obCache->GetVars(); $arResult['DEPARTMENTS'] = $vars['DEPARTMENTS'];