Zum Inhalt

config.inc.php im Detail

web/config.inc.php ist die installationsspezifische Konfigurationsdatei von MRBS. Sie enthält lokale Regeln und meist auch Geheimnisse. Sie gehört zur Betriebsumgebung, nicht zum Anwendungscode.

Datei erstellen

MRBS liefert nur die Vorlage web/config.inc.php-sample aus:

cd /var/www/mrbs
cp config.inc.php-sample config.inc.php

Immer mit der Vorlage derselben MRBS-Version beginnen.

Ladereihenfolge

Der gemeinsame Bootstrap lädt:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. interne Prüfung und Kompatibilitätslogik

Spätere Zuweisungen überschreiben frühere Werte.

flowchart LR
  System[Systemvorgaben] --> Area[Vorgaben für neue Bereiche]
  Area --> Local[config.inc.php]
  Local --> Site[Site-Konfiguration]
  Site --> Check[Prüfung und Kompatibilität]

Important

Werte bestehender Bereiche liegen in der Datenbank und werden über Räume bearbeitet. Geänderte Bereichsvorgaben schreiben diese Werte nicht um.

PHP-Syntax

Die Konfiguration ist ausführbares PHP:

$timezone = 'Europe/Berlin';
$default_view = "week";
$kiosk_mode_enabled = false;
$search["count"] = 30;

Echte Boolesche Werte statt Zeichenketten verwenden:

$mail_settings['disabled'] = false;   // Richtig
$mail_settings['disabled'] = "false"; // Falsch: nichtleere Zeichenkette

Für Arrays können beide von PHP unterstützten Schreibweisen verwendet werden:

$auth['admin'] = array('alice', 'bob');
$report_open_areas = [1, 3];

Kein schließendes ?> einfügen. Unbeabsichtigte Ausgabe kann Header und Cookies beschädigen.

Mindestkonfiguration

$timezone = 'Europe/Berlin';

$dbsys = 'mysql';
$db_host = 'localhost';
$db_database = 'mrbs';
$db_login = 'mrbs';
$db_password = 'dieses-passwort-ersetzen';
$db_tbl_prefix = 'mrbs_';
$db_persist = false;

Die Zeitzone der Räume verwenden – sie kann von der Serverzeitzone abweichen.

Datenbank

Datenbank auswählen

$dbsys = 'mysql'; // MySQL oder MariaDB

oder:

$dbsys = 'pgsql'; // PostgreSQL

Verbindungsverhalten

Bei MySQL kann localhost einen Unix-Socket auswählen. 127.0.0.1 erzwingt TCP. Nichtstandardports werden separat gesetzt:

$db_host = '127.0.0.1';
$db_port = 3306;

PostgreSQL-Installationen mit mehreren Schemas können Folgendes setzen:

$db_schema = 'public';

Das Tabellenpräfix muss zum installierten Schema passen:

$db_tbl_prefix = 'mrbs_';

Persistente Verbindungen nur nach Messung und Prüfung von Transaktionen und Sperren aktivieren.

URL und Reverse Proxy

MRBS ermittelt seine URL normalerweise aus der Anfrage. Hinter Reverse Proxy, Pfadpräfix oder besonderem Virtual Host können die passenden URL-Einstellungen aus systemdefaults.inc.php nach config.inc.php kopiert werden.

Die externe URL muss Schema und Host der Benutzer enthalten. Danach Anmeldung, E-Mail-Links, iCalendar, Kiosk, Multisite und HTTPS-Weiterleitungen testen.

Authentifizierung und Sitzung

$auth["type"] = "db";
$auth["session"] = "php";

Für LDAP beispielsweise:

$auth["type"] = "ldap";
$auth["session"] = "php";

Beispielbenutzer und -passwörter nicht übernehmen. Administratoren explizit zuordnen und normale Benutzer separat testen. Siehe Authentifizierung.

Zugriffsregeln

$auth['deny_public_access'] = true;
$auth['only_admin_can_book'] = false;
$auth['admin_must_obey_policies'] = true;

Öffentlicher Kalender, Berichte, Kiosk und private Buchungen können unterschiedliche Daten zeigen und müssen gemeinsam geprüft werden.

Kalender und Oberfläche

$default_view = 'week';
$weekstarts = 1;
$display_mincals = true;
$show_timeline = true;
$kiosk_mode_enabled = false;

Datums- und Zeitformate sind sprachabhängig. Beim Überschreiben einen vollständigen $datetime_formats-Eintrag übernehmen.

Buchungsregeln

Viele Regeln sind bereichsspezifisch und werden in der Datenbank gepflegt. Globale Grenzen in einem beschrifteten Abschnitt sammeln und den fachlichen Grund dokumentieren:

// Maximal 20 zukünftige Buchungen pro Benutzer.
$max_per_interval_global_enabled['future'] = true;
$max_per_interval_global['future'] = 20;

Wiederholungen, mehrtägige Buchungen und Administratoren an den Grenzwerten testen.

E-Mail

$mail_settings['admin_backend'] = 'smtp';
$mail_settings['from'] = 'mrbs@example.org';
$mail_settings['booker'] = true;

$smtp_settings['host'] = 'mail.example.org';
$smtp_settings['port'] = 587;
$smtp_settings['auth'] = true;
$smtp_settings['secure'] = 'tls';
$smtp_settings['username'] = 'mrbs@example.org';
$smtp_settings['password'] = 'dieses-passwort-ersetzen';

Zertifikatsprüfung eingeschaltet lassen. Siehe E-Mail-Benachrichtigungen.

Sprache und eigene Texte

Eine feste Sprache nur setzen, wenn Browsererkennung nicht geeignet ist:

$default_language_tokens = 'de';

Texte upgradesicher überschreiben:

$vocab_override['en']['mrbs'] = 'Resource Booking';
$vocab_override['de']['mrbs'] = 'Ressourcenbuchung';
$vocab_override['fr']['mrbs'] = 'Réservation de ressources';
$vocab_override['es']['mrbs'] = 'Reserva de recursos';

Der vollständige Ablauf steht unter Texte und Übersetzungen.

Eigene Felder

$vocab_override['de']['room.coffee_machine'] = 'Kaffeemaschine';
$select_options['entry.catering'] = array(
    'c' => 'Kaffee',
    's' => 'Sandwiches',
    'h' => 'Warmes Essen'
);
$is_mandatory_field['entry.catering'] = true;
$is_private_field['entry.refreshments'] = true;

Zuerst die Datenbankspalten anlegen. Ein eigenes Feld in entry benötigt eine identische Spalte in repeat. Unter Eigene Felder stehen Typen, SQL-Beispiele, Validierung, Datenschutz, Reihenfolge und Prüfungen.

Geheimnisse auslagern

Eingebundene Dateien müssen einen absoluten Pfad verwenden:

require '/etc/mrbs/database-secrets.php';

Alternativ können Umgebungsvariablen explizit gelesen werden:

$db_password = getenv('MRBS_DB_PASSWORD');

Fehlende Pflichtwerte müssen erkannt werden. Geheimdateien gehören außerhalb des Webroots.

Multisite

$multisite = true;
$db_tbl_prefix = 'berlin_';

Jede Site benötigt mindestens getrennte Tabellen. Auch Authentifizierung, Mail und Theme können sitespezifisch überschrieben werden. Siehe Multisite.

Debugging

Debugausgabe nur kurzfristig und nicht öffentlich aktivieren. Zugangsdaten niemals loggen:

$auth['log_credentials'] = false;

Upgradesicher pflegen

  1. Aktive Konfiguration sichern.
  2. Mit der neuen config.inc.php-sample beginnen.
  3. Alte Überschreibungen mit neuen Vorgaben vergleichen.
  4. Nur beabsichtigte Werte übertragen.
  5. Gemeldete veraltete Variablen entfernen.
  6. Syntax und Funktionen prüfen.

Prüfliste

php -l /var/www/mrbs/config.inc.php

Danach Version und Datenbank auf Hilfe, Tabellenpräfix, Zeitzone, Anmeldung, Rechte, Buchungsregeln, E-Mail, Berichte, Export, Kiosk und Multisite prüfen. Logs dürfen keine Passwörter oder privaten Buchungsdaten enthalten.

Empfohlene Dateistruktur

Die Datei sollte kurz, thematisch gruppiert und bei nicht offensichtlichen Überschreibungen mit dem fachlichen Grund kommentiert bleiben.

<?php
declare(strict_types=1);
namespace MRBS;

// Zeitzone
$timezone = 'Europe/Berlin';

// Datenbank
$dbsys = 'mysql';

// Authentifizierung
$auth['type'] = 'db';
$auth['session'] = 'php';