/** * if ($arAllowedDepartments === null) => all departments headed by user will be used */ public static function getImmediateEmployees($userId, $arAllowedDepartments = null) { if (!CModule::IncludeModule('intranet')) { return false; } $arDepartmentHeads = array(); $arQueueDepartmentsEmployees = array(); // IDs of departments where we need employees // Departments where given user is head /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $arManagedDepartments = CIntranetUtils::GetSubordinateDepartments($userId); if (is_array($arAllowedDepartments)) { $arManagedDepartments = array_intersect($arManagedDepartments, $arAllowedDepartments); } if (is_array($arManagedDepartments)) { foreach ($arManagedDepartments as $departmentId) { $arQueueDepartmentsEmployees[] = $departmentId; $result = self::searchImmediateEmployeesInSubDepartments($departmentId); $arDepartmentHeads = array_merge($arDepartmentHeads, $result['arDepartmentHeads']); $arQueueDepartmentsEmployees = array_merge($arQueueDepartmentsEmployees, $result['arQueueDepartmentsEmployees']); } } $arEmployees = $arDepartmentHeads; if (!empty($arQueueDepartmentsEmployees)) { $arEmployees = array_merge($arEmployees, self::getDepartmentsUsersIds($arQueueDepartmentsEmployees)); } if (!empty($arEmployees)) { $arEmployees = array_unique(array_filter($arEmployees)); // Remove itself $curUserIndex = array_search($userId, $arEmployees); if ($curUserIndex !== false) { unset($arEmployees[$curUserIndex]); } } return $arEmployees; }
function GetSubordinateEmployees($USER_ID = null, $bRecursive = false, $onlyActive = 'Y') { $arDepartments = CIntranetUtils::GetSubordinateDepartments($USER_ID, $bRecursive); return CIntranetUtils::GetDepartmentEmployees($arDepartments, false, true, $onlyActive); }
$navResult->NavPageCount = $page_count; $navResult->NavPageNomer = $page; ob_start(); $APPLICATION->IncludeComponent('bitrix:system.pagenavigation', 'js', array('NAV_RESULT' => $navResult, 'HANDLER' => 'window.BXTMREPORT.Page')); $res['NAV'] = ob_get_contents(); ob_end_clean(); break; case 'admin_data_settings': $bReturnRes = true; $arNeededSettings = array('UF_TIMEMAN', 'UF_TM_MAX_START', 'UF_TM_MIN_FINISH', 'UF_TM_MIN_DURATION', 'UF_TM_REPORT_REQ', 'UF_TM_FREE', 'UF_TM_ALLOWED_DELTA'); if (isset($_REQUEST['ID'])) { $ID = $_REQUEST['ID']; $source = $_REQUEST['source']; if ($source == 'department') { if (!CTimeMan::IsAdmin()) { $arSubordination = CIntranetUtils::GetSubordinateDepartments($USER->GetID(), true); if (!in_array($ID, $arSubordination)) { echo "{error: 'access denied', type: 'fatal'}"; die; } } } else { $arAccessUsers = CTimeMan::GetAccess(); $bCanEditAll = in_array('*', $arAccessUsers['WRITE']); $bCanReadAll = in_array('*', $arAccessUsers['READ']); if (!$bCanReadAll && !in_array($ID, $arAccessUsers["READ"])) { echo "{error: 'access denied', type: 'fatal'}"; die; } } $arFields = array();
public static function GetGratMedalUsers($arParams = array()) { global $USER; $userId = intval($USER->GetID()); if (!isset($GLOBALS["SOCNET_LOG_DESTINATION"]["GetGratMedalUsers"][$userId])) { $arSubordinateDepts = array(); if (CModule::IncludeModule("intranet")) { $arSubordinateDepts = CIntranetUtils::GetSubordinateDepartments($userId, true); } $arFilter = array("ACTIVE" => "Y", "!UF_DEPARTMENT" => false); $arExtParams = array("FIELDS" => array("ID", "LAST_NAME", "NAME", "SECOND_NAME", "LOGIN", "PERSONAL_PHOTO", "WORK_POSITION", "PERSONAL_PROFESSION", "IS_ONLINE"), "SELECT" => array("UF_DEPARTMENT")); if (isset($arParams["id"])) { if (empty($arParams["id"])) { $arFilter["ID"] = $userId; } else { $arSelect = array(); foreach ($arParams["id"] as $value) { $arSelect[] = intval($value); } $arFilter["ID"] = implode("|", $arSelect); } } $arGratUsers = array(); $arMedalUsers = array(); $dbUsers = CUser::GetList($sort_by = array("last_name" => "asc", "IS_ONLINE" => "desc"), $dummy = '', $arFilter, $arExtParams); while ($arUser = $dbUsers->GetNext()) { $sName = trim(CUser::FormatName(empty($arParams["NAME_TEMPLATE"]) ? CSite::GetNameFormat(false) : $arParams["NAME_TEMPLATE"], $arUser)); if (empty($sName)) { $sName = $arUser["~LOGIN"]; } $arFileTmp = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array("width" => 32, "height" => 32), BX_RESIZE_IMAGE_EXACT, false); $arGratUsers['U' . $arUser["ID"]] = array("id" => "U" . $arUser["ID"], "entityId" => $arUser["ID"], "name" => $sName, "avatar" => empty($arFileTmp["src"]) ? '' : $arFileTmp["src"], "desc" => $arUser["WORK_POSITION"] ? $arUser["WORK_POSITION"] : ($arUser["PERSONAL_PROFESSION"] ? $arUser["PERSONAL_PROFESSION"] : " ")); if (count($arSubordinateDepts) > 0 && count(array_intersect($arSubordinateDepts, $arUser["UF_DEPARTMENT"])) > 0) { $arMedalUsers['U' . $arUser["ID"]] = $arGratUsers['U' . $arUser["ID"]]; } } $GLOBALS["SOCNET_LOG_DESTINATION"]["GetGratMedalUsers"][$userId] = array("GRAT" => $arGratUsers, "MEDAL" => $arMedalUsers); } return $GLOBALS["SOCNET_LOG_DESTINATION"]["GetGratMedalUsers"][$userId]; }
/** * @param int $headUserId * @param int $subUserId * @return bool */ public static function checkUserSubordination($headUserId, $subUserId) { if (CModule::IncludeModule('intranet')) { $headUserId = (int) $headUserId; $subUserId = (int) $subUserId; if ($headUserId && $subUserId) { $headDepts = (array) CIntranetUtils::GetSubordinateDepartments($headUserId, true); if (!empty($headDepts)) { $subDepts = (array) CIntranetUtils::GetUserDepartments($subUserId); return sizeof(array_intersect($headDepts, $subDepts)) > 0; } } } return false; }
} $arResult['SHOW_SECTION_MANAGE'] = $arParams['SHOW_SECTION_MANAGE']; $arResult['F_SEARCH'] = null; if (strlen($fTitle = tasksGetFilter("F_TITLE")) > 0) { $arResult['F_SEARCH'] = $fTitle; } elseif (intval($fID = tasksGetFilter("F_META::ID_OR_NAME")) > 0) { $arResult['F_SEARCH'] = $fID; } if ($arParams['SHOW_SECTIONS_BAR'] === 'Y' || $arParams['SHOW_FILTER_BAR'] === 'Y' || $arParams['SHOW_COUNTERS_BAR'] === 'Y') { // Show this section ONLY if given user is head of department // and logged in user is admin or given user or manager of given user if ($arParams['SHOW_SECTION_MANAGE'] === 'A') { $arResult['SHOW_SECTION_MANAGE'] = 'N'; if ($isAccessToCounters) { if (CModule::Includemodule('intranet')) { $arDepartments = CIntranetUtils::GetSubordinateDepartments($arParams['USER_ID'], $bRecursive = false); } if (!empty($arDepartments)) { $arResult['SHOW_SECTION_MANAGE'] = 'Y'; } } } if ($arResult['SHOW_SECTION_MANAGE'] === 'Y' && $arParams['GROUP_ID'] > 0) { $arResult['SHOW_SECTION_MANAGE'] = 'N'; } if ($arResult['SHOW_SECTION_MANAGE'] === 'Y') { $arResult['SECTION_MANAGE_COUNTER'] = 0; if ($arEmployees = CTaskIntranetTools::getImmediateEmployees($arParams['USER_ID'])) { foreach ($arEmployees as $employeeId) { $employeeId = (int) $employeeId; $arResult['SECTION_MANAGE_COUNTER'] += CTaskListCtrl::getUserRoleCounterForUser($employeeId, CTaskListState::VIEW_ROLE_RESPONSIBLE) + CTaskListCtrl::getUserRoleCounterForUser($employeeId, CTaskListState::VIEW_ROLE_ACCOMPLICE) + CTaskListCtrl::getUserRoleCounterForUser($employeeId, CTaskListState::VIEW_ROLE_ORIGINATOR) + CTaskListCtrl::getUserRoleCounterForUser($employeeId, CTaskListState::VIEW_ROLE_AUDITOR);
public static function GetDirectAccess($USER_ID = false) { global $USER; $USER_ID = intval($USER_ID); if ($USER_ID <= 0) { $USER_ID = $USER->GetID(); } $arSDeps = CIntranetUtils::GetSubordinateDepartments($USER_ID, true); $arStruct = CIntranetUtils::GetStructure(); $arEmployees = array(); foreach ($arSDeps as $dpt) { $arCurDpt = $arStruct['DATA'][$dpt]; $employee = $arCurDpt["UF_HEAD"] ? $arCurDpt["UF_HEAD"] : (count($arCurDpt["EMPLOYEES"]) > 0 ? $arCurDpt["EMPLOYEES"][0] : false); if ($employee && $employee == $USER_ID) { foreach ($arCurDpt["EMPLOYEES"] as $empUser) { $arEmployees[] = $empUser; } } elseif ($employee) { $headManager = CTimeMan::GetUserManagers($employee); //find head manager of employee if ($USER_ID == $headManager[0]) { if ($arCurDpt["UF_HEAD"]) { $arEmployees[] = $employee; } else { foreach ($arCurDpt["EMPLOYEES"] as $empUser) { $arEmployees[] = $empUser; } } } } } return array_unique($arEmployees); }
private function getInitDepartmentsIds() { global $USER; // Start from given department or from user-managed if (isset($_GET['DEP_ID'])) { $startFromDepartmentsDraft = array((int) $_GET['DEP_ID']); } else { // Departments where given user is head $startFromDepartmentsDraft = array_unique(array_filter(array_map('intval', CIntranetUtils::GetSubordinateDepartments($this->arParams['USER_ID'], $bRecursive = false)))); } if ($USER->isAdmin() || CTasksTools::IsPortalB24Admin()) { // access to any departments $startFromDepartments = $startFromDepartmentsDraft; } else { $arAllAccessibleDepartments = array_unique(array_filter(array_map('intval', CIntranetUtils::GetSubordinateDepartments($this->arResult['LOGGED_IN_USER'], $bRecursive = true)))); $startFromDepartments = array(); foreach ($startFromDepartmentsDraft as $departmentId) { if (in_array($departmentId, $arAllAccessibleDepartments, true)) { $startFromDepartments[] = $departmentId; } } } return $startFromDepartments; }