diff --git a/package.yml b/package.yml index 77b5ab4..4065b4d 100644 --- a/package.yml +++ b/package.yml @@ -6,7 +6,7 @@ title: translate:maintenance_title page: title: translate:maintenance_title - perm: maintenance[] + perm: maintenance[] # Grundlegendes Recht für den Zugriff auf das Addon prio: 81 block: system icon: 'maintenance rex-icon fa-toggle-off' @@ -14,23 +14,33 @@ page: frontend: title: translate:maintenance_frontend_title icon: rex-icon fa-user + perm: maintenance[frontend] backend: title: translate:maintenance_backend_title icon: rex-icon fa-user-gear + perm: admin[] preview: title: translate:maintenance_preview_title icon: rex-icon fa-eye hidden: true + perm: maintenance[frontend] help: title: translate:maintenance_docs_title subPath: README.md icon: rex-icon fa-question-circle itemClass: pull-right + perm: maintenance[] + requires: redaxo: ^5.17.0 php: version: '>=8.2' +# Definition der verfügbaren Rechte für die Rollenverwaltung +permissions: + maintenance[]: translate:maintenance[] # Grundlegendes Recht + maintenance[frontend]: translate:maintenance[frontend] # Recht für Frontend-Einstellungen + console_commands: maintenance:activate: rex_maintenance_command_activate maintenance:deactivate: rex_maintenance_command_deactivate diff --git a/pages/frontend.php b/pages/frontend.php index bb256f5..32b6158 100644 --- a/pages/frontend.php +++ b/pages/frontend.php @@ -11,68 +11,45 @@ */ $addon = rex_addon::get('maintenance'); +$isAdmin = rex::getUser()->isAdmin(); $form = rex_config_form::factory($addon->getName()); $form->addFieldset($addon->i18n('maintenance_general_title')); -// Aktivierung/Deaktivierung des Wartungsmodus im Frontend +// Aktivierung/Deaktivierung des Wartungsmodus im Frontend - für alle Benutzer verfügbar $field = $form->addSelectField('block_frontend'); $field->setLabel($addon->i18n('maintenance_block_frontend_label')); $select = $field->getSelect(); $select->addOption($addon->i18n('maintenance_block_frontend_false'), 0); $select->addOption($addon->i18n('maintenance_block_frontend_true'), 1); -// Umgehung der Wartung durch GET-Parameter (URL) oder Passwort -$field = $form->addSelectField('authentification_mode'); -$field->setLabel($addon->i18n('maintenance_authentification_mode_label')); -$select = $field->getSelect(); -$select->addOption($addon->i18n('maintenance_authentification_mode_url'), 'URL'); -$select->addOption($addon->i18n('maintenance_authentification_mode_password'), 'password'); - -// Blockere auch für angemeldete REDAXO-Benutzer das Frontend -$field = $form->addSelectField('block_frontend_rex_user'); -$field->setLabel($addon->i18n('maintenance_block_frontend_rex_user_label')); -$select = $field->getSelect(); -$select->addOption($addon->i18n('maintenance_block_frontend_rex_user_false'), 0); -$select->addOption($addon->i18n('maintenance_block_frontend_rex_user_rex_user'), 1); - -// Passwort zum Umgehen des Wartungsmodus +// Passwort zum Umgehen des Wartungsmodus - für alle Benutzer verfügbar $field = $form->addTextField('maintenance_secret'); $field->setLabel($addon->i18n('maintenance_secret_label')); $field->setNotice($addon->i18n('maintenance_secret_notice', bin2hex(random_bytes(16)))); $field->setAttribute('type', 'password'); -// Ziel der Umleitung -$field = $form->addTextField('redirect_frontend_to_url'); -$field->setLabel($addon->i18n('maintenance_redirect_frontend_to_url_label')); -$field->setNotice($addon->i18n('maintenance_redirect_frontend_to_url_notice')); -$field->setAttribute('type', 'url'); +if ($isAdmin) { + // Erlaubte IP-Adressen - nur für Admins + $form->addFieldset($addon->i18n('maintenance_allowed_access_title')); -// Antwortcode -$field = $form->addSelectField('http_response_code'); -$field->setLabel($addon->i18n('maintenance_http_response_code_label')); -$select = $field->getSelect(); -$select->addOption($addon->i18n('maintenance_http_response_code_503'), '503'); -$select->addOption($addon->i18n('maintenance_http_response_code_403'), '403'); - -// Ausnahmeregeln - -$form->addFieldset($addon->i18n('maintenance_allowed_access_title')); - -// Erlaubte IP-Adressen -$field = $form->addTextField('allowed_ips'); -$field->setLabel($addon->i18n('maintenance_allowed_ips_label')); -$field->setNotice($addon->i18n('maintenance_allowed_ips_notice', rex_server('REMOTE_ADDR', 'string', ''), rex_server('SERVER_ADDR', 'string', ''))); -$field->setAttribute('class', 'form-control'); -$field->setAttribute('data-maintenance', 'tokenfield'); -$field->setAttribute('data-beautify', 'false'); + $field = $form->addTextField('allowed_ips'); + $field->setLabel($addon->i18n('maintenance_allowed_ips_label')); + $field->setNotice($addon->i18n('maintenance_allowed_ips_notice', rex_server('REMOTE_ADDR', 'string', ''), rex_server('SERVER_ADDR', 'string', ''))); + $field->setAttribute('class', 'form-control'); + $field->setAttribute('data-maintenance', 'tokenfield'); + $field->setAttribute('data-beautify', 'false'); +} -// Wenn YRewrite installiert, dann erlaubte YRewrite-Domains auswählen +// Wenn YRewrite installiert, dann erlaubte YRewrite-Domains auswählen - für alle Benutzer if (rex_addon::get('yrewrite')->isAvailable() && count(rex_yrewrite::getDomains()) > 1) { + if (!$isAdmin) { + $form->addFieldset($addon->i18n('maintenance_allowed_access_title')); + } + $field = $form->addSelectField('allowed_yrewrite_domains'); $field->setAttribute('multiple', 'multiple'); - $field->setAttribute('class', 'form-control selectpicker'); $field->setAttribute('data-live-search', 'true'); $field->setLabel($addon->i18n('maintenance_allowed_yrewrite_domains_label')); @@ -82,41 +59,71 @@ $select->addOption($key, $key); } } -// Erlaubte Domains -$field = $form->addTextField('allowed_domains'); -$field->setLabel($addon->i18n('maintenance_allowed_domains_label')); -$field->setNotice($addon->i18n('maintenance_allowed_domains_notice')); -$field->setAttribute('class', 'form-control'); -$field->setAttribute('data-maintenance', 'tokenfield'); -$field->setAttribute('data-beautify', 'false'); - -// Wartungsfenster-Ankündigung - -$form->addFieldset($addon->i18n('maintenance_announcement_title')); - -// Benachrichtigungstext -$field = $form->addTextAreaField('announcement'); -$field->setLabel($addon->i18n('maintenance_announcement_label')); -$field->setNotice($addon->i18n('maintenance_announcement_notice')); -if ('' !== (string) rex_config::get('maintenance', 'editor')) { // @phpstan-ignore-line - $field->setAttribute('class', '###maintenance-settings-editor###'); -} -// Editor festlegen für Benachrichtigungstext -$field = $form->addTextField('editor'); -$field->setLabel($addon->i18n('maintenance_editor_label')); -$field->setNotice($addon->i18n('maintenance_editor_notice')); +// Ab hier nur für Admins sichtbare Optionen +if ($isAdmin) { + // Erlaubte Domains + $field = $form->addTextField('allowed_domains'); + $field->setLabel($addon->i18n('maintenance_allowed_domains_label')); + $field->setNotice($addon->i18n('maintenance_allowed_domains_notice')); + $field->setAttribute('class', 'form-control'); + $field->setAttribute('data-maintenance', 'tokenfield'); + $field->setAttribute('data-beautify', 'false'); + + // Umgehung der Wartung durch GET-Parameter (URL) oder Passwort + $field = $form->addSelectField('authentification_mode'); + $field->setLabel($addon->i18n('maintenance_authentification_mode_label')); + $select = $field->getSelect(); + $select->addOption($addon->i18n('maintenance_authentification_mode_url'), 'URL'); + $select->addOption($addon->i18n('maintenance_authentification_mode_password'), 'password'); -// Start- und Endzeitpunkt der Wartungsankündigung -$field = $form->addTextField('announcement_start_date'); -$field->setLabel($addon->i18n('maintenance_announcement_start_date_label')); -$field->setNotice($addon->i18n('maintenance_announcement_start_date_notice', date('Y-m-d H:i:s'))); -$field->setAttribute('type', 'datetime-local'); + // Blockere auch für angemeldete REDAXO-Benutzer das Frontend + $field = $form->addSelectField('block_frontend_rex_user'); + $field->setLabel($addon->i18n('maintenance_block_frontend_rex_user_label')); + $select = $field->getSelect(); + $select->addOption($addon->i18n('maintenance_block_frontend_rex_user_false'), 0); + $select->addOption($addon->i18n('maintenance_block_frontend_rex_user_rex_user'), 1); + + // Ziel der Umleitung + $field = $form->addTextField('redirect_frontend_to_url'); + $field->setLabel($addon->i18n('maintenance_redirect_frontend_to_url_label')); + $field->setNotice($addon->i18n('maintenance_redirect_frontend_to_url_notice')); + $field->setAttribute('type', 'url'); + + // Antwortcode + $field = $form->addSelectField('http_response_code'); + $field->setLabel($addon->i18n('maintenance_http_response_code_label')); + $select = $field->getSelect(); + $select->addOption($addon->i18n('maintenance_http_response_code_503'), '503'); + $select->addOption($addon->i18n('maintenance_http_response_code_403'), '403'); + + // Wartungsfenster-Ankündigung + $form->addFieldset($addon->i18n('maintenance_announcement_title')); + + // Benachrichtigungstext + $field = $form->addTextAreaField('announcement'); + $field->setLabel($addon->i18n('maintenance_announcement_label')); + $field->setNotice($addon->i18n('maintenance_announcement_notice')); + if ('' !== (string) rex_config::get('maintenance', 'editor')) { + $field->setAttribute('class', '###maintenance-settings-editor###'); + } -$field = $form->addTextField('announcement_end_date'); -$field->setLabel($addon->i18n('maintenance_announcement_end_date_label')); -$field->setNotice($addon->i18n('maintenance_announcement_end_date_notice', date('Y-m-d H:i:s'))); -$field->setAttribute('type', 'datetime-local'); + // Editor festlegen für Benachrichtigungstext + $field = $form->addTextField('editor'); + $field->setLabel($addon->i18n('maintenance_editor_label')); + $field->setNotice($addon->i18n('maintenance_editor_notice')); + + // Start- und Endzeitpunkt der Wartungsankündigung + $field = $form->addTextField('announcement_start_date'); + $field->setLabel($addon->i18n('maintenance_announcement_start_date_label')); + $field->setNotice($addon->i18n('maintenance_announcement_start_date_notice', date('Y-m-d H:i:s'))); + $field->setAttribute('type', 'datetime-local'); + + $field = $form->addTextField('announcement_end_date'); + $field->setLabel($addon->i18n('maintenance_announcement_end_date_label')); + $field->setNotice($addon->i18n('maintenance_announcement_end_date_notice', date('Y-m-d H:i:s'))); + $field->setAttribute('type', 'datetime-local'); +} $fragment = new rex_fragment(); $fragment->setVar('class', 'edit'); @@ -125,59 +132,57 @@ ?>
-
- parse('core/page/section.php') ?> -
-
- - - ' . rex_i18n::msg('maintenance_preview') . ''; - -$fragment = new rex_fragment(); -$fragment->setVar('class', 'info', false); -$fragment->setVar('title', rex_i18n::msg('maintenance_preview_title'), false); -$fragment->setVar('body', $preview, false); -echo $fragment->parse('core/page/section.php'); - -/* Kopieren der URL für den Wartungsmodus */ +
+ parse('core/page/section.php') ?> +
+ +
+ ' . rex_i18n::msg('maintenance_preview') . ''; + + $fragment = new rex_fragment(); + $fragment->setVar('class', 'info', false); + $fragment->setVar('title', rex_i18n::msg('maintenance_preview_title'), false); + $fragment->setVar('body', $preview, false); + echo $fragment->parse('core/page/section.php'); + + /* Kopieren der URL für den Wartungsmodus */ $copy = '
    '; -$url = '' . rex::getServer() . '?maintenance_secret=' . rex_config::get('maintenance', 'maintenance_secret'); -$copy .= '
  • -'; -$copy .= ' - - - -
  • '; - -// Ebenfalls für alle YRewrite-Domains ausgeben - -if (rex_addon::get('yrewrite')->isAvailable() && count(rex_yrewrite::getDomains()) > 1) { - foreach (rex_yrewrite::getDomains() as $key => $domain) { - if ('default' == $key) { - continue; - } - $url = $domain->getUrl() . '?maintenance_secret=' . rex_config::get('maintenance', 'maintenance_secret'); - $copy .= '
  • '; - $copy .= ''; + $url = '' . rex::getServer() . '?maintenance_secret=' . rex_config::get('maintenance', 'maintenance_secret'); + $copy .= '
  • + '; $copy .= ' - +
  • '; - } -} -$copy .= '
'; + // Ebenfalls für alle YRewrite-Domains ausgeben + if (rex_addon::get('yrewrite')->isAvailable() && count(rex_yrewrite::getDomains()) > 1) { + foreach (rex_yrewrite::getDomains() as $key => $domain) { + if ('default' == $key) { + continue; + } + $url = $domain->getUrl() . '?maintenance_secret=' . rex_config::get('maintenance', 'maintenance_secret'); + $copy .= '
  • '; + $copy .= ''; + $copy .= ' + + + +
  • '; + } + } -$fragment = new rex_fragment(); -$fragment->setVar('class', 'info', false); -$fragment->setVar('title', rex_i18n::msg('maintenance_copy_url_title'), false); -$fragment->setVar('body', $copy, false); -echo $fragment->parse('core/page/section.php'); + $copy .= ''; -?> -
    + $fragment = new rex_fragment(); + $fragment->setVar('class', 'info', false); + $fragment->setVar('title', rex_i18n::msg('maintenance_copy_url_title'), false); + $fragment->setVar('body', $copy, false); + echo $fragment->parse('core/page/section.php'); + ?> +
    +