From 6c550372a30015adb15babb9b3f42c2df4e2d1e3 Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Tue, 7 Jul 2026 15:49:16 +0200 Subject: [PATCH] add definable tag column in modified helpers --- application/libraries/stv/StudentListLib.php | 1 + .../models/education/Lehreinheit_model.php | 3 +- .../js/components/LVVerwaltung/Setup/Table.js | 2 +- .../Stv/Studentenverwaltung/List.js | 4 +- .../tabulator/filters/extendedHeaderFilter.js | 43 +++++++++++-------- public/js/tabulator/formatter/tags.js | 6 +-- 6 files changed, 34 insertions(+), 25 deletions(-) diff --git a/application/libraries/stv/StudentListLib.php b/application/libraries/stv/StudentListLib.php index 5ce9f354d..a00d2e153 100644 --- a/application/libraries/stv/StudentListLib.php +++ b/application/libraries/stv/StudentListLib.php @@ -331,6 +331,7 @@ class StudentListLib nt.style, n.erledigt AS done, nt.prioritaet AS prioritaet, + nt.automatisiert AS automatisiert, nz.prestudent_id, n.start, n.ende diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 5b2cc2cf1..808c4e443 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -729,7 +729,8 @@ EOSQL; style, erledigt AS done, lehreinheit_id, - prioritaet + prioritaet, + automatisiert FROM public.tbl_notizzuordnung JOIN public.tbl_notiz ON tbl_notizzuordnung.notiz_id = tbl_notiz.notiz_id JOIN public.tbl_notiz_typ ON tbl_notiz.typ = tbl_notiz_typ.typ_kurzbz diff --git a/public/js/components/LVVerwaltung/Setup/Table.js b/public/js/components/LVVerwaltung/Setup/Table.js index 6d8a944f9..f07748413 100644 --- a/public/js/components/LVVerwaltung/Setup/Table.js +++ b/public/js/components/LVVerwaltung/Setup/Table.js @@ -81,8 +81,8 @@ export default { buildTagHeaderFilterExpression(selectedOptions); setTagHeaderFilterValue( - this.$refs.table.tabulator, combinedFilterStatement, + this.$refs.table.tabulator ); }, deep: true, diff --git a/public/js/components/Stv/Studentenverwaltung/List.js b/public/js/components/Stv/Studentenverwaltung/List.js index 83629a8aa..45ac50cfc 100644 --- a/public/js/components/Stv/Studentenverwaltung/List.js +++ b/public/js/components/Stv/Studentenverwaltung/List.js @@ -494,7 +494,6 @@ export default { count: 0, filteredcount: 0, selectedcount: 0, - //tags expanded: [], tagEndpoint: ApiTag, currentEndpoint: null, @@ -598,8 +597,8 @@ export default { buildTagHeaderFilterExpression(selectedOptions); setTagHeaderFilterValue( - this.$refs.table.tabulator, combinedFilterStatement, + this.$refs.table.tabulator, ); }, deep: true, @@ -869,7 +868,6 @@ export default { this.lastSelected = []; this.$emit("update:selected", []); }, - //methods tags addedTag(addedTag) { addTagInTable(addedTag, this.allRows, "prestudent_id"); syncTagHeaderFilterOptions( diff --git a/public/js/tabulator/filters/extendedHeaderFilter.js b/public/js/tabulator/filters/extendedHeaderFilter.js index 0f8acdc3c..89d250d1c 100644 --- a/public/js/tabulator/filters/extendedHeaderFilter.js +++ b/public/js/tabulator/filters/extendedHeaderFilter.js @@ -29,11 +29,11 @@ function getConnectorLabel(connector, labels) { return labels?.connectors?.[connector.key] || connector.label; } -export function setTagHeaderFilterValue(tabulator, value) { - tabulator?.setHeaderFilterValue("tags", value); +export function setTagHeaderFilterValue(value, tabulator, columnField = "tags") { + tabulator?.setHeaderFilterValue(columnField, value); const input = tabulator - ?.getColumn("tags") + ?.getColumn(columnField) ?.getElement() ?.querySelector(".tabulator-header-filter input"); @@ -63,12 +63,12 @@ export function buildTagHeaderFilterExpression(selectedTagOptions) { return expression; } -export function buildTagOptionsFromRows(rows = []) { +export function buildTagOptionsFromRows(rows, field = "tags") { let options = []; - let tags = [ + let parsedTags = [ ...new Map( - getRawTagValuesFromRows(rows) + getRawTagValuesFromRows(rows, field) .filter((tag) => tag && tag.done !== true) .sort((a, b) => { return a.prioritaet - b.prioritaet; @@ -78,22 +78,25 @@ export function buildTagOptionsFromRows(rows = []) { label: tag.beschreibung || tag.typ_kurzbz, value: tag.beschreibung || tag.typ_kurzbz, style: tag.style, + automatisiert: tag.automatisiert, + done: tag.done, }; }) .map((obj) => [JSON.stringify(obj), obj]), ).values(), ]; - if (!Array.isArray(tags)) return; + if (!Array.isArray(parsedTags)) return; - return tags; + return parsedTags; } export function syncTagHeaderFilterOptions( rows = [], initialOptions = [], selectedOptions = [], + field = "tags" ) { - const options = buildTagOptionsFromRows(rows) || []; + const options = buildTagOptionsFromRows(rows, field) || []; if (Array.isArray(initialOptions)) { initialOptions.splice(0, initialOptions.length, ...options); @@ -143,15 +146,15 @@ export function syncSelectedTagOptionsWithHeaderFilters( return true; } -export function getRawTagValuesFromRows(rows = []) { - let tags = []; +export function getRawTagValuesFromRows(rows = [], field = "tags") { + let parsedTags = []; rows.forEach((row) => { - if (!row || (!row.tags?.length && !row._children?.length)) return; + if (!row || (!row[field]?.length && !row._children?.length)) return; - let newTags = row.tags?.length - ? [row.tags] - : getRawTagValuesFromRows(row._children); + let newTags = row[field]?.length + ? [row[field]] + : getRawTagValuesFromRows(row._children, field); newTags = newTags .map((newTag) => { @@ -167,10 +170,10 @@ export function getRawTagValuesFromRows(rows = []) { }) .filter((newTag) => newTag !== null); - tags = tags.concat(newTags); + parsedTags = parsedTags.concat(newTags); }); - return tags.flat(); + return parsedTags.flat(); } export function customTagFilter(cell, onRendered, success, cancel, params) { @@ -380,6 +383,12 @@ function generateDropdownTable(options, selectedTagOptions, labels) { const label = document.createElement("span"); label.className = "tag " + option.style; label.innerText = option.label; + + if (option.automatisiert) { + label.innerHTML = " " + option.label; + label.className += " tag_auto"; + } + labelTd.appendChild(label); row.appendChild(labelTd); diff --git a/public/js/tabulator/formatter/tags.js b/public/js/tabulator/formatter/tags.js index 5cd848bbd..d78ed2026 100644 --- a/public/js/tabulator/formatter/tags.js +++ b/public/js/tabulator/formatter/tags.js @@ -1,5 +1,5 @@ -export function tagFormatter(cell, tagComponent, onRendered) { - const mappedData = tagComponent.tags.map((tag) => ({ +export function tagFormatter(cell, tagComponent, onRendered, tagKey = "tags") { + const mappedData = tagComponent[tagKey]?.map((tag) => ({ typ_kurzbz: tag.tag_typ_kurzbz, automatisiert: tag.automatisiert, })); @@ -49,7 +49,7 @@ export function tagFormatter(cell, tagComponent, onRendered) { tagElement.className = "tag " + tag.style; if (tag.done) tagElement.className += " tag_done"; - const tagDef = mappedData.find((t) => t.typ_kurzbz === tag.typ_kurzbz); + const tagDef = mappedData?.find((t) => t.typ_kurzbz === tag.typ_kurzbz); if ( (!tagDef && tag.typ_kurzbz?.includes("_auto")) ||