Map tags: load live organization tags and sanitize selections

This commit is contained in:
Jürgen Mummert
2026-02-26 22:00:12 +01:00
parent 1a4811cb02
commit 51a92ea45e
3 changed files with 57 additions and 8 deletions
+41 -5
View File
@@ -74,15 +74,33 @@ $GLOBALS['TL_DCA']['tl_module']['fields']['organizationTypeTags'] = [
'exclude' => true,
'inputType' => 'checkbox',
'options_callback' => static function () {
$database = Database::getInstance();
$labelExpression = $database->fieldExists('title', 'tl_tags')
? "COALESCE(NULLIF(t.title, ''), t.tag)"
: 't.tag';
$rows = Database::getInstance()
->prepare('SELECT DISTINCT t.id, t.tag FROM tl_tags t LEFT JOIN tl_tags_rel r ON r.tag_id=t.id AND r.ptable=? AND r.field=? ORDER BY t.tag ASC')
->prepare(sprintf(
'SELECT DISTINCT t.id, %1$s AS label
FROM tl_tags_rel r
INNER JOIN tl_tags t ON t.id=r.tag_id
WHERE r.ptable=? AND r.field=?
ORDER BY label ASC',
$labelExpression,
))
->execute('tl_organization', 'tags')
->fetchAllAssoc();
$options = [];
foreach ($rows as $row) {
$options[(int) $row['id']] = (string) $row['tag'];
$label = trim((string) ($row['label'] ?? ''));
if ('' === $label) {
continue;
}
$options[(int) $row['id']] = $label;
}
return $options;
@@ -204,15 +222,33 @@ $GLOBALS['TL_DCA']['tl_module']['fields']['mapInitialOrganizationTagId'] = [
'exclude' => true,
'inputType' => 'select',
'options_callback' => static function (): array {
$rows = Database::getInstance()
->prepare('SELECT DISTINCT t.id, t.tag FROM tl_tags t LEFT JOIN tl_tags_rel r ON r.tag_id=t.id AND r.ptable=? AND r.field=? ORDER BY t.tag ASC')
$database = Database::getInstance();
$labelExpression = $database->fieldExists('title', 'tl_tags')
? "COALESCE(NULLIF(t.title, ''), t.tag)"
: 't.tag';
$rows = $database
->prepare(sprintf(
'SELECT DISTINCT t.id, %1$s AS label
FROM tl_tags_rel r
INNER JOIN tl_tags t ON t.id=r.tag_id
WHERE r.ptable=? AND r.field=?
ORDER BY label ASC',
$labelExpression,
))
->execute('tl_organization', 'tags')
->fetchAllAssoc();
$options = [];
foreach ($rows as $row) {
$options[(int) $row['id']] = (string) $row['tag'];
$label = trim((string) ($row['label'] ?? ''));
if ('' === $label) {
continue;
}
$options[(int) $row['id']] = $label;
}
return $options;