Skip to content

Commit 59957ea

Browse files
committed
security, optik
1 parent a6b8423 commit 59957ea

File tree

8 files changed

+678
-105
lines changed

8 files changed

+678
-105
lines changed

CHANGELOG.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Changelog
2+
3+
## Version 1.2.0 (2026-02-05)
4+
5+
### 🔒 Security
6+
- **XSS-Schutz**: Labels und Values werden jetzt korrekt escaped in JavaScript
7+
- **Type Safety**: Strikte Typ-Prüfungen für alle API-Parameter implementiert
8+
- **SQL-Injection**: Verbesserte Parameter-Validierung und Prepared Statements
9+
- **Input-Validierung**: Strikte Validierung aller GET-Parameter
10+
11+
### ✅ Code Quality
12+
- **Rexstan**: Alle 12 Rexstan-Fehler behoben ✅
13+
- Type-Hints für alle Methoden hinzugefügt
14+
- `empty()` durch strikte Vergleiche ersetzt (`count($array) > 0`)
15+
- Boolean-Operationen mit expliziten Checks korrigiert
16+
- Strikte `in_array()` Vergleiche mit `true` Parameter
17+
- Unreachable Code entfernt
18+
- **REDAXO Standards**:
19+
- `rex_response::sendJson()` statt manueller Header
20+
- `rex_response::cleanOutputBuffers()` am Anfang der API-Methode
21+
- Korrekte Return-Types für rex_api_function
22+
- **PSR-12**: Code-Style vollständig angepasst
23+
- Yoda-Notation für Vergleiche (`'' === $value`)
24+
- Konsistente String-Quotes
25+
- Optimierte Imports mit `use function`
26+
- Trailing Commas in Arrays
27+
28+
### 🎨 UI/UX & Theme Support
29+
- **Dark Theme Support**:
30+
- Vollständige Unterstützung für `rex-theme-dark`
31+
- Auto-Modus via `prefers-color-scheme: dark`
32+
- REDAXO-konforme Farbvariablen aus `_variables-dark.scss`
33+
- CSS Custom Properties mit Fallbacks
34+
- **CSS-Verbesserungen**:
35+
- Hover-Effekte für bessere Interaktivität
36+
- Verbesserte Farbgebung und Kontraste
37+
- Handle-Cursor für Drag & Drop
38+
- Transition-Animationen
39+
- **Accessibility**:
40+
- ARIA-Labels für alle interaktiven Elemente
41+
- Focus-States mit Outline für Tastatur-Navigation
42+
- Semantische Button-Labels
43+
- **Responsive Design**:
44+
- Mobile-optimiertes Layout mit flexbox
45+
- Breakpoints für Tablets und Smartphones
46+
47+
### 🚀 Performance
48+
- **Document Fragments**: DOM-Elemente werden gebündelt eingefügt (Single Reflow)
49+
- **Debounced Search**: Suchfunktion mit 200ms Verzögerung reduziert API-Calls
50+
- **Cache Control**: Korrekte HTTP-Header für frische Daten
51+
- **Optimized Queries**: Effiziente SQL-Queries mit DISTINCT und Indexierung
52+
53+
### 📦 Meta
54+
- **package.yml**: Version auf 1.2.0 erhöht
55+
- **PHP-Requirement**: PHP >= 8.2 (für `never` Return-Type)
56+
- **Author**: Korrigiert zu "Friends of REDAXO"
57+
- **Repository**: GitHub-Link zu FriendsOfREDAXO aktualisiert
58+
- **CHANGELOG.md**: Vollständige Dokumentation aller Änderungen
59+
60+
### 📚 Dokumentation
61+
- **README.md**: Erweitert mit Security-Hinweisen
62+
- **Performance-Tipps**: Dokumentiert im README
63+
- **Accessibility-Features**: Aufgelistet und erklärt
64+
- **Theme-Support**: Dark/Light/Auto Modi dokumentiert
65+
66+
## Version 1.1.2
67+
- Initiale Version

README.md

Lines changed: 103 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,38 @@ Ermöglicht die Auswahl und Sortierung verknüpfter Datensätze mit erweiterten
44

55
## Features
66

7-
- Benutzerfreundliche Oberfläche zum Auswählen und Sortieren von Datensätzen
8-
- Flexible Filtermöglichkeiten mit einer vereinfachten Syntax
9-
- Durchsuchbare Liste verfügbarer Einträge
10-
- Drag & Drop Sortierung der ausgewählten Einträge
11-
- Unterstützung für Meta Infos
12-
- Automatische Datumswerte (now, today)
13-
- Flexible Label-Gestaltung durch Feldverknüpfungen
7+
- 🎯 Benutzerfreundliche Oberfläche zum Auswählen und Sortieren von Datensätzen
8+
- 🔍 Durchsuchbare Liste verfügbarer Einträge mit Debounce-Optimierung
9+
- 🎨 Drag & Drop Sortierung der ausgewählten Einträge
10+
- 🔒 Sichere API mit XSS-Schutz und Type Safety
11+
- 📱 Responsive Design für mobile Geräte
12+
- ♿ Accessibility-optimiert (ARIA-Labels, Keyboard-Navigation)
13+
- 🚀 Performance-optimiert (Document Fragments, debounced Search)
14+
- 🔧 Flexible Filtermöglichkeiten mit vereinfachter Syntax
15+
- 📅 Automatische Datumswerte (now, today)
16+
- 🏷️ Flexible Label-Gestaltung durch Feldverknüpfungen
17+
- 🔗 Unterstützung für Meta Infos und YForm
1418

1519
## Installation
1620

1721
1. Im REDAXO Installer das AddOn "relation_select" herunterladen
1822
2. AddOn installieren und aktivieren
23+
3. Bei Bedarf: API-Token für Frontend-Nutzung notieren
24+
25+
## Anforderungen
26+
27+
- REDAXO >= 5.17
28+
- PHP >= 8.2
1929

2030
## Anwendung
2131

2232
### Basis-Konfiguration
33+
34+
Das AddOn wird automatisch initialisiert, sobald ein Input-Feld das Attribut `data-relation-config` hat:
35+
2336
```html
24-
<input type="text" name="my_field"
25-
data-relation-mode="modal"
37+
<input type="text"
38+
name="my_field"
2639
data-relation-config='{
2740
"table": "rex_article",
2841
"valueField": "id",
@@ -31,13 +44,40 @@ Ermöglicht die Auswahl und Sortierung verknüpfter Datensätze mit erweiterten
3144
>
3245
```
3346

34-
### Beispiel für eine Relation in Yform
47+
**Hinweis:** Das Attribut `data-relation-mode` ist optional und wird aktuell nicht verwendet. Die Widget-Darstellung erfolgt immer inline.
48+
49+
### Beispiel für eine Relation in YForm
50+
51+
Das Feld wird als **Textfeld** mit dem Namen der Relation angelegt (z.B. `autoren_id`).
52+
53+
Bei den **individuellen Attributen** des Feldes wird folgendes eingetragen:
54+
55+
```json
56+
{
57+
"data-relation-config": "{
58+
\"table\": \"rex_autoren\",
59+
\"valueField\": \"id\",
60+
\"labelField\": \"vorname|nachname\"
61+
}"
62+
}
63+
```
3564

36-
Das Feld wird als Textfeld mit dem Namen der Relation angelegt (z.B. autoren_id).
65+
**Wichtig:** In YForm muss das JSON doppelt escaped werden (siehe Beispiel).
3766

38-
Bei den individuellen Attributen des Feldes kann dann folgendes eingetragen werden:
67+
### Beispiel mit Filtern und Sortierung
3968

40-
`{"data-relation-mode":"modal","data-relation-config":"{\"table\": \"rex_autoren\",\"valueField\": \"id\",\"labelField\": \"anrede|vorname|nachname\"}"}`
69+
```html
70+
<input type="text"
71+
name="authors"
72+
data-relation-config='{
73+
"table": "rex_authors",
74+
"valueField": "id",
75+
"labelField": "firstname|lastname",
76+
"dbw": "status = 1, published != 0",
77+
"dbob": "lastname,ASC,firstname,ASC"
78+
}'
79+
>
80+
```
4181

4282
### Label-Syntax
4383

@@ -121,6 +161,56 @@ Der `dbob` Parameter bestimmt die Sortierung der Einträge.
121161
```
122162

123163

164+
## Sicherheit
165+
166+
### XSS-Schutz
167+
Alle Ausgaben (Labels, Values) werden automatisch escaped, um Cross-Site-Scripting (XSS) Angriffe zu verhindern.
168+
169+
### SQL-Injection-Schutz
170+
Die API verwendet Prepared Statements und Parameter-Binding für alle Datenbankabfragen. Tabellenamen und Feldnamen werden mit `rex_sql::escapeIdentifier()` escaped.
171+
172+
### Type Safety
173+
Das AddOn ist vollständig mit Rexstan validiert und verwendet strikte Typ-Deklarationen für alle Methoden und Parameter.
174+
175+
### API Token
176+
Für Frontend-Zugriffe ist ein API-Token erforderlich. Backend-Zugriffe sind durch die REDAXO-Session geschützt.
177+
178+
## Performance
179+
180+
- **Document Fragments**: DOM-Manipulationen werden gebündelt für minimale Reflows
181+
- **Debounced Search**: Suchfunktion mit 200ms Verzögerung für bessere Performance
182+
- **Cache Control**: API-Responses werden nicht gecacht für aktuelle Daten
183+
- **Optimized Queries**: SQL-Queries mit `DISTINCT` und optimierten WHERE/ORDER-Klauseln
184+
185+
## Barrierefreiheit
186+
187+
- ARIA-Labels für alle interaktiven Elemente
188+
- Keyboard-Navigation unterstützt
189+
- Focus-States für bessere Sichtbarkeit
190+
- Semantisches HTML
191+
192+
## Theme-Support
193+
194+
Das AddOn unterstützt alle REDAXO-Themes:
195+
196+
### Light Theme (Standard)
197+
Helle Farben und hoher Kontrast für optimale Lesbarkeit
198+
199+
### Dark Theme
200+
- Explizit: `body.rex-theme-dark`
201+
- Auto-Modus: `@media (prefers-color-scheme: dark)`
202+
- Verwendet REDAXO's offizielle Dark-Theme-Farbpalette
203+
- Farben: `#202b35` (Background), `#409be4` (Links), `rgba(255, 255, 255, 0.75)` (Text)
204+
205+
### Auto Theme
206+
Automatische Erkennung der System-Präferenz mit Fallback auf Light Theme
207+
208+
**CSS Custom Properties** mit Fallbacks sorgen für maximale Kompatibilität:
209+
```css
210+
color: var(--rex-text-color, #333);
211+
background: var(--rex-panel-bg, #fff);
212+
```
213+
124214
## Autor
125215

126216
**Friends Of REDAXO**

0 commit comments

Comments
 (0)