Ir para o conteúdo

config.inc.php em profundidade

web/config.inc.php é o ficheiro de configuração propriedade da instalação para MRBS. Contém comportamento específico do site e geralmente contém segredos. Trate-o como uma configuração de produção, não como um ficheiro de origem da aplicação.

Crie o ficheiro

MRBS envia web/config.inc.php-sample, mas deliberadamente não envia um config.inc.php ativo.

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

Comece com a amostra da mesma versão MRBS. Não carregue uma amostra antiga inalterada.

Como a configuração é carregada

O bootstrap partilhado carrega a configuração por esta ordem:

  1. systemdefaults.inc.php
  2. areadefaults.inc.php
  3. config.inc.php
  4. site_config.inc
  5. validação interna e tratamento de compatibilidade

As atribuições posteriores substituem as anteriores. É por isso que um config.inc.php curto pode substituir os padrões da aplicação sem modificar os ficheiros de versão.

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

Os valores de área já armazenados na base de dados são editados através de Salas. Alterar areadefaults.inc.php ou substituir config.inc.php não reescreve as áreas existentes.

Sintaxe PHP

A configuração é executável PHP. Toda a instrução termina com um ponto e vírgula. As strings podem usar aspas simples ou duplas:

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

Use booleanos PHP reais, não strings:

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

Os arrays podem usar a sintaxe PHP suportada:

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

Não adicione uma etiqueta de fecho ?>. Pode introduzir saída acidental e quebrar cabeçalhos ou cookies.

Configurações mínimas

Um novo site necessita normalmente de um fuso horário da sala e de uma ligação à base de dados:

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

Utilize o fuso horário onde as salas estão localizadas. Pode ser diferente do fuso horário do servidor.

Configuração da base de dados

Selecione a base de dados

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

ou:

$dbsys = 'pgsql'; // PostgreSQL

Comportamento de ligação

localhost pode selecionar um socket Unix dependendo do controlador. Utilize 127.0.0.1 para forçar o TCP para MySQL. Uma porta não standard pode ser especificada separadamente:

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

PostgreSQL instalações com vários esquemas podem definir:

$db_schema = 'public';

O prefixo da tabela deve corresponder ao esquema instalado:

$db_tbl_prefix = 'mrbs_';

As ligações persistentes estão desativadas por defeito. Ative-os apenas após medir uma necessidade real e compreender a sua interação com transações e bloqueios.

Definições de URL e proxy reverso

MRBS geralmente deriva o seu URL do pedido. Quando um proxy reverso, um prefixo de caminho ou uma configuração invulgar de host virtual tornar isto não fiável, copie as definições de URL relevantes de systemdefaults.inc.php e defina uma base pública explícita.

O URL externo deve utilizar o esquema e o host vistos pelos utilizadores. Configure o proxy para passar informações de esquema e host fiáveis ​​e rejeitar cabeçalhos de host não fiáveis.

Após alterar o comportamento do URL, teste:

  • redireciona após login;
  • links em e-mail;
  • URLs do iCalendar;
  • ligações de saída do quiosque;
  • ligações multisite; e
  • Reencaminhamentos HTTP para HTTPS.

Autenticação e sessões

A autenticação verifica a identidade; o método de sessão obtém-no e retém-no.

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

Os sistemas externos adicionam as suas próprias configurações, por exemplo:

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

Não copie utilizadores ou palavras-passe de amostras na produção. Mapeie explicitamente o acesso do administrador e teste um utilizador normal e também um administrador. Consulte Autenticação.

Controlo de acesso

As definições em $auth controlam a visibilidade pública e o comportamento de reserva privilegiada:

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

Revejam as configurações relacionadas juntos. Um calendário público, um relatório público, um quiosque e uma reserva privada podem expor informações diferentes.

Calendário e interface

As substituições globais comuns incluem:

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

A formatação da data e hora reconhece a localidade. Copie a entrada $datetime_formats relevante completa ao substituir um formato, em vez de o reconstruir parcialmente.

Regras de reserva

Muitas regras de reserva pertencem a uma área e são geridas na base de dados. As configurações globais podem impor limites entre áreas ou restringir capacidades.

Mantenha as substituições de apólices numa secção claramente identificada e documente o motivo comercial:

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

Teste as reservas recorrentes, de vários dias e de administrador no limite da política.

E-mail

Escolha um back-end e configure o remetente, os destinatários, os eventos e o transporte:

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

Mantenha a verificação de certificados ativada. Consulte Notificações por e-mail.

Língua e redação local

Defina um idioma padrão fixo apenas quando a negociação do navegador for inadequada:

$default_language_tokens = 'de';

Substitua os rótulos individuais sem editar 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';

A utilização de $vocab_override preserva o texto local durante as atualizações. O fluxo de trabalho completo é abordado em Texto e traduções.

Campos personalizados

As colunas personalizadas da base de dados podem ser rotuladas e moldadas através da configuração:

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

As alterações na base de dados devem ser concluídas primeiro. Uma coluna personalizada entry requer uma coluna idêntica em repeat. Consulte Campos personalizados para obter os tipos suportados, exemplos de esquema, validação, privacidade, ordem dos campos e testes.

Incluir segredos de outro ficheiro

config.inc.php pode incluir outro ficheiro, mas o caminho deve ser absoluto:

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

O ficheiro incluído deve devolver ou atribuir apenas os valores esperados e ser legível pelo ambiente PHP. Mantenha-o fora da raiz da web.

As variáveis de ambiente também podem ser lidas explicitamente:

$db_password = getenv('MRBS_DB_PASSWORD');

Valide se existe um valor obrigatório em vez de aceitar silenciosamente um segredo vazio.

Multisite

O Multisite utiliza a configuração global mais uma configuração específica do site em sites/<site>/. No mínimo, todo o site precisa de um prefixo de tabela isolado:

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

A autenticação, o e-mail, o tema e outras definições podem variar de acordo com o site. Consulte Multisite.

Depuração

Ative o comportamento de depuração apenas temporariamente e nunca o exponha a utilizadores não fidedignos. A saída de depuração específica da integração pode conter dados de diretório, cabeçalhos, detalhes do servidor de correio ou informações pessoais.

Mantenha o registo de credenciais desativado:

$auth['log_credentials'] = false;

Manutenção segura para atualização

Para cada atualização MRBS:

  1. Faça cópia de segurança da configuração ativa.
  2. Comece por config.inc.php-sample da nova versão.
  3. Compare substituições antigas com novos padrões.
  4. Transfira apenas definições intencionais.
  5. Remova as variáveis obsoletas reportadas por verificações de compatibilidade.
  6. Execute a validação de sintaxe e os testes funcionais.

Evite copiar os padrões antigos completos para a nova configuração; isto oculta novos padrões e dificulta atualizações posteriores.

Lista de verificação de validação

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

Então verifique:

  • versões de aplicações e bases de dados em Help;
  • ligação à base de dados e prefixo de tabela;
  • fuso horário da sala e comportamento de horário de verão;
  • login, logout, expiração e mapeamento de administradores;
  • opiniões públicas e privadas;
  • criar, editar, eliminar, recorrência e limites de políticas;
  • remetente de e-mail, destinatários e TLS;
  • relatórios, exportações, quiosque e multisite quando utilizados; e
  • registos sem palavras-passe ou dados privados.

Layout de ficheiro recomendado

Mantenha o ficheiro curto e agrupado:

<?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 substituição não óbvia deve explicar porque é que a instalação precisa dela.