Zum Inhalt

Eigene Felder

MRBS 1.12.2 erkennt zusätzliche Datenbankspalten und verwendet sie als Felder für Buchungen, Räume und Benutzer. Eigene Felder sind deshalb Schemaerweiterungen; Konfigurationswerte legen die Spalten nicht automatisch an.

Zuerst sichern

Die Datenbank sichern und die Änderung in einer Testinstanz prüfen. MRBS-Upgrades erstellen, migrieren oder entfernen keine standortspezifischen Spalten.

Unterstützte Tabellen

Datenbanktabelle Zweck Wichtige Regel
entry Zusatzdaten einer Buchung Dieselbe Spalte auch in repeat anlegen
repeat Vorlagendaten einer Buchungsserie Name, Typ, Länge, NULL-Regel und Vorgabe müssen mit entry übereinstimmen
room Zusätzliche Raum- oder Ressourceneigenschaften Wird mit den Raumdaten angezeigt und bearbeitet
users Zusätzliche Profildaten Nur bei Datenbank-Authentifizierung verwendet

Fehlt zu einer Spalte in entry die identische Spalte in repeat, schlagen Vorgänge mit Buchungsserien fehl. Beide Spalten gehören zu einer gemeinsamen Schemaänderung.

Spaltennamen dürfen nur Buchstaben, Ziffern und Unterstriche enthalten. Für PostgreSQL müssen sie mit einem Buchstaben oder Unterstrich beginnen. Empfehlenswert sind stabile Namen wie participant_count oder catering.

Unterstützte Datenbanktypen

SQL-Typ Darstellung in MRBS
TEXT Mehrzeiliges Textfeld
VARCHAR Ein- oder mehrzeiliges Textfeld, abhängig von der Maximallänge
DATE Datumsfeld
DECIMAL / NUMERIC Zahlenfeld
INT Ganzzahlfeld
SMALLINT / TINYINT Kontrollkästchen, als boolescher Wert behandelt

Für boolesche Felder wird unter PostgreSQL SMALLINT, unter MySQL TINYINT verwendet. Andere Typen unterstützt die automatische Verarbeitung eigener Felder nicht.

Feld im Schema anlegen

Die Beispiele verwenden das Standardpräfix mrbs_. Bei einem anderen $db_tbl_prefix muss es ersetzt werden.

Buchungsfeld

ALTER TABLE mrbs_entry
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

ALTER TABLE mrbs_repeat
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

Beide Anweisungen funktionieren mit MySQL und PostgreSQL. Vor dem Öffnen des Buchungsformulars prüfen, ob beide Spalten wirklich identisch definiert sind.

Kontrollkästchen für Räume

ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine TINYINT NOT NULL DEFAULT 0;
ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine SMALLINT NOT NULL DEFAULT 0;

MRBS 1.12.2 verwendet beim Erstellen neuer Datensätze die Datenbankvorgabe. Vorgabewerte sind daher besonders bei Pflicht- und Kontrollfeldern bewusst zu wählen.

Übersetzte Beschriftungen

Ohne Überschreibung leitet MRBS die Beschriftung aus dem Spaltennamen ab. In config.inc.php wird pro aktiver Sprache eine Bezeichnung hinterlegt:

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

Für ein entry/repeat-Paar genügt entry.catering; repeat.catering ist nicht erforderlich. Raum- und Benutzerfelder verwenden Schlüssel wie room.coffee_machine und users.phone.

Das Kapitel Texte und Übersetzungen beschreibt Sprachüberschreibungen, Sprachdateien und übersetzte Hilfeseiten.

Eingabeverhalten festlegen

Feste Auswahl

$select_options ersetzt freie Eingabe durch eine Auswahlliste:

$select_options['entry.catering'] = array(
    ''  => 'Bitte auswählen',
    'c' => 'Kaffee',
    's' => 'Sandwiches',
    'h' => 'Warmes Essen',
);

Bei einem assoziativen Array speichert MRBS den Schlüssel (c), zeigt und durchsucht aber den Wert (Kaffee). Dadurch kann die Anzeige später geändert werden, ohne gespeicherte Datensätze umzuschreiben.

Nur aus Ziffern bestehende Schlüssel vermeiden: PHP wandelt ganzzahlig aussehende Zeichenketten in Zahlen um, sodass MRBS das Array möglicherweise als indiziert erkennt. Für ein zunächst leeres Pflichtfeld eine leere Auswahl aufnehmen.

$select_options wird für entry.name, entry.description, eigene entry-Felder und eigene users-Felder unterstützt. Die konfigurierten Optionstexte gelten standortweit; die Feldbeschriftung selbst kann über $vocab_override übersetzt werden.

Vorschläge mit freier Eingabe

$datalist_options bietet Vorschläge, erlaubt aber andere Werte:

$datalist_options['entry.catering'] = array(
    'Kaffee',
    'Sandwiches',
    'Warmes Essen',
);

Es unterstützt dieselben Felder wie $select_options. Bei assoziativen Listen kann der gespeicherte Schlüssel Benutzer überraschen; das Verhalten vorher testen.

Pflicht, Datenschutz und Validierung

Ein Feld überall verpflichtend machen:

$is_mandatory_field['entry.catering'] = true;

Oder nur in den Bereichen mit den Datenbank-IDs 1 und 3:

$is_mandatory_field['entry.catering'] = array(1, 3);

Bereichsabhängige Pflichtregeln gelten nur für entry. Ein verpflichtendes Kontrollkästchen muss vor dem Absenden markiert sein.

Eigene Felder in entry und users können privat sein:

$is_private_field['entry.internal_notes'] = true;
$is_private_field['users.phone'] = true;

Der Schutz greift nur, wenn private Buchungen aktiviert und passend konfiguriert sind. Alle relevanten Rollen testen und sensible Daten möglichst gar nicht erfassen.

Mustervalidierung ist derzeit auf eigene Textfelder in users beschränkt:

$pattern['users.zip_code'] = '^[0-9]{5}$';
$vocab_override['de']['users.zip_code.oninvalid'] =
    'Bitte eine fünfstellige Postleitzahl eingeben';

Textfelder einer Buchung können übersetzte Platzhalter erhalten:

$vocab_override['de']['entry.catering.placeholder'] =
    'Allergien oder besondere Anforderungen angeben';

Reihenfolge steuern

Die Reihenfolge auf den Seiten zum Erstellen und Anzeigen:

$edit_entry_field_order = array(
    'name',
    'catering',
    'description',
);

Nicht aufgeführte Felder werden in normaler Reihenfolge angehängt. Auch die Suchfelder eines Berichts lassen sich anordnen:

$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
    'roommatch',
);

Vollständiges Beispiel

Nach dem Anlegen von catering in beiden Buchungstabellen:

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

$select_options['entry.catering'] = array(
    ''  => '—',
    'c' => 'Kaffee',
    's' => 'Sandwiches',
    'h' => 'Warmes Essen',
);

$is_mandatory_field['entry.catering'] = array(1, 3);
$edit_entry_field_order = array('name', 'catering', 'description');
$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
);

Die Optionstexte dieses Beispiels bleiben in allen Oberflächensprachen gleich. Sind mehrsprachige Optionen erforderlich, ist dafür eine standortspezifische Erweiterung zu entwerfen und zu testen; $select_options übersetzt die Werte nicht automatisch.

Ändern, entfernen und aktualisieren

Vor dem Kürzen oder Ändern eines Spaltentyps vorhandene Werte und Konvertierung prüfen. Zum Entfernen zuerst Konfigurationsverweise löschen und ausrollen, die Anwendung testen und erst danach die Spalte im geregelten Datenbankprozess löschen. Buchungsfelder immer in entry und repeat ändern.

Alle eigenen Spalten in der Betriebsdokumentation festhalten und nach jedem MRBS-Upgrade prüfen. Die Standard-Schemascripte von MRBS verwalten sie nicht.

Prüfliste

  • entry und repeat sind für jedes Buchungsfeld identisch.
  • Erstellen, Bearbeiten, Anzeigen, Kopieren und Löschen funktionieren.
  • Serien und einzelne Serientermine lassen sich korrekt ändern.
  • Datenbankvorgaben werden bei neuen Datensätzen übernommen.
  • Pflicht-, Privat-, Auswahl-, Vorschlags- und Validierungsregeln funktionieren je Rolle und Bereich.
  • Beschriftungen erscheinen in allen konfigurierten Sprachen.
  • Suche, Berichte, E-Mail, Kalenderexport sowie Import/Export liefern sichere Werte.
  • Raum- und Benutzerverwaltung zeigen nur die vorgesehenen Felder.
  • Sicherung und Wiederherstellung enthalten das erweiterte Schema.