• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/comments/viewed/group.php
  • Класс: BitrixTasksCommentsViewedGroup
  • Вызов: Group::prepareByAction
protected function prepareByAction( string $action, array $fields): Result
{
	$r = new Result();

	$role = $fields['role'];
	$groupId = $fields['groupId'];

	$select = [
		'USER_ID' => [
			'FIELD_NAME' => 'TS.USER_ID'
		],
	];

	switch ($action)
	{
		case Group::ACTION_PROJECT_GROUP_ID_ROLE_ALL:
		case Group::ACTION_SCRUM_GROUP_ID_ROLE_ALL:
			$groupCondition = $this->getConditionForGroup($groupId);
			$userJoin = '';
			$select['GROUP_ID'] = ['FIELD_NAME' => 'TS.GROUP_ID'];

			break;

		case Group::ACTION_PROJECT_GROUP_LIST_ROLE_ALL:
			$indexList = $this->getIndexGroupByType(UserRegistry::MODE_SCRUM);
			$groupCondition = $this->getExcludeConditionForListGroup($indexList);
			$userJoin = '';
			$select['GROUP_ID'] = ['FIELD_NAME' => 'TS.GROUP_ID'];

			break;

		case Group::ACTION_SCRUM_GROUP_LIST_ROLE_ALL:
			$indexList = $this->getIndexGroupByType(UserRegistry::MODE_SCRUM);
			$groupCondition = $this->getConditionForListGroup($indexList);
			$userJoin = '';
			$select['GROUP_ID'] = ['FIELD_NAME' => 'TS.GROUP_ID'];

			break;

		case Group::ACTION_USER_GROUP_ALL_ROLE_ALL:
			$groupCondition = '';
			$userJoin = $this->getConditionForUser($this->userId);
			$select['GROUP_ID'] = ['FIELD_NAME' => Group::GROUP_MNEMONIC];

			break;
		case Group::ACTION_USER_GROUP_ALL_ROLE_ID:
			$groupCondition = '';
			$userJoin = $this->getConditionForUser($this->userId);
			$userJoin .= $this->getConditionForMemberType(Group::resolveMemberTypeByRole($role));
			$select['MEMBER_TYPE'] = ['FIELD_NAME'=>'TM.TYPE'];
			$select['GROUP_ID'] = ['FIELD_NAME' => Group::GROUP_MNEMONIC];

			break;
		case Group::ACTION_USER_GROUP_ID_ROLE_ALL:
			$groupCondition = $this->getConditionForGroup($groupId);
			$userJoin = $this->getConditionForUser($this->userId);
			$select['MEMBER_TYPE'] = ['FIELD_NAME'=>'TM.TYPE'];
			$select['GROUP_ID'] = ['FIELD_NAME' => Group::GROUP_MNEMONIC];

			break;
		case Group::ACTION_USER_GROUP_ID_ROLE_ID:
			$groupCondition = $this->getConditionForGroup($groupId);
			$userJoin = $this->getConditionForUser($this->userId);
			$userJoin .= $this->getConditionForMemberType(Group::resolveMemberTypeByRole($role));
			$select['MEMBER_TYPE'] = ['FIELD_NAME' => 'TM.TYPE'];
			$select['GROUP_ID'] = ['FIELD_NAME' => Group::GROUP_MNEMONIC];

			break;
		default:
			$r->addError(new Error('Undefined Action'));
			return $r;
			break;
	}

	return $r->setData([
		$groupCondition,
		$userJoin,
		$select
	]);
}