Skip to content

Commit

Permalink
Ticket #3513
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonLV committed Sep 21, 2021
1 parent 4bd6dc7 commit b4d21dc
Show file tree
Hide file tree
Showing 6 changed files with 181 additions and 144 deletions.
2 changes: 2 additions & 0 deletions modules/base/payment/classes/BxBaseModPaymentConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ function __construct($aModule)
);

$this->_aObjects = array_merge($this->_aObjects, array(
'form_details' => $this->_sName . '_form_details',
'form_display_details_edit' => $this->_sName . '_form_details_edit',
'form_pendings' => $this->_sName . '_form_pendings',
'form_processed' => $this->_sName . '_form_processed',
'form_display_pendings_process' => $this->_sName . '_form_pendings_process',
Expand Down
163 changes: 19 additions & 144 deletions modules/boonex/payment/classes/BxPaymentDetails.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,9 @@
* @{
*/

bx_import('BxDolForm');

class BxPaymentDetailsFormCheckerHelper extends BxDolFormCheckerHelper
{
function checkHttps ($s)
{
return empty($s) || substr(BX_DOL_URL_ROOT, 0, 5) == 'https';
}
}

class BxPaymentDetails extends BxBaseModPaymentDetails
{
protected $_sLangsPrefix;
protected $_bCollapseFirst;

function __construct()
{
Expand All @@ -31,7 +20,6 @@ function __construct()
parent::__construct();

$this->_sLangsPrefix = $this->_oModule->_oConfig->getPrefix('langs');
$this->_bCollapseFirst = true;
}

/**
Expand Down Expand Up @@ -69,145 +57,32 @@ public function serviceGetBlockDetails($iUserId = BX_PAYMENT_EMPTY_ID)
);
}

public function getForm($iUserId)
public function getForm($iProfileId)
{
$aInputs = $this->_oModule->_oDb->getForm();
if(empty($aInputs))
return '';

$aForm = array(
'form_attrs' => array(
'id' => 'pmt_details',
'name' => 'pmt_details',
'action' => BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=payment-details'),
'method' => 'post',
'enctype' => 'multipart/form-data'
),
'params' => array(
'db' => array(
'table' => '',
'key' => 'id',
'uri' => '',
'uri_title' => '',
'submit_name' => 'submit'
),
'checker_helper' => 'BxPaymentDetailsFormCheckerHelper'
),
'inputs' => array (
)
);

$bSiteAdmin = $this->_oModule->_oConfig->isSiteAdmin();
$bSingleSeller = $this->_oModule->_oConfig->isSingleSeller();

$bCollapsed = $this->_bCollapseFirst;
$iProvider = 0;
$sProvider = "";
$oProvider = null;
foreach($aInputs as $aInput) {
if((int)$aInput['provider_for_owner_only'] != 0 && !$bSiteAdmin)
continue;

if((int)$aInput['provider_single_seller'] == 0 && $bSingleSeller)
continue;
$oForm = BxTemplFormView::getObjectInstance($this->_oModule->_oConfig->getObject('form_details'), $this->_oModule->_oConfig->getObject('form_display_details_edit'));
$oForm->setProfileId($iProfileId);
$oForm->initChecker();

if($iProvider != $aInput['provider_id']) {
$aForm['inputs']['provider_' . $aInput['provider_id'] . '_begin'] = array(
'type' => 'block_header',
'caption' => _t($aInput['provider_caption']),
'info' => _t($aInput['provider_description']),
'collapsable' => true,
'collapsed' => $bCollapsed
);
if($oForm->isSubmitted()) {
if($oForm->isValid()) {
$aOptions = $this->_oModule->_oDb->getOptions();
foreach($aOptions as $aOption) {
$sValue = bx_get($aOption['name']) !== false ? bx_get($aOption['name']) : '';
$this->_oModule->_oDb->updateOption($iProfileId, $aOption['id'], bx_process_input($sValue));
}

$iProvider = $aInput['provider_id'];
$sProvider = $aInput['provider_name'];
$oProvider = $this->_oModule->getObjectProvider($sProvider, $iUserId);
$bCollapsed = true;
header('Location: ' . BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=payment-details'));
return;
}

$aForm['inputs'][$aInput['name']] = array(
'type' => $aInput['type'],
'name' => $aInput['name'],
'caption' => _t($aInput['caption']),
'value' => $oProvider->getOption($aInput['name']),
'info' => _t($aInput['description']),
'attrs' => array(
'bx-data-provider' => $iProvider
),
'checker' => array (
'func' => $aInput['check_type'],
'params' => $aInput['check_params'],
'error' => _t($aInput['check_error']),
)
);

//--- Make some field dependent actions ---//
switch($aInput['type']) {
case 'select':
if(empty($aInput['extra']))
break;

$aAddon = array('values' => array());

$aPairs = explode(',', $aInput['extra']);
foreach($aPairs as $sPair) {
$aPair = explode('|', $sPair);
$aAddon['values'][] = array('key' => $aPair[0], 'value' => _t($aPair[1]));
else
foreach($oForm->aInputs as $aInput)
if(!empty($aInput['error']) && !empty($aInput['attrs']['bx-data-provider'])) {
$sProviderBlock = 'provider_' . (int)$aInput['attrs']['bx-data-provider'] . '_begin';
if(!empty($oForm->aInputs[$sProviderBlock]))
$oForm->aInputs[$sProviderBlock]['collapsed'] = false;
}
break;

case 'checkbox':
$aForm['inputs'][$aInput['name']]['value'] = 'on';
$aAddon = array('checked' => $oProvider->getOption($aInput['name']) == 'on');
break;

case 'value':
$sName = str_replace($aInput['provider_option_prefix'], '', $aInput['name']);
if(!in_array($sName, array('return_data_url', 'notify_url')))
break;

$sMethod = 'get' . bx_gen_method_name($sName);
if(method_exists($oProvider, $sMethod))
$aForm['inputs'][$aInput['name']]['value'] = $oProvider->$sMethod($iUserId);
break;
}

if(!empty($aAddon) && is_array($aAddon))
$aForm['inputs'][$aInput['name']] = array_merge($aForm['inputs'][$aInput['name']], $aAddon);
}

$aForm['inputs']['provider_' . $iProvider . '_end'] = array(
'type' => 'block_end'
);
$aForm['inputs']['submit'] = array(
'type' => 'submit',
'name' => 'submit',
'value' => _t($this->_sLangsPrefix . 'form_details_input_do_submit'),
);

bx_import('BxTemplFormView');
$oForm = new BxTemplFormView($aForm);
$oForm->initChecker();

if($oForm->isSubmittedAndValid()) {
$aOptions = $this->_oModule->_oDb->getOptions();
foreach($aOptions as $aOption) {
$sValue = bx_get($aOption['name']) !== false ? bx_get($aOption['name']) : '';
$this->_oModule->_oDb->updateOption($iUserId, $aOption['id'], bx_process_input($sValue));
}

header('Location: ' . $oForm->aFormAttrs['action']);
return;
}

foreach($oForm->aInputs as $aInput)
if(!empty($aInput['error']) && !empty($aInput['attrs']['bx-data-provider'])) {
$sProviderBlock = 'provider_' . (int)$aInput['attrs']['bx-data-provider'] . '_begin';
if(!empty($oForm->aInputs[$sProviderBlock]))
$oForm->aInputs[$sProviderBlock]['collapsed'] = false;
}

return $oForm->getCode();
}
}
Expand Down
150 changes: 150 additions & 0 deletions modules/boonex/payment/classes/BxPaymentFormDetails.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
<?php defined('BX_DOL') or die('hack attempt');
/**
* Copyright (c) UNA, Inc - https://una.io
* MIT License - https://opensource.org/licenses/MIT
*
* @defgroup Payment Payment
* @ingroup UnaModules
*
* @{
*/

class BxPaymentDetailsFormCheckerHelper extends BxDolFormCheckerHelper
{
function checkHttps ($s)
{
return empty($s) || substr(BX_DOL_URL_ROOT, 0, 5) == 'https';
}
}

class BxPaymentFormDetails extends BxTemplFormView
{
protected $_sModule;
protected $_oModule;

protected $_sLangsPrefix;
protected $_bCollapseFirst;

protected $_iProfileId;

function __construct($aInfo, $oTemplate = false)
{
parent::__construct($aInfo, $oTemplate);

$this->_sModule = 'bx_payment';
$this->_oModule = BxDolModule::getInstance($this->_sModule);

$this->_sLangsPrefix = $this->_oModule->_oConfig->getPrefix('langs');
$this->_bCollapseFirst = true;

$this->_iProfileId = $this->_oModule->getProfileId();

$this->init();
}

public function setProfileId($iProfileId = BX_PAYMENT_EMPTY_ID)
{
if($iProfileId != BX_PAYMENT_EMPTY_ID)
$this->_iProfileId = $iProfileId;
}

public function init()
{
$aInputs = $this->_oModule->_oDb->getForm();
if(empty($aInputs))
return false;

$bSiteAdmin = $this->_oModule->_oConfig->isSiteAdmin();
$bSingleSeller = $this->_oModule->_oConfig->isSingleSeller();

$bCollapsed = $this->_bCollapseFirst;
$iProvider = 0;
$sProvider = "";
$oProvider = null;
foreach($aInputs as $aInput) {
if((int)$aInput['provider_for_owner_only'] != 0 && !$bSiteAdmin)
continue;

if((int)$aInput['provider_single_seller'] == 0 && $bSingleSeller)
continue;

if($iProvider != $aInput['provider_id']) {
$this->aInputs['provider_' . $aInput['provider_id'] . '_begin'] = array(
'type' => 'block_header',
'caption' => _t($aInput['provider_caption']),
'info' => _t($aInput['provider_description']),
'collapsable' => true,
'collapsed' => $bCollapsed
);

$iProvider = $aInput['provider_id'];
$sProvider = $aInput['provider_name'];
$oProvider = $this->_oModule->getObjectProvider($sProvider, $this->_iProfileId);
$bCollapsed = true;
}

$this->aInputs[$aInput['name']] = array(
'type' => $aInput['type'],
'name' => $aInput['name'],
'caption' => _t($aInput['caption']),
'value' => $oProvider->getOption($aInput['name']),
'info' => _t($aInput['description']),
'attrs' => array(
'bx-data-provider' => $iProvider
),
'checker' => array (
'func' => $aInput['check_type'],
'params' => $aInput['check_params'],
'error' => _t($aInput['check_error']),
)
);

//--- Make some field dependent actions ---//
switch($aInput['type']) {
case 'select':
if(empty($aInput['extra']))
break;

$aAddon = array('values' => array());

$aPairs = explode(',', $aInput['extra']);
foreach($aPairs as $sPair) {
$aPair = explode('|', $sPair);
$aAddon['values'][] = array('key' => $aPair[0], 'value' => _t($aPair[1]));
}
break;

case 'checkbox':
$this->aInputs[$aInput['name']]['value'] = 'on';
$aAddon = array('checked' => $oProvider->getOption($aInput['name']) == 'on');
break;

case 'value':
$sName = str_replace($aInput['provider_option_prefix'], '', $aInput['name']);
if(!in_array($sName, array('return_data_url', 'notify_url')))
break;

$sMethod = 'get' . bx_gen_method_name($sName);
if(method_exists($oProvider, $sMethod))
$this->aInputs[$aInput['name']]['value'] = $oProvider->$sMethod($this->_iProfileId);
break;
}

if(!empty($aAddon) && is_array($aAddon))
$this->aInputs[$aInput['name']] = array_merge($this->aInputs[$aInput['name']], $aAddon);
}

$this->aInputs['provider_' . $iProvider . '_end'] = array(
'type' => 'block_end'
);
$this->aInputs['submit'] = array(
'type' => 'submit',
'name' => 'submit',
'value' => _t($this->_sLangsPrefix . 'form_details_input_do_submit'),
);

return true;
}
}

/** @} */
3 changes: 3 additions & 0 deletions modules/boonex/payment/install/langs/en.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,9 @@
<string name="_bx_payment_form_cart_input_do_checkout"><![CDATA[Checkout]]></string>
<string name="_bx_payment_form_details_input_do_submit"><![CDATA[Save]]></string>

<string name="_bx_payment_form_details_form"><![CDATA[Details Form]]></string>
<string name="_bx_payment_form_details_display_edit"><![CDATA[Edit Details Display]]></string>

<string name="_bx_payment_form_pendings_form"><![CDATA[Pendings Form]]></string>
<string name="_bx_payment_form_processed_form"><![CDATA[Processed Form]]></string>
<string name="_bx_payment_form_pendings_display_process"><![CDATA[Process Pending Display]]></string>
Expand Down
4 changes: 4 additions & 0 deletions modules/boonex/payment/install/sql/install.sql
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,8 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon

-- FORMS
INSERT INTO `sys_objects_form` (`object`, `module`, `title`, `action`, `form_attrs`, `submit_name`, `table`, `key`, `uri`, `uri_title`, `params`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES
('bx_payment_form_details', @sName, '_bx_payment_form_details_form', '', '', 'submit', '', 'id', '', '', 'a:1:{s:14:"checker_helper";s:33:"BxPaymentDetailsFormCheckerHelper";}', 0, 1, 'BxPaymentFormDetails', 'modules/boonex/payment/classes/BxPaymentFormDetails.php'),

('bx_payment_form_pendings', @sName, '_bx_payment_form_pendings_form', '', '', 'do_submit', 'bx_payment_transactions_pending', 'id', '', '', '', 0, 1, 'BxPaymentFormView', 'modules/boonex/payment/classes/BxPaymentFormView.php'),
('bx_payment_form_processed', @sName, '_bx_payment_form_processed_form', '', '', 'do_submit', 'bx_payment_transactions', 'id', '', '', '', 0, 1, 'BxPaymentFormView', 'modules/boonex/payment/classes/BxPaymentFormView.php'),

Expand All @@ -513,6 +515,8 @@ INSERT INTO `sys_objects_form` (`object`, `module`, `title`, `action`, `form_att


INSERT INTO `sys_form_displays` (`display_name`, `module`, `object`, `title`, `view_mode`) VALUES
('bx_payment_form_details_edit', @sName, 'bx_payment_form_details', '_bx_payment_form_details_display_edit', 0),

('bx_payment_form_pendings_process', @sName, 'bx_payment_form_pendings', '_bx_payment_form_pendings_display_process', 0),
('bx_payment_form_processed_add', @sName, 'bx_payment_form_processed', '_bx_payment_form_processed_display_add', 0),

Expand Down
3 changes: 3 additions & 0 deletions modules/boonex/russian/data/langs/bx_payment/ru.xml
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,9 @@
<string name="_bx_payment_form_cart_input_do_checkout"><![CDATA[Оплатить]]></string>
<string name="_bx_payment_form_details_input_do_submit"><![CDATA[Сохранить]]></string>

<string name="_bx_payment_form_details_form"><![CDATA[Форма деталей платежных систем]]></string>
<string name="_bx_payment_form_details_display_edit"><![CDATA[Изменить детали платежных систем]]></string>

<string name="_bx_payment_form_pendings_form"><![CDATA[Форма обрабатываемых заказов]]></string>
<string name="_bx_payment_form_processed_form"><![CDATA[Форма обработанных заказов]]></string>
<string name="_bx_payment_form_pendings_display_process"><![CDATA[Обработать]]></string>
Expand Down

0 comments on commit b4d21dc

Please sign in to comment.