Browse code

Update

Benjamin Roth authored on07/08/2023 16:41:30
Showing8 changed files
... ...
@@ -8,8 +8,14 @@
8 8
  * @license commercial
9 9
  */
10 10
 
11
+use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungSlotsModel;
12
+use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungStandortModel;
13
+
11 14
 $GLOBALS['BE_MOD']['content']['weinanlieferung'] = array
12 15
 (
13 16
     'tables'     => array('tl_vr_wa_standort', 'tl_vr_wa_slot', 'tl_vr_wa_rebsorte'),
14 17
     'stylesheet' => array('bundles/vonrotenbergweinanlieferung/css/backend.css')
15 18
 );
19
+
20
+$GLOBALS['TL_MODELS']['tl_vr_wa_slot'] = WeinanlieferungSlotsModel::class;
21
+$GLOBALS['TL_MODELS']['tl_vr_wa_standort'] = WeinanlieferungStandortModel::class;
16 22
new file mode 100644
... ...
@@ -0,0 +1,23 @@
1
+<?php
2
+
3
+/*
4
+ * This file is part of contao-weinanlieferung-bundle.
5
+ *
6
+ * (c) vonRotenberg
7
+ *
8
+ * @license commercial
9
+ */
10
+
11
+use vonRotenberg\WeinanlieferungBundle\Controller\Frontend\Module\WeinanlieferungSlotsListModuleController;
12
+
13
+$GLOBALS['TL_DCA']['tl_module']['palettes'][WeinanlieferungSlotsListModuleController::TYPE] = '{title_legend},name,headline,type;{wa_config_legend},vr_wa_standortId;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},cssID';
14
+
15
+
16
+$GLOBALS['TL_DCA']['tl_module']['fields']['vr_wa_standortId'] = array(
17
+    'exclude'    => true,
18
+    'inputType'  => 'checkbox',
19
+    'foreignKey' => 'tl_vr_wa_standort.title',
20
+    'eval'       => array('mandatory' => true, 'multiple' => true,),
21
+    'sql'        => "blob NULL",
22
+    'relation'   => array('type' => 'hasMany', 'load' => 'lazy')
23
+);
... ...
@@ -8,7 +8,12 @@
8 8
  * @license commercial
9 9
  */
10 10
 
11
+use vonRotenberg\WeinanlieferungBundle\Controller\Frontend\Module\WeinanlieferungSlotsListModuleController;
12
+
11 13
 $GLOBALS['TL_LANG']['MOD']['weinanlieferung'][0] = 'Weinanlieferung';
12 14
 $GLOBALS['TL_LANG']['MOD']['weinanlieferung'][1] = 'Buchungstool zur Weinanlieferung';
13 15
 $GLOBALS['TL_LANG']['MOD']['tl_vr_wa_rebsorte'] = 'Rebsorten';
14 16
 $GLOBALS['TL_LANG']['MOD']['tl_vr_wa_slot'] = 'Zeitslots';
17
+
18
+$GLOBALS['TL_LANG']['FMD'][WeinanlieferungSlotsListModuleController::TYPE][0] = 'Weinanlieferung-Zeitslotliste';
19
+$GLOBALS['TL_LANG']['FMD'][WeinanlieferungSlotsListModuleController::TYPE][1] = 'Gibt eine Liste mit buchbaren Zeitslots aus.';
15 20
new file mode 100644
... ...
@@ -0,0 +1,14 @@
1
+<?php
2
+
3
+/**
4
+ * This file is part of contao-weinanlieferung-bundle.
5
+ *
6
+ * (c) vonRotenberg
7
+ *
8
+ * @license commercial
9
+ */
10
+
11
+$GLOBALS['TL_LANG']['tl_module']['vr_wa_standortId'][0] = 'Standort';
12
+$GLOBALS['TL_LANG']['tl_module']['vr_wa_standortId'][1] = 'Wählen Sie hier die Standorte aus, deren Zeitslots sie auflisten möchten.';
13
+
14
+$GLOBALS['TL_LANG']['tl_module']['wa_config_legend'] = 'Weinanlieferung-Einstellungen';
0 15
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+<div hx-get="{{ insert_tag('env::request') }}" hx-headers='{"SR-Ajax": "CommunityFriendsModule"}' hx-trigger="updateWaList from:body" class="{{ class }} content-wrapper block"{{ cssID }}{% if style is defined and style is not empty %} style="{{ style }}"{% endif %}>
2
+
3
+{% block content %}
4
+    {% for slot in slots %}
5
+        {{ slot.time|date('d.m.Y H:i') }}
6
+    {% endfor %}
7
+{% endblock %}
8
+
9
+</div>
0 10
new file mode 100644
... ...
@@ -0,0 +1,50 @@
1
+<?php
2
+
3
+declare(strict_types=1);
4
+
5
+/*
6
+ * This file is part of contao-weinanlieferung-bundle.
7
+ *
8
+ * (c) vonRotenberg
9
+ *
10
+ * @license commercial
11
+ */
12
+
13
+namespace vonRotenberg\WeinanlieferungBundle\Controller\Frontend\Module;
14
+
15
+use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
16
+use Contao\CoreBundle\ServiceAnnotation\FrontendModule;
17
+use Contao\ModuleModel;
18
+use Contao\StringUtil;
19
+use Contao\Template;
20
+use Symfony\Component\HttpFoundation\Request;
21
+use Symfony\Component\HttpFoundation\Response;
22
+use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungSlotsModel;
23
+
24
+/**
25
+ * @FrontendModule(WeinanlieferungSlotsListModuleController::TYPE, category="miscellaneous")
26
+ */
27
+class WeinanlieferungSlotsListModuleController extends AbstractFrontendModuleController
28
+{
29
+    public const TYPE = 'wa_slots_list';
30
+
31
+    protected function getResponse(Template $template, ModuleModel $model, Request $request): ?Response
32
+    {
33
+        $standortIds = StringUtil::deserialize($model->vr_wa_standortId);
34
+
35
+        $arrData = $template->getData();
36
+
37
+        if (($slots = WeinanlieferungSlotsModel::findMultiplePublishedByPids($standortIds)) !== null)
38
+        {
39
+            foreach ($slots as $slot)
40
+            {
41
+                $arrData['slots'][] = $slot->row();
42
+            }
43
+        }
44
+
45
+        $template->setData($arrData);
46
+
47
+        return $template->getResponse();
48
+    }
49
+
50
+}
0 51
new file mode 100644
... ...
@@ -0,0 +1,78 @@
1
+<?php
2
+
3
+declare(strict_types=1);
4
+
5
+/*
6
+ * This file is part of contao-weinanlieferung-bundle.
7
+ *
8
+ * (c) vonRotenberg
9
+ *
10
+ * @license commercial
11
+ */
12
+
13
+namespace vonRotenberg\WeinanlieferungBundle\Model;
14
+
15
+use Contao\Database;
16
+use Contao\Model;
17
+use Contao\Model\Registry;
18
+
19
+class WeinanlieferungSlotsModel extends Model
20
+{
21
+    /**
22
+     * Table name
23
+     * @var string
24
+     */
25
+    protected static $strTable = 'tl_vr_wa_slot';
26
+
27
+    public static function findPublishedByPid($intPid, array $arrOptions=array())
28
+    {
29
+        $time = time();
30
+        $t = static::$strTable;
31
+        $arrColumns = array("$t.pid=?");
32
+
33
+        // Skip unsaved elements (see #2708)
34
+        $arrColumns[] = "$t.tstamp!=0";
35
+
36
+        $arrColumns[] = "$t.buchbar='1' AND $t.buchbar_bis>$time";
37
+
38
+        if (!isset($arrOptions['order']))
39
+        {
40
+            $arrOptions['order'] = "$t.time ASC";
41
+        }
42
+
43
+        return static::findBy($arrColumns, $intPid, $arrOptions);
44
+    }
45
+
46
+    public static function findMultiplePublishedByPids(array $arrPids, array $arrOptions=array())
47
+    {
48
+        if (empty($arrPids) || !\is_array($arrPids))
49
+        {
50
+            return null;
51
+        }
52
+
53
+        $arrPids = array_filter($arrPids, function($var) {
54
+            return is_numeric($var);
55
+        });
56
+
57
+        if (empty($arrPids))
58
+        {
59
+            return null;
60
+        }
61
+
62
+        $time = time();
63
+        $t = static::$strTable;
64
+        $arrColumns = array("$t.pid IN (".implode(',',$arrPids).")");
65
+
66
+        // Skip unsaved elements (see #2708)
67
+        $arrColumns[] = "$t.tstamp!=0";
68
+
69
+        $arrColumns[] = "$t.buchbar='1' AND $t.buchbar_bis>$time";
70
+
71
+        if (!isset($arrOptions['order']))
72
+        {
73
+            $arrOptions['order'] = "$t.time ASC";
74
+        }
75
+
76
+        return static::findBy($arrColumns,null,$arrOptions);
77
+    }
78
+}
0 79
new file mode 100644
... ...
@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+declare(strict_types=1);
4
+
5
+/*
6
+ * This file is part of contao-weinanlieferung-bundle.
7
+ *
8
+ * (c) vonRotenberg
9
+ *
10
+ * @license commercial
11
+ */
12
+
13
+namespace vonRotenberg\WeinanlieferungBundle\Model;
14
+
15
+use Contao\Model;
16
+
17
+class WeinanlieferungStandortModel extends Model
18
+{
19
+    /**
20
+     * Table name
21
+     * @var string
22
+     */
23
+    protected static $strTable = 'tl_vr_wa_standort';
24
+}