\gateway`). * * @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 gateway extends \core_payment\gateway { public static function get_supported_currencies(): array { return [AssistantProtocol::CURRENCY]; } public static function add_configuration_to_gateway_form(account_gateway $form): void { $mform = $form->get_mform(); $mform->addElement('text', 'accountnumber', get_string('accountnumber', 'paygw_moneta')); $mform->setType('accountnumber', PARAM_ALPHANUMEXT); $mform->addRule('accountnumber', null, 'required', null, 'client'); $mform->addHelpButton('accountnumber', 'accountnumber', 'paygw_moneta'); $mform->addElement('passwordunmask', 'integritycode', get_string('integritycode', 'paygw_moneta')); $mform->setType('integritycode', PARAM_RAW_TRIMMED); $mform->addRule('integritycode', null, 'required', null, 'client'); $mform->addHelpButton('integritycode', 'integritycode', 'paygw_moneta'); $servers = []; foreach (PaymentServer::cases() as $server) { $servers[$server->value] = get_string($server->label(), 'paygw_moneta'); } $mform->addElement('select', 'paymentserver', get_string('paymentserver', 'paygw_moneta'), $servers); $mform->setDefault('paymentserver', PaymentServer::Prod->value); $mform->addHelpButton('paymentserver', 'paymentserver', 'paygw_moneta'); $mform->addElement('advcheckbox', 'testmode', get_string('testmode', 'paygw_moneta')); $mform->addHelpButton('testmode', 'testmode', 'paygw_moneta'); $mform->addElement('text', 'receiptemail', get_string('receiptemail', 'paygw_moneta')); $mform->setType('receiptemail', PARAM_RAW_TRIMMED); $mform->addRule('receiptemail', null, 'required', null, 'client'); $mform->addHelpButton('receiptemail', 'receiptemail', 'paygw_moneta'); $mform->addElement('advcheckbox', 'fiscalization', get_string('fiscalization', 'paygw_moneta')); $mform->addHelpButton('fiscalization', 'fiscalization', 'paygw_moneta'); $vatOptions = []; foreach (Vat::cases() as $vat) { $vatOptions[$vat->value] = get_string($vat->langKey(), 'paygw_moneta'); } $mform->addElement('select', 'vat', get_string('vat', 'paygw_moneta'), $vatOptions); $mform->addHelpButton('vat', 'vat', 'paygw_moneta'); $mform->setDefault('vat', Vat::None->value); $mform->addElement('advcheckbox', 'sendpaymentlink', get_string('sendpaymentlink', 'paygw_moneta')); $mform->addHelpButton('sendpaymentlink', 'sendpaymentlink', 'paygw_moneta'); $mform->setDefault('sendpaymentlink', 1); $mform->addElement('static', 'callbackurl', get_string('callbackurl', 'paygw_moneta'), self::callbackUrlHtml()); $mform->addHelpButton('callbackurl', 'callbackurl', 'paygw_moneta'); } public static function validate_gateway_form( account_gateway $form, stdClass $data, array $files, array &$errors, ): void { $accountNumber = trim((string) ($data->accountnumber ?? '')); if ($accountNumber === '') { $errors['accountnumber'] = get_string('required'); } elseif (preg_match('/\A[0-9]{1,20}\z/', $accountNumber) !== 1) { $errors['accountnumber'] = get_string('error:accountnumber', 'paygw_moneta'); } $receiptEmail = trim((string) ($data->receiptemail ?? '')); if (Client::normalizeEmail($receiptEmail) === null) { $errors['receiptemail'] = get_string('error:receiptemail', 'paygw_moneta'); } if (trim((string) ($data->integritycode ?? '')) === '') { $errors['integritycode'] = get_string('required'); } } /** * Адрес Check URL / Pay URL только для чтения и кнопка «Скопировать» * (`core/copy_to_clipboard`: сам вешает обработчик на `data-action`). */ private static function callbackUrlHtml(): string { global $PAGE; $PAGE->requires->js_amd_inline("require(['core/copy_to_clipboard']);"); $id = \html_writer::random_id('paygw-moneta-callbackurl'); return \html_writer::div( \html_writer::empty_tag('input', [ 'type' => 'text', 'id' => $id, 'class' => 'form-control', 'value' => (new \moodle_url('/payment/gateway/moneta/callback.php'))->out(false), 'readonly' => 'readonly', 'size' => 60, ]) . \html_writer::tag('button', get_string('copytoclipboard'), [ 'type' => 'button', 'class' => 'btn btn-secondary', 'data-action' => 'copytoclipboard', 'data-clipboard-target' => '#' . $id, 'data-clipboard-success-message' => get_string('callbackurl:copied', 'paygw_moneta'), ]), 'input-group', ); } }