public static function ensureAgentExists() { if (CTaskCountersProcessorInstaller::checkProcessIsNotActive()) { $agent = CAgent::GetList(array(), array('MODULE_ID' => 'tasks', 'NAME' => 'CTaskCountersProcessor::agent();'))->fetch(); if (!is_array($agent) || !isset($agent['ID'])) { CAgent::AddAgent('CTaskCountersProcessor::agent();', 'tasks', 'N', 900); // every 15 minutes } } }
public static function onExpirityRecountAgent() { $optionCountersBrokeDetected = (int) COption::GetOptionString('tasks', '~counters_broke_detected', -1, $siteId = ''); $lastRecalculationTimestamp = (int) COption::GetOptionString('tasks', '~counters_last_recalculation', -1, $siteId = ''); if ($optionCountersBrokeDetected === 1) { $isCountersBrokeDetected = true; } else { $isCountersBrokeDetected = false; } $secondsSinceLastRecalculation = time() - $lastRecalculationTimestamp; if ($isCountersBrokeDetected && $secondsSinceLastRecalculation > 1 * 3600) { CTaskCountersProcessorInstaller::runSetup(); } }
break; case 'VIEW_ROLE_ORIGINATOR': $arResult['VIEW_COUNTERS']['ROLES'][$selectedRoleName]['VIEW_TASK_CATEGORY_WO_DEADLINE'] = array('COUNTER' => $oListCtrl->getCounter($selectedRoleId, CTaskListState::VIEW_TASK_CATEGORY_WO_DEADLINE)); $arResult['VIEW_COUNTERS']['ROLES'][$selectedRoleName]['VIEW_TASK_CATEGORY_WAIT_CTRL'] = array('COUNTER' => $oListCtrl->getCounter($selectedRoleId, CTaskListState::VIEW_TASK_CATEGORY_WAIT_CTRL)); $arResult['VIEW_COUNTERS']['ROLES'][$selectedRoleName]['VIEW_TASK_CATEGORY_EXPIRED'] = array('COUNTER' => $oListCtrl->getCounter($selectedRoleId, CTaskListState::VIEW_TASK_CATEGORY_EXPIRED)); break; } #################################################### ### counter break detection #################################################### /* The purpose of this section is to handle a situation when we cannot perform on-the-fly re-checking of some additional counters appeared on the page. Normally, we check and recount just one counter per page (request) using CTaskCountersProcessorHomeostasis::onTaskGetList when calling CTask::GetList. But in some cases we have more then one counter on the page, so we unable to check them since CTaskListCtrl::resolveCounterIdByRoleAndCategory wont return ther ids. */ if (CTaskCountersProcessorInstaller::isInstallComplete() && isset($arResult['VIEW_STATE'])) { $selectedRoleCodename = $arResult['VIEW_STATE']['ROLE_SELECTED']['CODENAME']; if (CTaskListState::VIEW_SECTION_ROLES === $arResult['VIEW_STATE']['SECTION_SELECTED']['ID']) { $role = $arResult['VIEW_COUNTERS']['ROLES'][$selectedRoleCodename]; $countersSumValues = (isset($role['VIEW_TASK_CATEGORY_NEW']['COUNTER']) ? intval($role['VIEW_TASK_CATEGORY_NEW']['COUNTER']) : 0) + (isset($role['VIEW_TASK_CATEGORY_EXPIRED']['COUNTER']) ? intval($role['VIEW_TASK_CATEGORY_EXPIRED']['COUNTER']) : 0) + (isset($role['VIEW_TASK_CATEGORY_EXPIRED_CANDIDATES']['COUNTER']) ? intval($role['VIEW_TASK_CATEGORY_EXPIRED_CANDIDATES']['COUNTER']) : 0) + (isset($role['VIEW_TASK_CATEGORY_WAIT_CTRL']['COUNTER']) ? intval($role['VIEW_TASK_CATEGORY_WAIT_CTRL']['COUNTER']) : 0) + (isset($role['VIEW_TASK_CATEGORY_WO_DEADLINE']['COUNTER']) ? intval($role['VIEW_TASK_CATEGORY_WO_DEADLINE']['COUNTER']) : 0); if ($role['VIEW_TASK_CATEGORY_EXPIRED']['COUNTER'] < 0 || $role['VIEW_TASK_CATEGORY_EXPIRED_CANDIDATES']['COUNTER'] < 0 || $countersSumValues !== $role['TOTAL']['COUNTER']) { CTaskCountersProcessorHomeostasis::pendCountersRecalculation(); } } } #################################################### ### counter break detection END #################################################### // Set plural forms $arResult['VIEW_COUNTERS']['TOTAL']['PLURAL'] = CTasksTools::getPluralForm($arResult['VIEW_COUNTERS']['TOTAL']['COUNTER']); foreach ($arResult['VIEW_COUNTERS']['ROLES'] as $roleId => $arData) {