AntonLV 7 лет назад
Родитель
Сommit
eb0a055c7f

+ 3 - 0
inc/classes/BxDolLabelQuery.php

@@ -61,6 +61,9 @@ class BxDolLabelQuery extends BxDolDb
                 );
 
                 $sWhereClause = " AND `tl`.`parent`=:parent";
+
+                if(!empty($aParams['exclude']) && is_array($aParams['exclude']))
+                    $sWhereClause .= " AND `tl`.`id` NOT IN(" . $this->implode_escape($aParams['exclude']) . ")";
                 break;
 
             case 'parent_order':

+ 3 - 2
install/sql/system.sql

@@ -3942,7 +3942,8 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `conf
 ('sys_studio_search_forms_fields', 'single', 'edit', '', 'pencil-alt', 0, 1),
 ('sys_studio_search_forms_fields', 'independent', 'reset', '_adm_form_btn_search_forms_fields_reset', '', 0, 1),
 
-('sys_studio_labels', 'independent', 'add', '_adm_form_btn_labels_add', '', 0, 1),
+('sys_studio_labels', 'independent', 'back', '_adm_form_btn_labels_back', '', 0, 1),
+('sys_studio_labels', 'independent', 'add', '_adm_form_btn_labels_add', '', 0, 2),
 ('sys_studio_labels', 'single', 'edit', '', 'pencil-alt', 0, 1),
 ('sys_studio_labels', 'single', 'delete', '', 'remove', 1, 2);
 
@@ -4463,7 +4464,7 @@ CREATE TABLE `sys_labels` (
   `order` int(11) NOT NULL DEFAULT 0,
   `value` varchar(128) NOT NULL,
   PRIMARY KEY (id),
-  UNIQUE KEY `value` (`value`)
+  UNIQUE KEY `value` (`value`(191))
 );
 
 -- --------------------------------------------------------

+ 4 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -678,6 +678,7 @@
 	<string name="_adm_form_btn_forms_edit"><![CDATA[Edit form]]></string>
 	<string name="_adm_form_btn_forms_save"><![CDATA[Save]]></string>
         <string name="_adm_form_btn_labels_add"><![CDATA[Add]]></string>
+        <string name="_adm_form_btn_labels_back"><![CDATA[Back]]></string>
         <string name="_adm_form_btn_labels_cancel"><![CDATA[Cancel]]></string>
         <string name="_adm_form_btn_labels_submit"><![CDATA[Submit]]></string>
 	<string name="_adm_form_btn_pre_lists_add"><![CDATA[Add]]></string>
@@ -885,6 +886,9 @@
         <string name="_adm_form_txt_labels_n_items"><![CDATA[{0} items]]></string>
         <string name="_adm_form_txt_labels_parent"><![CDATA[Parent]]></string>
         <string name="_adm_form_txt_labels_parent_empty"><![CDATA[No Parent]]></string>
+        <string name="_adm_form_txt_labels_grandparent_label"><![CDATA[Grandparent Label]]></string>
+        <string name="_adm_form_txt_labels_parent_label"><![CDATA[Parent Label]]></string>
+        <string name="_adm_form_txt_labels_sibling_labels"><![CDATA[Sibling Labels]]></string>
         <string name="_adm_form_txt_labels_value"><![CDATA[Label]]></string>
 	<string name="_adm_form_txt_pre_lists_country"><![CDATA[Country]]></string>
 	<string name="_adm_form_txt_pre_lists_create_popup"><![CDATA[Add New List]]></string>

+ 4 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -678,6 +678,7 @@
 	<string name="_adm_form_btn_forms_edit"><![CDATA[Редактировать Форму]]></string>
 	<string name="_adm_form_btn_forms_save"><![CDATA[Сохранить]]></string>
         <string name="_adm_form_btn_labels_add"><![CDATA[Добавить]]></string>
+        <string name="_adm_form_btn_labels_back"><![CDATA[Назад]]></string>
         <string name="_adm_form_btn_labels_cancel"><![CDATA[Отменить]]></string>
         <string name="_adm_form_btn_labels_submit"><![CDATA[Отправить]]></string>
 	<string name="_adm_form_btn_pre_lists_add"><![CDATA[Добавить]]></string>
@@ -885,6 +886,9 @@
         <string name="_adm_form_txt_labels_n_items"><![CDATA[{0} элемент]]></string>
         <string name="_adm_form_txt_labels_parent"><![CDATA[Родитель]]></string>
         <string name="_adm_form_txt_labels_parent_empty"><![CDATA[Нет родителя]]></string>
+        <string name="_adm_form_txt_labels_grandparent_label"><![CDATA[Прородительская метка]]></string>
+        <string name="_adm_form_txt_labels_parent_label"><![CDATA[Родительская метка]]></string>
+        <string name="_adm_form_txt_labels_sibling_labels"><![CDATA[Метки того же уровня]]></string>
         <string name="_adm_form_txt_labels_value"><![CDATA[Метка]]></string>        
 	<string name="_adm_form_txt_pre_lists_country"><![CDATA[Страна]]></string>
 	<string name="_adm_form_txt_pre_lists_create_popup"><![CDATA[Добавить новый список]]></string>

+ 41 - 15
studio/template/scripts/BxBaseStudioFormsLabels.php

@@ -12,14 +12,17 @@ bx_import('BxTemplStudioFormView');
 
 class BxStudioFormsLabelsCheckerHelper extends BxDolFormCheckerHelper
 {
-    public function checkAvailUnique($s)
+    public function checkAvailUnique($s, $aExclude = array())
     {
         $aLabel = BxDolLabel::getInstance()->getLabels(array(
             'type' => 'value', 
             'value' => $s
         ));
 
-        return empty($aLabel) || !is_array($aLabel);
+        if(!is_array($aExclude))
+            $aExclude = array($aExclude);
+
+        return empty($aLabel) || !is_array($aLabel) || in_array($aLabel['id'], $aExclude);
     }
 }
 
@@ -149,6 +152,20 @@ class BxBaseStudioFormsLabels extends BxDolStudioFormsLabels
         $oForm->addCssJs();
     }
 
+    protected function _getActionBack($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
+    {
+        if(empty($this->_iParent))
+            return '';
+
+        $sUrl = bx_append_url_params($this->_sBaseUrl, array('parent' => $this->_aParent['parent']));
+
+    	$a['attr'] = array_merge($a['attr'], array(
+            "onclick" => "window.open('" . $sUrl . "','_self');"
+    	));
+
+    	return $this->_getActionDefault ($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
+    }
+
     protected function _getCellModule($mixedValue, $sKey, $aField, $aRow)
     {
         $mixedValue = $this->_limitMaxLength($this->getModuleTitle($aRow['module']), $sKey, $aField, $aRow, $this->_isDisplayPopupOnTextOverflow);
@@ -216,7 +233,7 @@ class BxBaseStudioFormsLabels extends BxDolStudioFormsLabels
                     ),
                     'checker' => array (
                         'func' => 'AvailUnique',
-                        'params' => array(),
+                        'params' => array(isset($aLabel['id']) ? (int)$aLabel['id'] : 0),
                         'error' => _t('_adm_form_err_labels_value'),
                     ),
                 ),
@@ -241,23 +258,32 @@ class BxBaseStudioFormsLabels extends BxDolStudioFormsLabels
             )
         );
 
-        if($sAction == 'add') {
-            if(empty($this->_iParent))
+        if(empty($this->_iParent))
+            $aForm['inputs']['parent']['values'][] = array('key' => 0, 'value' => _t('_adm_form_txt_labels_parent_empty'));
+        else {
+            if(!empty($this->_aParent['parent'])) {
+                $aForm['inputs']['parent']['values'][] = array('key' => '', 'value' => _t('_adm_form_txt_labels_grandparent_label'), 'attrs' => array('disabled' => 'disabled'));
+
+                $aGrandParent = $this->_oLabel->getLabels(array('type' => 'id', 'id' => $this->_aParent['parent']));
+                $aForm['inputs']['parent']['values'][] = array('key' => $aGrandParent['id'], 'value' => $aGrandParent['value']);
+            }
+            else
                 $aForm['inputs']['parent']['values'][] = array('key' => 0, 'value' => _t('_adm_form_txt_labels_parent_empty'));
-            else 
-                $aForm['inputs']['parent']['values'][] = array('key' => $this->_iParent, 'value' => $this->_aParent['value']);
-            
-            $aForm['inputs']['parent']['values'][] = array('key' => '', 'value' => '----', 'attrs' => array('disabled' => 'disabled'));
 
-            $aLabels = $this->_oLabel->getLabels(array('type' => 'parent', 'parent' => $this->_iParent));
-            foreach($aLabels as $aLabel)
+            $aForm['inputs']['parent']['values'][] = array('key' => '', 'value' => _t('_adm_form_txt_labels_parent_label'), 'attrs' => array('disabled' => 'disabled'));
+            $aForm['inputs']['parent']['values'][] = array('key' => $this->_aParent['id'], 'value' => $this->_aParent['value']);
+        }
+
+        $aSiblings = $this->_oLabel->getLabels(array('type' => 'parent', 'parent' => $this->_iParent, 'exclude' => array(!empty($aLabel['id']) ? (int)$aLabel['id'] : 0)));
+        if(!empty($aSiblings) && is_array($aSiblings)) {
+            $aForm['inputs']['parent']['values'][] = array('key' => '', 'value' => _t('_adm_form_txt_labels_sibling_labels'), 'attrs' => array('disabled' => 'disabled'));
+
+            foreach($aSiblings as $aSiblings)
                 $aForm['inputs']['parent']['values'][] = array(
-                    'key' => $aLabel['id'], 
-                    'value' => $aLabel['value']
+                    'key' => $aSiblings['id'], 
+                    'value' => $aSiblings['value']
                 );
         }
-        else
-            $aForm['inputs']['parent']['type'] = 'hidden';
 
         return new BxTemplStudioFormView($aForm);
     }