Saltar a contenido

Campos personalizados

MRBS 1.12.2 detecta columnas adicionales de la base de datos y las utiliza como campos de reservas, salas o usuarios. Por tanto, son extensiones del esquema: la configuración no crea las columnas automáticamente.

Crear una copia primero

Hacer una copia de la base de datos y probar el cambio fuera de producción. Las actualizaciones de MRBS no crean, migran ni eliminan columnas propias del sitio.

Tablas compatibles

Tabla Finalidad Regla importante
entry Datos adicionales de una reserva Añadir la misma columna a repeat
repeat Plantilla de una serie periódica Nombre, tipo, longitud, nulabilidad y valor predeterminado idénticos a entry
room Propiedades adicionales de una sala o recurso Se muestran y editan con la sala
users Datos adicionales del perfil Solo con autenticación por base de datos

Una columna en entry sin otra idéntica en repeat provoca errores en las operaciones con series. Ambas forman un único cambio de esquema.

Los nombres solo pueden contener letras, números y guiones bajos. En PostgreSQL deben comenzar por una letra o guion bajo. Conviene usar nombres estables como participant_count o catering.

Tipos de datos compatibles

Tipo SQL Control de MRBS
TEXT Texto de varias líneas
VARCHAR Texto de una o varias líneas, según la longitud máxima
DATE Fecha
DECIMAL / NUMERIC Número
INT Entero
SMALLINT / TINYINT Casilla, interpretada como valor booleano

Usar SMALLINT para booleanos en PostgreSQL y TINYINT en MySQL. El manejo automático no admite otros tipos.

Añadir el campo al esquema

Los ejemplos presuponen el prefijo mrbs_. Debe sustituirse si $db_tbl_prefix tiene otro valor.

Campo de reserva

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

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

Las dos sentencias funcionan con MySQL y PostgreSQL. Antes de abrir el formulario, comprobar que las definiciones resultantes sean idénticas.

Casilla para una 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;

MRBS 1.12.2 aplica el valor predeterminado de la base de datos a los registros nuevos. Hay que elegirlo con cuidado, sobre todo en campos obligatorios y casillas.

Etiqueta traducida

Sin una sustitución, MRBS deriva la etiqueta del nombre de columna. Se define una etiqueta por idioma activo en 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 el par entry/repeat solo hace falta entry.catering. Los campos de salas y usuarios usan claves como room.coffee_machine y users.phone.

Véase Textos y traducciones para sustituciones, archivos de idioma y páginas de ayuda traducidas.

Comportamiento de entrada

Opciones cerradas

$select_options sustituye la entrada libre por una lista:

$select_options['entry.catering'] = array(
    ''  => 'Seleccione una opción',
    'c' => 'Café',
    's' => 'Bocadillos',
    'h' => 'Comida caliente',
);

Con un array asociativo, MRBS guarda la clave (c) pero muestra, busca e incluye en informes el valor (Café). Así se puede cambiar el texto visible sin reescribir los datos.

Evitar claves formadas solo por dígitos: PHP convierte cadenas con aspecto de entero y MRBS puede interpretar el array como indexado. Incluir una opción vacía si un campo obligatorio debe empezar sin selección.

$select_options admite entry.name, entry.description, campos entry personalizados y campos users personalizados. Los textos de opciones son globales para el sitio; la etiqueta del campo sí puede traducirse con $vocab_override.

Sugerencias con entrada libre

$datalist_options propone valores, pero permite introducir otros:

$datalist_options['entry.catering'] = array(
    'Café',
    'Bocadillos',
    'Comida caliente',
);

Admite los mismos campos que $select_options. En listas asociativas, la clave guardada puede sorprender; conviene probar el comportamiento.

Campos obligatorios, privados y validados

Hacer obligatorio un campo en todas partes:

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

O solo en las áreas con identificadores 1 y 3:

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

La regla por área solo se aplica a entry. Una casilla obligatoria debe estar marcada.

Los campos personalizados de entry y users pueden ser privados:

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

La protección solo funciona si las reservas privadas están activadas y configuradas. Probar todos los roles y reducir al mínimo los datos sensibles.

La validación mediante patrón se limita actualmente a campos de texto personalizados de users:

$pattern['users.zip_code'] = '^[0-9]{5}$';
$vocab_override['es']['users.zip_code.oninvalid'] =
    'Introduzca un código postal de cinco dígitos';

Un campo de texto de la reserva puede tener un texto indicativo traducido:

$vocab_override['es']['entry.catering.placeholder'] =
    'Indique alergias o necesidades especiales';

Orden de los campos

Definir el orden de las páginas de creación y visualización:

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

Los campos no incluidos se añaden en su orden habitual. Los campos personalizados también pueden formar parte del orden de búsqueda de informes:

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

Ejemplo completo

Después de añadir catering a las dos tablas 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' => 'Café',
    's' => 'Bocadillos',
    'h' => 'Comida caliente',
);

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

Los textos de opciones de este ejemplo son iguales en todos los idiomas de la interfaz. Si deben traducirse, hay que diseñar y probar una extensión local; $select_options no los traduce automáticamente.

Modificar, eliminar y actualizar

Antes de acortar una columna o cambiar su tipo, revisar los valores y probar la conversión. Para eliminar un campo, quitar primero sus referencias de configuración, desplegar y probar, y solo después borrar la columna mediante el proceso normal de base de datos. Cambiar siempre entry y repeat juntos.

Documentar todas las columnas locales y revisarlas tras cada actualización. Los scripts de esquema estándar de MRBS no las administran.

Lista de comprobación

  • Las definiciones de entry y repeat son idénticas.
  • Crear, editar, ver, copiar y eliminar reservas funciona.
  • Se pueden modificar una serie y una única aparición.
  • Se aplican los valores predeterminados de la base.
  • Obligación, privacidad, listas, sugerencias y validación funcionan por rol y área.
  • Las etiquetas aparecen en todos los idiomas configurados.
  • Búsqueda, informes, correo, calendario e importación/exportación muestran valores seguros.
  • La administración de salas y usuarios muestra solo los campos previstos.
  • Copias y restauraciones incluyen el esquema ampliado.