Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/fermaofd.ferma/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/fermaofd.ferma/options.php

<?php

use Bitrix\Main\Page\Asset;

IncludeModuleLangFile(__FILE__);

require __DIR__ . '/const.php';

CModule::IncludeModule(FERMAOFD_FERMA_MODULE_ID);
CModule::IncludeModule('sale');

/**
 * @global CUser $USER
 * @global CMain $APPLICATION
 **/
$canRead = $USER->CanDoOperation('ofdferma_module_settings_read');
$canWrite = $USER->CanDoOperation('ofdferma_module_settings_write');
if ($canRead || $canWrite) {

    IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/modules/main/options.php');
    IncludeModuleLangFile(__FILE__);

    Asset::getInstance()->addJs('/bitrix/js/' . FERMAOFD_FERMA_MODULE_ID . '/ofdferma_options.js', false);

    $arFermaUrlValues = [
        'https://ferma-test.ofd.ru' => GetMessage('FERMAOFD_URL_DEMO'),
        'https://ferma.ofd.ru' => GetMessage('FERMAOFD_URL_PROD'),
    ];

    $arFermaUrlOptions = [
        'REFERENCE' => array_values($arFermaUrlValues),
        'REFERENCE_ID' => array_keys($arFermaUrlValues),
    ];

    $arTaxationValues = [
        'Common' => GetMessage('FERMAOFD_TAXATION_COMMON'),
        'SimpleIn' => GetMessage('FERMAOFD_TAXATION_SIMPLE_IN'),
        'SimpleInOut' => GetMessage('FERMAOFD_TAXATION_SIMPLE_IN_OUT'),
        'Unified' => GetMessage('FERMAOFD_TAXATION_UNIFIED'),
        'UnifiedAgricultural' => GetMessage('FERMAOFD_TAXATION_UNIFIED_AGRICULTURAL'),
        'Patent' => GetMessage('FERMAOFD_TAXATION_PATENT'),
    ];

    $arTaxationOptions = [
        'REFERENCE' => array_values($arTaxationValues),
        'REFERENCE_ID' => array_keys($arTaxationValues),
    ];

    $arPaymentMethodValues = [
        '1' => GetMessage('FERMAOFD_PAYMENT_METHOD_PREPAYMENT_100'),
        '2' => GetMessage('FERMAOFD_PAYMENT_METHOD_PREPAYMENT'),
        '3' => GetMessage('FERMAOFD_PAYMENT_METHOD_PREPAID'),
        '4' => GetMessage('FERMAOFD_PAYMENT_METHOD_COMPLETE_PAYMENT'),
        '5' => GetMessage('FERMAOFD_PAYMENT_METHOD_PARTIAL_PAYMENT'),
        '6' => GetMessage('FERMAOFD_PAYMENT_METHOD_CREDIT_TRANSFER'),
        '7' => GetMessage('FERMAOFD_PAYMENT_METHOD_CREDIT_PAYMENT'),
    ];

    $arPaymentMethodOptions = [
        'REFERENCE' => array_values($arPaymentMethodValues),
        'REFERENCE_ID' => array_keys($arPaymentMethodValues),
    ];

    $arPaymentTypeValues = [];

    foreach (CPaymentTypeCollection::$collection as $item) {
        $arPaymentTypeValues[$item['id']] = $item['name'];
    }

    $arPaymentTypeOptions = [
        'REFERENCE' => array_values($arPaymentTypeValues),
        'REFERENCE_ID' => array_keys($arPaymentTypeValues),
    ];

    $arPaymentVatValues = [];

    foreach (CVatCollection::$collection as $k => $v) {
        $arPaymentVatValues[$v['code']] = $v['name'];
    }

    $arPaymentVatOptions = [
        'REFERENCE' => array_values($arPaymentVatValues),
        'REFERENCE_ID' => array_keys($arPaymentVatValues),
    ];

    $arPaymentDeliveryValues = [
        'Include' => GetMessage('FERMAOFD_DELIVERY_IN_RECEIPT_INCLUDE'),
        'Exclude' => GetMessage('FERMAOFD_DELIVERY_IN_RECEIPT_EXCLUDE'),
    ];

    $arPaymentDeliveryOptions = [
        'REFERENCE' => array_values($arPaymentDeliveryValues),
        'REFERENCE_ID' => array_keys($arPaymentDeliveryValues),
    ];

    $arPayTypeValues = [
        '0' => GetMessage('FERMAOFD_PAY_TYPE_CASH'),
        '1' => GetMessage('FERMAOFD_PAY_TYPE_CASHLESS'),
        '2' => GetMessage('FERMAOFD_PAY_TYPE_ADVANCE'),
        '3' => GetMessage('FERMAOFD_PAY_TYPE_CREDIT'),
        '4' => GetMessage('FERMAOFD_PAY_TYPE_OTHER'),
    ];

    $arPayTypeOptions = [
        'REFERENCE' => array_values($arPayTypeValues),
        'REFERENCE_ID' => array_keys($arPayTypeValues),
    ];

    $sitesCheckbox = [];
    $sitesRes = CSite::GetList($by = 'sort', $order = 'asc');
    while ($site = $sitesRes->Fetch()) {
        $sitesCheckbox[] = [sprintf('site_enabled_%s', $site['ID']), $site['NAME'], ['checkbox', 'Y']];
    }

    $arMainOptions = array_merge(
        [
            ['', GetMessage('FERMAOFD_API_SETTINGS_TITLE'), ['heading']],
            ['api_host', GetMessage('FERMAOFD_URL_API'), ['selectbox', $arFermaUrlOptions]],
            ['api_login', GetMessage('FERMAOFD_LOGIN'), ['text', 25]],
            ['api_password', GetMessage('FERMAOFD_PASSWORD'), ['password', 25]],
            ['', GetMessage('FERMAOFD_COMPANY_SETTINGS_TITLE'), ['heading']],
            ['agent_inn', GetMessage('FERMAOFD_INN'), ['text', 15]],
            ['agent_taxation_system', GetMessage('FERMAOFD_TAX_SYSTEM'), ['selectbox', $arTaxationOptions]],
            ['agent_auto_create', GetMessage('FERMAOFD_AUTO_SUBMIT_AFTER_PAY'), ['checkbox', 'Y']],
            ['', GetMessage('FERMAOFD_SITES_SETTINGS_TITLE'), ['heading']],
        ],
        $sitesCheckbox,
        [
            ['', GetMessage('FERMAOFD_NOTIFICATIONS_SETTINGS_TITLE'), ['heading']],
            ['errors_email', GetMessage('FERMAOFD_ERROR_REPORTING_EMAIL'), ['text', 25]],
            ['', GetMessage('FERMAOFD_DEBUG_SETTINGS_TITLE'), ['heading']],
            ['receipt_json_log', GetMessage('FERMAOFD_LOG_RECEIPT_JSON'), ['checkbox', 'N']],
            ['api_log', GetMessage('FERMAOFD_LOG_FERMA_HTTP'), ['checkbox', 'N']],
        ]
    );

    $statuses = array_merge([
        'null' => ' - �� �������� ��� - ',
    ], \Bitrix\Sale\OrderStatus::getAllStatusesNames());

    $arStatusesOptions = [
        'REFERENCE' => array_values($statuses),
        'REFERENCE_ID' => array_keys($statuses),
    ];

    $arPaymentOptions = [
        ['', GetMessage('FERMAOFD_RECEIPT_SETTINGS_TITLE'), ['heading']],
        ['payment_default_type', GetMessage('FERMAOFD_DEFAULT_PAYMENT_TYPE'), ['selectbox', $arPaymentTypeOptions, '1']],
        ['payment_default_vat', GetMessage('FERMAOFD_DEFAULT_VAT'), ['selectbox', $arPaymentVatOptions, 'VatNo']],
        ['payment_delivery', GetMessage('FERMAOFD_DELIVERY_IN_RECEIPT'), ['selectbox', $arPaymentDeliveryOptions, 'Include']],
        ['', GetMessage('FERMAOFD_RECEIPT_PREPAYMENT'), ['heading']],
        ['receipt_prepayment', GetMessage('FERMAOFD_ORDER_STATUS_SEND'), ['selectbox', $arStatusesOptions, 'null']],
        ['receipt_prepayment_default_method', GetMessage('FERMAOFD_DEFAULT_PAYMENT_METHOD'), ['selectbox', $arPaymentMethodOptions, '1']],
        ['', GetMessage('FERMAOFD_RECEIPT_PAYMENT'), ['heading']],
        ['receipt_payment', GetMessage('FERMAOFD_ORDER_STATUS_SEND'), ['selectbox', $arStatusesOptions, 'P']],
        ['receipt_payment_default_method', GetMessage('FERMAOFD_DEFAULT_PAYMENT_METHOD'), ['selectbox', $arPaymentMethodOptions, '4']],
        ['', GetMessage('FERMAOFD_RECEIPT_REFUND'), ['heading']],
        ['receipt_refund', GetMessage('FERMAOFD_ORDER_STATUS_SEND'), ['selectbox', $arStatusesOptions, 'null']],
        ['receipt_refund_default_method', GetMessage('FERMAOFD_DEFAULT_PAYMENT_METHOD'), ['selectbox', $arPaymentMethodOptions, '4']],
        ['', GetMessage('FERMAOFD_PAYMENT_METHOD_SETTINGS_TITLE'), ['heading']]
    ];

    $systems = \Bitrix\Sale\PaySystem\Manager::getList();
    foreach ($systems as $system) {
        $arPaymentOptions[] = [
            'payment_method_' . $system['ID'],
            $system['NAME'],
            ['selectbox', $arPayTypeOptions, isCash($system['NAME']) ? '0' : '1'],
        ];
    }

    $aTabs = [
        [
            'DIV' => 'edit1',
            'TAB' => GetMessage('FERMAOFD_MAIN_SETTINGS_TITLE'),
            'ICON' => 'security_settings',
            'TITLE' => GetMessage('MAIN_TAB_TITLE_SET'),
        ],
        [
            'DIV' => 'edit2',
            'TAB' => GetMessage('FERMAOFD_PAYMENT_SETTINGS_TITLE'),
            'ICON' => 'security_settings',
            'TITLE' => GetMessage('MAIN_TAB_TITLE_SET'),
        ],
    ];

    $tabControl = new CAdminTabControl('tabControl', $aTabs);

    if ($_SERVER['REQUEST_METHOD'] === 'POST'
        && $_REQUEST['Update'] . $_REQUEST['Apply'] . $_REQUEST['RestoreDefaults'] !== ''
        && $canWrite && check_bitrix_sessid()) {

        if ($_REQUEST['RestoreDefaults'] != '') {
            COption::RemoveOption(FERMAOFD_FERMA_MODULE_ID);
        } else {
            foreach ($arMainOptions as $arOption) {
                $name = $arOption[0];
                $val = trim($_REQUEST[$name], " \t\n\r");

                $type = $arOption[2][0];
                if ($type === 'heading') {
                    continue;
                }

                if ($type === 'checkbox' && $val !== 'Y') {
                    $val = 'N';
                }

                COption::SetOptionString(FERMAOFD_FERMA_MODULE_ID, $name, $val, $arOption[1]);
            }

            foreach ($arPaymentOptions as $arOption) {
                $name = $arOption[0];
                $val = trim($_REQUEST[$name], " \t\n\r");

                $type = $arOption[2][0];
                if ($type === 'heading') {
                    continue;
                }

                if ($type === 'checkbox' && $val !== 'Y') {
                    $val = 'N';
                }

                COption::SetOptionString(FERMAOFD_FERMA_MODULE_ID, $name, $val, $arOption[1]);
            }
        }

        if ($_REQUEST['back_url_settings'] !== '') {
            if ($_REQUEST['Update'] !== '') {
                LocalRedirect($_REQUEST['back_url_settings']);
            }

            $returnUrl = $_GET['return_url'] ? urlencode($_GET['return_url']) : '';
            LocalRedirect($APPLICATION->GetCurPage() . '?mid=' . urlencode(FERMAOFD_FERMA_MODULE_ID) . '&lang=' . urlencode(LANGUAGE_ID) . '&back_url_settings=' . $returnUrl . '&' . $tabControl->ActiveTabParam());
        } else {
            LocalRedirect($APPLICATION->GetCurPage() . '?mid=' . urlencode(FERMAOFD_FERMA_MODULE_ID) . '&lang=' . urlencode(LANGUAGE_ID) . '&' . $tabControl->ActiveTabParam());
        }
    }

    $message = CSecurityIPRule::CheckAntiFile(true);
    if ($message) {
        echo $message->Show();
    }

    $availableMessagePlaceholders = CSecurityEventMessageFormatter::getAvailableMessagePlaceholders();
    $availableUserInfoPlaceholders = CSecurityEventMessageFormatter::getAvailableUserInfoPlaceholders();
    ?>
    <form method="post"
          action="<? echo $APPLICATION->GetCurPage() ?>?mid=<?= urlencode(FERMAOFD_FERMA_MODULE_ID) ?>&amp;lang=<?= LANGUAGE_ID ?>">
        <?php
        $tabControl->Begin();
        $tabControl->BeginNextTab();

        renderWidgets($arMainOptions);

        $tabControl->BeginNextTab();

        renderWidgets($arPaymentOptions);

        $tabControl->Buttons(); ?>
        <input <? if (!$canWrite) echo 'disabled' ?> type="submit" name="Update" value="<?= GetMessage('MAIN_SAVE') ?>"
                                                     title="<?= GetMessage('MAIN_OPT_SAVE_TITLE') ?>">
        <input <? if (!$canWrite) echo 'disabled' ?> type="submit" name="Apply"
                                                     value="<?= GetMessage('MAIN_OPT_APPLY') ?>"
                                                     title="<?= GetMessage('MAIN_OPT_APPLY_TITLE') ?>">
        <? if ($_REQUEST['back_url_settings'] !== ''): ?>
            <input <? if (!$canWrite) echo 'disabled' ?> type="button" name="Cancel"
                                                         value="<?= GetMessage('MAIN_OPT_CANCEL') ?>"
                                                         title="<?= GetMessage('MAIN_OPT_CANCEL_TITLE') ?>"
                                                         onclick="window.location='<? echo htmlspecialcharsbx(CUtil::addslashes($_REQUEST['back_url_settings'])) ?>'">
            <input type="hidden" name="back_url_settings"
                   value="<?= htmlspecialcharsbx($_REQUEST['back_url_settings']) ?>">
        <? endif ?>
        <input <? if (!$canWrite) echo 'disabled' ?> type="submit" name="RestoreDefaults"
                                                     title="<? echo GetMessage('MAIN_HINT_RESTORE_DEFAULTS') ?>"
                                                     onclick="return confirm('<? echo AddSlashes(GetMessage('MAIN_HINT_RESTORE_DEFAULTS_WARNING')) ?>')"
                                                     value="<? echo GetMessage('MAIN_RESTORE_DEFAULTS') ?>">
        <?= bitrix_sessid_post(); ?>
        <? $tabControl->End(); ?>
    </form>
    <?php

}

function isCash(string $name): bool
{
    return mb_stripos($name, '�����') === 0;
}

function renderWidgets(array $options)
{
    foreach ($options as $arOption):
        [$id, $label, $type, $attrs] = $arOption;

        $note = $attrs['note'] ?: null;
        $styles = $attrs['styles'] ?: null;

        if ($type[0] == 'heading'): ?>
            <tr class="heading">
                <td colspan="2"><b><? echo $arOption[1] ?></b></td>
            </tr>
        <? else: ?>
            <tr id="group-<?= $id ?>" <?= $styles ? "style=\"$styles\"" : '' ?>>
                <td width="40%">
                    <label for="<?= htmlspecialcharsbx($id) ?>"><?= $arOption[1] ?>
                        <? if ($note !== null): ?>
                            <span class="required"><sup><?= $note ?></sup></span>
                        <? endif; ?>
                        :</label>

                </td>
                <td width="60%">
                    <? if ($type[0] == 'checkbox'): ?>
                        <?
                        $val = COption::GetOptionString(FERMAOFD_FERMA_MODULE_ID, $id, isset($type[1]) ? $type[1] : 'N');
                        ?>
                        <input type="checkbox" name="<? echo htmlspecialcharsbx($id) ?>"
                               id="<? echo htmlspecialcharsbx($id) ?>" value="Y"<? if ($val == 'Y') {
                            echo ' checked';
                        } ?>>
                    <? elseif ($type[0] == 'text'): ?>
                        <? $val = COption::GetOptionString(FERMAOFD_FERMA_MODULE_ID, $id); ?>
                        <input type="text" size="<? echo $type[1] ?>" maxlength="255"
                               value="<? echo htmlspecialcharsbx($val) ?>" name="<? echo htmlspecialcharsbx($id) ?>"
                               id="<? echo htmlspecialcharsbx($id) ?>">
                    <? elseif ($type[0] == 'password'): ?>
                        <? $val = COption::GetOptionString(FERMAOFD_FERMA_MODULE_ID, $id); ?>
                        <input type="password" size="<? echo $type[1] ?>" maxlength="255"
                               value="<? echo htmlspecialcharsbx($val) ?>" name="<? echo htmlspecialcharsbx($id) ?>"
                               id="<? echo htmlspecialcharsbx($id) ?>">
                    <? elseif ($type[0] == 'textarea'): ?>
                        <? $val = COption::GetOptionString(FERMAOFD_FERMA_MODULE_ID, $id); ?>
                        <textarea rows="<? echo $type[1] ?>" cols="<? echo $type[2] ?>"
                                  name="<? echo htmlspecialcharsbx($id) ?>"
                                  id="<? echo htmlspecialcharsbx($id) ?>"><? echo htmlspecialcharsbx($val) ?></textarea>
                    <? elseif ($type[0] == 'selectbox'):
                        $val = COption::GetOptionString(FERMAOFD_FERMA_MODULE_ID, $id, isset($type[2]) ? $type[2] : '');
                        echo SelectBoxFromArray($id, $type[1], $val);
                    endif ?>
                </td>
            </tr>
        <? endif; ?>
    <? endforeach;
}