Browse code

Current stat

Benjamin Roth authored on08/03/2024 11:50:12
Showing3 changed files
... ...
@@ -6,6 +6,13 @@
6 6
                 <source>Bitte geben Sie nur Zahlen im Währungsformat (z.B. 10,99 oder 33) an.</source>
7 7
             </trans-unit>
8 8
 
9
+            <trans-unit id="MSC.re_room">
10
+                <source>Zimmer</source>
11
+            </trans-unit>
12
+            <trans-unit id="MSC.re_rooms">
13
+                <source>Zimmer</source>
14
+            </trans-unit>
15
+
9 16
             <trans-unit id="MSC.re_energyConsumption">
10 17
                 <source>Energieverbrauch nach</source>
11 18
             </trans-unit>
... ...
@@ -13,12 +13,17 @@
13 13
                 <div class="content-background-wrapper-fg">
14 14
                     <div class="content-grid">
15 15
                         <div class="fragments">
16
-                            <form class="assets-list-filter" hx-get="{{ pageUrl is defined ? pageUrl : '' }}" hx-push-url="true" hx-headers='{"VR-Ajax": "ReAssetsList"}' hx-trigger="change, submit" hx-target="closest .assets-list-wrapper" class="filter">
17
-                                <div class="filter-wrapper">
18
-                                    <select name="filter_zimmer">
19
-                                        <option value="">Anzahl Zimmer</option>
20
-                                    </select>
21
-                                </div>
16
+                            <form class="assets-list-filter" hx-get="{{ pageUrl is defined ? pageUrl : '' }}" hx-push-url="true" hx-headers='{"VR-Ajax": "ReAssetsList"}' hx-trigger="change, submit" hx-target="closest .module-vr-re-assets-list" hx-target="" class="filter">
17
+                                {% if filterOptions.rooms is defined %}
18
+                                    <div class="filter-wrapper">
19
+                                        <select name="filter_zimmer">
20
+                                            <option value="">Anzahl Zimmer</option>
21
+                                            {% for option in filterOptions.rooms %}
22
+                                                <option value="{{ option.value }}"{% if filter.rooms is defined and filter.rooms == option.value %} selected{% endif %}>{{ option.label }}</option>
23
+                                            {% endfor %}
24
+                                        </select>
25
+                                    </div>
26
+                                {% endif %}
22 27
                             </form>
23 28
                         </div>
24 29
                     </div>
... ...
@@ -71,4 +76,8 @@
71 76
             {% endfor %}
72 77
         </div>
73 78
     {% endif %}
79
+
80
+    {% block overlay %}
81
+        <div class="assets-list-overlay"></div>
82
+    {% endblock %}
74 83
 {% endblock %}
... ...
@@ -10,6 +10,7 @@
10 10
 namespace vonRotenberg\RealEstateListingBundle\Controller\FrontendModule;
11 11
 
12 12
 use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
13
+use Contao\CoreBundle\Exception\ResponseException;
13 14
 use Contao\CoreBundle\Image\Studio\Studio;
14 15
 use Contao\CoreBundle\Twig\FragmentTemplate;
15 16
 use Contao\ModuleModel;
... ...
@@ -18,15 +19,28 @@ use Contao\StringUtil;
18 19
 use Contao\System;
19 20
 use Symfony\Component\HttpFoundation\Request;
20 21
 use Symfony\Component\HttpFoundation\Response;
22
+use Symfony\Contracts\Translation\TranslatorInterface;
21 23
 
22 24
 #[AsFrontendModule(RealEstateAssetsListController::TYPE, category: 'miscellaneous')]
23 25
 class RealEstateAssetsListController extends RealEstateAssetsModuleController
24 26
 {
25 27
     public const TYPE = 'vr_re_assets_list';
26 28
 
29
+    /**
30
+     * @var TranslatorInterface
31
+     */
32
+    protected $translator;
33
+
34
+    public function __construct(TranslatorInterface $translator)
35
+    {
36
+        $this->translator = $translator;
37
+    }
38
+
39
+
27 40
     protected function getResponse(FragmentTemplate $template, ModuleModel $model, Request $request): Response
28 41
     {
29 42
         $arrGroups = [];
43
+        $arrFilterOptions = [];
30 44
 
31 45
         $jumpTo = PageModel::findByPk($model->jumpTo);
32 46
         $urlGenerator = System::getContainer()->get('contao.routing.content_url_generator');
... ...
@@ -37,6 +51,7 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController
37 51
             return $template->getResponse();
38 52
         }
39 53
 
54
+        // Figure Builder
40 55
         $figureBuilder = System::getContainer()
41 56
             ->get('contao.image.studio')
42 57
             ->createFigureBuilder()
... ...
@@ -49,7 +64,6 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController
49 64
                 'teaserFigure' => $this->getImageFigures($asset->gallerySRC, $figureBuilder, $asset->orderSRC, 1),
50 65
                 'detailsUrl'   => $jumpTo !== null ? $urlGenerator->generate($jumpTo, ['parameters'=>'/items/'.$asset->id]) : null
51 66
             ]);
52
-            dump($arrItem);
53 67
 
54 68
             // Grouping
55 69
             if ($model->vr_re_grouped)
... ...
@@ -68,9 +82,25 @@ class RealEstateAssetsListController extends RealEstateAssetsModuleController
68 82
                 $arrGroups['nogroup']['items'][] = $arrItem;
69 83
             }
70 84
 
85
+            // Filter options
86
+            if (!empty($asset->numberOfRooms))
87
+            {
88
+                $arrFilterOptions['rooms'][] = ['value'=>$asset->numberOfRooms, 'label'=>$asset->numberOfRooms . ' ' . ($asset->numberOfRooms > 1 ? $this->translator->trans('MSC.re_rooms', [], 'contao_default') : $this->translator->trans('MSC.re_room', [], 'contao_default'))];
89
+            }
90
+
71 91
         }
72 92
 
93
+        $arrFilterOptions = array_unique($arrFilterOptions);
94
+
95
+        $template->set('filterOptions',$arrFilterOptions);
73 96
         $template->set('groups',$arrGroups);
97
+
98
+        // Handle ajax
99
+        if ($request->headers->get('VR-Ajax') == 'ReAssetsList')
100
+        {
101
+            throw new ResponseException($template->getResponse());
102
+        }
103
+
74 104
         return $template->getResponse();
75 105
     }
76 106