Ga naar inhoud

Aangepaste velden

MRBS 1.12.2 herkent extra databasekolommen en gebruikt die als velden voor boekingen, ruimtes en gebruikers. Aangepaste velden zijn dus uitbreidingen van het schema; de configuratie maakt de kolommen niet automatisch aan.

Eerst een back-up maken

Maak een back-up van de database en test de wijziging op een niet-productie-exemplaar. Met MRBS-upgrades worden geen sitespecifieke kolommen gemaakt, gemigreerd of verwijderd.

Waar aangepaste velden worden ondersteund

Databasetabel Doel Belangrijke regel
entry Extra gegevens voor een individuele boeking Voeg de identieke kolom toe aan repeat
repeat Sjabloongegevens voor een terugkerende boeking Houd naam, type, lengte, nullability en standaard identiek aan entry
room Extra ruimte- of resource-eigenschappen Weergegeven en bewerkt met ruimtegegevens
users Extra gebruikersprofielgegevens Alleen gebruikt met databaseverificatie

Een kolom entry zonder een identieke kolom repeat zorgt ervoor dat terugkerende boekingsbewerkingen mislukken. Behandel het paar als één schemawijziging.

Gebruik alleen letters, cijfers en onderstrepingstekens in een kolomnaam. Voor compatibiliteit met PostgreSQL begint u het met een letter of onderstrepingsteken. Geef de voorkeur aan stabiele namen in kleine letters, zoals participant_count of catering.

Ondersteunde databasetypen

SQL-type MRBS controle
TEXT Tekst met meerdere regels
VARCHAR Tekstinvoer of tekst met meerdere regels, afhankelijk van de maximale lengte
DATE Datuminvoer
DECIMAL / NUMERIC Nummerinvoer
INT Invoer van gehele getallen
SMALLINT / TINYINT Selectievakje, geïnterpreteerd als een Booleaanse waarde

Gebruik SMALLINT voor aangepaste Booleaanse velden op PostgreSQL en TINYINT op MySQL. Andere kolomtypen worden niet ondersteund door de automatische verwerking van aangepaste velden.

Voeg een veld toe aan het schema

In de voorbeelden wordt uitgegaan van het standaardtabelvoorvoegsel mrbs_. Vervang deze als $db_tbl_prefix een andere waarde heeft.

Boekingsveld

Dit voorbeeld voegt een optionele cateringkeuze toe:

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

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

Beide uitspraken werken met MySQL en PostgreSQL. Controleer de resulterende definities in beide tabellen voordat u het boekingsformulier opent.

Ruimte selectievakje

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;

In MRBS 1.12.2 wordt de databasestandaard gebruikt wanneer een nieuwe rij wordt gemaakt. Kies bewust voor standaardwaarden, vooral voor verplichte velden en selectievakjes.

Geef het veld een vertaald label

Zonder overschrijving leidt MRBS het label af van de kolomnaam. Definieer één label per actieve taal in config.inc.php:

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

Voor een entry/repeat paar definieert u alleen entry.catering; er is geen repeat.catering-token nodig. Ruimte- en gebruikersvelden gebruiken tokens zoals room.coffee_machine en users.phone.

Zie Tekst en vertalingen voor woordenschatoverschrijvingen, taalbestanden en vertaalde Help-pagina's.

Kies het invoergedrag

Vaste keuzes

$select_options vervangt vrije invoer door een selectielijst:

$select_options['entry.catering'] = array(
    ''  => 'Please select',
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

Voor een associatieve array slaat MRBS de sleutel op (c) en wordt de waarde weergegeven, doorzocht en gerapporteerd (Coffee). Hierdoor kan de formulering veranderen zonder de opgeslagen gegevens te herschrijven.

Vermijd sleutels die alleen uit cijfers bestaan: PHP converteert op gehele getallen lijkende tekenreekssleutels naar gehele getallen, dus MRBS kan de array als geïndexeerd interpreteren. Voeg een lege keuze toe als een verplichte selectie ongeselecteerd moet beginnen.

$select_options wordt ondersteund voor entry.name, entry.description, aangepaste entry velden en aangepaste users velden. De geconfigureerde optiebijschriften zijn tekenreeksen voor de hele site; het veldlabel zelf kan worden vertaald met $vocab_override.

Suggesties met gratis input

Gebruik $datalist_options voor suggesties terwijl je nog steeds een andere waarde accepteert:

$datalist_options['entry.catering'] = array(
    'Coffee',
    'Sandwiches',
    'Hot lunch',
);

Het ondersteunt dezelfde velden als $select_options. Bij associatieve datalijsten kan de opgeslagen sleutel verrassend zijn voor gebruikers, dus test het gedrag vóór gebruik.

Verplichte, privé- en gevalideerde velden

Maak een veld overal verplicht:

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

Of alleen in gebouwen met database-ID's 1 en 3:

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

Gebouwspecifieke verplichte regels zijn alleen van toepassing op velden entry. Voordat u de aanvraag indient, moet er een verplicht selectievakje zijn aangevinkt.

Aangepaste privévelden worden ondersteund voor entry en users:

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

Hierdoor wordt de waarde alleen beschermd als privéboekingen zijn ingeschakeld en geconfigureerd. Test elke relevante rol; gebruik UI-privacy niet als vervanging voor het minimaliseren van gevoelige gegevens.

Patroonvalidatie is momenteel beperkt tot aangepaste users tekstvelden:

$pattern['users.zip_code'] = '^[0-9]{5}(?:-[0-9]{4})?$';
$vocab_override['en']['users.zip_code.oninvalid'] =
    'Enter a ZIP code such as 12345 or 12345-6789';

Invoertekstvelden kunnen vertaalde tijdelijke aanduidingen bevatten:

$vocab_override['en']['entry.catering.placeholder'] =
    'State allergies or special requirements';

Patronen aan de clientzijde verbeteren de feedback, maar veranderen een veld niet in een veilige plek voor geheimen of niet-vertrouwde markeringen.

Controleer de veldvolgorde

Plaats boekingsvelden expliciet op maak- en bekijkpagina's:

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

Velden die niet in de lijst voorkomen, worden in hun normale volgorde toegevoegd. Aangepaste velden kunnen ook in het rapportzoekformulier worden geplaatst:

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

Compleet voorbeeld

Na het toevoegen van catering aan beide boekingstabellen:

$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' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

$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',
);

De optiebijschriften in dit voorbeeld blijven in elke UI-taal hetzelfde. Als vertaalde optiebijschriften een vereiste zijn, ontwerp en test dan een sitespecifieke extensie in plaats van aan te nemen dat $select_options deze automatisch vertaalt.

Wijzigen, verwijderen en upgraden

Voordat u een kolom inkort of het type ervan wijzigt, inspecteert u de bestaande waarden en test u de conversie. Voordat u een veld verwijdert, moet u de configuratiereferenties ervan verwijderen, die wijziging implementeren, bevestigen dat de toepassing werkt en pas daarna de kolom door het normale databasewijzigingsproces laten gaan. Voor boekingsvelden wijzigt u zowel entry als repeat.

Registreer elke aangepaste kolom in de operationele documentatie van de site en controleer deze opnieuw na elke MRBS-upgrade. Standaard MRBS schemascripts zijn geen eigenaar van deze kolommen.

Controlelijst voor verificatie

  • De definities entry en repeat zijn identiek voor elk boekingsveld.
  • Een boeking aanmaken, bewerken, bekijken, kopiëren en verwijderen werkt.
  • Een terugkerende reeks en één gebeurtenis kunnen correct worden bewerkt.
  • Databasestandaardwaarden worden toegepast op nieuwe records.
  • Vereist, privé-, select-, datalist- en validatiegedrag werkt per rol en gebouw.
  • Labels verschijnen in elke geconfigureerde taal.
  • Zoeken, rapporten, e-mail, agenda-export en import/export tonen veilige waarden.
  • Ruimte- en gebruikersbeheer tonen alleen de daarvoor bestemde velden.
  • Back-up- en herstelprocedures omvatten het uitgebreide schema.