Salta el contingut

Camps personalitzats

MRBS 1.12.2 pot detectar columnes addicionals de la base de dades i utilitzar-les com a camps de les reserves, les aules o els usuaris. Per tant, els camps personalitzats són ampliacions de l'esquema, no pas paràmetres que creïn columnes automàticament.

Fer una còpia de seguretat primer

Feu una còpia de seguretat de la base de dades i proveu el canvi en una instància que no sigui de producció. Les actualitzacions de MRBS no creen, migren ni eliminen columnes específiques del lloc.

On s'admeten camps personalitzats

Taula de base de dades Propòsit Norma important
entry Dades addicionals per a una reserva individual Afegiu la columna idèntica a repeat
repeat Dades de la plantilla d'una reserva recurrent Mantingueu el nom, el tipus, la longitud, l'admissió de valors nuls i el valor predeterminat idèntics als de entry
room Propietats addicionals de l'aula o del recurs Es mostra i s'edita juntament amb les dades de l'aula
users Dades addicionals del perfil d'usuari S'utilitza només amb l'autenticació de la base de dades

Una columna de entry sense una columna idèntica a repeat fa fallar les operacions de reserves recurrents. Tracteu totes dues columnes com un únic canvi de l'esquema.

Utilitzeu només lletres, números i guions baixos en el nom d'una columna. Per a la compatibilitat amb PostgreSQL, comenceu-lo amb una lletra o un guió baix. Preferiu noms estables en minúscules, com ara participant_count o catering.

Tipus de bases de dades compatibles

Tipus SQL Control d'MRBS
TEXT Text de diverses línies
VARCHAR Entrada de text o text de diverses línies, segons la seva longitud màxima
DATE Entrada de data
DECIMAL / NUMERIC Introducció de números
INT Entrada de nombre enter
SMALLINT / TINYINT Casella de selecció, interpretada com un valor booleà

Utilitzeu SMALLINT per als camps personalitzats booleans de PostgreSQL i TINYINT per als de MySQL. La gestió automàtica dels camps personalitzats no admet altres tipus de columna.

Afegiu un camp a l'esquema

Els exemples pressuposen el prefix de taula predeterminat mrbs_. Substituïu-lo si $db_tbl_prefix té un altre valor.

Camp de reserva

Aquest exemple afegeix una opció de càtering opcional:

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

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

Ambdues declaracions funcionen amb MySQL i PostgreSQL. Verifiqueu les definicions resultants a les dues taules abans d'obrir el formulari de reserva.

Casella de selecció de l'aula

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;

A MRBS 1.12.2, el valor predeterminat de la base de dades s'utilitza quan es crea una fila nova. Trieu els valors predeterminats deliberadament, especialment per als camps obligatoris i les caselles de selecció.

Doneu al camp una etiqueta traduïda

Sense una substitució, MRBS deriva l'etiqueta del nom de la columna. Definiu una etiqueta per idioma actiu en 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';

Per a una parella entry/repeat, definiu només entry.catering; no cal cap clau repeat.catering. Els camps d'aula i d'usuari utilitzen claus com room.coffee_machine i users.phone.

Vegeu Text i traduccions per a substitucions de vocabulari, fitxers d'idioma i pàgines d'ajuda traduïdes.

Trieu el comportament d'entrada

Opcions fixes

$select_options substitueix l'entrada lliure per una llista de selecció:

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

En una matriu associativa, MRBS emmagatzema la clau (c) i utilitza el valor (Coffee) per mostrar, cercar i generar informes. Això permet canviar el text sense reescriure les dades emmagatzemades.

Eviteu les claus que només consten de dígits: PHP converteix les claus de cadena semblants a nombres enters en nombres enters, de manera que MRBS pot interpretar la matriu com a indexada. Incloeu una opció buida quan una selecció obligatòria ha de començar sense seleccionar.

$select_options admet entry.name, entry.description, els camps personalitzats de entry i els de users. Els textos de les opcions configurades són comuns per a tot el lloc; l'etiqueta del camp es pot traduir amb $vocab_override.

Suggeriments amb entrada lliure

Utilitzeu $datalist_options per oferir suggeriments sense impedir que s'introdueixi un altre valor:

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

Admet els mateixos camps que $select_options. Amb les llistes de dades associatives, la clau emmagatzemada pot sorprendre als usuaris, així que proveu el comportament abans d'utilitzar-la.

Camps obligatoris, privats i validats

Feu que un camp sigui obligatori a tot arreu:

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

O només a les àrees amb els ID de la base de dades 1 i 3:

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

Les regles d'obligatorietat específiques d'una àrea només s'apliquen als camps de entry. Les caselles obligatòries han d'estar marcades abans d'enviar el formulari.

S'admeten camps personalitzats privats a entry i users:

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

Això només protegeix el valor si les reserves privades estan habilitades i configurades. Proveu tots els rols pertinents; la privadesa de la interfície no substitueix la minimització de les dades sensibles.

Actualment, la validació mitjançant patrons es limita als camps de text personalitzats de users:

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

Els camps de text d'entrada poden tenir marcadors de posició traduïts:

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

Els patrons del navegador milloren els missatges de validació, però no converteixen el camp en un lloc segur per desar secrets ni contingut no fiable.

Control de l'ordre del camp

Col·loqueu els camps de reserva de manera explícita a les pàgines de creació i visualització:

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

Els camps no llistats s'afegeixen en el seu ordre normal. Els camps personalitzats també es poden col·locar al formulari de cerca d'informes:

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

Exemple complet

Després d'afegir catering a les dues taules de reserva:

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

Els textos de les opcions d'aquest exemple són els mateixos en totes les llengües de la interfície. Si necessiteu traduir-los, dissenyeu i proveu una ampliació específica del lloc; $select_options no els tradueix automàticament.

Canviar, eliminar i actualitzar

Abans d'escurçar una columna o canviar-ne el tipus, inspeccioneu els valors existents i proveu la conversió. Abans d'eliminar un camp, suprimiu-ne les referències de la configuració, desplegueu aquest canvi, confirmeu que l'aplicació funciona i només llavors elimineu la columna mitjançant el procés habitual de modificació de la base de dades. En els camps de reserva, modifiqueu tant entry com repeat.

Documenteu cada columna personalitzada a la documentació operativa del lloc i torneu-la a comprovar després de cada actualització d'MRBS. Els scripts d'esquema estàndard d'MRBS no gestionen aquestes columnes.

Llista de verificació

  • Les definicions de entry i repeat són idèntiques per a cada camp de reserva.
  • Crear, editar, visualitzar, copiar i suprimir una reserva funciona.
  • Es poden editar correctament una sèrie recurrent i una ocurrència.
  • Els valors predeterminats de la base de dades s'apliquen als registres nous.
  • El comportament obligatori, privat, de selecció, llista de dades i validació funciona per rol i àrea.
  • Les etiquetes apareixen en tots els idiomes configurats.
  • La cerca, els informes, el correu electrònic, l'exportació del calendari i la importació/exportació mostren valors segurs.
  • L'administració d'aules i d'usuaris només mostra els camps previstos.
  • Els procediments de còpia de seguretat i restauració inclouen l'esquema ampliat.