From 49ea02621b49e5eb815b237d0550302c918e04f1 Mon Sep 17 00:00:00 2001 From: Thomas Hackl Date: Tue, 7 Oct 2025 11:38:28 +0200 Subject: Resolve "UserFilter bearbeitbar machen" Closes #5910 Merge request studip/studip!4506 --- lib/classes/JsonApi/Schemas/UserFilter.php | 2 +- resources/vue/components/StudipUserFilter.vue | 36 +++++++++++------ .../components/admission/ConditionalAdmission.vue | 22 ++++++++-- .../components/admission/PreferentialAdmission.vue | 47 ++++++++++++++++++---- .../vue/components/form_inputs/UserFilterInput.vue | 28 +++++++++++-- 5 files changed, 108 insertions(+), 27 deletions(-) diff --git a/lib/classes/JsonApi/Schemas/UserFilter.php b/lib/classes/JsonApi/Schemas/UserFilter.php index 7e390cf..8be264b 100644 --- a/lib/classes/JsonApi/Schemas/UserFilter.php +++ b/lib/classes/JsonApi/Schemas/UserFilter.php @@ -25,7 +25,7 @@ class UserFilter extends SchemaProvider 'value' => $field->getValue(), ] ], - $resource->getFields() + array_values($resource->getFields()) ); $resource->show_user_count = true; diff --git a/resources/vue/components/StudipUserFilter.vue b/resources/vue/components/StudipUserFilter.vue index 48c6c0f..e7edba1 100644 --- a/resources/vue/components/StudipUserFilter.vue +++ b/resources/vue/components/StudipUserFilter.vue @@ -44,11 +44,14 @@ {{ name }} - + + +
@@ -102,6 +107,8 @@ export default { ungrouped: [], groups: [], showEditFilter: false, + currentFilterIndex: null, + currentFilter: null, selectedFilters: [] } }, @@ -122,14 +129,18 @@ export default { } }, methods: { - editFilter() { + editFilter(index) { this.showEditFilter = true; + this.currentFilterIndex = index; + this.currentFilter = index === null ? [] : this.ungrouped[index].attributes.fields; }, deleteFilter(index) { this.ungrouped.splice(index, 1); }, closeDialog() { this.showEditFilter = false; + this.currentFilterIndex = null; + this.currentFilter = null; }, confirmDialog(filter) { STUDIP.jsonapi.withPromises().post( @@ -144,8 +155,13 @@ export default { } }) .then(response => { - this.ungrouped.push(response.data); + if (this.currentFilterIndex !== null) { + this.ungrouped[this.currentFilterIndex] = response.data; + } else { + this.ungrouped.push(response.data); + } this.showEditFilter = false; + this.currentFilterIndex = this.currentFilter = null; }); }, setRuleData(data) { diff --git a/resources/vue/components/admission/PreferentialAdmission.vue b/resources/vue/components/admission/PreferentialAdmission.vue index eefc375..1b67bb7 100644 --- a/resources/vue/components/admission/PreferentialAdmission.vue +++ b/resources/vue/components/admission/PreferentialAdmission.vue @@ -18,7 +18,21 @@

{{ $gettext('oder') }}

-

+
+

+
+ + + + + +

@@ -27,7 +41,7 @@

@@ -40,6 +54,7 @@ @@ -59,13 +74,12 @@ export default { conditions: [], favorSemester: false, showEditFilter: false, + currentFilter: null, + currentFilterIndex: null, selectedFilters: [] } }, computed: { - groupsAllowed() { - return this.assignedRuleTypes.includes('ParticipantRestrictedAdmission') - }, payload() { return { type: 'PreferentialAdmission', @@ -78,11 +92,18 @@ export default { } }, methods: { - editFilter() { + editFilter(index) { this.showEditFilter = true; + this.currentFilterIndex = index; + this.currentFilter = index === null ? [] : this.conditions[index].attributes.fields; + }, + deleteFilter(index) { + this.conditions.splice(index, 1); }, closeDialog() { this.showEditFilter = false; + this.currentFilterIndex = null; + this.currentFilter = null; }, confirmDialog(filter) { STUDIP.jsonapi.withPromises().post( @@ -97,8 +118,14 @@ export default { } }) .then(response => { - this.conditions.push(response.data); + if (this.currentFilterIndex !== null) { + this.conditions[this.currentFilterIndex] = response.data; + } else { + this.conditions.push(response.data); + } this.showEditFilter = false; + this.currentFilterIndex = null; + this.currentFilter = null; }); }, setRuleData(data) { @@ -119,3 +146,9 @@ export default { } } + + diff --git a/resources/vue/components/form_inputs/UserFilterInput.vue b/resources/vue/components/form_inputs/UserFilterInput.vue index 21eb71a..50eb536 100644 --- a/resources/vue/components/form_inputs/UserFilterInput.vue +++ b/resources/vue/components/form_inputs/UserFilterInput.vue @@ -14,6 +14,13 @@ + + + @@ -26,11 +33,11 @@ { - if (this.currentFilter !== 0) { + if (this.currentFilter !== -1) { this.filters[this.currentFilter] = response.data; } else { this.filters.push(response.data); } this.currentFilter = null; + this.currentFilterData = []; this.changed(); }) .catch(error => { -- cgit v1.0