• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
  • Класс: CTasks
  • Вызов: CTasks::getFilterOptionsFromRoleField
static function getFilterOptionsFromRoleField($role)
{
	$fields = [];
	$filters = [];

	$key = 'ROLE_';
	$roleType = static::getRoleFieldType($role);
	$userId = ($role[($roleType === 'MEMBER' ? '' : '=') . $roleType] ?? null);

	$referenceFilter = Query::filter()
		->whereColumn('ref.TASK_ID', 'this.ID')
		->where('ref.USER_ID', $userId);

	switch ($roleType)
	{
		case 'MEMBER':
			$fields[$key . $roleType] = static::getMemberTableReferenceField($referenceFilter);
			break;

		case 'CREATED_BY':
		case 'RESPONSIBLE_ID':
		case 'ACCOMPLICE':
		case 'AUDITOR':
			$map = [
				'CREATED_BY' => 'O',
				'RESPONSIBLE_ID' => 'R',
				'ACCOMPLICE' => 'A',
				'AUDITOR' => 'U',
			];
			$referenceFilter->where('ref.TYPE', $map[$roleType]);

			$fields[$key . $roleType] = static::getMemberTableReferenceField($referenceFilter);

			if ($roleType == 'CREATED_BY')
			{
				$filters[$key . $roleType] = Query::filter()->whereColumn('CREATED_BY', '!=', 'RESPONSIBLE_ID');
			}
			break;
	}

	return [
		'FIELDS' => $fields,
		'FILTERS' => $filters,
	];
}