$arParams['PATH_TO_TASKS_FILTER'] = str_replace(array('#user_id#', '#USER_ID#'), $arParams['USER_ID'], $arParams['PATH_TO_USER_TASKS_FILTER']); } $paramsCheck = ($arParams['SHOW_TEMPLATE'] === 'Y' || $arParams['SHOW_TEMPLATE'] === 'N') && $arParams['RENDER_FORMAT'] === 'HTML' && is_int($arParams['TASKS_PER_PAGE']) && $arParams['TASKS_PER_PAGE'] > 0 && is_int($arParams['USER_ID']) && (is_int($arParams['GROUP_ID']) || $arParams['GROUP_ID'] === false) && is_string($arParams['NAME_TEMPLATE']) && strlen($arParams['NAME_TEMPLATE']) > 0 && is_string($arParams['DATE_TIME_FORMAT']) && strlen($arParams['DATE_TIME_FORMAT']) && is_string($arParams['PATH_TEMPLATE_TO_USER_PROFILE']) && is_string($arParams['PATH_TO_USER_TASKS']) && is_string($arParams['PATH_TO_USER_TASKS_TASK']) && is_string($arParams['PATH_TO_TASKS']) && is_string($arParams['PATH_TO_TASKS_EDIT']) && is_string($arParams['PATH_TO_TASKS_TASK']) && is_string($arParams['PATH_TO_TASKS_FILTER']) && in_array($arParams['OPTIMIZATION_MODE'], array('NONE', 'SELECT_ONLY_FILES_COUNT', 'SELECT_FULL_DATA_EXCEPT_FILES'), true); if (!$paramsCheck) { return false; } unset($paramsCheck); if (!CBXFeatures::IsFeatureEnabled('Tasks')) { if ($arParams['SHOW_TEMPLATE'] === 'Y' && $arParams['RENDER_FORMAT'] === 'HTML') { ShowError(GetMessage('TASKS_MODULE_NOT_AVAILABLE_IN_THIS_EDITION')); } return false; } require_once dirname(__FILE__) . '/functions.php'; // Init filter controller $oFilter = CTaskFilterCtrl::GetInstance($arParams['USER_ID']); $curFilterId = $oFilter->GetSelectedFilterPresetId(); // Switch filter, if need if (isset($_GET['SWITCH_TO_FILTER_PRESET_ID'])) { $newFilterId = (int) $_GET['SWITCH_TO_FILTER_PRESET_ID']; // prevent idle action if ($newFilterId !== $curFilterId) { try { $oFilter->SwitchFilterPreset($newFilterId); } catch (Exception $e) { $oFilter->SwitchFilterPreset(CTaskFilterCtrl::STD_PRESET_ACTIVE_MY_TASKS); } } } // Set filter params for CTasks::GetList(); $arResult['FILTER'] = $oFilter->GetSelectedFilterPresetCondition();
$bLoadCommentsData = true; } elseif ($_POST['subject'] === 'DETAIL_AND_COMMENTS') { $bLoadDetailData = true; $bLoadCommentsData = true; } elseif ($_POST['subject'] === 'DETAIL') { $bLoadDetailData = true; } elseif ($_POST['subject'] === 'COMMENTS') { $bLoadCommentsData = true; } $arParams = array('USER_ID' => $userId, 'TASK_ID' => $taskId, 'DATE_TIME_FORMAT' => $_POST['DATE_TIME_FORMAT'], 'SHOW_TEMPLATE' => 'N', 'PATH_TO_USER_TASKS_EDIT' => '...'); $arRes = $APPLICATION->IncludeComponent('bitrix:mobile.tasks.detail', '.default', $arParams, false); $filterCheckResult = 'not checked'; // We must check filter condition for this task? if (isset($_POST['CHECK_FILTER_ID'])) { $filterPresetId = (int) $_POST['CHECK_FILTER_ID']; $oFilter = CTaskFilterCtrl::GetInstance($userId); $arFilter = $oFilter->GetFilterPresetConditionById($filterPresetId); if ($arFilter !== false) { $arFilter['ID'] = (int) $taskId; $rsTasks = CTasks::GetList($arOrder = array(), $arFilter, $arSelect = array('ID')); if ($rsTasks->Fetch()) { $filterCheckResult = 'match filter'; } else { $filterCheckResult = 'dismatch filter'; } } } $arTaskData = array('task_id' => $task_id, 'filter_check_result' => $filterCheckResult); if ($bLoadBaseData) { $arTaskData['baseData'] = MBTasksCptDetailAjax::PrepareBaseData($task_id, $arRes); }
pulltext: '<?php echo GetMessageJS('MB_TASKS_TASKS_FILTER_PULLDOWN_PULL'); ?> ', downtext: '<?php echo GetMessageJS('MB_TASKS_TASKS_FILTER_PULLDOWN_DOWN'); ?> ', loadtext: '<?php echo GetMessageJS('MB_TASKS_TASKS_FILTER_PULLDOWN_LOADING'); ?> ', action: 'RELOAD', callback: function() { app.reload(); } }); </script> <?php $arResult = array(); $environmentCheck = isset($GLOBALS['APPLICATION']) && is_object($GLOBALS['APPLICATION']) && isset($GLOBALS['USER']) && is_object($GLOBALS['USER']) && isset($arParams) && is_array($arParams) && CModule::IncludeModule('tasks'); try { CTaskAssert::assert($environmentCheck); unset($environmentCheck); $arResult['USER_ID'] = (int) $_GET['USER_ID']; $oFilter = CTaskFilterCtrl::GetInstance($arResult['USER_ID']); $arResult['PRESETS_TREE'] = $oFilter->ListFilterPresets($bTreeMode = true); $arResult['CURRENT_PRESET_ID'] = $oFilter->GetSelectedFilterPresetId(); } catch (Exception $e) { return false; } $this->IncludeComponentTemplate(); return $arResult;
CTaskAssert::assertLaxIntegers($arAction['userId'], $arAction['groupId']); CTaskAssert::assert(unserialize($arAction['rawState']) !== false); $oListState = CTaskListState::getInstance($loggedInUserId); $oListState->setRawState($arAction['rawState']); // just update current value of an option $oListCtrl = CTaskListCtrl::getInstance($arAction['userId']); $oListCtrl->useState($oListState); // just saving reference to $oListState inside $oListCtrl if ($arAction['groupId'] > 0) { $bGroupMode = true; $oListCtrl->setFilterByGroupId((int) $arAction['groupId']); } else { $bGroupMode = false; $oListCtrl->setFilterByGroupId(null); } $oFilter = CTaskFilterCtrl::GetInstance($arAction['userId'], $bGroupMode); $oListCtrl->useAdvancedFilterObject($oFilter); // just saving reference to $oFilter inside $oListCtrl $arFilter = array_merge($oListCtrl->getFilter(), $oListCtrl->getCommonFilter()); $arSqlSearch = CTasks::GetFilter($arFilter, '', array('USER_ID' => $loggedInUserId)); $arSqlSearch[] = " T.ZOMBIE = 'N' "; if ($arAction['operation'] === 'tasks.list::getOriginators()') { $sql = "SELECT T.CREATED_BY AS USER_ID, COUNT(T.ID) AS TASKS_CNT \n\t\t\t\t\t\tFROM b_tasks T \n\t\t\t\t\t\tLEFT JOIN b_tasks_viewed TV ON TV.TASK_ID = T.ID AND TV.USER_ID = " . $loggedInUserId . "\n\t\t\t\t\t\tWHERE " . implode('AND', $arSqlSearch) . " GROUP BY T.CREATED_BY"; } else { if ($arAction['operation'] === 'tasks.list::getResponsibles()') { $sql = "SELECT T.RESPONSIBLE_ID AS USER_ID, COUNT(T.ID) AS TASKS_CNT \n\t\t\t\t\t\tFROM b_tasks T \n\t\t\t\t\t\tLEFT JOIN b_tasks_viewed TV ON TV.TASK_ID = T.ID AND TV.USER_ID = " . $loggedInUserId . "\n\t\t\t\t\t\tWHERE " . implode('AND', $arSqlSearch) . " GROUP BY T.RESPONSIBLE_ID"; } else { throw new Exception('unknown operation: ' . $arAction['operation']); } } global $DB;
public function getFilter() { $curSection = $this->oListState->getSection(); if ($curSection === CTaskListState::VIEW_SECTION_ADVANCED_FILTER) { // we are in "advanced-mode" (section "all" and user-defined filters) $bGroupMode = false; if ($this->filterByGroupId !== null) { $bGroupMode = true; } if ($this->oFilter) { $oFilter = $this->oFilter; } else { $oFilter = CTaskFilterCtrl::GetInstance($this->userId, $bGroupMode); } $arFilter = $oFilter->GetSelectedFilterPresetCondition(); } elseif ($curSection === CTaskListState::VIEW_SECTION_ROLES) { // we are in "role-mode" (four pre-defined filters at the top of the list) $arFilter = $this->__getFilterFor($this->oListState->getUserRole(), $this->oListState->getTaskCategory()); } $counterId = self::resolveCounterIdByRoleAndCategory($this->oListState->getUserRole(), $this->oListState->getTaskCategory()); $arFilter['CHECK_PERMISSIONS'] = 'Y'; // Mark filter. So when it will be used by CTasks::GetList(), // CTaskCountersProcessorHomeostasis will check if counter is right // or not. // This will work out only when resolved counter is not null and we are in "role-mode" $arFilter = CTaskCountersProcessorHomeostasis::injectMarker($arFilter, $curSection, $counterId, $this->userId); return $arFilter; }
// This will be interpreted by CTasks::GetList as nPageTop $arGetListParams = array('nPageTop' => $itemsCount); } } $arResult["ORIGINAL_FILTER"] = $arFilter; $arResult["FILTER"] = $arFilter; unset($arResult["FILTER"]["ONLY_ROOT_TASKS"]); try { $arSelect = array('ID', 'TITLE', 'PRIORITY', 'STATUS', 'REAL_STATUS', 'MULTITASK', 'DATE_START', 'GROUP_ID', 'DEADLINE', 'ALLOW_TIME_TRACKING', 'TIME_ESTIMATE', 'TIME_SPENT_IN_LOGS', 'COMMENTS_COUNT', 'FILES', 'MARK', 'ADD_IN_REPORT', 'SUBORDINATE', 'CREATED_DATE', 'VIEWED_DATE', 'FORUM_TOPIC_ID', 'END_DATE_PLAN', 'START_DATE_PLAN', 'CLOSED_DATE', 'PARENT_ID', 'ALLOW_CHANGE_DEADLINE', 'ALLOW_TIME_TRACKING', 'CHANGED_DATE', 'CREATED_BY', 'CREATED_BY_NAME', 'CREATED_BY_LAST_NAME', 'CREATED_BY_SECOND_NAME', 'CREATED_BY_LOGIN', 'CREATED_BY_WORK_POSITION', 'CREATED_BY_PHOTO', 'RESPONSIBLE_ID', 'RESPONSIBLE_NAME', 'RESPONSIBLE_LAST_NAME', 'RESPONSIBLE_SECOND_NAME', 'RESPONSIBLE_LOGIN', 'RESPONSIBLE_WORK_POSITION', 'RESPONSIBLE_PHOTO', 'UF_CRM_TASK'); try { list($arTaskItems, $rsItems) = CTaskItem::fetchList($loggedInUserId, $arOrder, $arFilter, $arGetListParams, $arSelect); } catch (TasksException $e) { // Got SQL error for extended filter? Rollback to default filter preset. if ($arParams['USE_FILTER_V2'] && $e->getCode() & TasksException::TE_SQL_ERROR) { $bGroupMode = $taskType === 'group'; $oFilter = CTaskFilterCtrl::GetInstance($arParams['USER_ID'], $bGroupMode); // Not default preset? Switch to it. if ($oFilter->GetSelectedFilterPresetId() != CTaskFilterCtrl::STD_PRESET_ALIAS_TO_DEFAULT) { $oFilter->SwitchFilterPreset(CTaskFilterCtrl::STD_PRESET_ALIAS_TO_DEFAULT); $arFilter = $oFilter->GetSelectedFilterPresetCondition(); $arResult['SELECTED_PRESET_NAME'] = $oFilter->GetSelectedFilterPresetName(); $arResult['SELECTED_PRESET_ID'] = $oFilter->GetSelectedFilterPresetId(); // Try again to load data list($arTaskItems, $rsItems) = CTaskItem::fetchList($loggedInUserId, $arOrder, $arFilter, $arGetListParams, $arSelect); } else { throw new TasksException(); } } else { throw new TasksException(); } }
CModule::IncludeModule('tasks'); __IncludeLang(dirname(__FILE__) . '/lang/' . LANGUAGE_ID . '/' . basename(__FILE__)); $loggedInUser = (int) $USER->getId(); CTaskAssert::assert(isset($_POST['action'])); $arReply = array(); $status = 'success'; switch ($_POST['action']) { case 'loadFilterConstructorJs': $GLOBALS['APPLICATION']->IncludeComponent('bitrix:tasks.filter.v2', 'constructor', array('USER_ID' => $loggedInUser, 'LOAD_TEMPLATE_INSTANTLY' => true)); exit; break; case 'getPresetDefinition': try { CTaskAssert::assert(isset($_POST['presetId']) && $_POST['presetId'] > 0); CTaskAssert::assertLaxIntegers($_POST['presetId']); $oFilter = CTaskFilterCtrl::GetInstance($loggedInUser); $arPresetDefinition = $oFilter->exportFilterDataForJs($_POST['presetId']); if ($arPresetDefinition !== false) { $arReply = array('presetData' => $arPresetDefinition); } else { $status = 'fail'; } } catch (Exception $e) { $status = 'fail'; } break; case 'createPreset': case 'replacePreset': try { CTaskAssert::assert(isset($_POST['presetData']) && is_array($_POST['presetData']) && isset($_POST['presetData']['Name']) && isset($_POST['presetData']['Condition'])); $_POST['presetData']['Parent'] = CTaskFilterCtrl::ROOT_PRESET;