From f0ce6fb3cf70201651409a43be88b7709c47ae02 Mon Sep 17 00:00:00 2001 From: Rasmus Fuhse <fuhse@data-quest.de> Date: Mon, 24 Jul 2023 18:27:25 +0200 Subject: [PATCH] re #2365 --- app/controllers/news.php | 2 +- lib/classes/forms/NewsRangesInput.php | 1 + resources/assets/stylesheets/scss/forms.scss | 4 ++++ resources/vue/components/EditableList.vue | 19 +++++++++++++++++-- templates/forms/news_ranges_input.php | 2 ++ 5 files changed, 25 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/assets/stylesheets/scss/forms.scss b/resources/assets/stylesheets/scss/forms.scss index bdd34df0f0b..77c84958c4d 100644 --- a/resources/assets/stylesheets/scss/forms.scss +++ b/resources/assets/stylesheets/scss/forms.scss @@ -444,6 +444,10 @@ form.default { margin-top: 0.5ex; } + .hiddenpart { + display: none; + } + //hidden radio buttons with icon: input[type="radio"].hidden-checkbox, input[type="checkbox"].hidden-checkbox { diff --git a/resources/vue/components/EditableList.vue b/resources/vue/components/EditableList.vue index 3b30e5eafee..06c84d60ccb 100644 --- a/resources/vue/components/EditableList.vue +++ b/resources/vue/components/EditableList.vue @@ -1,13 +1,19 @@ <template> <div> + <div class="hiddenpart"> + <label class="hiddeninput" v-if="required && sortedItems.length === 0"> + <span class="textlabel">{{ label }}</span> + <input type="text" required :value="items.map(x => x.value).join('|')"> + </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