Přeskočit obsah

Vlastní pole

MRBS 1.12.2 dokáže rozpoznat další databázové sloupce a použít je jako pole rezervací, místností a uživatelů. Vlastní pole jsou rozšířením databázového schématu; pouhé nastavení v konfiguraci sloupec nevytvoří.

Nejdříve zálohujte

Zálohujte databázi a otestujte změnu na neprodukční instanci. Upgrady MRBS nevytvářejí, nemigrují ani neodstraňují sloupce specifické pro daný web.

Kde jsou podporována vlastní pole

Databázová tabulka Účel Důležité pravidlo
entry Další údaje jednotlivé rezervace Přidejte stejný sloupec do repeat
repeat Údaje šablony opakované rezervace Název, typ, délka, možnost hodnoty NULL a výchozí hodnota musejí být shodné s entry
room Další vlastnosti místnosti nebo zdroje Zobrazuje se a upravuje s daty místnosti
users Další údaje uživatelského profilu Používá se pouze při ověřování pomocí databáze

Pokud ke sloupci v tabulce entry neexistuje shodný sloupec v tabulce repeat, operace s opakovanými rezervacemi selžou. Oba sloupce proto považujte za jedinou změnu schématu.

V názvu sloupce používejte pouze písmena, čísla a podtržítka. Pro kompatibilitu s PostgreSQL jej začněte písmenem nebo podtržítkem. Preferujte stabilní jména s malými písmeny, jako je participant_count nebo catering.

Podporované typy databází

Typ SQL Ovládací prvek v MRBS
TEXT Víceřádkový text
VARCHAR Zadávání textu nebo víceřádkový text v závislosti na jeho maximální délce
DATE Zadání data
DECIMAL / NUMERIC Zadání čísla
INT Zadání celého čísla
SMALLINT / TINYINT Zaškrtávací políčko, interpretováno jako logická hodnota

Použijte SMALLINT pro booleovská vlastní pole na PostgreSQL a TINYINT na MySQL. Jiné typy sloupců nejsou podporovány automatickým zpracováním vlastních polí.

Přidejte pole do schématu

Příklady předpokládají výchozí předponu tabulek mrbs_. Pokud má $db_tbl_prefix jinou hodnotu, předponu odpovídajícím způsobem změňte.

Rezervační pole

Tento příklad přidává volitelnou volbu stravování:

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

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

Oba příkazy pracují s MySQL a PostgreSQL. Před otevřením rezervačního formuláře ověřte výsledné definice v obou tabulkách.

Zaškrtávací pole místnosti

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;

Při vytvoření nového řádku použije MRBS 1.12.2 výchozí hodnotu databáze. Volte ji uvážlivě, zejména u povinných a zaškrtávacích polí.

Přeložený popisek pole

Pokud popisek nenastavíte, MRBS jej odvodí z názvu sloupce. V souboru config.inc.php definujte popisek pro každý aktivní jazyk:

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

Pro dvojici entry/repeat stačí definovat entry.catering; token repeat.catering není potřeba. Pole místností a uživatelů používají tokeny jako room.coffee_machine a users.phone.

Změny terminologie, jazykové soubory a přeložené stránky nápovědy popisuje kapitola Texty a překlady.

Volba způsobu zadávání

Pevné volby

$select_options nahradí volné textové pole výběrovým seznamem:

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

U asociativního pole MRBS ukládá klíč (c), ale zobrazuje a vyhledává hodnotu (Coffee) a používá ji v sestavách. Text tak lze změnit bez přepsání uložených dat.

Nepoužívejte klíče složené pouze z číslic. PHP převádí řetězcové klíče, které vypadají jako celá čísla, na čísla, takže MRBS může pole vyhodnotit jako indexované. Má-li povinné pole začínat bez zvolené hodnoty, přidejte prázdnou možnost.

$select_options je podporováno pro entry.name, entry.description, vlastní pole entry a vlastní pole users. Konfigurované titulky možností jsou řetězce pro celý web; samotný štítek pole lze přeložit pomocí $vocab_override.

Pomocí $datalist_options nabídnete návrhy, ale současně povolíte zadání jiné hodnoty:

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

Podporuje stejná pole jako $select_options. U asociativních seznamů dat může být uložený klíč pro uživatele překvapivý, takže před použitím otestujte chování.

Povinná, soukromá a ověřená pole

Všude nastavte povinné pole:

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

Nebo pouze v oblastech s ID databáze 1 a 3:

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

Povinnost omezená na konkrétní oblasti se vztahuje pouze na pole entry. Povinné zaškrtávací pole musí být před odesláním zaškrtnuto.

Soukromá vlastní pole jsou podporována pro entry a users:

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

Hodnota je tak chráněna pouze tehdy, jsou-li povoleny a správně nastaveny soukromé rezervace. Otestujte všechny relevantní role; skrytí v uživatelském rozhraní nenahrazuje omezení množství ukládaných citlivých údajů.

Ověření vzoru je v současnosti omezeno na vlastní textová pole 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';

Textová vstupní pole mohou mít přeložené zástupné texty:

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

Kontrola vzoru v prohlížeči zlepšuje zpětnou vazbu, ale nečiní z pole bezpečné místo pro citlivé údaje ani nedůvěryhodný značkovací kód.

Určení pořadí polí

Pořadí polí rezervace na stránkách pro vytvoření a zobrazení určete výslovně:

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

Pole, která nejsou uvedena, jsou připojena v normálním pořadí. Vlastní pole lze také umístit do formuláře pro vyhledávání sestavy:

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

Kompletní příklad

Po přidání catering do obou rezervačních tabulek:

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

Texty možností v tomto příkladu zůstávají ve všech jazycích uživatelského rozhraní stejné. Pokud potřebujete překládat i je, navrhněte a otestujte rozšíření pro konkrétní instalaci; $select_options je automaticky nepřekládá.

Změny, odstraňování a aktualizace

Před zkrácením sloupce nebo změnou jeho typu zkontrolujte existující hodnoty a otestujte převod. Chcete-li pole odstranit, nejprve odstraňte odkazy v konfiguraci, změnu nasaďte a ověřte funkčnost aplikace. Teprve potom sloupec odstraňte standardním postupem pro změny databáze. U polí rezervací měňte tabulky entry i repeat.

Zaznamenejte každý vlastní sloupec do provozní dokumentace webu a znovu jej zkontrolujte po každém upgradu MRBS. Standardní skripty schémat MRBS tyto sloupce nevlastní.

Kontrolní seznam pro ověření

  • Definice entry a repeat jsou identické pro každé rezervační pole.
  • Vytváření, úpravy, prohlížení, kopírování a mazání rezervace funguje.
  • Opakovanou sérii i jednotlivý výskyt lze správně upravit.
  • Na nové záznamy se použijí výchozí hodnoty databáze.
  • Povinná a soukromá pole, výběrové seznamy, seznamy návrhů a validace fungují podle role a oblasti.
  • Štítky se zobrazují ve všech nakonfigurovaných jazycích.
  • Vyhledávání, sestavy, e-mail, export kalendáře a import/export zobrazují bezpečné hodnoty.
  • Správa místností a uživatelů zobrazuje pouze zamýšlená pole.
  • Postupy zálohování a obnovy zahrnují rozšířené schéma.