• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/control/member.php
  • Класс: BitrixTasksControlMember
  • Вызов: Member::set
public function set(array $data)
{
	$this->loadTask();
	$members = $this->getCurrentMembers();

	$curMembersIds = $this->getMembersIds($members);

	// $membersToRemove = array_diff($curMembersIds, $newMembersIds);


	// $this->transferTags($membersToRemove);

	$this->deleteByTask();

	if (
		array_key_exists(self::FIELD_RESPONSIBLE_ID, $data)
		&& (int)$data[self::FIELD_RESPONSIBLE_ID] > 0
	)
	{
		$members[MemberTable::MEMBER_TYPE_RESPONSIBLE] = [];
		$members[MemberTable::MEMBER_TYPE_RESPONSIBLE][] = [
			'USER_ID' => (int)$data[self::FIELD_RESPONSIBLE_ID],
			'TYPE' => MemberTable::MEMBER_TYPE_RESPONSIBLE,
		];
	}

	if (
		array_key_exists(self::FIELD_CREATED_BY, $data)
		&& (int)$data[self::FIELD_CREATED_BY] > 0
	)
	{
		$members[MemberTable::MEMBER_TYPE_ORIGINATOR] = [];
		$members[MemberTable::MEMBER_TYPE_ORIGINATOR][] = [
			'USER_ID' => (int)$data[self::FIELD_CREATED_BY],
			'TYPE' => MemberTable::MEMBER_TYPE_ORIGINATOR,
		];
	}

	if (array_key_exists(self::FIELD_ACCOMPLICES, $data))
	{
		$members[MemberTable::MEMBER_TYPE_ACCOMPLICE] = [];
		foreach ($data[self::FIELD_ACCOMPLICES] as $userId)
		{
			$userId = (int)$userId;
			if ($userId < 1)
			{
				continue;
			}
			$members[MemberTable::MEMBER_TYPE_ACCOMPLICE][] = [
				'USER_ID' => $userId,
				'TYPE' => MemberTable::MEMBER_TYPE_ACCOMPLICE,
			];
		}
	}

	if (array_key_exists(self::FIELD_AUDITORS, $data))
	{
		$members[MemberTable::MEMBER_TYPE_AUDITOR] = [];
		foreach ($data[self::FIELD_AUDITORS] as $userId)
		{
			$userId = (int)$userId;
			if ($userId < 1)
			{
				continue;
			}
			$members[MemberTable::MEMBER_TYPE_AUDITOR][] = [
				'USER_ID' => $userId,
				'TYPE' => MemberTable::MEMBER_TYPE_AUDITOR,
			];
		}
	}

	if (empty($members))
	{
		return;
	}
	$newMembersIds = $this->getMembersIds($members);
	$membersToRemove = array_diff($curMembersIds, $newMembersIds);

	// $this->transferTags($membersToRemove);


	$connection = Application::getConnection();
	$sqlHelper = $connection->getSqlHelper();

	$insertRows = [];
	foreach ($members as $type => $list)
	{
		$insertRows = array_merge(
			$insertRows,
			array_map(function ($el) use ($sqlHelper) {
				$implode = (int)$el['USER_ID'];
				$implode .= ',' . $this->taskId;
				$implode .= ','' . $sqlHelper->forSql($el['TYPE']) . ''';
				return $implode;
			}, $list)
		);
	}

	$sql = "
		INSERT INTO " . MemberTable::getTableName() . "
		(USER_ID, TASK_ID, TYPE)
		VALUES
		(" . implode("),(", $insertRows) . ")
	";

	Application::getConnection()->query($sql);
}