Aller au contenu

Champs personnalisés

MRBS 1.12.2 détecte les colonnes supplémentaires de la base de données et les utilise comme champs de réservations, de salles ou d’utilisateurs. Il s’agit donc d’extensions du schéma : la configuration ne crée pas les colonnes.

Sauvegarder d’abord

Sauvegarder la base et tester la modification hors production. Les mises à niveau de MRBS ne créent, ne migrent et ne suppriment pas les colonnes propres au site.

Tables prises en charge

Table Usage Règle importante
entry Données supplémentaires d’une réservation Ajouter la même colonne à repeat
repeat Modèle d’une série récurrente Nom, type, longueur, valeur NULL et valeur par défaut identiques à entry
room Propriétés d’une salle ou ressource Affichées et modifiées avec la salle
users Données de profil supplémentaires Utilisées uniquement avec l’authentification par base

Une colonne entry sans colonne repeat identique provoque l’échec des opérations sur les séries. Les deux colonnes forment une seule modification de schéma.

Un nom de colonne ne doit contenir que lettres, chiffres et traits de soulignement. Avec PostgreSQL, il doit commencer par une lettre ou un trait de soulignement. Préférer un nom stable comme participant_count ou catering.

Types de données pris en charge

Type SQL Contrôle MRBS
TEXT Texte multiligne
VARCHAR Texte simple ou multiligne selon la longueur maximale
DATE Date
DECIMAL / NUMERIC Nombre
INT Entier
SMALLINT / TINYINT Case à cocher, interprétée comme booléen

Employer SMALLINT pour un booléen sous PostgreSQL et TINYINT sous MySQL. Les autres types ne sont pas gérés par le mécanisme automatique.

Ajouter le champ au schéma

Les exemples supposent le préfixe par défaut mrbs_. Le remplacer si $db_tbl_prefix a une autre valeur.

Champ de réservation

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

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

Ces instructions conviennent à MySQL et PostgreSQL. Vérifier que les deux définitions obtenues sont identiques avant d’ouvrir le formulaire.

Case à cocher d’une salle

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 applique la valeur par défaut de la base aux nouveaux enregistrements. La choisir avec soin, surtout pour les champs obligatoires et les cases à cocher.

Libellé traduit

Sans substitution, MRBS déduit le libellé du nom de colonne. Définir un libellé par langue active dans 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';

Pour une paire entry/repeat, seul entry.catering est nécessaire. Les champs de salle et d’utilisateur utilisent par exemple room.coffee_machine et users.phone.

Voir Textes et traductions pour les substitutions, les fichiers de langue et les pages d’aide traduites.

Comportement de saisie

Choix fermé

$select_options remplace la saisie libre par une liste :

$select_options['entry.catering'] = array(
    ''  => 'Veuillez choisir',
    'c' => 'Café',
    's' => 'Sandwichs',
    'h' => 'Repas chaud',
);

Avec un tableau associatif, MRBS stocke la clé (c) mais affiche, recherche et rapporte la valeur (Café). Le texte visible peut ainsi changer sans modifier les données existantes.

Éviter les clés composées uniquement de chiffres : PHP convertit les chaînes ressemblant à des entiers et MRBS peut alors traiter le tableau comme indexé. Inclure un choix vide si un champ obligatoire doit commencer sans sélection.

$select_options est pris en charge pour entry.name, entry.description, les champs entry personnalisés et les champs users personnalisés. Les textes des options sont globaux au site ; le libellé du champ est traduisible avec $vocab_override.

Suggestions avec saisie libre

$datalist_options propose des valeurs sans interdire une autre saisie :

$datalist_options['entry.catering'] = array(
    'Café',
    'Sandwichs',
    'Repas chaud',
);

Il accepte les mêmes champs que $select_options. Dans une liste associative, la clé enregistrée peut surprendre l’utilisateur : tester ce comportement.

Champs obligatoires, privés et validés

Rendre un champ obligatoire partout :

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

Ou seulement dans les zones d’identifiants 1 et 3 :

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

La règle par zone ne s’applique qu’aux champs entry. Une case obligatoire doit être cochée.

Les champs personnalisés entry et users peuvent être privés :

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

Cette protection ne fonctionne que si les réservations privées sont activées et correctement configurées. Tester chaque rôle et limiter les données sensibles collectées.

La validation par motif est actuellement limitée aux champs texte personnalisés de users :

$pattern['users.zip_code'] = '^[0-9]{5}$';
$vocab_override['fr']['users.zip_code.oninvalid'] =
    'Saisissez un code postal à cinq chiffres';

Un champ texte de réservation peut avoir un indicateur traduit :

$vocab_override['fr']['entry.catering.placeholder'] =
    'Indiquez les allergies ou besoins particuliers';

Ordre des champs

Définir l’ordre des pages de création et d’affichage :

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

Les champs absents sont ajoutés dans leur ordre habituel. L’ordre des critères de rapport peut également inclure les champs personnalisés :

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

Exemple complet

Après avoir ajouté catering aux deux tables de réservation :

$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' => 'Café',
    's' => 'Sandwichs',
    'h' => 'Repas chaud',
);

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

Les options de cet exemple restent identiques dans toutes les langues de l’interface. Si leur traduction est nécessaire, concevoir et tester une extension locale : $select_options ne les traduit pas automatiquement.

Modifier, supprimer et mettre à niveau

Avant de réduire une colonne ou de changer son type, examiner les valeurs existantes et tester la conversion. Pour supprimer un champ, retirer d’abord ses références de configuration, déployer et tester, puis supprimer la colonne dans le processus normal de base de données. Modifier toujours entry et repeat ensemble.

Documenter chaque colonne locale et la contrôler après toute mise à niveau. Les scripts de schéma MRBS standard ne la gèrent pas.

Liste de vérification

  • Les définitions entry et repeat sont identiques.
  • Création, modification, affichage, copie et suppression fonctionnent.
  • Une série et une occurrence isolée peuvent être modifiées.
  • Les valeurs par défaut de la base sont appliquées.
  • Obligations, confidentialité, listes, suggestions et validation fonctionnent par rôle et zone.
  • Les libellés apparaissent dans toutes les langues configurées.
  • Recherche, rapports, e-mail, calendrier et import/export présentent des valeurs sûres.
  • L’administration des salles et utilisateurs n’affiche que les champs voulus.
  • Sauvegarde et restauration comprennent le schéma étendu.