foreach ($viewState['ROLES'] as $roleCodename => $arRoleData) { if (!isset($arCountsAll[$arRoleData['ID']])) { if ($arRoleData['ID'] == CTaskListState::VIEW_ROLE_AUDITOR || $arRoleData['ID'] == CTaskListState::VIEW_ROLE_ACCOMPLICE) { $rs = CTasks::GetCount(CTaskListCtrl::getFilterFor($arParams['USER_ID'], $arRoleData['ID'], CTaskListState::VIEW_TASK_CATEGORY_IN_PROGRESS), array('bSkipUserFields' => true, 'bSkipExtraTables' => true, 'bSkipJoinTblViewed' => true, 'bNeedJoinMembersTable' => true)); if ($arTmp = $rs->fetch()) { $arCountsAll[$arRoleData['ID']] = (int) $arTmp['CNT']; } else { $arCountsAll[$arRoleData['ID']] = 0; } } else { $arCountsAll[$arRoleData['ID']] = CTasks::GetCountInt(CTaskListCtrl::getFilterFor($arParams['USER_ID'], $arRoleData['ID'], CTaskListState::VIEW_TASK_CATEGORY_IN_PROGRESS), array('bSkipUserFields' => true, 'bSkipExtraTables' => true, 'bSkipJoinTblViewed' => true)); } $bNeedCacheData = true; } $arRoleData['CNT_ALL'] = $arCountsAll[$arRoleData['ID']]; $arRoleData['CNT_NOTIFY'] = CTaskListCtrl::getUserRoleCounterForUser($arParams['USER_ID'], $arRoleData['ID']); $arRoleData['HREF'] = $arParams['PATH_TO_TASKS'] . '?F_CANCEL=Y&F_STATE=sR' . base_convert($arRoleData['ID'], 10, 32); $arResult["ROLES_LIST"][$roleCodename] = $arRoleData; } if ($bNeedCacheData && defined('BX_COMP_MANAGED_CACHE') && $obCache->StartDataCache()) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($cacheDir); $CACHE_MANAGER->RegisterTag("tasks_user_" . $arResult['LOGGED_IN_USER']); $CACHE_MANAGER->EndTagCache(); $obCache->EndDataCache($arCountsAll); } } else { $arResult['USE_ROLE_FILTER'] = 'N'; $arResult["ADVANCED_STATUSES"] = array(array("TITLE" => GetMessage("TASKS_FILTER_ALL"), "FILTER" => array()), array("TITLE" => GetMessage("TASKS_FILTER_ACTIVE"), "FILTER" => array("STATUS" => array(CTasks::METASTATE_VIRGIN_NEW, CTasks::METASTATE_EXPIRED, CTasks::STATE_NEW, CTasks::STATE_PENDING, CTasks::STATE_IN_PROGRESS))), array("TITLE" => GetMessage("TASKS_FILTER_NEW"), "FILTER" => array("STATUS" => array(CTasks::METASTATE_VIRGIN_NEW, CTasks::STATE_NEW))), array("TITLE" => GetMessage("TASKS_FILTER_IN_CONTROL"), "FILTER" => array("STATUS" => array(CTasks::STATE_SUPPOSEDLY_COMPLETED, CTasks::STATE_DECLINED))), array("TITLE" => GetMessage("TASKS_FILTER_IN_PROGRESS"), "FILTER" => array("STATUS" => CTasks::STATE_IN_PROGRESS)), array("TITLE" => GetMessage("TASKS_FILTER_ACCEPTED"), "FILTER" => array("STATUS" => CTasks::STATE_PENDING)), array("TITLE" => GetMessage("TASKS_FILTER_OVERDUE"), "FILTER" => array("STATUS" => CTasks::METASTATE_EXPIRED)), array("TITLE" => GetMessage("TASKS_FILTER_DELAYED"), "FILTER" => array("STATUS" => CTasks::STATE_DEFERRED)), array("TITLE" => GetMessage("TASKS_FILTER_DECLINED"), "FILTER" => array("STATUS" => CTasks::STATE_DECLINED)), array("TITLE" => GetMessage("TASKS_FILTER_CLOSED"), "FILTER" => array("STATUS" => array(CTasks::STATE_SUPPOSEDLY_COMPLETED, CTasks::STATE_COMPLETED)))); $bGroupMode = $taskType === 'group'; $oFilter = CTaskFilterCtrl::GetInstance($arResult['LOGGED_IN_USER'], $bGroupMode);
$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); } } } // get states description $oListState = CTaskListState::getInstance($loggedInUserId); $arResult['VIEW_STATE'] = $oListState->getState(); $arResult['VIEW_STATE_RAW'] = $oListState->getRawState(); $oListCtrl = CTaskListCtrl::getInstance($arParams['USER_ID']); $oListCtrl->useState($oListState); if ($arParams["GROUP_ID"] > 0) { $oListCtrl->setFilterByGroupId((int) $arParams["GROUP_ID"]); } else { $oListCtrl->setFilterByGroupId(null); } $selectedRoleId = $arResult['VIEW_STATE']['ROLE_SELECTED']['ID'];
private static function getCounts($arUsersIds) { $arUsersIds = array_unique(array_filter($arUsersIds)); $arCounters = array(); foreach ($arUsersIds as $userId) { $arCounters[$userId] = array(); $responsiblesNoticedTasks = CTaskListCtrl::getUserRoleCounterForUser($userId, CTaskListState::VIEW_ROLE_RESPONSIBLE); $accomplicesNoticedTasks = CTaskListCtrl::getUserRoleCounterForUser($userId, CTaskListState::VIEW_ROLE_ACCOMPLICE); $originatorsNoticedTasks = CTaskListCtrl::getUserRoleCounterForUser($userId, CTaskListState::VIEW_ROLE_ORIGINATOR); $auditorsNoticedTasks = CTaskListCtrl::getUserRoleCounterForUser($userId, CTaskListState::VIEW_ROLE_AUDITOR); if ($responsiblesNoticedTasks < 0) { $responsiblesNoticedTasks = 0; } if ($accomplicesNoticedTasks < 0) { $accomplicesNoticedTasks = 0; } if ($originatorsNoticedTasks < 0) { $originatorsNoticedTasks = 0; } if ($auditorsNoticedTasks < 0) { $auditorsNoticedTasks = 0; } $arCounters[$userId]['RESPONSIBLES_TOTAL_TASKS'] = 0; $arCounters[$userId]['RESPONSIBLES_NOTICED_TASKS'] = $responsiblesNoticedTasks; $arCounters[$userId]['ACCOMPLICES_TOTAL_TASKS'] = 0; $arCounters[$userId]['ACCOMPLICES_NOTICED_TASKS'] = $accomplicesNoticedTasks; $arCounters[$userId]['ORIGINATORS_TOTAL_TASKS'] = 0; $arCounters[$userId]['ORIGINATORS_NOTICED_TASKS'] = $originatorsNoticedTasks; $arCounters[$userId]['AUDITORS_TOTAL_TASKS'] = 0; $arCounters[$userId]['AUDITORS_NOTICED_TASKS'] = $auditorsNoticedTasks; } // Get RESPONSIBLES_TOTAL_TASKS counters $arFilterMy = CTaskListCtrl::getFilterFor($arUsersIds, CTaskListState::VIEW_ROLE_RESPONSIBLE, CTaskListState::VIEW_TASK_CATEGORY_IN_PROGRESS); $rs = CTasks::GetCount($arFilterMy, array('bSkipUserFields' => true, 'bSkipExtraTables' => true, 'bSkipJoinTblViewed' => true), array('RESPONSIBLE_ID')); while ($ar = $rs->fetch()) { $userId = (int) $ar['RESPONSIBLE_ID']; if ($userId) { $arCounters[$userId]['RESPONSIBLES_TOTAL_TASKS'] = (int) $ar['CNT']; } } // Get ORIGINATORS_TOTAL_TASKS counters $arFilterOriginator = CTaskListCtrl::getFilterFor($arUsersIds, CTaskListState::VIEW_ROLE_ORIGINATOR, CTaskListState::VIEW_TASK_CATEGORY_IN_PROGRESS); $rs = CTasks::GetCount($arFilterOriginator, array('bSkipUserFields' => true, 'bSkipExtraTables' => true, 'bSkipJoinTblViewed' => true), array('CREATED_BY')); while ($ar = $rs->fetch()) { $userId = (int) $ar['CREATED_BY']; if ($userId) { $arCounters[$userId]['ORIGINATORS_TOTAL_TASKS'] = (int) $ar['CNT']; } } // Get ACCOMPLICES_TOTAL_TASKS counters $arFilterAccomplice = CTaskListCtrl::getFilterFor($arUsersIds, CTaskListState::VIEW_ROLE_ACCOMPLICE, CTaskListState::VIEW_TASK_CATEGORY_IN_PROGRESS); $rs = CTasks::GetCount($arFilterAccomplice, array('bSkipUserFields' => true, 'bSkipExtraTables' => true, 'bSkipJoinTblViewed' => true), array('ACCOMPLICE')); while ($ar = $rs->fetch()) { $userId = (int) $ar['ACCOMPLICE']; if ($userId) { $arCounters[$userId]['ACCOMPLICES_TOTAL_TASKS'] = (int) $ar['CNT']; } } // Get AUDITORS_TOTAL_TASKS counters $arFilterAuditor = CTaskListCtrl::getFilterFor($arUsersIds, CTaskListState::VIEW_ROLE_AUDITOR, CTaskListState::VIEW_TASK_CATEGORY_IN_PROGRESS); $rs = CTasks::GetCount($arFilterAuditor, array('bSkipUserFields' => true, 'bSkipExtraTables' => true, 'bSkipJoinTblViewed' => true), array('AUDITOR')); while ($ar = $rs->fetch()) { $userId = (int) $ar['AUDITOR']; if ($userId) { $arCounters[$userId]['AUDITORS_TOTAL_TASKS'] = (int) $ar['CNT']; } } return $arCounters; }