• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/provider/taskquerybuilder.php
  • Класс: BitrixTasksProviderTaskQueryBuilder
  • Вызов: TaskQueryBuilder::addOrder
private function addOrder(string $column, string $order): void
{
	$column = strtoupper($column);

	switch ($column)
	{
		case 'ID':
			$this->query->addOrder('ID', $order);
			break;

		case 'TITLE':
			$this->query->addOrder('TITLE', $order);
			$this->taskQuery->addSelect('TITLE');
			break;

		case 'DATE_START':
			$this->query->addOrder('DATE_START', $order);
			$this->taskQuery->addSelect('DATE_START');
			break;

		case 'CREATED_DATE':
			$this->query->addOrder('CREATED_DATE', $order);
			$this->taskQuery->addSelect('CREATED_DATE');
			break;

		case 'CHANGED_DATE':
			$this->query->addOrder('CHANGED_DATE', $order);
			$this->taskQuery->addSelect('CHANGED_DATE');
			break;

		case 'CLOSED_DATE':
			$this->query->addOrder('CLOSED_DATE', $order);
			$this->taskQuery->addSelect('CLOSED_DATE');
			break;

		case 'ACTIVITY_DATE':
			$this->query->addOrder('ACTIVITY_DATE', $order);
			$this->taskQuery->addSelect('ACTIVITY_DATE');
			break;

		case 'START_DATE_PLAN':
			$this->query->addOrder('START_DATE_PLAN', $order);
			$this->taskQuery->addSelect('START_DATE_PLAN');
			break;

		case 'END_DATE_PLAN':
			$this->query->addOrder('END_DATE_PLAN', $order);
			$this->taskQuery->addSelect('END_DATE_PLAN');
			break;

		case 'DEADLINE':
			if ($order === TaskQuery::SORT_ASC)
			{
				$this->query->addOrder('LENGTH_DEADLINE', TaskQuery::SORT_DESC);
				$this->query->addOrder('DEADLINE', TaskQuery::SORT_ASC);
				$this->taskQuery->addSelect('LENGTH_DEADLINE');
			}
			else
			{
				$this->query->addOrder('DEADLINE', TaskQuery::SORT_DESC);
			}

			$this->taskQuery->addSelect('DEADLINE');
			break;

		case 'STATUS':
			break;

		case 'REAL_STATUS':
			$this->query->addOrder('STATUS', $order);
			$this->taskQuery->addSelect('STATUS');
			break;

		case 'STATUS_COMPLETE':
			$this->query->addOrder('STATUS_COMPLETE', $order);
			$this->taskQuery->addSelect('STATUS_COMPLETE');
			break;

		case 'PRIORITY':
			$this->query->addOrder('PRIORITY', $order);
			$this->taskQuery->addSelect('PRIORITY');
			break;

		case 'MARK':
			$this->query->addOrder('MARK', $order);
			$this->taskQuery->addSelect('MARK');
			break;

		case 'ORIGINATOR_NAME':
		case 'CREATED_BY':
		case 'CREATED_BY_LAST_NAME':
			$this->query->addOrder(self::ALIAS_USER_CREATE.'.LAST_NAME', $order);
			$this->taskQuery->addSelect('CREATED_BY_LAST_NAME');
			break;

		case 'RESPONSIBLE_NAME':
		case 'RESPONSIBLE_ID':
		case 'RESPONSIBLE_LAST_NAME':
			$this->query->addOrder(self::ALIAS_USER_RESPONSIBLE.'.LAST_NAME', $order);
			$this->taskQuery->addSelect('RESPONSIBLE_LAST_NAME');
			break;

		case 'GROUP_ID':
		case 'COMPUTE_GROUP_ID':
			$this->query->addOrder('COMPUTE_GROUP_ID', $order);
			$this->taskQuery->addSelect('COMPUTE_GROUP_ID');
			break;

		case 'TIME_ESTIMATE':
			$this->query->addOrder('TIME_ESTIMATE', $order);
			$this->taskQuery->addSelect('TIME_ESTIMATE');
			break;

		case 'ALLOW_CHANGE_DEADLINE':
			$this->query->addOrder('ALLOW_CHANGE_DEADLINE', $order);
			$this->taskQuery->addSelect('ALLOW_CHANGE_DEADLINE');
			break;

		case 'ALLOW_TIME_TRACKING':
			$this->query->addOrder('ALLOW_TIME_TRACKING', $order);
			$this->taskQuery->addSelect('ALLOW_TIME_TRACKING');
			break;

		case 'MATCH_WORK_TIME':
			$this->query->addOrder('MATCH_WORK_TIME', $order);
			$this->taskQuery->addSelect('MATCH_WORK_TIME');
			break;

		case 'SORTING':
			$this->query->addOrder('NULL_SORTING', $order);
			$this->query->addOrder('SORTING', $order);
			$this->taskQuery->addSelect('SORTING');
			$this->taskQuery->addSelect('NULL_SORTING');
			break;

		case 'SORTING_ORDER':
			$this->query->addOrder('NULL_SORTING', $order);
			$this->query->addOrder(self::ALIAS_TASK_SORT . '.SORT', $order);
			$this->taskQuery->addSelect('NULL_SORTING');
			$this->registerRuntimeField(self::ALIAS_TASK_SORT);
			break;

		case 'MESSAGE_ID':
			$this->query->addOrder('MESSAGE_ID', $order);
			$this->taskQuery->addSelect('MESSAGE_ID');
			break;

		case 'FAVORITE':
		case 'COMPUTE_FAVORITE':
			$this->taskQuery->addSelect('COMPUTE_FAVORITE');
			$this->query->addOrder('COMPUTE_FAVORITE', $order);
			break;

		case 'TIME_SPENT_IN_LOGS':
			$this->taskQuery->addSelect('TIME_SPENT_IN_LOGS');
			$this->query->addOrder('TIME_SPENT_IN_LOGS', $order);
			break;

		case 'IS_PINNED':
			$this->taskQuery->addSelect('IS_PINNED');
			$this->query->addOrder('IS_PINNED', $order);
			break;

		case 'IS_PINNED_IN_GROUP':
			$this->taskQuery->addSelect('IS_PINNED_IN_GROUP');
			$this->query->addOrder('IS_PINNED_IN_GROUP', $order);
			break;

		case 'SCRUM_ITEMS_SORT':
			$this->query->addOrder(self::ALIAS_SCRUM_ITEM_B.".SORT", $order);
			$this->registerRuntimeField(self::ALIAS_SCRUM_ITEM_B);
			break;

		case 'IM_CHAT_ID':
			if (!Loader::includeModule('im'))
			{
				break;
			}
			$this->query->addOrder(self::ALIAS_CHAT_TASK.".ID", $order);
			$this->registerRuntimeField(self::ALIAS_CHAT_TASK);
			break;

		default:
			if (preg_match('/^UF_/', $column))
			{
				$this->query->addOrder($column, $order);
				break;
			}

	}
}