From a313f025d9059ab451f1214db0404805e0e084b6 Mon Sep 17 00:00:00 2001 From: Thomas Hackl <hackl@data-quest.de> Date: Mon, 25 Nov 2024 12:01:11 +0000 Subject: [PATCH] Resolve "Einer Massenmail zugeordnete Filter werden nicht gespeichert" Closes #4901 Merge request studip/studip!3675 --- app/controllers/massmail/message.php | 74 ++++++++++--------- .../form_inputs/UserFilterInput.vue | 5 ++ 2 files changed, 43 insertions(+), 36 deletions(-) diff --git a/app/controllers/massmail/message.php b/app/controllers/massmail/message.php index 3f7a009d4c3..62778db8cf8 100644 --- a/app/controllers/massmail/message.php +++ b/app/controllers/massmail/message.php @@ -48,28 +48,29 @@ class Massmail_MessageController extends \AuthenticatedController 'if' => 'target === "students"', 'context' => 'MassMail', 'target' => 'students', - ':key' => 'NaN', 'store' => function($value, $input) { - $filters = []; - foreach ($value as $one) { - $filter = new UserFilter($one['id'] ?? ''); - $filter->fields = []; - foreach ($one['attributes']['fields'] as $field) { - $classname = $field['attributes']['type']; - $f = new $classname(); - if (!empty($fiele['id'])) { - $f->setId($field['id']); + if ($input->getContextObject()->target === 'students') { + $filters = []; + foreach ($value as $one) { + $filter = new UserFilter($one['id'] ?? ''); + $filter->fields = []; + foreach ($one['attributes']['fields'] as $field) { + $classname = $field['attributes']['type']; + $f = new $classname(); + if (!empty($fiele['id'])) { + $f->setId($field['id']); + } + $f->setCompareOperator($field['attributes']['compare-operator']); + $f->setValue($field['attributes']['value']); + $filter->addField($f); } - $f->setCompareOperator($field['attributes']['compare-operator']); - $f->setValue($field['attributes']['value']); - $filter->addField($f); + $filter->store(); + $connection = new \MassMail\MassMailFilter(); + $connection->filter_id = $filter->getId(); + $filters[] = $connection; } - $filter->store(); - $connection = new \MassMail\MassMailFilter(); - $connection->filter_id = $filter->getId(); - $filters[] = $connection; + $input->getContextObject()->filters = $filters; } - $input->getContextObject()->filters = $filters; } ], 'employee_filters' => [ @@ -78,28 +79,29 @@ class Massmail_MessageController extends \AuthenticatedController 'if' => 'target === "employees"', 'context' => 'MassMail', 'target' => 'employees', - ':key' => 'NaN', 'store' => function($value, $input) { - $filters = []; - foreach ($value as $one) { - $filter = new UserFilter($one['id'] ?? ''); - $filter->fields = []; - foreach ($one['attributes']['fields'] as $field) { - $classname = $field['attributes']['type']; - $f = new $classname(); - if (!empty($fiele['id'])) { - $f->setId($field['id']); + if ($input->getContextObject()->target === 'employees') { + $filters = []; + foreach ($value as $one) { + $filter = new UserFilter($one['id'] ?? ''); + $filter->fields = []; + foreach ($one['attributes']['fields'] as $field) { + $classname = $field['attributes']['type']; + $f = new $classname(); + if (!empty($fiele['id'])) { + $f->setId($field['id']); + } + $f->setCompareOperator($field['attributes']['compare-operator']); + $f->setValue($field['attributes']['value']); + $filter->addField($f); } - $f->setCompareOperator($field['attributes']['compare-operator']); - $f->setValue($field['attributes']['value']); - $filter->addField($f); + $filter->store(); + $connection = new \MassMail\MassMailFilter(); + $connection->filter_id = $filter->getId(); + $filters[] = $connection; } - $filter->store(); - $connection = new \MassMail\MassMailFilter(); - $connection->filter_id = $filter->getId(); - $filters[] = $connection; + $input->getContextObject()->filters = $filters; } - $input->getContextObject()->filters = $filters; } ], 'semester' => [ diff --git a/resources/vue/components/form_inputs/UserFilterInput.vue b/resources/vue/components/form_inputs/UserFilterInput.vue index d63e97b2f22..2d481433c97 100644 --- a/resources/vue/components/form_inputs/UserFilterInput.vue +++ b/resources/vue/components/form_inputs/UserFilterInput.vue @@ -126,6 +126,11 @@ export default { this.$emit('input', this.stringified); } }, + watch: { + target() { + this.filters = []; + } + }, mounted() { if (this.value) { this.filters = JSON.parse(this.value); -- GitLab