Labels and dimensions – system description
Tables of the label master, hierarchy and loop protection, replacement saving of relations, per-relation delete check and gaps in the permission checks.
Multilingual label master with dimension key, type (tag / dimension / nav / system), colour, icon, value type (none/text/int/date/ref/json), handler (e.g. parse_address, parse_bank, passthrough), hierarchy and relations with validity.
Data model
Table names carry the installation's own prefix in the database.
| Table | Role |
|---|---|
label, label_description | label and its name per language |
label_group | dimension key master (key, name, type, reportable, summable, order, status) |
label_path | hierarchy path table |
label_relation | label relations with validity |
label_link, label_action, label_rule, allocation_label, article_label, article_to_label | references (delete check) |
Process
- Save (core
modify): name in at least one language (max. 32); new dimension from the form (ensureGroup, default type dimension); dimension required; parent only from the same dimension (labelBelongsToGroup); loop protection (getDescendantIds);addLabel/editLabel, then relations replaced (saveRelations). No redirect. - Dimension panel:
groupslists,groupsavesaves (key[A-Z0-9_]); without the tableerror_group_table. - Delete (core
modify): checks per relation (getReferences), lists the referenced labels with counts and deletes the rest. - Searches:
searchvalues/searchparents, at most 20 hits.
Permissions
- Function rights:
add(header button only, with coremodify),groupedit,debug. The other endpoints check core rights only. - No content scope.
Known limitations
listandformrun without a function right check; only the menu decides visibility.- A new label has no preselected dimension; an existing key can be chosen even if it is missing from the master.
statusdeleteis classified BASE but not implemented.