• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/helper/filter.php
  • Класс: BitrixTasksHelperFilter
  • Вызов: Filter::getListFilterFieldData
private function getListFilterFieldData($row): array
{
	$filter = [];

	$rowId = $row['id'];
	$field = $this->getFilterFieldData($rowId, []);

	switch ($rowId)
	{
		case 'STATUS':
			if (!empty($field))
			{
				$filter['REAL_STATUS'] = $field;
			}
			break;

		case 'PROBLEM':
			switch ($field)
			{
				case CounterType::TYPE_WO_DEADLINE:
					$filter['DEADLINE'] = '';
					break;

				case CounterType::TYPE_EXPIRED:
					if ($this->getGroupId() > 0)
					{
						$filter['MEMBER'] = $this->getUserId();
					}
					$filter['<=DEADLINE'] = CounterDeadline::getExpiredTime();
					$filter['IS_MUTED'] = 'N';
					$filter['REAL_STATUS'] = [Status::PENDING, Status::IN_PROGRESS];
					break;

				case CounterType::TYPE_EXPIRED_CANDIDATES:
					$filter['>=DEADLINE'] = CounterDeadline::getExpiredTime();
					$filter['<=DEADLINE'] = CounterDeadline::getExpiredSoonTime();
					break;

				case CounterType::TYPE_WAIT_CTRL:
					$filter['REAL_STATUS'] = Status::SUPPOSEDLY_COMPLETED;
					$filter['!RESPONSIBLE_ID'] = $this->getUserId();
					$filter['=CREATED_BY'] = $this->getUserId();
					break;

				case CounterType::TYPE_NEW:
					$filter['VIEWED'] = 0;
					$filter['VIEWED_BY'] = $this->getUserId();
					break;

				case CounterType::TYPE_DEFERRED:
					$filter['REAL_STATUS'] = Status::DEFERRED;
					break;

				case CounterType::TYPE_NEW_COMMENTS:
					if ($this->getGroupId() > 0)
					{
						$filter['MEMBER'] = $this->getUserId();
					}
					$filter['WITH_NEW_COMMENTS'] = 'Y';
					$filter['IS_MUTED'] = 'N';
					break;

				case CounterType::TYPE_PROJECT_EXPIRED:
					$filter['PROJECT_EXPIRED'] = 'Y';
					break;

				case CounterType::TYPE_PROJECT_NEW_COMMENTS:
					$filter['PROJECT_NEW_COMMENTS'] = 'Y';
					break;

				default:
					break;
			}
			break;

		case 'ROLEID':
			switch ($field)
			{
				case 'view_role_responsible':
					$filter['=RESPONSIBLE_ID'] = $this->getUserId();
					break;

				case 'view_role_originator':
					$filter['=CREATED_BY'] = $this->getUserId();
					$filter['!REFERENCE:RESPONSIBLE_ID'] = 'CREATED_BY';
					break;

				case 'view_role_accomplice':
					$filter['=ACCOMPLICE'] = $this->getUserId();
					break;

				case 'view_role_auditor':
					$filter['=AUDITOR'] = $this->getUserId();
					break;

				default:
					if (!$this->getGroupId())
					{
						$filter['MEMBER'] = $this->getUserId();
					}
					break;
			}
			break;

		case 'PARAMS':
			if ($field)
			{
				foreach ($field as $item)
				{
					switch ($item)
					{
						case 'FAVORITE':
							$filter['FAVORITE'] = 'Y';
							break;

						case 'MARKED':
							$filter['!MARK'] = false;
							break;

						case 'OVERDUED':
							$filter['OVERDUED'] = 'Y';
							break;

						case 'IN_REPORT':
							$filter['ADD_IN_REPORT'] = 'Y';
							break;

						case 'SUBORDINATE':
							// Don't set SUBORDINATE_TASKS for admin, it will cause all tasks to be showed
							if (!User::isSuper())
							{
								$filter['SUBORDINATE_TASKS'] = 'Y';
							}
							break;

						case 'ANY_TASK':
							$filter['::REMOVE-MEMBER'] = true; // hack
							break;
					}
				}
			}
			break;

		default:
			if ($field)
			{
				$filter[$rowId] = $field;
			}
			break;
	}

	return $filter;
}