Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
48 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
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
85 changes: 74 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ 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
Expand Down Expand Up @@ -46,6 +47,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 +78,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:

### Status anzeigen

Aktivieren des Wartungsmodus:
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
```

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

### 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


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;
}
13 changes: 11 additions & 2 deletions boot.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,13 @@
rex_extension::register('PACKAGES_INCLUDED', static function () {
$addon = rex_addon::get('maintenance');

if (rex::isFrontend() && (bool) $addon->getConfig('block_frontend')) {
// Check domain-based maintenance or global frontend maintenance
$domainInMaintenance = false;
if (rex::isFrontend() && rex_addon::exists('yrewrite') && rex_addon::get('yrewrite')->isAvailable()) {
$domainInMaintenance = Maintenance::isDomainInMaintenance();
}

if (rex::isFrontend() && ((bool) $addon->getConfig('block_frontend') || $domainInMaintenance)) {
Maintenance::checkFrontend();
}
if (rex::isBackend() && (bool) $addon->getConfig('block_backend')) {
Expand All @@ -32,8 +38,11 @@
rex_view::addCssFile($addon->getAssetsUrl('dist/css/bootstrap-tokenfield.css'));

rex_view::addCssFile($addon->getAssetsUrl('css/maintenance.css'));
rex_view::addCssFile($addon->getAssetsUrl('css/maintenance-icons.css'));

if ('maintenance/frontend' === rex_be_controller::getCurrentPage()) {
if ('maintenance/frontend' === rex_be_controller::getCurrentPage()
|| 'maintenance/frontend/index' === rex_be_controller::getCurrentPage()
|| 'maintenance/frontend/announcement' === rex_be_controller::getCurrentPage()) {
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
$suchmuster = 'class="###maintenance-settings-editor###"';
$ersetzen = (string) rex_config::get('maintenance', 'editor'); // @phpstan-ignore-line
Expand Down
Loading