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.

TableRole
label, label_descriptionlabel and its name per language
label_groupdimension key master (key, name, type, reportable, summable, order, status)
label_pathhierarchy path table
label_relationlabel relations with validity
label_link, label_action, label_rule, allocation_label, article_label, article_to_labelreferences (delete check)

Process

  1. 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.
  2. Dimension panel: groups lists, groupsave saves (key [A-Z0-9_]); without the table error_group_table.
  3. Delete (core modify): checks per relation (getReferences), lists the referenced labels with counts and deletes the rest.
  4. Searches: searchvalues / searchparents, at most 20 hits.

Permissions

  • Function rights: add (header button only, with core modify), groupedit, debug. The other endpoints check core rights only.
  • No content scope.

Known limitations

  • list and form run 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.
  • statusdelete is classified BASE but not implemented.
Related topics: labels permissions