Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
6ed3e02
feat: Umfassende Verbesserungen des Maintenance AddOns
skerbis Oct 29, 2025
e7a5669
Apply php-cs-fixer changes
skerbis Oct 29, 2025
d58efb8
Update fragments/maintenance/frontend.php
skerbis Oct 29, 2025
583f037
Update boot.php
skerbis Oct 29, 2025
1acf059
Update fragments/maintenance/frontend_old.php
skerbis Oct 29, 2025
2cc1e88
Fix: Add existence check for yrewrite addon to prevent exceptions
skerbis Oct 29, 2025
0813f0e
Apply php-cs-fixer changes
skerbis Oct 29, 2025
18669f2
Fix review comments from PR #156
skerbis Oct 29, 2025
ef11382
Fix: Complete authentication spelling correction
skerbis Oct 29, 2025
20d851c
Update README and extend console commands
skerbis Oct 29, 2025
133c1cc
Apply php-cs-fixer changes
skerbis Oct 29, 2025
d0b4b07
Fix: Critical edge-case in multilanguage logic
skerbis Oct 29, 2025
0e2192e
Fix: Password input field not showing in password mode
skerbis Oct 29, 2025
2c330d6
Fix: Improve login form rendering
skerbis Oct 29, 2025
9cbc56f
feat: Add Silent Mode for staging/development environments
skerbis Oct 29, 2025
f1c3fdb
Update fragments/maintenance/frontend.php
skerbis Oct 29, 2025
1a6ea5c
Update fragments/maintenance/frontend.php
skerbis Oct 29, 2025
95dd080
fix: Korrigiere Mehrsprachigkeits-Logik in frontend_old.php
skerbis Oct 29, 2025
47383e8
fix: Korrigiere Mehrsprachigkeits-Logik auch in frontend.php
skerbis Oct 29, 2025
d1ebd74
fix: Frontend-Sperre wird wieder ausgelöst
skerbis Oct 29, 2025
906354d
chore: Entferne frontend_old.php Backup-Datei
skerbis Oct 29, 2025
b46cbb8
perf: Code-Optimierungen für bessere Performance und Sicherheit
skerbis Oct 29, 2025
e8537d2
feat: Zeitgesteuerte Wartung (Scheduled Maintenance)
skerbis Oct 29, 2025
5c4c049
Apply php-cs-fixer changes
skerbis Oct 29, 2025
adf1f62
fix: IP-Adressen per Klick hinzufügen repariert
skerbis Oct 29, 2025
f00c098
Apply php-cs-fixer changes
skerbis Oct 29, 2025
70f99af
fix: Entferne rex_i18n aus Frontend-Fragment
skerbis Oct 29, 2025
6671017
fix: Undefined variable $currentPage und IP-Button verbessert
skerbis Oct 29, 2025
1a598c7
fix: IP click-to-add mit exakter Upkeep-Implementierung
skerbis Oct 29, 2025
4119339
fix: Cronjob-Registrierung korrigiert & Tokenfield-Assets entfernt
skerbis Oct 29, 2025
1a240f8
refactor: Cronjob-Datei verschoben & Inline JS/CSS ausgelagert
skerbis Oct 29, 2025
f2ebd2a
feat: Überschrift wechselt mit Sprachwahl & Domain-Anzeige
skerbis Oct 29, 2025
8fe0bbd
fix: Layout-Anpassungen für Language-Switcher
skerbis Oct 29, 2025
ad351a7
fix: Initial Anzeige der Überschrift (DE als Standard)
skerbis Oct 29, 2025
4a856cb
fix: DE als Standard-Sprache korrekt setzen
skerbis Oct 29, 2025
02b1019
fix: Language-Button zeigt korrekte aktuelle Sprache
skerbis Oct 29, 2025
cabede0
fix: Cronjob Type-Hints entfernt für Kompatibilität
skerbis Oct 29, 2025
0381dcb
fix: IP-Whitelist Click-to-Add korrigiert
skerbis Oct 29, 2025
1cf70d7
refactor: Cronjob nach PHPMailer-Vorbild neu implementiert
skerbis Oct 29, 2025
9beaad8
fix: Cronjob-Registrierung in boot.php hinzugefügt
skerbis Oct 29, 2025
3f8ea20
docs: Cronjob-Einrichtung in README dokumentiert
skerbis Oct 29, 2025
66ee1b6
refactor: Zeitgesteuerte Wartung nur noch per Cronjob
skerbis Oct 29, 2025
1ed1686
feat: Zeitgesteuerte Wartung und Ankündigung auf Planungs-Seite kombi…
skerbis Oct 29, 2025
489aa77
fix: Editor-Hinweis-Text korrigiert (kein 'obiges' Feld mehr)
skerbis Oct 29, 2025
6a33aa2
Apply php-cs-fixer changes
skerbis Oct 29, 2025
cc1ea4d
Update package.yml
skerbis Oct 29, 2025
e136c30
docs: RELEASE.md für Version 3.5.0 erstellt
skerbis Oct 29, 2025
b476bea
fix: Config-Key 'secret' konsistent zu 'maintenance_secret' korrigiert
skerbis Oct 29, 2025
5633bcd
docs: RELEASE.md auf Kurzform reduziert
skerbis Oct 29, 2025
d276725
docs: UX-Verbesserungen in RELEASE.md ergänzt
skerbis Oct 29, 2025
40470c9
docs: Erweiterte Console-Kommandos in RELEASE.md ergänzt
skerbis Oct 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 103 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,42 @@ Das AddOn ermöglicht es Administratoren, das Frontend und/oder des Backend von
* Optionales Sperren des Frontends auch für REDAXO-Benutzer (außer Admins)
* Optionale Weiterleitung zu einer festgelegten URL, z.B. REDAXO-Login
* Festlegen des HTTP-Statuscodes (z.B. 503 Service Unavailable)
* **Silent Mode**: Nur HTTP-Status ohne HTML-Content (ideal für Staging/Development)
* Anpassen der Sperrseite durch eigenes Fragment (`maintenance/frontend.php`)
* Definieren von Ausnahmen, die dennoch Zugriff erhalten, z.B. für
* IP-Adressen
* Hosts
* YRewrite-Domains (neu in Version 3.0.0)
* Meldung und Zeitraum zur Ankündigung eines Wartungsfensters definieren (neu in Version 3.0.0)
* **Zeitgesteuerte Wartung**: Automatische Aktivierung/Deaktivierung zu festgelegten Zeiten (neu in Version 3.5.0)

### Zeitgesteuerte Wartung

Die **zeitgesteuerte Wartung** ermöglicht es, den Wartungsmodus automatisch zu einem bestimmten Zeitpunkt zu aktivieren und zu deaktivieren:

* **Cronjob-basiert**: Die Ausführung erfolgt ausschließlich über den Cronjob "Geplante Wartung prüfen"
* **Automatische Bereinigung**: Nach erfolgreicher Deaktivierung werden die geplanten Zeiten automatisch gelöscht

**Verwendung:**

1. **Cronjob einrichten** (erforderlich):
- Im REDAXO-Backend zu **System > Cronjobs** navigieren
- Auf **"+"** klicken, um einen neuen Cronjob zu erstellen
- Folgende Einstellungen vornehmen:
- **Name**: z.B. "Geplante Wartung prüfen"
- **Typ**: `Geplante Wartung prüfen` (aus Dropdown wählen)
- **Ausführungsart**: z.B. "Jede Minute" oder "Alle 5 Minuten"
- **Umgebung**: "Frontend, Backend, Skript"
- Speichern

2. In den Frontend-Einstellungen unter "Zeitgesteuerte Wartung":
- **Startzeitpunkt** eingeben (z.B. `2025-12-31 02:00:00`)
- **Endzeitpunkt** eingeben (z.B. `2025-12-31 06:00:00`)
3. Speichern - der Wartungsmodus wird zur konfigurierten Zeit automatisch aktiviert und deaktiviert

**Format**: `YYYY-MM-DD HH:MM:SS` (z.B. `2025-12-31 23:59:59`)

**Wichtig**: Ohne eingerichteten Cronjob funktioniert die zeitgesteuerte Wartung nicht!

### Sperren des REDAXO-Backends

Expand Down Expand Up @@ -46,6 +76,17 @@ Diese kann durch eine eigene HTML-Seite ersetzt werden. Dazu muss im Projekt-Add

So kann bspw. eigener Text, Logo oder komplett andere Gestaltung erfolgen.

### Silent Mode für Staging/Development-Umgebungen

Der **Silent Mode** ist ideal für Staging-Systeme und Development-Umgebungen, die permanent gesperrt sein sollen:

* Sendet nur den HTTP-Status-Code (z.B. 503 oder 403)
* Zeigt **keine** HTML-Wartungsseite an
* Verhindert Rückschlüsse auf das verwendete CMS
* Perfekt für Produktiv-Vorschau-Systeme, die nur nach Login zugänglich sein sollen

**Aktivierung:** In den erweiterten Einstellungen (Einstellungen) unter "HTTP-Einstellungen" die Option "Silent Mode" aktivieren.

## Anzeige des aktuellen Status im REDAXO-Hauptmenü

Der Menüeintrag erhält bei Aktivierung einer der Wartungsmodi ein zusätzliches Tag.
Expand All @@ -66,40 +107,91 @@ Dazu einfach die aktuelle IP des Servers, auf dem REDAXO installiert ist und von

## Konsole

Es wird die im Backend ausgewählte Sperrseite angezeigt.
Das Addon bietet verschiedene Konsolen-Befehle zur Verwaltung des Wartungsmodus:

Aktivieren des Wartungsmodus:
### Status anzeigen

Zeigt den aktuellen Status aller Wartungsmodi an:

```bash
php redaxo/bin/console maintenance:mode on
php redaxo/bin/console maintenance:mode status
```

### Frontend-Wartungsmodus

Aktivieren:
```bash
php redaxo/bin/console maintenance:mode frontend on
```

Deaktivieren:
```bash
php redaxo/bin/console maintenance:mode frontend off
```

### Backend-Wartungsmodus

Aktivieren:
```bash
php redaxo/bin/console maintenance:mode backend on
```

Deaktivieren:
```bash
php redaxo/bin/console maintenance:mode backend off
```

### Alle Modi gleichzeitig

Alle Wartungsmodi (Frontend, Backend und alle Domains) aktivieren:
```bash
php redaxo/bin/console maintenance:mode all on
```

Alle Wartungsmodi deaktivieren:
```bash
php redaxo/bin/console maintenance:mode all off
```

Deaktivieren des Wartungsmodus:
### Domain-spezifische Wartung (YRewrite)

Einzelne Domain sperren:
```bash
php redaxo/bin/console maintenance:mode domain example.com --lock
```

Einzelne Domain entsperren:
```bash
php redaxo/bin/console maintenance:mode domain example.com --unlock
```

### Legacy-Unterstützung

Die alten Befehle funktionieren weiterhin (steuern nur den Frontend-Modus):

```bash
php redaxo/bin/console maintenance:mode on
php redaxo/bin/console maintenance:mode off
```

## Autor

### FriendsOfREDAXO
**Thomas Skerbis** – [KLXM Crossmedia](https://klxm.de)

* <http://www.redaxo.org>
* <https://github.com/FriendsOfREDAXO>
## Projekt-Lead

## Projekt-Team
* [Thomas Skerbis](https://github.com/skerbis)

* [Alexander Walther](https://github.com/alxndr-w)
* [Simon Krull](https://github.com/crydotsnake)

## Credits

Danke an:

* [KLXM Crossmedia / Thomas Skerbis](https://klxm.de) // former lead
* [Christian Gehrke](https://github.com/chrison94) // first version
* [Thorben](https://github.com/eaCe)
* [Oliver Kreischer](https://github.com/olien)
* [Alexander Walther](https://www.alexplus.de)
* [Simon Krull](https://github.com/crydotsnake)
* u.v.a


53 changes: 53 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Release Notes - Maintenance AddOn 4.0.0-beta1

## Was ist beim Update zu beachten?

**⚠️ Breaking Change:** Die manuelle Domain-Whitelist (`allowed_yrewrite_domains`) wurde entfernt. Domain-basierte Wartung läuft jetzt ausschließlich über die neue Seite *Maintenance > Domains*.

## Was ist neu?

**Zeitgesteuerte Wartung** – Der Wartungsmodus kann jetzt automatisch zu bestimmten Zeiten aktiviert und deaktiviert werden (nur über Cronjob).

**Silent Mode** – Sendet nur HTTP-Status-Code ohne HTML-Inhalt, ideal für Staging-Umgebungen.

**Planungs-Seite** – Neue Übersichtsseite unter *Maintenance > Frontend > Planung* für zeitgesteuerte Wartung und Wartungsankündigungen.

**Mehrsprachige Sperrseite** – Language-Switcher (DE/EN) mit SessionStorage-Unterstützung.

**Domain-Verwaltung** – YRewrite-Domains können jetzt direkt über *Maintenance > Domains* verwaltet werden (keine manuelle Eingabe mehr nötig).

**Erweiterte Console-Kommandos** – Wartungsmodus kann jetzt granular über die Konsole gesteuert werden:
```bash
php redaxo/bin/console maintenance:mode status
php redaxo/bin/console maintenance:mode frontend on|off
php redaxo/bin/console maintenance:mode backend on|off
php redaxo/bin/console maintenance:mode all on|off
php redaxo/bin/console maintenance:mode domain example.com --lock|--unlock
```

## Was hat sich geändert?

### UX-Verbesserungen
- Einstellungen reorganisiert: Frontend > Planung, Frontend > Erweitert
- IP-Whitelist vereinfacht: Click-to-Add-Buttons, komma-getrennte Liste
- Sidebar mit Quick-Links und Bypass-URLs (nur für gesperrte Domains)
- Toggle-Buttons für Domain-Verwaltung
- Moderne Card-basierte UI mit Dark Mode Support

### Performance & Code-Qualität
- YRewrite-Check nur einmal pro Request
- Redundante Checks entfernt
- PHP CS Fixer, externe Assets, REDAXO-Standards

**Nach dem Update:**

**Cronjob einrichten** (nur für zeitgesteuerte Wartung):
- System > Cronjobs > Neuen Cronjob erstellen
- Typ: "Geplante Wartung prüfen"
- Ausführungsart: "Jede Minute" oder "Alle 5 Minuten"

3. **Domain-Einstellungen prüfen** (falls YRewrite verwendet):
- Öffnen Sie *Maintenance > Domains*
- Aktivieren/Deaktivieren Sie Domains per Toggle

Die alte Konfiguration wird automatisch migriert.
22 changes: 22 additions & 0 deletions assets/css/ip-addresses.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* IP Address Whitelist Styling
*/
.ip-addresses {
margin-top: 5px;
}

.ip-address-row {
margin-bottom: 5px;
display: flex;
align-items: center;
}

.ip-label {
min-width: 120px;
}

.ip-code {
margin: 0 10px;
display: inline-block;
min-width: 100px;
}
97 changes: 97 additions & 0 deletions assets/css/maintenance-icons.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/**
* Maintenance AddOn - Icon Styles
* Font Awesome Icons als Ersatz für Emojis
*/

/* Select-Optionen mit Icons */
.rex-page-maintenance select option[value="1"] {
font-weight: bold;
}

/* Status-Indikatoren für aktivierte/deaktivierte Zustände */
.maintenance-status-active::before {
font-family: 'FontAwesome';
content: '\f06d'; /* fa-fire */
color: #d9534f;
margin-right: 5px;
}

.maintenance-status-inactive::before {
font-family: 'FontAwesome';
content: '\f058'; /* fa-check-circle */
color: #5cb85c;
margin-right: 5px;
}

.maintenance-status-ok::before {
font-family: 'FontAwesome';
content: '\f00c'; /* fa-check */
color: #5cb85c;
margin-right: 5px;
}

.maintenance-status-blocked::before {
font-family: 'FontAwesome';
content: '\f05e'; /* fa-ban */
color: #d9534f;
margin-right: 5px;
}

/* Icon für Passwort-Authentifizierung */
.maintenance-auth-password::before {
font-family: 'FontAwesome';
content: '\f084'; /* fa-key */
margin-right: 5px;
}

/* Icon für URL-Authentifizierung */
.maintenance-auth-url::before {
font-family: 'FontAwesome';
content: '\f0c1'; /* fa-link */
margin-right: 5px;
}

/* Wartungsmodus Backend Labels mit Icons versehen */
.rex-page-maintenance .form-group label[for*="block_backend"] + .rex-select-style option:first-child::before,
.rex-page-maintenance .form-group label[for*="block_frontend"] + .rex-select-style option:first-child::before {
font-family: 'FontAwesome';
content: '\f058 '; /* fa-check-circle (grün) */
}

.rex-page-maintenance .form-group label[for*="block_backend"] + .rex-select-style option:last-child::before,
.rex-page-maintenance .form-group label[for*="block_frontend"] + .rex-select-style option:last-child::before {
font-family: 'FontAwesome';
content: '\f06d '; /* fa-fire (rot) */
}

/* Bootstrap Select Pills für bessere Übersichtlichkeit */
.maintenance-select-pill {
display: inline-block;
padding: 0.25em 0.6em;
font-size: 85%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: 0.25rem;
}

.maintenance-select-pill.active {
background-color: #d9534f;
color: white;
}

.maintenance-select-pill.inactive {
background-color: #5cb85c;
color: white;
}

/* Domain-Tabelle Styling */
.rex-page-maintenance table.table td {
vertical-align: middle;
}

.rex-page-maintenance table.table .text-muted {
font-size: 0.9em;
}
12 changes: 12 additions & 0 deletions assets/js/domains.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* Domain Management - Toggle Individual Domains
*/
$(document).on('rex:ready', function() {
$('#all-domains-locked').on('change', function() {
if ($(this).val() == '1') {
$('#individual-domains').slideUp();
} else {
$('#individual-domains').slideDown();
}
});
});
Loading
Loading