Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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