Salta el contingut

config.inc.php en profunditat

web/config.inc.php és el fitxer de configuració propi de cada instal·lació d'MRBS. Defineix el comportament específic del lloc i normalment conté secrets. Tracteu-lo com a configuració de producció, no com a codi font de l'aplicació.

Creeu el fitxer

MRBS inclou web/config.inc.php-sample, però no distribueix deliberadament cap config.inc.php actiu.

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

Comenceu amb el fitxer de mostra de la mateixa versió d'MRBS. No reutilitzeu sense revisar un fitxer de mostra antic.

Com es carrega la configuració

El bootstrap compartit carrega la configuració en aquest ordre:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. validació interna i gestió de compatibilitat

Les assignacions posteriors sobreescriuen les anteriors. Per això, un config.inc.php breu pot modificar els valors predeterminats de l'aplicació sense tocar els fitxers de la versió.

flowchart LR
  System[System defaults] --> Area[New-area defaults]
  Area --> Local[config.inc.php]
  Local --> Site[Site-specific config]
  Site --> Check[Validation and compatibility]

Important

Els valors de les àrees que ja són a la base de dades s'editen mitjançant Aules. Modificar areadefaults.inc.php o una sobreescriptura de config.inc.php no canvia les àrees existents.

Sintaxi PHP

La configuració és codi PHP executable. Cada sentència acaba amb un punt i coma. Les cadenes poden utilitzar cometes simples o dobles:

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

Utilitzeu booleans PHP reals, no cadenes:

$mail_settings['disabled'] = false;   // Correct
$mail_settings['disabled'] = "false"; // Wrong: this is a non-empty string

Les matrius poden utilitzar qualsevol de les sintaxis de PHP compatibles:

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

No afegiu l'etiqueta de tancament ?>. Pot generar una sortida accidental i malmetre les capçaleres o les galetes.

Configuració mínima

Una instal·lació nova normalment necessita la zona horària de les aules i una connexió amb la base de dades:

$timezone = 'Europe/Berlin';

$dbsys = 'mysql';
$db_host = 'localhost';
$db_database = 'mrbs';
$db_login = 'mrbs';
$db_password = 'replace-this-password';
$db_tbl_prefix = 'mrbs_';
$db_persist = false;

Utilitzeu la zona horària on es troben les aules. Pot ser diferent de la zona horària del servidor.

Configuració de la base de dades

Seleccioneu la base de dades

$dbsys = 'mysql'; // MySQL or MariaDB

o:

$dbsys = 'pgsql'; // PostgreSQL

Comportament de connexió

Segons el controlador, localhost pot seleccionar un sòcol Unix. Utilitzeu 127.0.0.1 per forçar una connexió TCP a MySQL. Els ports no estàndard es poden indicar per separat:

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

Les instal·lacions de PostgreSQL amb diversos esquemes poden establir:

$db_schema = 'public';

El prefix de la taula ha de coincidir amb l'esquema instal·lat:

$db_tbl_prefix = 'mrbs_';

Les connexions persistents estan desactivades per defecte. Activeu-les només si n'heu comprovat la necessitat i enteneu com interactuen amb les transaccions i els bloquejos.

Configuració d'URL i proxy invers

Normalment, MRBS dedueix el seu URL a partir de la sol·licitud. Si un servidor intermediari invers, un prefix de ruta o una configuració inusual de l'amfitrió virtual fan que aquest mecanisme no sigui fiable, copieu de systemdefaults.inc.php els paràmetres d'URL pertinents i definiu explícitament l'URL base públic.

L'URL extern ha d'utilitzar l'esquema i l'amfitrió vist pels usuaris. Configureu el servidor intermediari per passar la informació de l'esquema i l'amfitrió de confiança, i rebutjar les capçaleres de l'amfitrió no fiables.

Després de canviar el comportament de l'URL, proveu:

  • redireccions després d'iniciar sessió;
  • enllaços al correu electrònic;
  • URL d'iCalendar;
  • enllaços de sortida del quiosc;
  • enllaços multilloc; i
  • redireccions d'HTTP a HTTPS.

Autenticació i sessions

L'autenticació verifica la identitat; el mètode de sessió l'obté i reté.

$auth["type"] = "db";
$auth["session"] = "php";

Els sistemes externs afegeixen la seva pròpia configuració, per exemple:

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

No copieu usuaris ni contrasenyes d'exemple a producció. Assigneu explícitament l'accés d'administrador i feu proves amb un usuari normal i un administrador. Vegeu Autenticació.

Control d'accés

Els paràmetres de $auth controlen la visibilitat pública i les funcions de reserva privilegiades:

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

Reviseu conjuntament la configuració relacionada. Un calendari públic, un informe públic, un quiosc i una reserva privada poden exposar informació diferent.

Calendari i interfície

Les substitucions globals comunes inclouen:

$default_view = 'week';
$weekstarts = 1;                 // Monday
$display_mincals = true;
$show_timeline = true;
$kiosk_mode_enabled = false;

El format de les dates i les hores depèn de la configuració regional. Quan sobreescriviu un format, copieu l'entrada completa corresponent de $datetime_formats en comptes de reconstruir-la parcialment.

Normes de reserva

Moltes regles de reserva pertanyen a una àrea i s'administren a la base de dades. La configuració global pot imposar límits a diferents àrees o restringir les capacitats.

Manteniu les substitucions de polítiques en una secció clarament etiquetada i documenteu el motiu empresarial:

// Facilities policy: every user may hold at most 20 future bookings.
$max_per_interval_global_enabled['future'] = true;
$max_per_interval_global['future'] = 20;

Proveu les reserves recurrents, de diversos dies i d'administrador al límit de la política.

Correu electrònic

Trieu un sistema d'enviament i configureu el remitent, els destinataris, els esdeveniments i el transport:

$mail_settings['admin_backend'] = 'smtp';
$mail_settings['from'] = 'mrbs@example.org';
$mail_settings['booker'] = true;

$smtp_settings['host'] = 'mail.example.org';
$smtp_settings['port'] = 587;
$smtp_settings['auth'] = true;
$smtp_settings['secure'] = 'tls';
$smtp_settings['username'] = 'mrbs@example.org';
$smtp_settings['password'] = 'replace-this-password';

Mantingueu activada la verificació dels certificats. Vegeu Notificacions per correu electrònic.

Llengua i redacció local

Establiu un idioma predeterminat fix només quan la negociació del navegador no sigui adequada:

$default_language_tokens = 'de';

Substituïu etiquetes concretes sense editar els fitxers web/lang/lang.*:

$vocab_override['en']['mrbs'] = 'Resource Booking';
$vocab_override['de']['mrbs'] = 'Ressourcenbuchung';
$vocab_override['fr']['mrbs'] = 'Réservation de ressources';
$vocab_override['es']['mrbs'] = 'Reserva de recursos';

L'ús de $vocab_override conserva els textos locals durant les actualitzacions. Consulteu el procés complet a Text i traduccions.

Camps personalitzats

Les columnes de base de dades personalitzades es poden etiquetar i donar forma mitjançant la configuració:

$vocab_override['en']['room.coffee_machine'] = 'Coffee machine';
$select_options['entry.catering'] = array(
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch'
);
$is_mandatory_field['entry.catering'] = true;
$is_private_field['entry.refreshments'] = true;

Primer heu d'aplicar els canvis a la base de dades. Una columna personalitzada de entry necessita una columna idèntica a repeat. Vegeu Camps personalitzats per consultar els tipus admesos, exemples d'esquema, validació, privadesa, ordre dels camps i proves.

Inclou secrets d'un altre fitxer

config.inc.php pot incloure un altre fitxer, però el camí ha de ser absolut:

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

El fitxer inclòs només ha de retornar o assignar els valors previstos i ha de ser llegible pel procés de PHP. Mantingueu-lo fora de l'arrel web.

Les variables d'entorn també es poden llegir de manera explícita:

$db_password = getenv('MRBS_DB_PASSWORD');

Comproveu que els valors obligatoris existeixin en comptes d'acceptar silenciosament un secret buit.

Multilloc

El mode multilloc utilitza una configuració global i una configuració específica de cada lloc a sites/<site>/. Com a mínim, cada lloc necessita un prefix de taula propi:

$multisite = true;
$db_tbl_prefix = 'berlin_';

L'autenticació, el correu, el tema i altres configuracions poden variar segons el lloc. Vegeu Multilloc.

Depuració

Habiliteu el comportament de depuració només temporalment i no l'exposeu mai a usuaris no fiables. La sortida de depuració específica de la integració pot contenir dades de directoris, capçaleres, detalls del servidor de correu o informació personal.

Mantingueu desactivat el registre de credencials:

$auth['log_credentials'] = false;

Manteniment segur d'actualització

Per a cada actualització de MRBS:

  1. Feu una còpia de seguretat de la configuració activa.
  2. Comenceu des de la nova versió config.inc.php-sample.
  3. Compareu les substitucions antigues amb les noves predeterminades.
  4. Transferiu només els paràmetres necessaris.
  5. Elimineu les variables obsoletes informades per les comprovacions de compatibilitat.
  6. Executeu la validació de la sintaxi i les proves funcionals.

Eviteu copiar tots els valors predeterminats antics a la configuració nova, perquè ocultarien els nous valors predeterminats i complicarien les actualitzacions posteriors.

Llista de verificació de validació

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

A continuació, comproveu:

  • versions de l'aplicació i de la base de dades indicades a Ajuda;
  • connexió a la base de dades i prefix de taula;
  • zona horària de l'aula i comportament durant els canvis d'horari d'estiu;
  • inici i tancament de sessió, caducitat i assignació d'administradors;
  • vistes públiques i privades;
  • crear, editar, suprimir, repetir i límits de polítiques;
  • remitent de correu electrònic, destinataris i TLS;
  • informes, exportacions, quiosc i llocs múltiples on s'utilitzen; i
  • registres sense contrasenyes ni dades privades.

Disseny de fitxer recomanat

Manteniu el fitxer breu i agrupat:

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

// Timezone
$timezone = 'Europe/Berlin';

// Database
$dbsys = 'mysql';
// ...

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

// Site-specific overrides
// ...

Cada sobreescriptura que no sigui evident ha d'explicar per què la instal·lació la necessita.