- Модуль: 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;
}