From b4d21dcc82f52be9f107482ef6f6a4e147862a3c Mon Sep 17 00:00:00 2001 From: AntonLV Date: Tue, 21 Sep 2021 11:36:53 +0300 Subject: [PATCH] Ticket #3513 --- .../classes/BxBaseModPaymentConfig.php | 2 + .../payment/classes/BxPaymentDetails.php | 163 ++---------------- .../payment/classes/BxPaymentFormDetails.php | 150 ++++++++++++++++ modules/boonex/payment/install/langs/en.xml | 3 + .../boonex/payment/install/sql/install.sql | 4 + .../russian/data/langs/bx_payment/ru.xml | 3 + 6 files changed, 181 insertions(+), 144 deletions(-) create mode 100644 modules/boonex/payment/classes/BxPaymentFormDetails.php diff --git a/modules/base/payment/classes/BxBaseModPaymentConfig.php b/modules/base/payment/classes/BxBaseModPaymentConfig.php index 6078abb169..8b9c40e03e 100644 --- a/modules/base/payment/classes/BxBaseModPaymentConfig.php +++ b/modules/base/payment/classes/BxBaseModPaymentConfig.php @@ -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', diff --git a/modules/boonex/payment/classes/BxPaymentDetails.php b/modules/boonex/payment/classes/BxPaymentDetails.php index 05629ca291..a87b430c16 100644 --- a/modules/boonex/payment/classes/BxPaymentDetails.php +++ b/modules/boonex/payment/classes/BxPaymentDetails.php @@ -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() { @@ -31,7 +20,6 @@ function __construct() parent::__construct(); $this->_sLangsPrefix = $this->_oModule->_oConfig->getPrefix('langs'); - $this->_bCollapseFirst = true; } /** @@ -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(); } } diff --git a/modules/boonex/payment/classes/BxPaymentFormDetails.php b/modules/boonex/payment/classes/BxPaymentFormDetails.php new file mode 100644 index 0000000000..046c186b1c --- /dev/null +++ b/modules/boonex/payment/classes/BxPaymentFormDetails.php @@ -0,0 +1,150 @@ +_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; + } +} + +/** @} */ diff --git a/modules/boonex/payment/install/langs/en.xml b/modules/boonex/payment/install/langs/en.xml index 29d954cdb0..b904d5ca71 100644 --- a/modules/boonex/payment/install/langs/en.xml +++ b/modules/boonex/payment/install/langs/en.xml @@ -199,6 +199,9 @@ + + + diff --git a/modules/boonex/payment/install/sql/install.sql b/modules/boonex/payment/install/sql/install.sql index 52d3012665..9d7782dab5 100644 --- a/modules/boonex/payment/install/sql/install.sql +++ b/modules/boonex/payment/install/sql/install.sql @@ -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'), @@ -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), diff --git a/modules/boonex/russian/data/langs/bx_payment/ru.xml b/modules/boonex/russian/data/langs/bx_payment/ru.xml index 3981bc8c28..247b124dea 100644 --- a/modules/boonex/russian/data/langs/bx_payment/ru.xml +++ b/modules/boonex/russian/data/langs/bx_payment/ru.xml @@ -200,6 +200,9 @@ + + +