Aller au contenu

config.inc.php en détail

web/config.inc.php est le fichier propre à l’installation. Il contient les réglages locaux et souvent des secrets. Il appartient à l’environnement d’exploitation, pas au code applicatif.

Créer le fichier

cd /var/www/mrbs
cp config.inc.php-sample config.inc.php

Toujours partir de l’exemple de la même version MRBS.

Ordre de chargement

MRBS charge successivement les valeurs système, les valeurs des nouvelles zones, config.inc.php, la configuration du site, puis les contrôles internes. Une affectation ultérieure remplace une valeur précédente.

flowchart LR
  System[Valeurs système] --> Area[Nouvelles zones]
  Area --> Local[config.inc.php]
  Local --> Site[Configuration du site]
  Site --> Check[Validation]

Les zones existantes sont configurées dans Salles et stockées en base.

Syntaxe PHP

$timezone = 'Europe/Paris';
$default_view = 'week';
$kiosk_mode_enabled = false;
$search['count'] = 30;

Utiliser de vrais booléens, pas des chaînes :

$mail_settings['disabled'] = false;   // Correct
$mail_settings['disabled'] = "false"; // Incorrect : chaîne non vide

Les tableaux peuvent employer l’une ou l’autre syntaxe prise en charge par PHP :

$auth['admin'] = array('alice', 'bob');
$report_open_areas = [1, 3];

Terminer chaque instruction par ; et ne pas ajouter de balise finale ?>.

Réglages minimaux

$timezone = 'Europe/Paris';
$dbsys = 'mysql';
$db_host = 'localhost';
$db_database = 'mrbs';
$db_login = 'mrbs';
$db_password = 'remplacer-ce-mot-de-passe';
$db_tbl_prefix = 'mrbs_';
$db_persist = false;

Pour PostgreSQL, utiliser $dbsys = 'pgsql';. Le préfixe doit correspondre au schéma installé. 127.0.0.1 force une connexion TCP MySQL lorsque localhost sélectionne un socket.

Configuration de la base

Choisir la base

Pour MySQL ou MariaDB :

$dbsys = 'mysql';

Pour PostgreSQL :

$dbsys = 'pgsql';

Comportement de la connexion

Avec MySQL, localhost peut sélectionner un socket Unix. Utiliser 127.0.0.1 pour forcer TCP. Un port non standard se règle séparément :

$db_host = '127.0.0.1';
$db_port = 3306;

PostgreSQL peut sélectionner un schéma :

$db_schema = 'public';

Le préfixe doit correspondre au schéma installé :

$db_tbl_prefix = 'mrbs_';

N’activer les connexions persistantes qu’après mesure et examen des transactions et verrous.

URL et proxy inverse

MRBS déduit normalement son URL. Derrière un proxy ou un préfixe, reprendre les réglages URL appropriés de systemdefaults.inc.php. Tester ensuite les redirections, les liens d’e-mail, iCalendar, le kiosque, le multisite et HTTPS.

Authentification et sessions

$auth['type'] = 'db';
$auth['session'] = 'php';
$auth['deny_public_access'] = true;
$auth['admin_must_obey_policies'] = true;

Ne pas conserver les utilisateurs d’exemple. Tester séparément utilisateur, administrateur et visiteur déconnecté. Voir Authentification.

Un système externe exige ses propres réglages, par exemple :

$auth['type'] = 'ldap';
$auth['session'] = 'php';

Contrôle d’accès

Examiner ensemble accès public, rapports publics, kiosque et confidentialité :

$auth['deny_public_access'] = true;
$auth['only_admin_can_book'] = false;
$auth['admin_must_obey_policies'] = true;

Calendrier et interface

$default_view = 'week';
$weekstarts = 1;
$display_mincals = true;

Les formats date/heure dépendent de la locale. Copier l’entrée complète de $datetime_formats lors d’une adaptation.

Règles de réservation

Les règles de zone existantes se gèrent dans l’interface. Regrouper les limites globales et expliquer leur raison :

$max_per_interval_global_enabled['future'] = true;
$max_per_interval_global['future'] = 20;

E-mail

$mail_settings['admin_backend'] = 'smtp';
$mail_settings['from'] = 'mrbs@example.org';
$smtp_settings['host'] = 'mail.example.org';
$smtp_settings['port'] = 587;
$smtp_settings['secure'] = 'tls';

Conserver la vérification des certificats et protéger les identifiants. Voir Notifications par e-mail.

Langue et textes locaux

$default_language_tokens = 'fr';

Personnaliser les libellés sans modifier web/lang/lang.* :

$vocab_override['fr']['mrbs'] = 'Réservation de ressources';

Les substitutions $vocab_override évitent de modifier les fichiers lang.*. Voir Textes et traductions.

Champs personnalisés

Les colonnes personnalisées peuvent recevoir un libellé et des options dans la configuration :

$vocab_override['fr']['room.coffee_machine'] = 'Machine à café';
$select_options['entry.catering'] = array(
    'c' => 'Café',
    's' => 'Sandwichs'
);
$is_mandatory_field['entry.catering'] = true;

Créer d’abord les colonnes. Une colonne ajoutée à entry doit être ajoutée à l’identique à repeat.

Voir Champs personnalisés pour types, schéma, validation et confidentialité.

Inclure les secrets

Un fichier de secrets doit être hors de la racine web et chargé par chemin absolu :

require '/etc/mrbs/database-secrets.php';

Le fichier doit rester hors de la racine web. Les variables d’environnement peuvent aussi être lues explicitement :

$db_password = getenv('MRBS_DB_PASSWORD');

Vérifier qu’une variable d’environnement obligatoire n’est pas vide.

Multisite

En multisite, chaque site doit avoir au minimum un préfixe de tables distinct :

$multisite = true;
$db_tbl_prefix = 'paris_';

Authentification, courrier et thème peuvent varier. Voir Multisite.

Débogage

N’activer le débogage que temporairement et garder :

$auth['log_credentials'] = false;

Maintenance lors des mises à niveau

Pour une mise à niveau, partir du nouvel exemple, comparer les anciens ajustements et ne transférer que les valeurs nécessaires.

Liste de validation

php -l /var/www/mrbs/config.inc.php

Tester ensuite base, fuseaux, connexion, droits, réservations, e-mail, rapports, exports, kiosque et multisite. Les journaux ne doivent contenir ni mots de passe ni données privées.

Organisation recommandée

Garder le fichier court et regrouper les réglages :

<?php
declare(strict_types=1);
namespace MRBS;

// Fuseau horaire
$timezone = 'Europe/Paris';

// Base de données
$dbsys = 'mysql';

// Authentification
$auth['type'] = 'db';
$auth['session'] = 'php';

Commenter la raison des valeurs non évidentes.