Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 function GetSubordinateEmployees($USER_ID = null, $bRecursive = false, $onlyActive = 'Y')
 {
     $arDepartments = CIntranetUtils::GetSubordinateDepartments($USER_ID, $bRecursive);
     return CIntranetUtils::GetDepartmentEmployees($arDepartments, false, true, $onlyActive);
 }
Пример #3
0
     $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();
Пример #4
0
 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];
 }
Пример #5
0
 /**
  * @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;
 }
Пример #6
0
}
$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);
Пример #7
0
 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);
 }
Пример #8
0
 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;
 }