AntonLV %!s(int64=6) %!d(string=hai) anos
pai
achega
2186a039b7

+ 2 - 2
inc/classes/BxDolSearchExtended.php

@@ -21,7 +21,7 @@ class BxDolSearchExtended extends BxDolFactory implements iBxDolFactoryObject
     );
 
     public static $TYPE_TO_TYPE_SEARCH = array(
-        'text' => array('text'),
+        'text' => array('text', 'text_range'),
         'textarea' => array('text'),
         'number' => array('text'),
         'text_auto' => array('text_auto'),
@@ -37,7 +37,7 @@ class BxDolSearchExtended extends BxDolFactory implements iBxDolFactoryObject
     );
 
     public static $TYPE_TO_OPERATOR = array(
-        'text' => array('like', '='),
+        'text' => array('like', '=', 'between'),
         'textarea' => array('like', '='),
         'number' => array('='),
         'text_auto' => array('in'),

+ 3 - 0
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -334,6 +334,9 @@ class BxBaseModGeneralModule extends BxDolModule
                 if(isset($aInput['search_type']))
                     $aField['search_type'] = $aInput['search_type'];
 
+                if(isset($aInput['search_operator']))
+                    $aField['search_operator'] = $aInput['search_operator'];
+
                 $aResult[$aInput['name']] = $aField;
             }
         }

+ 1 - 0
modules/boonex/ads/classes/BxAdsConfig.php

@@ -46,6 +46,7 @@ class BxAdsConfig extends BxBaseModTextConfig
             'FIELD_CATEGORY_VIEW' => 'category_view',
             'FIELD_CATEGORY_SELECT' => 'category_select',
             'FIELD_PRICE' => 'price',
+            'FIELD_YEAR' => 'year',
             'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
             'FIELD_COVER' => 'covers',
             'FIELD_PHOTO' => 'pictures',

+ 16 - 0
modules/boonex/ads/classes/BxAdsDb.php

@@ -271,6 +271,22 @@ class BxAdsDb extends BxBaseModTextDb
 
         return (int)$this->lastId();
     }
+
+    protected function _getEntriesBySearchIds($aParams, &$aMethod, &$sSelectClause, &$sJoinClause, &$sWhereClause, &$sOrderClause, &$sLimitClause)
+    {
+        foreach($aParams['search_params'] as $sSearchParam => $aSearchParam) {
+            if($aSearchParam['operator'] != 'between')
+                continue;
+            
+            if(!is_array($aSearchParam['value']) || count($aSearchParam['value']) != 2) 
+                continue;
+
+            foreach($aSearchParam['value'] as $iIndex => $sValue)
+                $aParams['search_params'][$sSearchParam]['value'][$iIndex] = (int)$sValue;
+        }
+
+        parent::_getEntriesBySearchIds($aParams, $aMethod, $sSelectClause, $sJoinClause, $sWhereClause, $sOrderClause, $sLimitClause);
+    }
 }
 
 /** @} */

+ 10 - 0
modules/boonex/ads/classes/BxAdsModule.php

@@ -134,6 +134,16 @@ class BxAdsModule extends BxBaseModTextModule
             $aInputsAdd[$CNF['FIELD_CATEGORY']]['values_src'] = BxDolService::getSerializedService($this->_oConfig->getName(), 'get_category_options', array(0));
         }
 
+        if(isset($aInputsAdd[$CNF['FIELD_PRICE']])) {
+            $aInputsAdd[$CNF['FIELD_PRICE']]['search_type'] = 'text_range';
+            $aInputsAdd[$CNF['FIELD_PRICE']]['search_operator'] = 'between';
+        }
+
+        if(isset($aInputsAdd[$CNF['FIELD_YEAR']])) {
+            $aInputsAdd[$CNF['FIELD_YEAR']]['search_type'] = 'text_range';
+            $aInputsAdd[$CNF['FIELD_YEAR']]['search_operator'] = 'between';
+        }
+
         return parent::serviceGetSearchableFieldsExtended($aInputsAdd);
     }
 

+ 22 - 1
template/css/search_extended.css

@@ -1,4 +1,4 @@
-/*-- Search extended custom fields --*/
+/*-- Search extended custom fields: Location --*/
 .bx-form-input-wrapper-location-radius > div{
     display:inline-block;
 }
@@ -7,4 +7,25 @@
 }
 .bx-form-input-wrapper-location-radius > div:last-child{
     width:29%;
+}
+
+/*-- Search extended custom fields: Range --*/
+.bx-form-input-wrapper-text.range {
+    display: -webkit-flex; 
+    display: flex;
+
+    -webkit-justify-content: flex-start;
+    justify-content: flex-start;
+
+    -webkit-align-items: center;
+    align-items: center;
+
+    -webkit-flex-flow: row nowrap;
+    flex-flow: row nowrap;
+}
+.bx-form-input-wrapper-text.range input:first-child {
+    margin-right: 0.5rem;
+}
+.bx-form-input-wrapper-text.range input:last-child {
+    margin-left: 0.5rem;
 }

+ 22 - 12
template/scripts/BxBaseSearchExtendedForm.php

@@ -88,6 +88,7 @@ class BxBaseSearchExtendedForm extends BxTemplFormView
     {
         switch($aInput['type'])
         {
+            case 'text_range':
             case 'datepicker_range':
             case 'datetime_range':
                 $bValue = !empty($aInput['value']) && is_array($aInput['value']);
@@ -95,6 +96,10 @@ class BxBaseSearchExtendedForm extends BxTemplFormView
                 $aInput['name'] .= '[]';
                 $aInput['type'] = str_replace('_range', '', $aInput['type']);
 
+                if(!isset($aInput['attrs_wrapper']['class']))
+                    $aInput['attrs_wrapper']['class'] = '';
+                $aInput['attrs_wrapper']['class'] .= ' range';
+
                 $aSubInputs = array($aInput, $aInput);
                 foreach($aSubInputs as $iKey => $aSubInput) {
                     if($bValue && isset($aInput['value'][$iKey]))
@@ -115,16 +120,16 @@ class BxBaseSearchExtendedForm extends BxTemplFormView
                 if(empty($aInput['value']))
                     $aInput['value'] = $iMin . '-' . $iMax;
 
-				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;
-				}
+                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);
-                
+
             case 'location_radius':
                 return $this->genInputLocationRadius($aInput);
         }
@@ -155,13 +160,18 @@ class BxBaseSearchExtendedForm extends BxTemplFormView
         $sValue = bx_get($aInputRadius['name']);
         $aInputRadius['value'] = is_numeric($sValue) ? $sValue : '';
         $aInputRadius['attrs']['placeholder'] = _t('_sys_form_input_location_radius_label');
-        
-        $aVars = array (
+
+        return $this->oTemplate->parseHtmlByName('form_field_location_radius.html', array (
             'location_input' => parent::genInputLocation($aInput),
             'radius_input' => parent::genInputStandard($aInputRadius),
-        );
+        ));
+    }
+
+    function addCssJsCore ()
+    {
+        parent::addCssJsCore();
+
         $this->_addCss('search_extended.css');
-        return $this->oTemplate->parseHtmlByName('form_field_location_radius.html', $aVars);
     }
 }