Files
Moodle/classes/local/GatewayConfigRepository.php
T

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);
}
}