2828// Gespeicherte Filter laden
2929$ savedFilters = forcalFilterService::getUserFilters ($ userId );
3030
31+ // Benutzer-Kategorien für nicht-Admins vorbereiten
32+ $ user_categories = [];
33+ if (!$ user ->isAdmin ()) {
34+ $ user_categories = forCalUserPermission::getUserCategories ($ userId );
35+ }
36+
3137// Standard-Filter laden, falls kein Filter aktiv ist
3238$ defaultFilter = null ;
3339if (empty ($ currentCategory ) && empty ($ currentVenue ) && empty ($ currentStatus ) && empty ($ currentSearch ) && empty ($ currentCreator ) && empty ($ currentDateFrom )) {
3440 $ defaultFilter = forcalFilterService::getDefaultFilter ($ userId );
3541 if ($ defaultFilter ) {
3642 $ filterData = $ defaultFilter ['filter_data ' ];
43+
44+ // Sicherheitsprüfung: Kategorie-Zugriff für nicht-Admins
3745 $ currentCategory = $ filterData ['category ' ] ?? null ;
46+ if ($ currentCategory && !$ user ->isAdmin ()) {
47+ if (!in_array ($ currentCategory , $ user_categories )) {
48+ $ currentCategory = null ; // Kategorie nicht mehr erlaubt
49+ }
50+ }
51+
3852 $ currentVenue = $ filterData ['venue ' ] ?? null ;
3953 $ currentStatus = $ filterData ['status ' ] ?? null ;
4054 $ currentSearch = $ filterData ['search ' ] ?? '' ;
6074 if ($ loadedFilter ) {
6175 $ filterData = $ loadedFilter ['filter_data ' ];
6276
77+ // Sicherheitsprüfung: Kategorie-Zugriff für nicht-Admins
78+ if (isset ($ filterData ['category ' ]) && $ filterData ['category ' ] && !$ user ->isAdmin ()) {
79+ if (!in_array ($ filterData ['category ' ], $ user_categories )) {
80+ unset($ filterData ['category ' ]); // Kategorie nicht mehr erlaubt
81+ }
82+ }
83+
6384 // Sortierung wiederherstellen
6485 if (isset ($ filterData ['sort ' ]) && !empty ($ filterData ['sort ' ])) {
6586 rex_set_session ('rex_list_ ' . $ tableEvent . '_sort ' , $ filterData ['sort ' ]);
118139 ORDER BY name_ ' . rex_clang::getCurrentId ()
119140);
120141
121- // Venues laden
122- $ all_venues = rex_sql::factory ()->getArray (
123- 'SELECT id, name_ ' . rex_clang::getCurrentId () . ' as name
124- FROM ' . rex::getTable ('forcal_venues ' ) . '
125- WHERE status = 1
126- ORDER BY name_ ' . rex_clang::getCurrentId ()
127- );
142+ // Venues laden (nur wenn aktiviert)
143+ $ all_venues = [];
144+ $ venuesEnabled = $ addon ->getConfig ('forcal_venues_enabled ' , true );
145+ if ($ venuesEnabled ) {
146+ $ all_venues = rex_sql::factory ()->getArray (
147+ 'SELECT id, name_ ' . rex_clang::getCurrentId () . ' as name
148+ FROM ' . rex::getTable ('forcal_venues ' ) . '
149+ WHERE status = 1
150+ ORDER BY name_ ' . rex_clang::getCurrentId ()
151+ );
152+ }
128153
129154// Benutzer laden (für Ersteller-Filter)
130155$ creators = rex_sql::factory ()->getArray (
134159 ORDER BY u.name '
135160);
136161
137- // Benutzer-Kategorien für nicht-Admins
138- $ user_categories = [];
139- if (!$ user ->isAdmin ()) {
140- $ user_categories = forCalUserPermission::getUserCategories ($ userId );
141- }
142-
143162// Aktuelle URL ohne Filter-Parameter
144163$ baseUrl = rex_url::currentBackendPage ();
145164$ currentParams = [];
@@ -237,6 +256,7 @@ class="btn btn-default <?= $filter['is_default'] ? 'btn-info' : '' ?>"
237256 </div>
238257 </div>
239258
259+ <?php if ($ venuesEnabled ): ?>
240260 <div class="col-sm-2">
241261 <div class="form-group" style="margin-bottom: 10px;">
242262 <select name="venue_filter" class="form-control input-sm selectpicker" data-live-search="true" data-size="8">
@@ -249,6 +269,7 @@ class="btn btn-default <?= $filter['is_default'] ? 'btn-info' : '' ?>"
249269 </select>
250270 </div>
251271 </div>
272+ <?php endif ; ?>
252273
253274 <div class="col-sm-2">
254275 <div class="form-group" style="margin-bottom: 10px;">
0 commit comments