From bcf449c0e054adcdfeacc3ba098f6c3357a4e69d Mon Sep 17 00:00:00 2001
From: Rasmus Fuhse <fuhse@data-quest.de>
Date: Thu, 31 Aug 2023 11:48:31 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20"Ank=C3=BCndigungen=20k=C3=B6nnen=20?=
 =?UTF-8?q?=C3=BCber=20den=20Arbeitsplatz=20nicht=20gespeichert=20werden"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #2365

Merge request studip/studip!1995
---
 app/controllers/news.php                  |  2 +-
 lib/classes/forms/NewsRangesInput.php     |  1 +
 resources/vue/components/EditableList.vue | 19 +++++++++++++++++--
 templates/forms/news_ranges_input.php     |  2 ++
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/app/controllers/news.php b/app/controllers/news.php
index 031a3ab1446..e87eeae7e2e 100644
--- a/app/controllers/news.php
+++ b/app/controllers/news.php
@@ -375,7 +375,7 @@ class NewsController extends StudipController
                 'legend' => _('In weiteren Bereichen anzeigen'),
                 'fields' => [
                     'news_ranges' => [
-                        'label' => _('Bereich auswählen'),
+                        'label' => _('In weiteren Bereichen anzeigen'),
                         'type' => 'NewsRanges',
                         'required' => true
                     ]
diff --git a/lib/classes/forms/NewsRangesInput.php b/lib/classes/forms/NewsRangesInput.php
index 5ab58ba190a..25716985f98 100644
--- a/lib/classes/forms/NewsRangesInput.php
+++ b/lib/classes/forms/NewsRangesInput.php
@@ -56,6 +56,7 @@ class NewsRangesInput extends Input
 
         $template = $GLOBALS['template_factory']->open('forms/news_ranges_input');
         $template->name = $this->name;
+        $template->title = $this->title;
         $template->items = $items;
         $template->searchtype = new \NewsRangesSearch();
         $template->selectable = $selectable;
diff --git a/resources/vue/components/EditableList.vue b/resources/vue/components/EditableList.vue
index 3b30e5eafee..3199f71688d 100644
--- a/resources/vue/components/EditableList.vue
+++ b/resources/vue/components/EditableList.vue
@@ -1,13 +1,19 @@
 <template>
     <div>
+        <div hidden>
+            <label class="hiddeninput" v-if="required && sortedItems.length === 0">
+                <span class="textlabel">{{ label }}</span>
+                <input type="text" required value="">
+            </label>
+        </div>
         <div class="formpart">
             <ul class="clean editablelist">
                 <li v-for="item in sortedItems" :key="item.id" :data-type="item.type">
-                    <studip-icon v-if="item.icon" :shape="item.icon" role="info" size="20" class="text-bottom" alt=""></studip-icon>
+                    <studip-icon v-if="item.icon" :shape="item.icon" role="info" :size="20" class="text-bottom" alt=""></studip-icon>
                     <input v-if="name" type="hidden" :name="name + '[]'" :value="item.value">
                     <span>{{item.name}}</span>
                     <button v-if="item.deletable" @click.prevent="deleteItem(item)" :title="$gettextInterpolate($gettext('%{ name } löschen'), {name: item.name})" class="undecorated">
-                        <studip-icon shape="trash" role="clickable" size="20" class="text-bottom"></studip-icon>
+                        <studip-icon shape="trash" role="clickable" :size="20" class="text-bottom"></studip-icon>
                     </button>
                 </li>
             </ul>
@@ -57,6 +63,15 @@ export default {
             type: Array,
             required: false,
             default: () => [],
+        },
+        required: {
+            required: false,
+            type: Boolean,
+            default: false
+        },
+        label: {
+            type: String,
+            required: false
         }
     },
     data () {
diff --git a/templates/forms/news_ranges_input.php b/templates/forms/news_ranges_input.php
index ac1fe51f8a5..2302bc707dc 100644
--- a/templates/forms/news_ranges_input.php
+++ b/templates/forms/news_ranges_input.php
@@ -3,5 +3,7 @@
                :items="<?= htmlReady(json_encode($items)) ?>"
                :selectable="<?= htmlReady(json_encode($selectable)) ?>"
                :category_order="<?= htmlReady(json_encode($category_order)) ?>"
+               :required="STUDIPFORM_REQUIRED.indexOf('<?= htmlReady($this->name) ?>') !== -1"
+               label="<?= htmlReady($this->title) ?>"
                @input="output => <?= htmlReady($this->name) ?> = output">
 </editable-list>
-- 
GitLab