71 lines
2.4 KiB
PHP
71 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace paygw_moneta\local;
|
|
|
|
use core_payment\helper;
|
|
|
|
/**
|
|
* Загрузка {@see GatewayConfig} из платёжных аккаунтов Moodle
|
|
* (`payment_gateways`). Сам `GatewayConfig` — только значения, без обращения
|
|
* к БД; здесь — всё, что его читает.
|
|
*
|
|
* @package paygw_moneta
|
|
* @copyright 2026 Moneta Labs {@link https://moneta.ru/}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
class GatewayConfigRepository
|
|
{
|
|
/**
|
|
* Настройки для оплачиваемого объекта — тот же путь, что у ядра при показе модального окна.
|
|
*/
|
|
public function forPayable(string $component, string $paymentArea, int $itemId): GatewayConfig
|
|
{
|
|
return GatewayConfig::fromArray(
|
|
helper::get_gateway_configuration($component, $paymentArea, $itemId, GatewayConfig::GATEWAY),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Настройки аккаунта заказа — для колбэков и ссылки на оплату, где
|
|
* оплачиваемый объект уже известен по заказу.
|
|
*/
|
|
public function forAccount(int $accountId): ?GatewayConfig
|
|
{
|
|
global $DB;
|
|
|
|
$record = $DB->get_record('payment_gateways', ['accountid' => $accountId, 'gateway' => GatewayConfig::GATEWAY]);
|
|
if ($record === false) {
|
|
return null;
|
|
}
|
|
|
|
return self::fromRecord($record);
|
|
}
|
|
|
|
/**
|
|
* Заполненные настройки с данным номером счёта MONETA.RU — чтобы проверить
|
|
* подпись уведомления по заказу, которого нет в БД.
|
|
*/
|
|
public function findByAccountNumber(string $accountNumber): ?GatewayConfig
|
|
{
|
|
global $DB;
|
|
|
|
foreach ($DB->get_records('payment_gateways', ['gateway' => GatewayConfig::GATEWAY]) as $record) {
|
|
$config = self::fromRecord($record);
|
|
if ($config->isComplete() && $config->accountNumber === $accountNumber) {
|
|
return $config;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static function fromRecord(\stdClass $record): GatewayConfig
|
|
{
|
|
$config = json_decode((string) $record->config, true);
|
|
|
|
return GatewayConfig::fromArray(is_array($config) ? $config : [], (bool) $record->enabled);
|
|
}
|
|
}
|