Gå til indholdet

Brugerdefinerede felter

MRBS 1.12.2 kan registrere yderligere databasekolonner og bruge dem som felter til bookinger, lokaler og brugere. Brugerdefinerede felter er derfor udvidelser af databaseskemaet; indstillinger i konfigurationen opretter ikke automatisk kolonner.

Sikkerhedskopi først

Sikkerhedskopier databasen og test ændringen på en ikke-produktionsforekomst. MRBS opgraderinger opretter, migrerer eller fjerner ikke webstedsspecifikke kolonner.

Hvor brugerdefinerede felter understøttes

Databasetabel Formål Vigtig regel
entry Ekstra data til en enkelt booking Tilføj den identiske kolonne til repeat
repeat Skabelondata til en tilbagevendende booking Navn, type, længde, NULL-egenskab og standardværdi skal være identiske med entry
room Ekstra egenskaber for et lokale eller en ressource Vises og redigeres sammen med lokaleoplysningerne
users Ekstra brugerprofildata Bruges kun med databaseautentificering

En kolonne i entry uden en identisk kolonne i repeat får handlinger med tilbagevendende bookinger til at mislykkes. Behandl de to kolonner som én skemaændring.

Brug kun bogstaver, tal og understregning i kolonnenavne. Af hensyn til PostgreSQL skal navnet begynde med et bogstav eller en understregning. Foretræk stabile navne med små bogstaver, for eksempel participant_count eller catering.

Understøttede databasetyper

SQL-type Kontrolelement i MRBS
TEXT Tekst med flere linjer
VARCHAR Tekstinput eller tekst med flere linjer, afhængigt af dens maksimale længde
DATE Indtastning af dato
DECIMAL / NUMERIC Indtastning af tal
INT Indtastning af heltal
SMALLINT / TINYINT Afkrydsningsfelt, fortolket som en boolsk værdi

Brug SMALLINT til booleske brugerdefinerede felter på PostgreSQL og TINYINT på MySQL. Andre kolonnetyper understøttes ikke af den automatiske brugerdefinerede felthåndtering.

Tilføj et felt til skemaet

Eksemplerne forudsætter standardtabelpræfikset mrbs_. Erstat det, hvis $db_tbl_prefix har en anden værdi.

Bookingfelt

Dette eksempel tilføjer et valgfrit cateringvalg:

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

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

Begge udsagn fungerer med MySQL og PostgreSQL. Bekræft de resulterende definitioner i begge tabeller, før du åbner reservationsformularen.

Afkrydsningsfelt for et lokale

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;

I MRBS 1.12.2 bruges databasens standardværdi, når en ny række oprettes. Vælg standardværdierne bevidst, især for obligatoriske felter og afkrydsningsfelter.

Giv feltet en oversat etiket

Hvis du ikke angiver en betegnelse, udleder MRBS den af kolonnenavnet. Definer én betegnelse for hvert aktivt sprog i 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';

For et entry/repeat-par skal du kun definere entry.catering; tokenet repeat.catering er ikke nødvendigt. Lokale- og brugerfelter bruger tokens som room.coffee_machine og users.phone.

Se Tekst og oversættelser for ordforrådstilsidesættelser, sprogfiler og oversatte hjælpesider.

Vælg inputadfærd

Faste valg

$select_options erstatter fri tekst med en valgliste:

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

I et associativt array gemmer MRBS nøglen (c), men viser og søger efter værdien (Coffee) og bruger den i rapporter. Teksten kan dermed ændres uden at omskrive de gemte data.

Undgå nøgler, der kun består af cifre: PHP konverterer heltallignende strengnøgler til heltal, så MRBS kan fortolke arrayet som indekseret. Medtag et tomt valg, når et obligatorisk valg skal starte fravalgt.

$select_options er understøttet for entry.name, entry.description, brugerdefinerede entry felter og brugerdefinerede users felter. De konfigurerede valgmulighedstekster er strenge for hele webstedet; selve feltetiketten kan oversættes med $vocab_override.

Forslag med mulighed for fri indtastning

Brug $datalist_options til forslag, mens du stadig accepterer en anden værdi:

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

Det understøtter de samme felter som $select_options. Med associative datalister kan den lagrede nøgle være overraskende for brugerne, så test adfærden før brug.

Obligatoriske, private og validerede felter

Gør et felt obligatorisk overalt:

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

Eller kun i områder med database-id'er 1 og 3:

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

Områdespecifikke obligatoriske regler gælder kun for entry felter. Et obligatorisk afkrydsningsfelt skal være markeret før indsendelse.

Private brugerdefinerede felter understøttes for entry og users:

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

Værdien beskyttes kun, når private bookinger er aktiveret og korrekt konfigureret. Test alle relevante roller; skjulning i brugerfladen erstatter ikke begrænsning af mængden af følsomme data.

Mønstervalidering er i øjeblikket begrænset til brugerdefinerede users tekstfelter:

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

Indtastningstekstfelter kan have oversatte pladsholdere:

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

Mønstre i browseren forbedrer tilbagemeldingen, men gør ikke feltet sikkert til følsomme oplysninger eller utroværdig markup.

Angiv feltrækkefølgen

Angiv udtrykkeligt rækkefølgen af bookingfelterne på siderne til oprettelse og visning:

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

Felter, der ikke er angivet, tilføjes i deres normale rækkefølge. Tilpassede felter kan også placeres i rapportsøgningsformularen:

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

Komplet eksempel

Efter at catering er føjet til begge bookingtabeller:

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

Teksterne til valgmulighederne i eksemplet er ens på alle brugerfladens sprog. Hvis valgmulighederne også skal oversættes, må du udvikle og teste en udvidelse til installationen; $select_options oversætter dem ikke automatisk.

Skift, fjern og opgrader

Før du forkorter en kolonne eller ændrer dens type, skal du gennemgå de eksisterende værdier og teste konverteringen. Hvis et felt skal fjernes, skal du først fjerne referencerne i konfigurationen, implementere ændringen og kontrollere, at applikationen virker. Fjern derefter kolonnen med den normale proces for databaseændringer. Bookingfelter skal ændres i både entry og repeat.

Optag hver brugerdefineret kolonne i webstedets driftsdokumentation, og tjek den igen efter hver MRBS-opgradering. Standard MRBS skemascripts ejer ikke disse kolonner.

Verifikationstjekliste

  • entry og repeat definitioner er identiske for hvert reservationsfelt.
  • Oprettelse, redigering, visning, kopiering og sletning af en reservation fungerer.
  • En tilbagevendende serie og en forekomst kan redigeres korrekt.
  • Databasestandarder anvendes på nye poster.
  • Påkrævet, privat, udvalgt, dataliste og valideringsadfærd fungerer efter rolle og område.
  • Etiketter vises på alle konfigurerede sprog.
  • Søgning, rapporter, e-mail, kalendereksport og import/eksport viser sikre værdier.
  • Rum- og brugeradministration viser kun de tilsigtede felter.
  • Sikkerhedskopiering og gendannelsesprocedurer inkluderer det udvidede skema.