• Модуль: biconnector
  • Путь к файлу: ~/bitrix/modules/biconnector/lib/KeyManager.php
  • Класс: BitrixBIConnectorKeyManager
  • Вызов: KeyManager::save
static function save($data)
{
	$errorCollection = static::check($data);
	if (!$errorCollection->isEmpty())
	{
		return $errorCollection;
	}

	$data = static::fillDefaultData($data);

	$save = [
		'TIMESTAMP_X' => new DateTime(),
		'ACCESS_KEY' => $data['ACCESS_KEY'],
		'ACTIVE' => $data['ACTIVE'] === true ? 'Y' : 'N',
	];

	if (isset($data['APP_ID']))
	{
		$save['APP_ID'] = (int)$data['APP_ID'] > 0 ? (int)$data['APP_ID'] : null;
	}

	$connections = Manager::getInstance()->getConnections();
	if ($data['CONNECTION'] && isset($connections[$data['CONNECTION']]))
	{
		$save['CONNECTION'] = $data['CONNECTION'];
	}
	else
	{
		$save['CONNECTION'] = key($connections);
	}

	$id = (int)$data['ID'];
	if ($id > 0)
	{
		$updateResult = KeyTable::update($id, $save);
		$updateResult->isSuccess();
	}
	else
	{
		$save['DATE_CREATE'] = new DateTime();
		$save['CREATED_BY'] = $data['USER_ID'];
		$addResult = KeyTable::add($save);
		if ($addResult->isSuccess())
		{
			$id = $addResult->getId();
		}
		else
		{
			$errorCollection->setValues(
				$addResult->getErrorCollection()->getValues()
			);
		}
	}

	if ($id > 0 && isset($data['USERS']))
	{
		$usersForm = [];
		foreach ($data['USERS'] as $userId)
		{
			$userId = (int)trim($userId, " tnr");
			if ($userId > 0)
			{
				$usersForm[$userId] = [
					'TIMESTAMP_X' => new DateTime(),
					'CREATED_BY' => $data['USER_ID'],
					'KEY_ID' => $id,
					'USER_ID' => $userId,
				];
			}
		}

		$usersDb = [];
		if (!isset($addResult))
		{
			$userList = KeyUserTable::getList([
				'select' => ['ID', 'USER_ID'],
				'filter' => [
					'=KEY_ID' => $id,
				]
			]);
			while ($user = $userList->fetch())
			{
				$usersDb[$user['ID']] = $user['USER_ID'];
			}
		}

		foreach ($usersForm as $user)
		{
			$found = false;
			foreach ($usersDb as $dbId => $dbUserId)
			{
				if ($dbUserId == $user['USER_ID'])
				{
					unset($usersDb[$dbId]);
					$found = true;
					break;
				}
			}

			if (!$found)
			{
				$addResult = KeyUserTable::add($user);
				$addResult->isSuccess();
			}
		}

		foreach ($usersDb as $dbId => $_)
		{
			$deleteResult = KeyUserTable::delete($dbId);
			$deleteResult->isSuccess();
		}
	}

	return $errorCollection->isEmpty() ? $id : $errorCollection;
}