AntonLV 6 лет назад
Родитель
Сommit
b34a1fae63

+ 5 - 0
modules/boonex/credits/classes/BxCreditsConfig.php

@@ -193,6 +193,11 @@ class BxCreditsConfig extends BxBaseModGeneralConfig
         return BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink($this->CNF['URL_HOME']);
     }
 
+    public function getBundleName($sName)
+    {
+        return uriGenerate($sName, $this->CNF['TABLE_BUNDLES'], $this->CNF['FIELD_NAME'], 'cat', '_');
+    }
+
     public function getBundleDescription($aBundle)
     {
         if(empty($aBundle[$this->CNF['FIELD_BONUS']]))

+ 68 - 0
modules/boonex/credits/classes/BxCreditsFormBundle.php

@@ -23,6 +23,74 @@ class BxCreditsFormBundle extends BxTemplStudioFormView
         $this->_oModule = BxDolModule::getInstance($this->_sModule);
 
         parent::__construct($aInfo, $oTemplate);
+
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(isset($this->aInputs[$CNF['FIELD_NAME']])) {
+            $sJsObject = $this->_oModule->_oConfig->getJsObject('studio');
+
+            $iId = $this->getBundleId();
+            $aMask = array('mask' => "javascript:%s.checkBundleName('%s');", $sJsObject, $CNF['FIELD_NAME']);
+            if(!empty($iId) && $this->aParams['display'] == $CNF['OBJECT_FORM_BUNDLE_DISPLAY_EDIT']) {
+                $aMask['mask'] = "javascript:%s.checkBundleName('%s', %d);";
+                $aMask[] = $iId;
+            }
+
+            $sOnBlur = call_user_func_array('sprintf', array_values($aMask)); 
+            $this->aInputs[$CNF['FIELD_NAME']]['attrs']['onblur'] = $sOnBlur;
+        }
+    }
+    
+    public function insert ($aValsToAdd = array(), $isIgnore = false)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(isset($this->aInputs[$CNF['FIELD_NAME']])) {
+            $oLanguage = BxDolStudioLanguagesUtils::getInstance();
+            $aLanguages = $oLanguage->getLanguagesExt();
+            $sLanguageCurrent = $oLanguage->getCurrentLangName(false);
+
+            $sTitle = BxDolForm::getSubmittedValue($CNF['FIELD_TITLE'] . '-' . $sLanguageCurrent, $this->aFormAttrs['method']);
+            $sName = $this->_oModule->_oConfig->getBundleName($sTitle);
+
+            BxDolForm::setSubmittedValue($CNF['FIELD_TITLE'], '_bx_credits_txt_bundle_title_' . strtolower($sName), $this->aFormAttrs['method']);
+        }
+
+        return parent::insert ($aValsToAdd, $isIgnore);
+    }
+
+    function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $sNameKey = $CNF['FIELD_NAME'];
+        if(isset($this->aInputs[$sNameKey])) {
+            $sName = $this->getCleanValue($sNameKey);
+            $aContentInfo = $this->_oModule->_oDb->getBundle(array('type' => 'id', 'id' => $iContentId));
+
+            if($aContentInfo[$sNameKey] != $sName) {
+                $sName = $this->_oModule->_oConfig->getBundleName($sName);
+                BxDolForm::setSubmittedValue($sNameKey, $sName, $this->aFormAttrs['method'], $this->_aSpecificValues);
+            }
+        }
+
+        return parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
+    }
+
+    public function getBundleId()
+    {
+        $iResult = 0;
+
+        $aIds = bx_get('ids');
+        if(!$aIds || !is_array($aIds)) {
+            $sId = bx_get('id');
+            if(!empty($sId))
+                $iResult = $sId;
+        }
+        else
+            $iResult = array_shift($aIds);
+
+        return (int)$iResult;
     }
 }
 

+ 3 - 16
modules/boonex/credits/classes/BxCreditsGridBundles.php

@@ -37,16 +37,6 @@ class BxCreditsGridBundles extends BxTemplGrid
                 'order' => $this->_oModule->_oDb->getBundle(array('type' => 'order_max')) + 1
             );
 
-            $oLanguage = BxDolStudioLanguagesUtils::getInstance();
-            $aLanguages = $oLanguage->getLanguagesExt();
-            $sLanguageCurrent = $oLanguage->getCurrentLangName(false);
-
-            $sTitle = BxDolForm::getSubmittedValue('title-' . $sLanguageCurrent, $oForm->aFormAttrs['method']);
-            $sName = uriGenerate(strtolower($sTitle), $CNF['TABLE_BUNDLES'], 'name', 'cat', '_');
-
-            $aValsToAdd['name'] = $sName;
-            BxDolForm::setSubmittedValue('title', '_bx_credits_txt_bundle_title_' . $sName, $oForm->aFormAttrs['method']);
-
             $iId = (int)$oForm->insert($aValsToAdd);
             if($iId != 0)
                 $aRes = array('grid' => $this->getCode(false), 'blink' => $iId);
@@ -63,7 +53,7 @@ class BxCreditsGridBundles extends BxTemplGrid
                 'action' => $sAction
             )));
 
-            echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false))));
+            echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false, 'removeOnClose' => true))));
         }
     }
     
@@ -92,10 +82,7 @@ class BxCreditsGridBundles extends BxTemplGrid
         $oForm->initChecker($aBundle);
 
         if($oForm->isSubmittedAndValid()) {
-            $aValsToAdd = array();
-
-            $iId = (int)$oForm->update($iId);
-            if($iId != 0)
+            if($oForm->update($iId) !== false)
                 $aRes = array('grid' => $this->getCode(false), 'blink' => $iId);
             else
                 $aRes = array('msg' => _t('_bx_credits_txt_err_cannot_perform_action'));
@@ -110,7 +97,7 @@ class BxCreditsGridBundles extends BxTemplGrid
                 'action' => $sAction
             )));
 
-            echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false))));
+            echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false, 'removeOnClose' => true))));
         }
     }
 

+ 22 - 0
modules/boonex/credits/classes/BxCreditsModule.php

@@ -32,6 +32,28 @@ class BxCreditsModule extends BxBaseModGeneralModule
         echoJson($a);
     }
 
+    public function actionCheckBundleName()
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+    	$sName = bx_process_input(bx_get('name'));
+    	if(empty($sName))
+            return echoJson(array());
+
+        $sResult = '';
+
+        $iId = (int)bx_get('id');
+        if(!empty($iId)) {
+            $aBundle = $this->_oDb->getBundle(array('type' => 'id', 'id' => $iId)); 
+            if(strcmp($sName, $aBundle[$CNF['FIELD_NAME']]) == 0) 
+                $sResult = $sName;
+        }
+
+    	echoJson(array(
+            'name' => !empty($sResult) ? $sResult : $this->_oConfig->getBundleName($sName)
+    	));
+    }
+
     public function actionCheckout()
     {
         $iBuyerId = bx_get_logged_profile_id();

+ 3 - 0
modules/boonex/credits/install/langs/en.xml

@@ -21,6 +21,9 @@
     <string name="_bx_credits_form_bundle_input_sys_title"><![CDATA[Title]]></string>
     <string name="_bx_credits_form_bundle_input_title"><![CDATA[Title]]></string>
     <string name="_bx_credits_form_bundle_input_title_err"><![CDATA[This field is essential. Please fill it in for all languages.]]></string>
+    <string name="_bx_credits_form_bundle_input_sys_name"><![CDATA[Name]]></string>
+    <string name="_bx_credits_form_bundle_input_name"><![CDATA[Name]]></string>
+    <string name="_bx_credits_form_bundle_input_name_err"><![CDATA[This field is essential for API calls. Please fill it in.]]></string>
     <string name="_bx_credits_form_bundle_input_sys_amount"><![CDATA[Amount]]></string>
     <string name="_bx_credits_form_bundle_input_amount"><![CDATA[Amount]]></string>
     <string name="_bx_credits_form_bundle_input_amount_err"><![CDATA[This field is essential. Please fill it in.]]></string>

+ 18 - 15
modules/boonex/credits/install/sql/install.sql

@@ -123,6 +123,7 @@ INSERT INTO `sys_form_displays`(`object`, `display_name`, `module`, `view_mode`,
 
 INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES 
 ('bx_credits_bundle', 'bx_credits', 'title', '', '', 0, 'text_translatable', '_bx_credits_form_bundle_input_sys_title', '_bx_credits_form_bundle_input_title', '', 1, 0, 0, '', '', '', 'AvailTranslatable', 'a:1:{i:0;s:5:"title";}', '_bx_credits_form_bundle_input_title_err', 'Xss', '', 1, 0),
+('bx_credits_bundle', 'bx_credits', 'name', '', '', 0, 'text', '_bx_credits_form_bundle_input_sys_name', '_bx_credits_form_bundle_input_name', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_credits_form_bundle_input_name_err', 'Xss', '', 1, 0),
 ('bx_credits_bundle', 'bx_credits', 'amount', '', '', 0, 'text', '_bx_credits_form_bundle_input_sys_amount', '_bx_credits_form_bundle_input_amount', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_credits_form_bundle_input_amount_err', 'Xss', '', 1, 0),
 ('bx_credits_bundle', 'bx_credits', 'bonus', '', '', 0, 'text', '_bx_credits_form_bundle_input_sys_bonus', '_bx_credits_form_bundle_input_bonus', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
 ('bx_credits_bundle', 'bx_credits', 'price', '', '', 0, 'text', '_bx_credits_form_bundle_input_sys_price', '_bx_credits_form_bundle_input_price', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_credits_form_bundle_input_price_err', 'Xss', '', 1, 0),
@@ -131,21 +132,23 @@ INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `ch
 ('bx_credits_bundle', 'bx_credits', 'do_cancel', '_bx_credits_form_bundle_input_do_cancel', '', 0, 'button', '_bx_credits_form_bundle_input_sys_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 1, 0);
 
 INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
-('bx_credits_bundle_add', 'title', 2147483647, 1, 1),
-('bx_credits_bundle_add', 'amount', 2147483647, 1, 2),
-('bx_credits_bundle_add', 'bonus', 2147483647, 1, 3),
-('bx_credits_bundle_add', 'price', 2147483647, 1, 4),
-('bx_credits_bundle_add', 'controls', 2147483647, 1, 5),
-('bx_credits_bundle_add', 'do_submit', 2147483647, 1, 6),
-('bx_credits_bundle_add', 'do_cancel', 2147483647, 1, 7),
-
-('bx_credits_bundle_edit', 'title', 2147483647, 1, 1),
-('bx_credits_bundle_edit', 'amount', 2147483647, 1, 2),
-('bx_credits_bundle_edit', 'bonus', 2147483647, 1, 3),
-('bx_credits_bundle_edit', 'price', 2147483647, 1, 4),
-('bx_credits_bundle_edit', 'controls', 2147483647, 1, 5),
-('bx_credits_bundle_edit', 'do_submit', 2147483647, 1, 6),
-('bx_credits_bundle_edit', 'do_cancel', 2147483647, 1, 7);
+('bx_credits_bundle_add', 'name', 2147483647, 1, 1),
+('bx_credits_bundle_add', 'title', 2147483647, 1, 2),
+('bx_credits_bundle_add', 'amount', 2147483647, 1, 3),
+('bx_credits_bundle_add', 'bonus', 2147483647, 1, 4),
+('bx_credits_bundle_add', 'price', 2147483647, 1, 5),
+('bx_credits_bundle_add', 'controls', 2147483647, 1, 6),
+('bx_credits_bundle_add', 'do_submit', 2147483647, 1, 7),
+('bx_credits_bundle_add', 'do_cancel', 2147483647, 1, 8),
+
+('bx_credits_bundle_edit', 'name', 2147483647, 1, 1),
+('bx_credits_bundle_edit', 'title', 2147483647, 1, 2),
+('bx_credits_bundle_edit', 'amount', 2147483647, 1, 3),
+('bx_credits_bundle_edit', 'bonus', 2147483647, 1, 4),
+('bx_credits_bundle_edit', 'price', 2147483647, 1, 5),
+('bx_credits_bundle_edit', 'controls', 2147483647, 1, 6),
+('bx_credits_bundle_edit', 'do_submit', 2147483647, 1, 7),
+('bx_credits_bundle_edit', 'do_cancel', 2147483647, 1, 8);
 
 
 -- STUDIO: page & widget

+ 26 - 0
modules/boonex/credits/js/studio.js

@@ -17,6 +17,32 @@ function BxCreditsStudio(oOptions) {
     this._aHtmlIds = oOptions.aHtmlIds == undefined ? {} : oOptions.aHtmlIds;
 }
 
+BxCreditsStudio.prototype.checkBundleName = function(sNameId, iId) {
+    var oDate = new Date();
+
+    var oName = jQuery("[name='" + sNameId + "']");
+    var sName = oName.val();
+
+    if(!sName.length)
+        return;
+
+    jQuery.get(
+        this._sActionsUrl + 'check_bundle_name',
+        {
+            name: sName,
+            id: iId && parseInt(iId) > 0 ? iId : 0,
+            _t: oDate.getTime()
+        },
+        function(oData) {
+            if(!oData || oData.name == undefined)
+                return;
+
+            oName.val(oData.name);
+        },
+        'json'
+    );
+};
+
 BxCreditsStudio.prototype.loadingInButton = function(e, bShow) {
     if($(e).length)
         bx_loading_btn($(e), bShow);

+ 3 - 0
modules/boonex/russian/data/langs/bx_credits/ru.xml

@@ -21,6 +21,9 @@
     <string name="_bx_credits_form_bundle_input_sys_title"><![CDATA[Заголовок]]></string>
     <string name="_bx_credits_form_bundle_input_title"><![CDATA[Заголовок]]></string>
     <string name="_bx_credits_form_bundle_input_title_err"><![CDATA[Это поле обязательно. Пожалуйста, заполните его на всех языках.]]></string>
+    <string name="_bx_credits_form_bundle_input_sys_name"><![CDATA[Имя]]></string>
+    <string name="_bx_credits_form_bundle_input_name"><![CDATA[Имя]]></string>
+    <string name="_bx_credits_form_bundle_input_name_err"><![CDATA[Это поле обязательно для использования в API запросах. Пожалуйста, заполните его.]]></string>
     <string name="_bx_credits_form_bundle_input_sys_amount"><![CDATA[Количество]]></string>
     <string name="_bx_credits_form_bundle_input_amount"><![CDATA[Количество]]></string>
     <string name="_bx_credits_form_bundle_input_amount_err"><![CDATA[Это поле обязательно. Пожалуйста, заполните его.]]></string>