Browse code

Add field number_ranges to standort dca

Benjamin Roth authored on23/07/2025 12:42:32
Showing3 changed files
... ...
@@ -105,7 +105,7 @@ $GLOBALS['TL_DCA']['tl_vr_wa_standort'] = array
105 105
     'palettes' => array
106 106
     (
107 107
         '__selector__' => ['nc_enable'],
108
-        'default' => '{title_legend},title;{notification_legend},nc_enable'
108
+        'default' => '{title_legend},title,number_ranges;{notification_legend},nc_enable'
109 109
     ),
110 110
 
111 111
     // Subpalettes
... ...
@@ -167,6 +167,21 @@ $GLOBALS['TL_DCA']['tl_vr_wa_standort'] = array
167 167
             'eval'                    => array('mandatory'=>true, 'multiple'=>true,'tl_class'=>'clr'),
168 168
             'sql'                     => "blob NULL",
169 169
             'relation'                => array('type'=>'hasMany', 'load'=>'lazy')
170
+        ),
171
+        'number_ranges' => array
172
+        (
173
+            'exclude'                 => true,
174
+            'inputType'               => 'textarea',
175
+            'eval'                    => array(
176
+                'mandatory' => false,
177
+                'rows'      => 4,
178
+                'cols'      => 40,
179
+                'tl_class'  => 'clr'
180
+            ),
181
+            'save_callback' => array(
182
+                array('tl_vr_wa_standort', 'validateNumberRanges')
183
+            ),
184
+            'sql'                     => "text NULL"
170 185
         )
171 186
     )
172 187
 );
... ...
@@ -14,6 +14,12 @@ $GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_enable'][0] = 'Benachrichtigungen a
14 14
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_enable'][1] = 'Ermöglicht das Versenden von Benachrichtigungen beim Veröffentlichen neuer Nachrichten.';
15 15
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification'][0] = 'Benachrichtigung';
16 16
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification'][1] = 'Die zu versendende Benachrichtigung.';
17
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification_slots'][0] = 'Benachrichtigung für Slots';
18
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification_slots'][1] = 'Die zu versendende Benachrichtigung für Slot-Änderungen.';
19
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification_groups'][0] = 'Mitgliedergruppen';
20
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification_groups'][1] = 'Die Mitgliedergruppen, die benachrichtigt werden sollen.';
21
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['number_ranges'][0] = 'Büttennummern';
22
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['number_ranges'][1] = 'Geben Sie kommagetrennte Nummern oder Nummernbereiche ein (z.B. 0000, 0001, 0010-0020). Es sind nur Zahlen, Bereiche (mit Bindestrich) und Kommas erlaubt.';
17 23
 
18 24
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['title_legend'] = 'Standort';
19 25
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['notification_legend'] = 'Benachrichtigung-Einstellungen';
... ...
@@ -21,3 +27,7 @@ $GLOBALS['TL_LANG']['tl_vr_wa_standort']['notification_legend'] = 'Benachrichtig
21 27
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['rebsorte'] = 'Rebsorten';
22 28
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['leseart'] = 'Leseart';
23 29
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['lage'] = 'Lage';
30
+
31
+// Error messages
32
+$GLOBALS['TL_LANG']['ERR']['invalidNumberRanges'] = 'Bitte geben Sie nur Zahlen, Bereiche (mit Bindestrich) und Kommas ein.';
33
+$GLOBALS['TL_LANG']['ERR']['invalidNumberRange'] = 'Ungültiger Bereich: Der Startwert muss kleiner oder gleich dem Endwert sein.';
... ...
@@ -14,6 +14,7 @@ namespace vonRotenberg\WeinanlieferungBundle\EventListener\DataContainer;
14 14
 
15 15
 use Contao\CoreBundle\ServiceAnnotation\Callback;
16 16
 use Contao\DataContainer;
17
+use Contao\StringUtil;
17 18
 use Doctrine\DBAL\Connection;
18 19
 
19 20
 class WeinanlieferungStandortContainerListener
... ...
@@ -67,4 +68,54 @@ class WeinanlieferungStandortContainerListener
67 68
 
68 69
         return $arrOptions;
69 70
     }
71
+
72
+    /**
73
+     * @Callback(table="tl_vr_wa_standort", target="fields.number_ranges.save")
74
+     */
75
+    public function onNumberRangesSaveCallback($varValue, DataContainer $dc)
76
+    {
77
+        if (empty($varValue)) {
78
+            return '';
79
+        }
80
+
81
+        // Remove whitespace
82
+        $varValue = preg_replace('/\s+/', '', $varValue);
83
+
84
+        // Check if the input contains only numbers, hyphens, and commas
85
+        if (!preg_match('/^[0-9,-]+$/', $varValue)) {
86
+            throw new \Exception($GLOBALS['TL_LANG']['ERR']['invalidNumberRanges']);
87
+        }
88
+
89
+        // Validate each part (number or range)
90
+        $parts = StringUtil::trimsplit(',', $varValue);
91
+        $validatedParts = [];
92
+
93
+        foreach ($parts as $part) {
94
+            // Check if it's a range (contains a hyphen)
95
+            if (strpos($part, '-') !== false) {
96
+                list($start, $end) = explode('-', $part, 2);
97
+
98
+                // Ensure both start and end are valid numbers
99
+                if (!is_numeric($start) || !is_numeric($end)) {
100
+                    throw new \Exception($GLOBALS['TL_LANG']['ERR']['invalidNumberRanges']);
101
+                }
102
+
103
+                // Ensure the range is valid (start <= end)
104
+                if ((int)$start > (int)$end) {
105
+                    throw new \Exception($GLOBALS['TL_LANG']['ERR']['invalidNumberRange']);
106
+                }
107
+
108
+                $validatedParts[] = $start . '-' . $end;
109
+            } else {
110
+                // Ensure it's a valid number
111
+                if (!is_numeric($part)) {
112
+                    throw new \Exception($GLOBALS['TL_LANG']['ERR']['invalidNumberRanges']);
113
+                }
114
+
115
+                $validatedParts[] = $part;
116
+            }
117
+        }
118
+
119
+        return implode(', ', $validatedParts);
120
+    }
70 121
 }