Ir para o conteúdo

Campos personalizados

MRBS 1.12.2 pode descobrir colunas adicionais da base de dados e utilizá-las como campos para reservas, salas e utilizadores. Os campos personalizados são, portanto, extensões de esquema e não definições que criam colunas automaticamente.

Faça backup primeiro

Faça cópias de segurança da base de dados e teste a alteração numa instância que não seja de produção. MRBS as atualizações não criam, migram ou removem colunas específicas do site.

Onde os campos personalizados são suportados

Tabela de base de dados Finalidade Regra importante
entry Dados extra para uma reserva individual Adicione a coluna idêntica a repeat
repeat Dados de modelo para uma reserva recorrente Manter o nome, o tipo, o comprimento, a nulidade e o padrão idênticos a entry
room Propriedades extra de espaço ou recursos Exibido e editado com dados da sala
users Dados extra do perfil do utilizador Utilizado apenas com autenticação de base de dados

Uma coluna entry sem uma coluna repeat idêntica causa falha nas operações de reserva recorrentes. Trate o par como uma mudança de esquema.

Utilize apenas letras, números e sublinhados no nome de uma coluna. Para compatibilidade com PostgreSQL, comece por uma letra ou sublinhado. Prefira nomes estáveis ​​e em minúsculas, como participant_count ou catering.

Tipos de base de dados suportados

Tipo SQL MRBS controlo
TEXT Texto multilinha
VARCHAR Introdução de texto ou texto multilinha, dependendo do comprimento máximo
DATE Entrada de data
DECIMAL / NUMERIC Entrada de número
INT Entrada inteira
SMALLINT / TINYINT Caixa de seleção, interpretada como um valor booleano

Utilize SMALLINT para campos personalizados booleanos em PostgreSQL e TINYINT em MySQL. Outros tipos de colunas não são suportados pela manipulação automática de campos personalizados.

Adicione um campo ao esquema

Os exemplos assumem o prefixo de tabela padrão mrbs_. Substitua-o se $db_tbl_prefix tiver outro valor.

Campo de reserva

Este exemplo adiciona uma opção de catering opcional:

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

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

Ambas as instruções funcionam com MySQL e PostgreSQL. Verifique as definições resultantes em ambas as tabelas antes de abrir o formulário de reserva.

Caixa de seleção da sala

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;

Em MRBS 1.12.2, o padrão da base de dados é utilizado quando é criada uma nova linha. Escolha os padrões deliberadamente, especialmente para os campos e caixas de seleção obrigatórios.

Dê ao campo um rótulo traduzido

Sem substituição, MRBS deriva o rótulo do nome da coluna. Defina um rótulo por idioma ativo em 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';

Para um par entry/repeat, defina apenas entry.catering; não é necessário nenhum token repeat.catering. Os campos Room e User utilizam tokens como room.coffee_machine e users.phone.

Consulte Texto e traduções para obter as substituições de vocabulário, ficheiros de idioma e páginas de Ajuda traduzidas.

Escolha o comportamento de entrada

Escolhas fixas

$select_options substitui a entrada gratuita por uma lista de seleção:

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

Para uma matriz associativa, MRBS armazena a chave (c) e apresenta, pesquisa e reporta o valor (Coffee). Isto permite alterar o texto sem reescrever os dados armazenados.

Evite chaves que consistem apenas em dígitos: PHP converte chaves de string do tipo inteiro em inteiros, pelo que MRBS pode interpretar o array como indexado. Inclui uma opção vazia quando uma seleção obrigatória deve começar desmarcada.

$select_options é compatível com os campos entry.name, entry.description, campos entry personalizados e campos users personalizados. As legendas das opções configuradas são sequências de todo o site; o próprio rótulo do campo pode ser traduzido com $vocab_override.

Sugestões com entrada livre

Utilize $datalist_options para sugestões enquanto ainda aceita outro valor:

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

Suporta os mesmos campos que $select_options. Com listas de dados associativos, a chave armazenada pode surpreender os utilizadores, por isso teste o comportamento antes de utilizar.

Campos obrigatórios, privados e validados

Torne um campo obrigatório em todos os locais:

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

Ou apenas em áreas com os IDs de base de dados 1 e 3:

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

As regras obrigatórias específicas da área aplicam-se apenas aos campos entry. Uma caixa de seleção obrigatória deve ser marcada antes do envio.

São suportados campos personalizados privados para entry e users:

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

Isto protege o valor apenas quando as reservas privadas estão ativadas e configuradas. Teste todas as funções relevantes; não utilize a privacidade da interface do utilizador como um substituto para minimizar os dados confidenciais.

A validação do padrão está atualmente limitada a campos de texto personalizados 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';

Os campos de texto de entrada podem ter espaços reservados traduzidos:

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

Os padrões do lado do cliente melhoram o feedback, mas não transformam um campo num local seguro para segredos ou marcações não fiáveis.

Ordem dos campos de controlo

Coloque os campos de reserva explicitamente nas páginas de criação e visualização:

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

Os campos não listados são anexados na sua ordem normal. Os campos personalizados também podem ser colocados no formulário de pesquisa do relatório:

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

Exemplo completo

Depois de adicionar catering a ambas as tabelas de reservas:

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

As legendas das opções neste exemplo permanecem as mesmas em todos os idiomas da UI. Se as legendas das opções traduzidas forem um requisito, desenhe e teste uma extensão específica do website em vez de assumir que $select_options as traduz automaticamente.

Alterar, remover e atualizar

Antes de encurtar uma coluna ou alterar o seu tipo, inspecione os valores existentes e teste a conversão. Antes de remover um campo, remova as suas referências de configuração, implante essa alteração, confirme se a aplicação funciona e só depois elimine a coluna através do processo normal de alteração da base de dados. Para os campos de reserva, altere entry e repeat.

Registe cada coluna personalizada na documentação de operações do website e verifique-a novamente após cada atualização do MRBS. Os scripts de esquema MRBS padrão não possuem estas colunas.

Lista de verificação de verificação

  • As definições entry e repeat são idênticas para todos os campos de reserva.
  • Criar, editar, visualizar, copiar e eliminar uma reserva funciona.
  • Uma série recorrente e uma ocorrência podem ser editadas corretamente.
  • Os padrões da base de dados são aplicados a novos registos.
  • O comportamento obrigatório, privado, de seleção, lista de dados e validação funciona por função e área.
  • Os rótulos aparecem em todos os idiomas configurados.
  • Pesquisa, relatórios, email, exportação de calendário e importação/exportação mostram valores seguros.
  • A administração de salas e utilizadores apenas apresenta os campos pretendidos.
  • Os procedimentos de cópia de segurança e restauro incluem o esquema alargado.