RomanL 8 năm trước cách đây
mục cha
commit
5cbe920a20

+ 12 - 0
inc/classes/BxDolForm.php

@@ -1417,6 +1417,18 @@ class BxDolFormCheckerHelper
     {
         return self::checkPreg ($s, '#^\d+\-\d+\-\d+$#');
     }
+    static public function checkDateRange ($s, $iMin, $iMax)
+    {
+        if (self::checkPreg ($s, '#^\d+\-\d+\-\d+$#')){
+            $dDate = new DateTime($s);
+            $dDateMax = new DateTime("-" . $iMin . " years");
+            $dDateMin = new DateTime("-" . $iMax . " years");
+            if ($dDate > $dDateMin && $dDate < $dDateMax){
+                return true;
+            }
+        }
+        return false;
+    }
     static public function checkDateTime ($s)
     {
         // remove unnecessary opera's input value;

+ 7 - 3
inc/classes/BxDolSearchExtendedQuery.php

@@ -50,7 +50,11 @@ class BxDolSearchExtendedQuery extends BxDolDb
                 $iNow = time();
                 $sCaptionKey = (!empty($aField['caption']) ? $aField['caption'] : '_sys_form_input_' . $sField) . '_' . $iNow;
                 $sInfoKey = (!empty($aField['info']) ? $aField['info'] : '_sys_form_input_' . $sField . '_info') . '_' . $iNow;
-
+                $sSearchType = isset($aField['search_type']) ? $aField['search_type'] : reset(BxDolSearchExtended::$TYPE_TO_TYPE_SEARCH[$aField['type']]);
+                $sSearchValue =  isset($aField['search_value']) ? $aField['search_value'] : (in_array($aField['type'], array('checkbox', 'switcher')) ? $aField['value'] : '');
+                if ($sSearchType == 'datepicker_range_age' || $sSearchType == 'datepicker_range'){
+                    $sSearchValue =  BxDolService::getSerializedService($aObject['module'], 'get_search_options', array($sField, $aField['type'], $sSearchType));
+                }
                 $bResult = (int)$oDb->query("INSERT INTO `sys_search_extended_fields`(`object`, `name`, `type`, `caption`, `info`, `values`, `pass`, `search_type`, `search_value`, `search_operator`, `active`, `order`) VALUES(:object, :name, :type, :caption, :info, :values, :pass, :search_type, :search_value, :search_operator, '1', :order)", array(
                     'object' => $aObject['object'], 
                     'name' => $sField,
@@ -59,8 +63,8 @@ class BxDolSearchExtendedQuery extends BxDolDb
                 	'info' => $sInfoKey,
                     'values' => $aField['values'],
                     'pass' => $aField['pass'],
-                    'search_type' => isset($aField['search_type']) ? $aField['search_type'] : reset(BxDolSearchExtended::$TYPE_TO_TYPE_SEARCH[$aField['type']]),
-                    'search_value' => isset($aField['search_value']) ? $aField['search_value'] : (in_array($aField['type'], array('checkbox', 'switcher')) ? $aField['value'] : ''), 
+                    'search_type' => $sSearchType,
+                    'search_value' => $sSearchValue, 
                     'search_operator' => isset($aField['search_operator']) ? $aField['search_operator'] : reset(BxDolSearchExtended::$TYPE_TO_OPERATOR[$aField['type']]),
                     'order' => $iOrder++
                 )) > 0;

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

@@ -766,6 +766,7 @@
 	<string name="_adm_form_txt_field_checker_avail"><![CDATA[Data Availability (something must be entered) ]]></string>
 	<string name="_adm_form_txt_field_checker_captcha"><![CDATA[Captcha (check for correct security image text input)]]></string>
 	<string name="_adm_form_txt_field_checker_date"><![CDATA[Date (check for correct date format)]]></string>
+  <string name="_adm_form_txt_field_checker_date_range"><![CDATA[Age's range]]></string>
 	<string name="_adm_form_txt_field_checker_date_time"><![CDATA[Date and Time (check for correct date and time format)]]></string>
 	<string name="_adm_form_txt_field_checker_email"><![CDATA[E-mail (correct email address format)]]></string>
 	<string name="_adm_form_txt_field_checker_empty"><![CDATA[Select...]]></string>
@@ -1294,7 +1295,6 @@
 	<string name="_adm_stg_cpt_option_sys_install_time"><![CDATA[Installation date]]></string>
 	<string name="_adm_stg_cpt_option_sys_live_updates_interval"><![CDATA[Live updates interval (in milliseconds)]]></string>
 	<string name="_adm_stg_cpt_option_sys_maps_api_key"><![CDATA[Google Maps API key]]></string>
-	<string name="_adm_stg_cpt_option_sys_embed_default"><![CDATA[Embeds provider]]></string>
 	<string name="_adm_stg_cpt_option_sys_embedly_api_key"><![CDATA[Embed.ly API key (fill in to use instead of Iframely)]]></string>
 	<string name="_adm_stg_cpt_option_sys_embedly_api_pattern"><![CDATA[Embed.ly API pattern (fill in to use instead of Iframely)]]></string>
 	<string name="_adm_stg_cpt_option_sys_iframely_api_key"><![CDATA[Iframely API key]]></string>
@@ -2157,13 +2157,12 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_menu_item_title_account_settings_pwd"><![CDATA[Password]]></string>
 	<string name="_sys_menu_item_title_add_content"><![CDATA[Add...]]></string>
 	<string name="_sys_menu_item_title_cart"><![CDATA[Shopping Cart]]></string>
-	<string name="_sys_menu_item_title_cmts_administration"><![CDATA[Manage Сomments]]></string>
+  <string name="_sys_menu_item_title_cmts_administration"><![CDATA[Manage Сomments]]></string>
 	<string name="_sys_menu_item_title_cmts_item_delete"><![CDATA[Delete]]></string>
 	<string name="_sys_menu_item_title_cmts_item_edit"><![CDATA[Edit]]></string>
 	<string name="_sys_menu_item_title_cmts_item_reply"><![CDATA[]]></string>
 	<string name="_sys_menu_item_title_cmts_item_score"><![CDATA[]]></string>
 	<string name="_sys_menu_item_title_cmts_item_vote"><![CDATA[]]></string>
-	<string name="_sys_menu_item_title_cmts_item_more"><![CDATA[]]></string>
 	<string name="_sys_menu_item_title_dashboard"><![CDATA[Dash]]></string>
 	<string name="_sys_menu_item_title_home"><![CDATA[Home]]></string>
 	<string name="_sys_menu_item_title_logout"><![CDATA[Sign out]]></string>
@@ -2225,7 +2224,6 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_menu_item_title_system_cmts_item_report"><![CDATA[Report]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_score"><![CDATA[Score]]></string>
 	<string name="_sys_menu_item_title_system_cmts_item_vote"><![CDATA[Plus]]></string>
-	<string name="_sys_menu_item_title_system_cmts_item_more"><![CDATA[More]]></string>
 	<string name="_sys_menu_item_title_system_dashboard"><![CDATA[Dashboard]]></string>
 	<string name="_sys_menu_item_title_system_home"><![CDATA[Home]]></string>
 	<string name="_sys_menu_item_title_system_login"><![CDATA[Log in]]></string>
@@ -2658,7 +2656,6 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_upgrade_db_and_files_versions_different"><![CDATA[Database and files versions are different, probably previous patch wasn't applied correctly.]]></string>
 	<string name="_sys_upgrade_files_checksum_failed"><![CDATA[Can't apply upgrade because the following files were modified: {0}]]></string>
 	<string name="_sys_upgrade_files_checksum_failed_too_many"><![CDATA[Can't apply upgrade because too many files({0}%) were modified]]></string>
-	<string name="_sys_upgrade_files_checksum_failed_too_many_module"><![CDATA[Can't apply upgrade because too many files({0}%) were modified in {1} module]]></string>
 	<string name="_sys_upgrade_get_version_info_failed"><![CDATA[Get version info failed, please check internet connection on the web-server or web-server firewall]]></string>
 	<string name="_sys_upgrade_patch_checksum_failed"><![CDATA[Downloaded patch file checksum is invalid]]></string>
 	<string name="_sys_upgrade_patch_download_failed"><![CDATA[Patch download failed, or downloaded file can't be saved]]></string>

+ 43 - 0
modules/boonex/persons/classes/BxPersonsModule.php

@@ -25,6 +25,49 @@ class BxPersonsModule extends BxBaseModProfileModule
     {
         return parent::_servicePrepareFields($aFieldsProfile, array(), array('fullname' => 'name'));
     }
+    
+    /**
+     * @page service Service Calls
+     * @section bx_persons Persons 
+     * @subsection bx_persons-other Other
+     * @subsubsection bx_persons-get_search_options
+     * 
+     * @code bx_srv('bx_persons', 'get_search_options', [...]); @endcode
+     * 
+     * Get options for searchable fields
+     * 
+     * @return array - params or false.
+     * 
+     * @see BxPersonsModule::serviceGetSearchOptions
+     */
+    /** 
+     * @ref bx_persons-get_search_options "get_search_options"
+     */
+    public function serviceGetSearchOptions ($sField, $sFieldType, $sSearchType)
+    {
+        $CNF = $this->_oConfig->CNF;
+        if (isset($CNF['OBJECT_FORM_ENTRY']) && isset($CNF['OBJECT_FORM_ENTRY_DISPLAY_ADD'])){
+            $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $CNF['OBJECT_FORM_ENTRY_DISPLAY_ADD'], $this->_oTemplate);
+            foreach ($oForm->aInputs as $aFld) {
+                if ($aFld['name'] == $sField && $aFld['type'] == $sFieldType && isset($aFld['checker']) && isset($aFld['checker']['params'])){
+                    return $aFld['checker']['params'];
+                }
+            }
+        }
+        
+        if (isset($CNF['OBJECT_FORM_ENTRY']) && isset($CNF['OBJECT_FORM_ENTRY_DISPLAY_EDIT'])){
+            $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $CNF['OBJECT_FORM_ENTRY_DISPLAY_EDIT'], $this->_oTemplate);
+            foreach ($oForm->aInputs as $aFld) {
+                if ($aFld['name'] == $sField && $aFld['type'] == $sFieldType && isset($aFld['checker']) && isset($aFld['checker']['params'])){
+                    return $aFld['checker']['params'];
+                }
+            }
+        }
+        
+        return false;
+    }
+    
+    
 }
 
 /** @} */

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

@@ -764,6 +764,7 @@
 	<string name="_adm_form_txt_field_checker_avail"><![CDATA[Доступность данных (нужно ввести значение) ]]></string>
 	<string name="_adm_form_txt_field_checker_captcha"><![CDATA[Капча (проверка корректного текста для картинки безопасности)]]></string>
 	<string name="_adm_form_txt_field_checker_date"><![CDATA[Дата (проверка правильного формата даты)]]></string>
+  <string name="_adm_form_txt_field_checker_date_range"><![CDATA[Возрастной диапазон]]></string>
 	<string name="_adm_form_txt_field_checker_date_time"><![CDATA[Дата и время (проверка правильного формата даты и времени)]]></string>
 	<string name="_adm_form_txt_field_checker_email"><![CDATA[Имейл (формат правильного эл. адреса)]]></string>
 	<string name="_adm_form_txt_field_checker_empty"><![CDATA[Выбрать...]]></string>

+ 4 - 2
studio/js/forms_fields.js

@@ -112,12 +112,14 @@ BxDolStudioFormsFields.prototype.onChangeType = function(iDiId) {
 BxDolStudioFormsFields.prototype.onSelectChecker = function(oSelect) {
 	var sChecker = $(oSelect).val();
 
-	$('#bx-form-element-checker_params_length_min, #bx-form-element-checker_params_length_max, #bx-form-element-checker_params_preg').hide().find('input').val('');
+	$('#bx-form-element-checker_params_length_min, #bx-form-element-checker_params_length_max, #bx-form-element-checker_params_preg, #bx-form-element-checker_params_date_range_min, #bx-form-element-checker_params_date_range_max').hide().find('input').val('');
 
 	switch(sChecker) {
-		case 'length':
+	    case 'length':
+	    case 'date_range':
 			$('#bx-form-element-checker_params_length_min, #bx-form-element-checker_params_length_max').show();
 			break;
+	
 		case 'preg':
 			$('#bx-form-element-checker_params_preg').show();
 			break;

+ 6 - 1
studio/template/scripts/BxBaseStudioFormsField.php

@@ -274,6 +274,7 @@ class BxBaseStudioFormsField extends BxDolStudioFormsField
                         $aForm['inputs'][$sKey]['value'] = strtolower($this->aField[$sKey]);
                         switch($aForm['inputs'][$sKey]['value']) {
                             case 'length':
+                            case 'date_range':
                                 unset($aForm['inputs']['checker_params_length_min']['tr_attrs']['style'], $aForm['inputs']['checker_params_length_max']['tr_attrs']['style']);
                                 break;
                             case 'preg':
@@ -584,6 +585,7 @@ class BxBaseStudioFormsField extends BxDolStudioFormsField
                 unset($oForm->aInputs['checker_func']['tr_attrs']['style'], $oForm->aInputs['checker_error']['tr_attrs']['style']);
                 switch($oForm->getCleanValue('checker_func')) {
                     case 'length':
+                    case 'date_range':
                         unset($oForm->aInputs['checker_params_length_min']['tr_attrs']['style'], $oForm->aInputs['checker_params_length_max']['tr_attrs']['style']);
                         $this->unsetCheckerFields($oForm, 'preg');
                         break;
@@ -601,10 +603,12 @@ class BxBaseStudioFormsField extends BxDolStudioFormsField
     {
         switch($sCheckerFunc) {
             case 'length':
+            case 'date_range':
                 $oForm->aInputs['checker_params_length_min']['value'] = '';
                 $oForm->aInputs['checker_params_length_max']['value'] = '';
                 break;
 
+
             case 'preg':
                 $oForm->aInputs['checker_params_preg']['value'] = '';
                 break;
@@ -629,6 +633,7 @@ class BxBaseStudioFormsField extends BxDolStudioFormsField
     {
         switch($sCheckerFunc) {
             case 'length':
+            case 'date_range':
                 unset(
                     $oForm->aInputs['checker_params_length_min'],
                     $oForm->aInputs['checker_params_length_max']
@@ -1035,7 +1040,7 @@ class BxBaseStudioFormsFieldTextarea extends BxBaseStudioFormsFieldText
 class BxBaseStudioFormsFieldDatepicker extends BxBaseStudioFormsFieldText
 {
     protected $sType = 'datepicker';
-    protected $aCheckFunctions = array('date');
+    protected $aCheckFunctions = array('date','date_range');
     protected $sDbPass = 'DateTs';
     protected $aDbPassDependency = array(
         'Date' => array('alter' => 'date'),

+ 16 - 1
template/scripts/BxBaseSearchExtended.php

@@ -150,7 +150,21 @@ class BxBaseSearchExtended extends BxDolSearchExtended
 
             if(in_array($aField['search_type'], array('checkbox_set', 'select_multiple')) && isset($aField['values']['']))
                 unset($aField['values']['']);
-
+            
+            $aAttrs = array();
+            
+            if(in_array($aField['search_type'], array('datepicker_range_age')) && isset($aField['search_value']) && $aField['search_value'] != ''){
+                $aTmp = BxDolService::callSerialized($aField['search_value']);
+                if (isset($aTmp['min']) && isset($aTmp['max'])){
+                    $aField['search_value'] = $aTmp['min'] . '-' . $aTmp['max'];
+                    $aAttrs = array('min' => $aTmp['min'], 'max' => $aTmp['max'], 'step' => 1);
+                }
+            }
+            
+            if(in_array($aField['search_type'], array('datepicker_range')) && isset($aField['search_value']) && $aField['search_value'] != ''){
+                $aField['search_value'] = '';
+            }
+           
             $aForm['inputs'][$aField['name']] = array(
                 'type' => $aField['search_type'],
                 'name' => $aField['name'],
@@ -158,6 +172,7 @@ class BxBaseSearchExtended extends BxDolSearchExtended
             	'info' => _t($aField['info']),
                 'values' => $aField['values'],
                 'value' => $aField['search_value'],
+                'attrs' => $aAttrs,
                 'db' => array(
                     'pass' => !empty($aField['pass']) ? $aField['pass'] : 'Xss'
                 )

+ 8 - 5
template/scripts/BxBaseSearchExtendedForm.php

@@ -96,14 +96,17 @@ class BxBaseSearchExtendedForm extends BxTemplFormView
                 $iMax = $this->_iAgeMax;
 
                 $aInput['type'] = 'doublerange';
+				
                 if(empty($aInput['value']))
                     $aInput['value'] = $iMin . '-' . $iMax;
 
-                $aAttrs= array('min' => $iMin, 'max' => $iMax, 'step' => 1);
-                if(!empty($aInput['attrs']) && is_array($aInput['attrs']))
-                    $aInput['attrs'] = array_merge($aInput['attrs'], $aAttrs);
-                else 
-                    $aInput['attrs'] = $aAttrs;
+				if (!isset($aInput['attrs']['min']) && !isset($aInput['attrs']['max'])){
+					$aAttrs = array('min' => $iMin, 'max' => $iMax, 'step' => 1);
+					if(!empty($aInput['attrs']) && is_array($aInput['attrs']))
+						$aInput['attrs'] = array_merge($aInput['attrs'], $aAttrs);
+					else 
+						$aInput['attrs'] = $aAttrs;
+				}
 
                 return $this->genInputStandard($aInput);
         }