Browse code

Improve filter

Benjamin Roth authored on15/03/2024 14:57:46
Showing2 changed files
... ...
@@ -65,10 +65,10 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController
65 65
                     if (preg_match('/^.*<>.*$/',$rawValue))
66 66
                     {
67 67
                         list($start,$stop) = preg_split('/<>/',$rawValue, 2);
68
-                        $arrAssetsOptions['column'][] = "$filter BETWEEN $start AND $stop";
68
+                        $arrAssetsOptions['column'][$filter] = "$filter BETWEEN $start AND $stop";
69 69
                     } else {
70
-                        $arrAssetsOptions['column'][] = "$filter = ?";
71
-                        $arrAssetsOptions['value'][] = $rawValue;
70
+                        $arrAssetsOptions['column'][$filter] = "$filter = ?";
71
+                        $arrAssetsOptions['value'][$filter] = $rawValue;
72 72
                     }
73 73
                 }
74 74
             }
... ...
@@ -109,29 +109,47 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController
109 109
             } else {
110 110
                 $arrGroups['nogroup']['items'][] = $arrItem;
111 111
             }
112
+        }
112 113
 
114
+        // Populate filters
115
+        $filterAssets = $this->getRealEstateAssets(StringUtil::deserialize($model->vr_re_categories));
116
+        foreach ($filterAssets as $asset)
117
+        {
113 118
             // Filter options
114 119
             if (!empty($asset->numberOfRooms))
115 120
             {
116
-                $arrFilterOptions['numberOfRooms'][$asset->numberOfRooms] = $asset->numberOfRooms . ' ' . ($asset->numberOfRooms > 1 ? $this->translator->trans('MSC.re_rooms', [], 'contao_default') : $this->translator->trans('MSC.re_room', [], 'contao_default'));
121
+                $tmpOptions = $arrAssetsOptions;
122
+                $tmpOptions['column'] = array_merge((isset($arrAssetsOptions['column']) ? $arrAssetsOptions['column'] : []),['numberOfRooms'=>'numberOfRooms = ?']);
123
+                $tmpOptions['value'] = array_merge((isset($arrAssetsOptions['value']) ? $arrAssetsOptions['value'] : []),['numberOfRooms'=>$asset->numberOfRooms]);
124
+                $count = $this->countRealEstateAssets(StringUtil::deserialize($model->vr_re_categories),$tmpOptions);
125
+                $arrFilterOptions['numberOfRooms'][$asset->numberOfRooms] = $asset->numberOfRooms . ' ' . ($asset->numberOfRooms > 1 ? $this->translator->trans('MSC.re_rooms', [], 'contao_default') : $this->translator->trans('MSC.re_room', [], 'contao_default')) . ' ('.$count.')';
117 126
             }
118 127
             if (!empty($asset->city))
119 128
             {
120
-                $arrFilterOptions['city'][$asset->city] = $asset->city;
129
+                $tmpOptions = $arrAssetsOptions;
130
+                $tmpOptions['column'] = array_merge((isset($arrAssetsOptions['column']) ? $arrAssetsOptions['column'] : []),['city'=>'city = ?']);
131
+                $tmpOptions['value'] = array_merge((isset($arrAssetsOptions['value']) ? $arrAssetsOptions['value'] : []),['city'=>$asset->city]);
132
+                $count = $this->countRealEstateAssets(StringUtil::deserialize($model->vr_re_categories),$tmpOptions);
133
+                $arrFilterOptions['city'][$asset->city] = $asset->city . ' ('.$count.')';
121 134
             }
122 135
             if (!empty($asset->coldRent))
123 136
             {
124 137
                 $rangeStart = floor($asset->coldRent / 100) * 100;
125 138
                 $rangeEnd = $rangeStart + 99;
126
-                $arrFilterOptions['coldRent'][$rangeStart.'<>'.$rangeEnd] = $rangeStart . ' - ' . $rangeEnd . ' €';
139
+                $tmpOptions = $arrAssetsOptions;
140
+                $tmpOptions['column'] = array_merge((isset($arrAssetsOptions['column']) ? $arrAssetsOptions['column'] : []),['coldRent'=>"coldRent BETWEEN $rangeStart AND $rangeEnd"]);
141
+                $count = $this->countRealEstateAssets(StringUtil::deserialize($model->vr_re_categories),$tmpOptions);
142
+                $arrFilterOptions['coldRent'][$rangeStart.'<>'.$rangeEnd] = $rangeStart . ' - ' . $rangeEnd . ' €' . ' ('.$count.')';
127 143
             }
128 144
             if (!empty($asset->livingSpace))
129 145
             {
130 146
                 $rangeStart = floor($asset->livingSpace / 10) * 10;
131 147
                 $rangeEnd = $rangeStart + 9;
132
-                $arrFilterOptions['livingSpace'][$rangeStart.'<>'.$rangeEnd] = $rangeStart . ' - ' . $rangeEnd . ' m²';
148
+                $tmpOptions = $arrAssetsOptions;
149
+                $tmpOptions['column'] = array_merge((isset($arrAssetsOptions['column']) ? $arrAssetsOptions['column'] : []),['livingSpace'=>"livingSpace BETWEEN $rangeStart AND $rangeEnd"]);
150
+                $count = $this->countRealEstateAssets(StringUtil::deserialize($model->vr_re_categories),$tmpOptions);
151
+                $arrFilterOptions['livingSpace'][$rangeStart.'<>'.$rangeEnd] = $rangeStart . ' - ' . $rangeEnd . ' m²' . ' ('.$count.')';
133 152
             }
134
-
135 153
         }
136 154
 
137 155
         foreach (array_keys($arrFilterOptions) as $filterName)
... ...
@@ -139,6 +157,7 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController
139 157
             $arrFilterOptions[$filterName] = array_unique($arrFilterOptions[$filterName]);
140 158
         }
141 159
 
160
+        // Set template data
142 161
         $template->set('filterOptions',$arrFilterOptions);
143 162
         $template->set('filter',$arrFilterSelected);
144 163
         $template->set('groups',$arrGroups);
... ...
@@ -194,11 +194,13 @@ class RealEstateAssetsModel extends Model
194 194
 
195 195
         if (isset($arrOptions['column']))
196 196
         {
197
-            $arrColumns = array_merge($arrColumns,$arrOptions['column']);
197
+            $arrColumns = array_merge($arrColumns,array_values($arrOptions['column']));
198
+            unset($arrOptions['column']);
198 199
         }
199 200
         if (isset($arrOptions['value']))
200 201
         {
201
-            $arrValues = array_merge($arrValues,$arrOptions['value']);
202
+            $arrValues = array_merge($arrValues,array_values($arrOptions['value']));
203
+            unset($arrOptions['value']);
202 204
         }
203 205
 
204 206
         return static::findBy($arrColumns, $arrValues, $arrOptions);
... ...
@@ -231,13 +233,14 @@ class RealEstateAssetsModel extends Model
231 233
 
232 234
         if (isset($arrOptions['column']))
233 235
         {
234
-            $arrColumns = array_merge($arrColumns,$arrOptions['column']);
236
+            $arrColumns = array_merge($arrColumns,array_values($arrOptions['column']));
237
+            unset($arrOptions['column']);
235 238
         }
236 239
         if (isset($arrOptions['value']))
237 240
         {
238
-            $arrValues = array_merge($arrValues,$arrOptions['value']);
241
+            $arrValues = array_merge($arrValues,array_values($arrOptions['value']));
242
+            unset($arrOptions['value']);
239 243
         }
240
-
241 244
         return static::countBy($arrColumns, $arrValues, $arrOptions);
242 245
     }
243 246
 }