- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/paysystem/paymentavailablespaysystems.php
- Класс: BitrixSalePaySystemPaymentAvailablesPaySystems
- Вызов: PaymentAvailablesPaySystems::setBindings
static function setBindings(int $paymentId, array $paySystemIds)
{
$result = new Result();
// check existing payment
$existPayment = PaymentTable::getCount([
'=ID' => $paymentId,
]) > 0;
if (!$existPayment)
{
$result->addError(
new Error(Loc::getMessage('SALE_PS_PAYMENT_AVAILABLES_PAYSYSTEMS_NOT_FOUND_PAYMENT'))
);
return $result;
}
// grouping existing items by added & deleted
$existPaySystemIds = [];
$existRows = PaymentPaySystemAvailableTable::getList([
'select' => [
'ID',
'PAY_SYSTEM_ID',
],
'filter' => [
'=PAYMENT_ID' => $paymentId,
],
]);
$deletedIds = [];
$paySystemIds = array_map('intval', $paySystemIds);
foreach ($existRows as $row)
{
$rowPaySystemId = (int)$row['PAY_SYSTEM_ID'];
if (in_array($rowPaySystemId, $paySystemIds, true))
{
$existPaySystemIds[] = $rowPaySystemId;
}
else
{
$deletedIds[] = (int)$row['ID'];
}
}
$addedPaySystemIds = array_diff($paySystemIds, $existPaySystemIds);
// delete old pay systems
foreach ($deletedIds as $deleteId)
{
$deleteResult = PaymentPaySystemAvailableTable::delete($deleteId);
foreach ($deleteResult->getErrors() as $err)
{
$result->addError($err);
}
}
// add new exist pay systems
$paySystems = PaySystemActionTable::getList([
'select' => [
'ID',
],
'filter' => [
'=ID' => $addedPaySystemIds,
],
]);
foreach ($paySystems as $item)
{
$addResult = PaymentPaySystemAvailableTable::add([
'PAYMENT_ID' => $paymentId,
'PAY_SYSTEM_ID' => (int)$item['ID'],
]);
foreach ($addResult->getErrors() as $err)
{
$result->addError($err);
}
}
return $result;
}