public static function getHeadsOfDepartments() { $companyStructure = \CIntranetUtils::getStructure(); $users = array(); foreach ($companyStructure['DATA'] as $departmentData) { if (!empty($departmentData['UF_HEAD'])) { $users[] = (int) $departmentData['UF_HEAD']; } } return array_unique($users); }
public static function getDepartmentManagersId($arDepartments, $skipUserId = false, $bRecursive = false) { if (!is_array($arDepartments) || empty($arDepartments)) { return array(); } static $structure = array(); if (!$structure) { $structure = CIntranetUtils::getStructure(); } $arManagers = array(); foreach ($arDepartments as $sectionId) { $arSection = $structure['DATA'][$sectionId]; if ($arSection['UF_HEAD'] && $arSection['UF_HEAD'] != $skipUserId) { $arManagers[$arSection['UF_HEAD']] = array('ID' => $arSection['UF_HEAD'], '~ID' => $arSection['UF_HEAD']); } if ($arSection['UF_HEAD'] && $bRecursive && $arSection['IBLOCK_SECTION_ID']) { $ar = static::getDepartmentManagersId(array($arSection['IBLOCK_SECTION_ID']), $skipUserId, $bRecursive); $arManagers = $arManagers + $ar; } } return $arManagers; }
$companyAverageData = \Bitrix\Intranet\UStat\UStat::getDepartmentAverageGraphData(0, $fromDate, $toDate, $interval, $sectionField); foreach ($companyAverageData as $k => $companyData) { $data[$k]['company_activity'] = $companyData['AVG_ACTIVITY']; $sumAvgCompanyActivity += $companyData['AVG_ACTIVITY']; } // department average $usersDepartments = \Bitrix\Intranet\UStat\UStat::getUsersDepartments(); $userDepartments = $usersDepartments[$arParams['USER_ID']]; $userDepartmentId = current($userDepartments); $departmentAverageData = \Bitrix\Intranet\UStat\UStat::getDepartmentAverageGraphData($userDepartmentId, $fromDate, $toDate, $interval, $sectionField); foreach ($departmentAverageData as $k => $departmentData) { $data[$k]['department_activity'] = $departmentData['AVG_ACTIVITY']; $sumAvgDepartmentActivity += $departmentData['AVG_ACTIVITY']; } // get dept title $companyStructure = \CIntranetUtils::getStructure(); $departmentTitle = $companyStructure['DATA'][$userDepartmentId]['NAME']; // max data for sections $maxUsersActivity = \Bitrix\Intranet\UStat\UStat::getMaxUserActivity($fromDate, $toDate, $interval); if (!empty($maxUsersActivity)) { foreach ($maxUsersActivity as $section => $maxValue) { if ($section == 'TOTAL') { continue; } $sectionData[$section]['lead_activity'] = $maxValue; if ($maxValue > 0) { // if user has at least 90% of max, he is good enough for being absolutely green $sectionData[$section]['lead_activity_prc'] = min(round($sectionData[$section]['activity'] / ($sectionData[$section]['lead_activity'] * 0.9) * 100), 100); } } }
public function executeComponent() { if (!CModule::IncludeModule('intranet')) { ShowError(GetMessage('INTR_ISL_INTRANET_MODULE_NOT_INSTALLED')); return; } if (!CModule::IncludeModule('socialnetwork')) { return; } $showDepHeadAdditional = $this->arParams['SHOW_DEP_HEAD_ADDITIONAL'] == 'Y'; $bNav = $this->arParams['SHOW_NAV_TOP'] == 'Y' || $this->arParams['SHOW_NAV_BOTTOM'] == 'Y'; $isEnoughFiltered = $this->fillFilter(); list($cntStartCacheId, $cntStart) = $this->getCacheIdWithDepartment(); if ($this->arParams['SHOW_UNFILTERED_LIST'] == 'N' && !$this->bExcel && !$isEnoughFiltered) { $this->arResult['EMPTY_UNFILTERED_LIST'] = 'Y'; $this->includeComponentTemplate(); return; } $this->arParams['bCache'] = $cntStart == count($this->arFilter) && !$this->bExcel && $this->arParams['CACHE_TYPE'] == 'Y' && $this->arParams['CACHE_TIME'] > 0; $this->arResult['FILTER_VALUES'] = $this->arFilter; if (!$this->bExcel && $bNav) { CPageOption::SetOptionString("main", "nav_page_in_session", "N"); } $bFromCache = false; if ($this->arParams['bCache']) { if ($bFromCache = $this->initCache($cntStartCacheId)) { $vars = $this->obCache->getVars(); $this->arResult['USERS'] = $vars['USERS']; $this->arResult['DEPARTMENTS'] = $vars['DEPARTMENTS']; $this->arResult['DEPARTMENT_HEAD'] = $vars['DEPARTMENT_HEAD']; $this->arResult['USERS_NAV'] = $vars['USERS_NAV']; $strUserIDs = $vars['STR_USER_ID']; } else { $this->obCache->startDataCache(); $this->getCacheManager()->startTagCache($this->cacheDir); $this->getCacheManager()->registerTag('intranet_users'); } } if (!$bFromCache) { // get users list $obUser = new CUser(); $arSelect = array('ID', 'ACTIVE', 'CONFIRM_CODE', 'DEP_HEAD', 'GROUP_ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL', 'LID', 'DATE_REGISTER', 'PERSONAL_PROFESSION', 'PERSONAL_WWW', 'PERSONAL_ICQ', 'PERSONAL_GENDER', 'PERSONAL_BIRTHDATE', 'PERSONAL_PHOTO', 'PERSONAL_PHONE', 'PERSONAL_FAX', 'PERSONAL_MOBILE', 'PERSONAL_PAGER', 'PERSONAL_STREET', 'PERSONAL_MAILBOX', 'PERSONAL_CITY', 'PERSONAL_STATE', 'PERSONAL_ZIP', 'PERSONAL_COUNTRY', 'PERSONAL_NOTES', 'WORK_COMPANY', 'WORK_DEPARTMENT', 'WORK_POSITION', 'WORK_WWW', 'WORK_PHONE', 'WORK_FAX', 'WORK_PAGER', 'WORK_STREET', 'WORK_MAILBOX', 'WORK_CITY', 'WORK_STATE', 'WORK_ZIP', 'WORK_COUNTRY', 'WORK_PROFILE', 'WORK_LOGO', 'WORK_NOTES', 'PERSONAL_BIRTHDAY', 'LAST_ACTIVITY_DATE', 'LAST_LOGIN', 'IS_ONLINE'); $this->arResult['USERS'] = array(); $this->arResult['DEPARTMENTS'] = array(); $this->arResult['DEPARTMENT_HEAD'] = 0; // disable/enable appearing of department head on page if ($showDepHeadAdditional && !empty($this->arFilter['UF_DEPARTMENT']) && is_array($this->arFilter['UF_DEPARTMENT'])) { if ($this->arParams['bCache']) { $this->getCacheManager()->registerTag('intranet_department_' . $this->arFilter['UF_DEPARTMENT'][0]); } $managerId = CIntranetUtils::GetDepartmentManagerID($this->arFilter['UF_DEPARTMENT'][0]); $appendManager = CUser::GetByID($managerId)->Fetch(); if ($appendManager) { $this->arResult['DEPARTMENT_HEAD'] = $appendManager['ID']; $this->arFilter['!ID'] = $appendManager['ID']; $this->arResult['USERS'][$appendManager['ID']] = $appendManager; } } $bDisable = false; if (CModule::IncludeModule('extranet')) { if (CExtranet::IsExtranetSite() && !CExtranet::IsExtranetAdmin()) { $arIDs = array_merge(CExtranet::GetMyGroupsUsers(SITE_ID), CExtranet::GetPublicUsers()); if ($this->arParams['bCache']) { $this->getCacheManager()->registerTag('extranet_public'); $this->getCacheManager()->registerTag('extranet_user_' . $this->getUser()->getID()); } if (false !== ($key = array_search($this->getUser()->getID(), $arIDs))) { unset($arIDs[$key]); } if (count($arIDs) > 0) { $this->arFilter['ID'] = implode('|', array_unique($arIDs)); } else { $bDisable = true; } } } if ($bDisable) { $dbUsers = new CDBResult(); $dbUsers->initFromArray(array()); } else { $arListParams = array('SELECT' => array('UF_*'), 'ONLINE_INTERVAL' => static::LAST_ACTIVITY); if (!$this->bExcel && $this->arParams['USERS_PER_PAGE'] > 0) { $arListParams['NAV_PARAMS'] = array('nPageSize' => $this->arParams['USERS_PER_PAGE'], 'bShowAll' => false); } $dbUsers = $obUser->GetList($sortBy = 'last_name', $sortDir = 'asc', $this->arFilter, $arListParams); } $strUserIDs = ''; while ($arUser = $dbUsers->Fetch()) { $this->arResult['USERS'][$arUser['ID']] = $arUser; $strUserIDs .= ($strUserIDs === '' ? '' : '|') . $arUser['ID']; } $structure = CIntranetUtils::getStructure(); $this->arResult['DEPARTMENTS'] = $structure['DATA']; $this->setDepWhereUserIsHead(); $arAdmins = array(); /** @noinspection PhpUndefinedVariableInspection */ $rsUsers = CUser::GetList($o, $b, array("GROUPS_ID" => array(static::ADMIN_GROUP_ID)), array("SELECT" => array("ID"))); while ($ar = $rsUsers->Fetch()) { $arAdmins[$ar["ID"]] = $ar["ID"]; } $extranetUsers = array(); if (CModule::IncludeModule('extranet') && ($extranetGroupID = CExtranet::GetExtranetUserGroupID())) { $rsUsers = CUser::GetList($o, $b, array("GROUPS_ID" => array($extranetGroupID)), array("SELECT" => array("ID"))); while ($ar = $rsUsers->Fetch()) { $extranetUsers[$ar["ID"]] = $ar["ID"]; } } $displayPhoto = $this->displayPersonalPhoto(); foreach ($this->arResult['USERS'] as $key => &$arUser) { // cache optimization foreach ($arUser as $k => $value) { if (is_array($value) && count($value) <= 0 || !is_array($value) && strlen($value) <= 0 || !in_array($k, $arSelect) && substr($k, 0, 3) != 'UF_') { unset($arUser[$k]); } elseif ($k == "PERSONAL_COUNTRY" || $k == "WORK_COUNTRY") { $arUser[$k] = GetCountryByID($value); } } $arUser['IS_ONLINE'] = $arUser['IS_ONLINE'] == 'Y' ? true : false; if ($this->arParams['bCache']) { $this->getCacheManager()->registerTag('intranet_user_' . $arUser['ID']); } $arUser['DETAIL_URL'] = str_replace(array('#ID#', '#USER_ID#'), $arUser['ID'], $this->arParams['DETAIL_URL']); $arUser['ADMIN'] = isset($arAdmins[$arUser['ID']]); //is user admin/extranet $arUser['ACTIVITY_STATUS'] = 'active'; $arUser['EXTRANET'] = false; if (isset($extranetUsers[$arUser['ID']]) && empty($arUser['UF_DEPARTMENT'][0])) { $arUser["ACTIVITY_STATUS"] = 'extranet'; $arUser['EXTRANET'] = true; } if ($arUser["ACTIVE"] == "N") { $arUser["ACTIVITY_STATUS"] = 'fired'; } if (!empty($arUser["CONFIRM_CODE"])) { $arUser["ACTIVITY_STATUS"] = 'inactive'; } $arUser['SHOW_USER'] = $this->arParams["SHOW_USER"]; $arUser['IS_FEATURED'] = CIntranetUtils::IsUserHonoured($arUser['ID']); $arDep = array(); foreach ((array) $arUser['UF_DEPARTMENT'] as $sect) { $arDep[$sect] = $this->arResult['DEPARTMENTS'][$sect]['NAME']; } $arUser['UF_DEPARTMENT'] = $arDep; if (!$this->bExcel && $displayPhoto) { $this->resizePersonalPhoto($arUser); } if (count($arUser['UF_DEPARTMENT']) <= 0 && !$arUser['EXTRANET']) { unset($this->arResult['USERS'][$key]); } } unset($arUser, $key); $this->arResult["USERS_NAV"] = $bNav ? $dbUsers->GetPageNavStringEx($navComponentObject = null, $this->arParams["NAV_TITLE"]) : ''; if ($this->arParams['bCache']) { $this->getCacheManager()->endTagCache(); $this->obCache->endDataCache(array('USERS' => $this->arResult['USERS'], 'STR_USER_ID' => $strUserIDs, 'DEPARTMENTS' => $this->arResult['DEPARTMENTS'], 'DEPARTMENT_HEAD' => $this->arResult['DEPARTMENT_HEAD'], 'USERS_NAV' => $this->arResult['USERS_NAV'])); } } $this->initSonetUserPerms(array_keys($this->arResult['USERS'])); $this->workWithNonCacheAttr($bFromCache, $strUserIDs); if (!$this->bExcel) { $this->arResult['bAdmin'] = $this->getUser()->canDoOperation('edit_all_users') || $this->getUser()->canDoOperation('edit_subordinate_users'); $this->IncludeComponentTemplate(); } else { $this->getApplication()->restartBuffer(); // hack. any '.default' customized template should contain 'excel' page $this->setTemplateName('.default'); Header("Content-Type: application/force-download"); Header("Content-Type: application/octet-stream"); Header("Content-Type: application/download"); Header("Content-Disposition: attachment;filename=users.xls"); Header("Content-Transfer-Encoding: binary"); $this->IncludeComponentTemplate('excel'); die; } return; }