• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasklistctrl.php
  • Класс: CTaskListCtrl
  • Вызов: CTaskListCtrl::getFilterFor
static function getFilterFor($userId, $userRoleId, $taskCategoryId)
{
	$subfilterIndex = 0;

	$arFilter = array(
		'::LOGIC' => 'AND'
	);

	switch ($userRoleId)
	{
		case CTaskListState::VIEW_ROLE_RESPONSIBLE:
			$arFilter['RESPONSIBLE_ID'] = $userId;
		break;

		case CTaskListState::VIEW_ROLE_ACCOMPLICE:
			$arFilter['ACCOMPLICE'] = $userId;
		break;

		case CTaskListState::VIEW_ROLE_AUDITOR:
			$arFilter['AUDITOR'] = $userId;
		break;

		case CTaskListState::VIEW_ROLE_ORIGINATOR:
			$arFilter['CREATED_BY']                = $userId;
			$arFilter['!REFERENCE:RESPONSIBLE_ID'] = 'CREATED_BY';
		break;
	}

	switch ($taskCategoryId)
	{
		case CTaskListState::VIEW_TASK_CATEGORY_COMPLETED:
			$arFilter['REAL_STATUS'] = [
				Status::COMPLETED,
				Status::SUPPOSEDLY_COMPLETED,
				Status::DECLINED,
			];
			break;

		case CTaskListState::VIEW_TASK_CATEGORY_WAIT_CTRL:
			$arFilter['REAL_STATUS'] = Status::SUPPOSEDLY_COMPLETED;
		break;

		case CTaskListState::VIEW_TASK_CATEGORY_NEW:
			$arFilter['VIEWED'] = 0;
			$arFilter['VIEWED_BY'] = $userId;
		break;

		case CTaskListState::VIEW_TASK_CATEGORY_ALL:
		break;

		case CTaskListState::VIEW_TASK_CATEGORY_IN_PROGRESS:
			$arFilter['REAL_STATUS'] = array(
				Status::NEW,
				Status::PENDING,
				Status::IN_PROGRESS,
			);
		break;

		case CTaskListState::VIEW_TASK_CATEGORY_EXPIRED:
			$arFilter['STATUS'] = MetaStatus::EXPIRED;
		break;

		case CTaskListState::VIEW_TASK_CATEGORY_EXPIRED_CANDIDATES:
			$arFilter['>=DEADLINE'] = CounterDeadline::getExpiredTime();
			$arFilter[' 'OR',
						'VIEWED'    => 0,
						' CounterDeadline::getExpiredSoonTime()
						// to be expired soon, it's includes already expired tasks too
					);
				break;

				case CTaskListState::VIEW_ROLE_AUDITOR:
				case CTaskListState::VIEW_ROLE_ORIGINATOR:
					// selects only expired tasks
					$arFilter['STATUS'] = MetaStatus::EXPIRED;
				break;
			}
		break;

		case CTaskListState::VIEW_TASK_CATEGORY_WO_DEADLINE:
			$arFilter['!REAL_STATUS'] = [
				Status::DECLINED,
				Status::SUPPOSEDLY_COMPLETED,
				Status::COMPLETED,
			];

			$arFilter['DEADLINE'] = '';

			// if($userRoleId == CTaskListState::VIEW_ROLE_RESPONSIBLE)
			// {
			// 	$arFilter['!CREATED_BY'] = $userId;
			// }
		break;

		default:
			CTaskAssert::logError('[0x9a0abea0] Unknown $taskCategoryId = ' . $taskCategoryId);
		break;
	}

	return ($arFilter);
}