aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFinn Schneider <schneider@data-quest.de>2026-02-23 15:29:40 +0100
committerFinn Schneider <schneider@data-quest.de>2026-03-13 17:25:01 +0000
commit270280accaf5d54cccafabe03096a8ab8051c051 (patch)
tree485da531276d2e1bd005562947fcc8f60208359c
parent7465d7609ba2d31643a240a5261f63f0e2f7ce06 (diff)
template editor changes
-rw-r--r--app/controllers/questionnaire.php4
-rw-r--r--app/views/evaluation/pool/index.php3
-rw-r--r--app/views/questionnaire/edit.php2
-rw-r--r--resources/vue/apps/questionnaires/QuestionnaireEditor.vue62
4 files changed, 41 insertions, 30 deletions
diff --git a/app/controllers/questionnaire.php b/app/controllers/questionnaire.php
index d85d279..019e22f 100644
--- a/app/controllers/questionnaire.php
+++ b/app/controllers/questionnaire.php
@@ -172,6 +172,10 @@ class QuestionnaireController extends AuthenticatedController
$this->questionnaire['stopdate'] = is_numeric($questionnaire_data['stopdate'])
? $questionnaire_data['stopdate']
: null;
+ $this->questionnaire['is_template'] = $questionnaire_data['is_template'] ?? 0;
+ if(!$this->questionnaire->template_is_enabled && $this->questionnaire->is_template) {
+ $this->questionnaire['template_is_enabled'] = 0;
+ }
$this->questionnaire['user_id'] = User::findCurrent()->id;
$questions_data = json_decode(Request::get('questions_data'), true);
diff --git a/app/views/evaluation/pool/index.php b/app/views/evaluation/pool/index.php
index a6c9784..6eb2e7d 100644
--- a/app/views/evaluation/pool/index.php
+++ b/app/views/evaluation/pool/index.php
@@ -33,7 +33,8 @@ use Studip\Button;
</td>
<td>
<?php if ($template->isEditable()) : ?>
- <a href="<?= $controller->link_for('questionnaire/edit/' . $template->id) ?>"
+ <a href="<?= $controller->link_for('questionnaire/edit/' . $template->id,
+ ['range_type' => 'pool']) ?>"
data-dialog="size=big">
<?= htmlReady($template->title) ?>
</a>
diff --git a/app/views/questionnaire/edit.php b/app/views/questionnaire/edit.php
index cd73fbc..44cd113 100644
--- a/app/views/questionnaire/edit.php
+++ b/app/views/questionnaire/edit.php
@@ -24,6 +24,7 @@ foreach (get_declared_classes() as $class) {
}
}
+$is_template = Request::get('range_type') == 'pool';
$questionnaire_data = [
'anonymous' => $questionnaire->anonymous,
'copyable' => $questionnaire->copyable,
@@ -41,6 +42,7 @@ $questionnaire_data = [
'startdate' => $questionnaire->isNew() ? _('sofort') : $questionnaire->startdate,
'stopdate' => $questionnaire->stopdate,
'title' => $questionnaire->title,
+ 'is_template' => $is_template ? 1 : $questionnaire->is_template,
];
?>
<?= Studip\VueApp::create('questionnaires/QuestionnaireEditor')
diff --git a/resources/vue/apps/questionnaires/QuestionnaireEditor.vue b/resources/vue/apps/questionnaires/QuestionnaireEditor.vue
index 26b2f32..56ac09e 100644
--- a/resources/vue/apps/questionnaires/QuestionnaireEditor.vue
+++ b/resources/vue/apps/questionnaires/QuestionnaireEditor.vue
@@ -36,43 +36,46 @@
<div class="formpart">
<label class="studiprequired" for="questionnaire_title">
- <span class="textlabel">{{ $gettext('Titel des Fragebogens') }}</span>
+ <span v-if="data.is_template !== 1" class="textlabel">{{$gettext('Titel des Fragebogens') }}</span>
+ <span v-else class="textlabel">{{$gettext('Titel der Vorlage') }}</span>
<span title="Dies ist ein Pflichtfeld" aria-hidden="true" class="asterisk">*</span>
</label>
<input type="text" id="questionnaire_title" v-model="data.title" v-autofocus>
</div>
- <div class="hgroup">
+ <template v-if="data.is_template !== 1">
+ <div class="hgroup">
+ <label>
+ {{ $gettext('Startzeitpunkt') }}
+ <datetimepicker v-model="data.startdate"></datetimepicker>
+ </label>
+ <label>
+ {{ $gettext('Endzeitpunkt') }}
+ <datetimepicker v-model="data.stopdate"></datetimepicker>
+ </label>
+ </div>
<label>
- {{ $gettext('Startzeitpunkt') }}
- <datetimepicker v-model="data.startdate"></datetimepicker>
+ <input type="checkbox" v-model="data.copyable" true-value="1" false-value="0">
+ {{ $gettext('Fragebogen zum Kopieren freigeben') }}
</label>
<label>
- {{ $gettext('Endzeitpunkt') }}
- <datetimepicker v-model="data.stopdate"></datetimepicker>
+ <input type="checkbox" v-model="data.anonymous" true-value="1" false-value="0">
+ {{ $gettext('Teilnehmende anonymisieren') }}
</label>
- </div>
- <label>
- <input type="checkbox" v-model="data.copyable" true-value="1" false-value="0">
- {{ $gettext('Fragebogen zum Kopieren freigeben') }}
- </label>
- <label>
- <input type="checkbox" v-model="data.anonymous" true-value="1" false-value="0">
- {{ $gettext('Teilnehmende anonymisieren') }}
- </label>
- <label>
- <input type="checkbox" v-model="data.editanswers" true-value="1" false-value="0">
- {{ $gettext('Teilnehmende dürfen ihre Antworten revidieren') }}
- </label>
- <label>
- {{ $gettext('Ergebnisse einsehbar') }}
- <select v-model="data.resultvisibility">
- <option value="always">{{ $gettext('Immer') }}</option>
- <option value="afterending">{{ $gettext('Nach Ende der Befragung') }}</option>
- <option value="afterparticipation">{{ $gettext('Nach der Teilnahme') }}</option>
- <option value="never">{{ $gettext('Niemals') }}</option>
- </select>
- </label>
+ <label>
+ <input type="checkbox" v-model="data.editanswers" true-value="1" false-value="0">
+ {{ $gettext('Teilnehmende dürfen ihre Antworten revidieren') }}
+ </label>
+ <label>
+ {{ $gettext('Ergebnisse einsehbar') }}
+ <select v-model="data.resultvisibility">
+ <option value="always">{{ $gettext('Immer') }}</option>
+ <option value="afterending">{{ $gettext('Nach Ende der Befragung') }}</option>
+ <option value="afterparticipation">{{ $gettext('Nach der Teilnahme') }}</option>
+ <option value="never">{{ $gettext('Niemals') }}</option>
+ </select>
+ </label>
+ </template>
</div>
<div class="add_question file_select_possibilities" v-else-if="activeTab === 'add_question'">
<div>
@@ -240,7 +243,8 @@ export default {
editanswers: this.data.editanswers,
startdate: this.data.startdate,
stopdate: this.data.stopdate,
- resultvisibility: this.data.resultvisibility
+ resultvisibility: this.data.resultvisibility,
+ is_template: this.data.is_template
};
const questions = this.data.questions.map(question => ({
id: question.id,