فهرست منبع

#31 - Possibility to enter field name in Forms Builder (Developer module).

AntonLV 11 سال پیش
والد
کامیت
a6e0f579b3

+ 10 - 0
modules/boonex/developer/classes/BxDevFormsField.php

@@ -133,6 +133,16 @@ class BxDevFormsFieldFile extends BxTemplStudioFormsFieldFile
     }
 }
 
+class BxDevFormsFieldFiles extends BxTemplStudioFormsFieldFiles
+{
+    function __construct($aParams = array(), $aField = array())
+    {
+        parent::__construct($aParams, $aField);
+
+        BxDevFunctions::changeFormField($this->aParams, $this->aForm['inputs'], $this->oDb);
+    }
+}
+
 class BxDevFormsFieldSlider extends BxTemplStudioFormsFieldSlider
 {
     function __construct($aParams = array(), $aField = array())

+ 12 - 6
modules/boonex/developer/classes/BxDevFunctions.php

@@ -24,15 +24,21 @@ class BxDevFunctions
         $aInputs['module']['values'] = array_merge(array('' => _t('_bx_dev_frm_txt_select_module')), BxDolStudioUtils::getModules());
         $aInputs['module']['value'] = $aParams['module'];
 
-        $aForms = array();
+        $aInputs['object']['type'] = 'select';
+        $aInputs['object']['value'] = $aParams['object'];
+        $aInputs['object']['values'] = array();
+
+    	$aForms = array();
         $oDb->getForms(array('type' => 'by_module', 'value' => $aParams['module']), $aForms, false);
-        foreach($aForms as $aForm)
-            $aInputs['object']['values'][$aForm['object']] = _t($aForm['title']);
-        asort($aInputs['object']['values']);
+        if(!empty($aForms) && is_array($aForms)) {
+	        foreach($aForms as $aForm)
+	            $aInputs['object']['values'][$aForm['object']] = _t($aForm['title']);
 
-        $aInputs['object']['type'] = 'select';
+	        asort($aInputs['object']['values']);
+        }
         $aInputs['object']['values'] = array_merge(array('' => _t('_bx_dev_frm_txt_select_object')), $aInputs['object']['values']);
-        $aInputs['object']['value'] = $aParams['object'];
+
+        $aInputs['name']['type'] = 'text';
 
         $sTrlTypePostfix = '_translatable';
         $sTrlCheckFuncPostfix = 'Translatable';

+ 3 - 2
modules/boonex/english/data/langs/system/en.xml

@@ -633,7 +633,7 @@
 	<string name="_adm_form_dsc_field_attrs_step"><![CDATA[Enter numeric value]]></string>
 	<string name="_adm_form_dsc_field_caption"><![CDATA[Item name displayed on site]]></string>
 	<string name="_adm_form_dsc_field_caption_block_header"><![CDATA[Title for the group of fields]]></string>
-	<string name="_adm_form_dsc_field_caption_system"><![CDATA[Field name, displayed in Studio only.]]></string>
+	<string name="_adm_form_dsc_field_caption_system"><![CDATA[Field title, displayed in Studio only.]]></string>
 	<string name="_adm_form_dsc_field_checker_error_captcha"><![CDATA[Error message to display if text doesn't match with text on the image]]></string>
 	<string name="_adm_form_dsc_field_checker_params_preg"><![CDATA[Use standard <a href="http://en.wikipedia.org/wiki/Regular_expression" target="_blank">regular expression</a>. Example: ^[A-Za-z0-9]{3,16}$]]></string>
 	<string name="_adm_form_dsc_field_collapsed"><![CDATA[Pack down the group of this field by default]]></string>
@@ -691,7 +691,7 @@
 	<string name="_adm_form_txt_field_attrs_src"><![CDATA[Image Source]]></string>
 	<string name="_adm_form_txt_field_attrs_step"><![CDATA[Step]]></string>
 	<string name="_adm_form_txt_field_caption"><![CDATA[Title]]></string>
-	<string name="_adm_form_txt_field_caption_system"><![CDATA[System Name]]></string>
+	<string name="_adm_form_txt_field_caption_system"><![CDATA[System Title]]></string>
 	<string name="_adm_form_txt_field_checked"><![CDATA[Checked by default]]></string>
 	<string name="_adm_form_txt_field_checked_switcher"><![CDATA[Enabled by default]]></string>
 	<string name="_adm_form_txt_field_checker_avail"><![CDATA[Data Availability (something must be entered) ]]></string>
@@ -717,6 +717,7 @@
 	<string name="_adm_form_txt_field_html_standard"><![CDATA[Standard]]></string>
 	<string name="_adm_form_txt_field_info"><![CDATA[Description]]></string>
 	<string name="_adm_form_txt_field_module"><![CDATA[Module]]></string>
+	<string name="_adm_form_txt_field_name"><![CDATA[Name]]></string>
 	<string name="_adm_form_txt_field_object"><![CDATA[Form]]></string>
 	<string name="_adm_form_txt_field_required"><![CDATA[Mandatory]]></string>
 	<string name="_adm_form_txt_field_show_to_popup"><![CDATA[Show "{0}" form field to: ]]></string>

+ 3 - 2
modules/boonex/russian/data/langs/system/ru.xml

@@ -633,7 +633,7 @@
 	<string name="_adm_form_dsc_field_attrs_step"><![CDATA[Введите числовое значение]]></string>
 	<string name="_adm_form_dsc_field_caption"><![CDATA[Название элемента, отображаемое на сайте]]></string>
 	<string name="_adm_form_dsc_field_caption_block_header"><![CDATA[Заголовок для группы полей]]></string>
-	<string name="_adm_form_dsc_field_caption_system"><![CDATA[Название поля, отображается только в Студии.]]></string>
+	<string name="_adm_form_dsc_field_caption_system"><![CDATA[Заголовок поля, отображается только в Студии.]]></string>
 	<string name="_adm_form_dsc_field_checker_error_captcha"><![CDATA[Сообщение об ошибке, когда текст на картинке не соответствует введённому тексту]]></string>
 	<string name="_adm_form_dsc_field_checker_params_preg"><![CDATA[Используйте стандартные <a href="http://en.wikipedia.org/wiki/Regular_expression" target="_blank">регулярные выражения</a>. Например: ^[A-Za-z0-9]{3,16}$]]></string>
 	<string name="_adm_form_dsc_field_collapsed"><![CDATA[Упаковать группу данного поля по умолчанию]]></string>
@@ -691,7 +691,7 @@
 	<string name="_adm_form_txt_field_attrs_src"><![CDATA[Адрес Картинки]]></string>
 	<string name="_adm_form_txt_field_attrs_step"><![CDATA[Шаг]]></string>
 	<string name="_adm_form_txt_field_caption"><![CDATA[Заголовок]]></string>
-	<string name="_adm_form_txt_field_caption_system"><![CDATA[Системное имя]]></string>
+	<string name="_adm_form_txt_field_caption_system"><![CDATA[Системный Заголовок]]></string>
 	<string name="_adm_form_txt_field_checked"><![CDATA[Отмечено по умолчанию]]></string>
 	<string name="_adm_form_txt_field_checked_switcher"><![CDATA[Включено по умолчанию]]></string>
 	<string name="_adm_form_txt_field_checker_avail"><![CDATA[Доступность данных (нужно ввести значение) ]]></string>
@@ -717,6 +717,7 @@
 	<string name="_adm_form_txt_field_html_standard"><![CDATA[Стандартный]]></string>
 	<string name="_adm_form_txt_field_info"><![CDATA[Описание]]></string>
 	<string name="_adm_form_txt_field_module"><![CDATA[Модуль]]></string>
+	<string name="_adm_form_txt_field_name"><![CDATA[Имя]]></string>
 	<string name="_adm_form_txt_field_object"><![CDATA[Форма]]></string>
 	<string name="_adm_form_txt_field_required"><![CDATA[Необходимый]]></string>
 	<string name="_adm_form_txt_field_show_to_popup"><![CDATA[Показывать "{0}" поле формы для: ]]></string>

+ 8 - 0
studio/classes/BxDolStudioFormsField.php

@@ -69,6 +69,14 @@ class BxDolStudioFormsField extends BxDol
         return $this->oDb->alterAdd($this->aParams['table'], $sName, $this->aParams['table_field_type']);
     }
 
+	function alterChange($sNameOld, $sNameNews)
+    {
+        if(!isset($this->aParams['table'], $this->aParams['table_alter'], $this->aParams['table_field_type']) || $this->aParams['table_alter'] !== true)
+            return '';
+
+        return $this->oDb->alterChange($this->aParams['table'], $sNameOld, $sNameNews, $this->aParams['table_field_type']);
+    }
+
     function alterRemove($sName)
     {
         if(!isset($this->aParams['table'], $this->aParams['table_alter']) || $this->aParams['table_alter'] !== true)

+ 9 - 0
studio/classes/BxDolStudioFormsQuery.php

@@ -268,6 +268,9 @@ class BxDolStudioFormsQuery extends BxDolDb
         if(empty($aDisplay) || !is_array($aDisplay))
             return false;
 
+		$sSql = $this->prepare("DELETE FROM `tdi` USING `sys_form_display_inputs` AS `tdi` LEFT JOIN `sys_form_inputs` AS `ti` ON `tdi`.`input_name`=`ti`.`name` WHERE 1 AND `tdi`.`display_name`=? AND `ti`.`id` IS NULL", $sDisplayName);
+		$this->query($sSql);
+
         $sSql = $this->prepare("INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`) SELECT ? AS `display_name`,`ti`.`name` AS `input_name` FROM `sys_form_inputs` AS `ti` LEFT JOIN `sys_form_display_inputs` AS `tdi` ON  `ti`.`name`=`tdi`.`input_name` AND `tdi`.`display_name`=? WHERE 1 AND `ti`.`object`=? AND `tdi`.`id` IS NULL", $sDisplayName, $sDisplayName, $sObject);
         return (int)$this->query($sSql) > 0;
     }
@@ -445,6 +448,12 @@ class BxDolStudioFormsQuery extends BxDolDb
         $this->query($sSql);
     }
 
+    function alterChange($sTable, $sFieldOld, $sFieldNew, $sTypeNew)
+    {
+        $sSql = "ALTER TABLE `" . $sTable . "` CHANGE `" . $sFieldOld . "` `" . $sFieldNew . "` " . $sTypeNew;
+        $this->query($sSql);
+    }
+
     function alterRemove($sTable, $sField)
     {
         $sSql = "ALTER TABLE `" . $sTable . "` DROP `" . $sField . "`";

+ 17 - 11
studio/template/scripts/BxBaseStudioFormsField.php

@@ -101,20 +101,23 @@ class BxBaseStudioFormsField extends BxDolStudioFormsField
 
         $oForm->initChecker();
         if($oForm->isSubmittedAndValid()) {
-            $sInputObject = $oForm->getCleanValue('object');
-
             //--- Process field name.
-            $sLanguage = BxDolStudioLanguagesUtils::getInstance()->getCurrentLangName(false);
-            $sCaption = BxDolForm::getSubmittedValue('caption-' . $sLanguage, $aForm['form_attrs']['method']);
-
-            $sName = $this->getFieldName($sInputObject, $sCaption);
-            BxDolForm::setSubmittedValue('name', $sName, $oForm->aFormAttrs['method']);
+            $sInputName = $oForm->getCleanValue('name');
+            if(empty($sInputName)) {
+            	$sInputObject = $oForm->getCleanValue('object');
+
+	            $sLanguage = BxDolStudioLanguagesUtils::getInstance()->getCurrentLangName(false);
+	            $sInputCaption = BxDolForm::getSubmittedValue('caption-' . $sLanguage, $aForm['form_attrs']['method']);
+	
+	            $sInputName = $this->getFieldName($sInputObject, $sInputCaption);
+	            BxDolForm::setSubmittedValue('name', $sInputName, $oForm->aFormAttrs['method']);
+            }
 
             $this->onSubmitField($oForm);
             if(($iId = $oForm->insert()) === false)
                 return false;
 
-            $this->alterAdd($sName);
+            $this->alterAdd($sInputName);
             return true;
         } else
             return BxTemplStudioFunctions::getInstance()->popupBox('adm-form-field-add-' . $this->aParams['display'] . '-popup', _t('_adm_form_txt_field_add_popup'), BxDolStudioTemplate::getInstance()->parseHtmlByName('form_add_field.html', array(
@@ -135,13 +138,15 @@ class BxBaseStudioFormsField extends BxDolStudioFormsField
 
         $oForm->initChecker();
         if($oForm->isSubmittedAndValid()) {
-            $sInputObject = $oForm->getCleanValue('object');
-            $sInputName = $oForm->getCleanValue('name');
+        	$sInputNameOld = $this->aField['name'];
+            $sInputNameNew = $oForm->getCleanValue('name');
 
             $this->onSubmitField($oForm);
             if($oForm->update((int)$this->aField['id']) === false)
                 return false;
 
+			if(strcmp($sInputNameOld, $sInputNameNew) != 0)
+				$this->alterChange($sInputNameOld, $sInputNameNew);
             return true;
         } else
             return BxTemplStudioFunctions::getInstance()->popupBox('adm-form-field-edit-' . $this->aField['type'] . '-popup', _t('_adm_form_txt_field_edit_popup', _t($this->aField['caption'])), BxDolStudioTemplate::getInstance()->parseHtmlByName('form_add_field.html', array(
@@ -174,7 +179,7 @@ class BxBaseStudioFormsField extends BxDolStudioFormsField
             if(!in_array($sKey, array('type_display', 'controls')))
                 switch($sKey) {
                     case 'value':
-                        $aForm['inputs'][$sKey]['value'] = $this->aField[$sKey];;
+                        $aForm['inputs'][$sKey]['value'] = $this->aField[$sKey];
 
                         if(in_array($aForm['inputs']['type']['value'], array('select', 'select_multiple', 'radio_set', 'checkbox_set'))) {
                             $sList = trim($this->getFieldValues($this->aField), BX_DATA_LISTS_KEY_PREFIX . ' ');
@@ -633,6 +638,7 @@ class BxBaseStudioFormsFieldBlockHeader extends BxBaseStudioFormsField
                 'name' => array(
                     'type' => 'hidden',
                     'name' => 'name',
+                	'caption' => _t('_adm_form_txt_field_name'),
                     'value' => '',
                     'db' => array (
                         'pass' => 'Xss',