From f530974b33f8e34729b411f8b141025e2a3749e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michaela=20Br=C3=BCckner?= Date: Mon, 16 Feb 2026 13:50:05 +0100 Subject: re #6193 --- app/controllers/questionnaire.php | 2 +- app/views/questionnaire/answer.php | 25 ++++++ lib/models/Pagebreak.php | 94 ++++++++++++++++++++++ .../assets/stylesheets/scss/questionnaire.scss | 1 + .../apps/questionnaires/QuestionnaireAnswer.vue | 81 ++++++++++++++----- .../questionnaires/AutomatedDataAnswer.vue | 16 ++++ .../components/questionnaires/BlankLineEdit.vue | 8 -- .../components/questionnaires/BlankLineView.vue | 11 +++ .../vue/components/questionnaires/DividerEdit.vue | 8 -- .../vue/components/questionnaires/DividerView.vue | 11 +++ .../components/questionnaires/FreetextAnswer.vue | 16 ++++ .../vue/components/questionnaires/HeadlineEdit.vue | 8 -- .../vue/components/questionnaires/HeadlineView.vue | 14 ++++ .../vue/components/questionnaires/LikertAnswer.vue | 16 ++++ .../components/questionnaires/PagebreakEdit.vue | 18 +++++ .../components/questionnaires/PagebreakView.vue | 11 +++ .../questionnaires/QuestionnaireInfoView.vue | 11 +++ .../components/questionnaires/RangescaleAnswer.vue | 16 ++++ .../vue/components/questionnaires/VoteAnswer.vue | 28 +++++-- 19 files changed, 343 insertions(+), 52 deletions(-) create mode 100644 lib/models/Pagebreak.php create mode 100644 resources/vue/components/questionnaires/AutomatedDataAnswer.vue create mode 100644 resources/vue/components/questionnaires/BlankLineView.vue create mode 100644 resources/vue/components/questionnaires/DividerView.vue create mode 100644 resources/vue/components/questionnaires/FreetextAnswer.vue create mode 100644 resources/vue/components/questionnaires/HeadlineView.vue create mode 100644 resources/vue/components/questionnaires/LikertAnswer.vue create mode 100644 resources/vue/components/questionnaires/PagebreakEdit.vue create mode 100644 resources/vue/components/questionnaires/PagebreakView.vue create mode 100644 resources/vue/components/questionnaires/QuestionnaireInfoView.vue create mode 100644 resources/vue/components/questionnaires/RangescaleAnswer.vue diff --git a/app/controllers/questionnaire.php b/app/controllers/questionnaire.php index 981650c..e8f1902 100644 --- a/app/controllers/questionnaire.php +++ b/app/controllers/questionnaire.php @@ -22,7 +22,7 @@ class QuestionnaireController extends AuthenticatedController class_exists('Headline'); class_exists('Divider'); class_exists('BlankLine'); - // TODO load more classes for more question types + class_exists('Pagebreak'); PageLayout::setHelpKeyword('Basis/Votings'); } diff --git a/app/views/questionnaire/answer.php b/app/views/questionnaire/answer.php index 78386e1..80e20d4 100644 --- a/app/views/questionnaire/answer.php +++ b/app/views/questionnaire/answer.php @@ -47,3 +47,28 @@ $questionnaire_data = [ ?> withProps(['questionnaireData' => $questionnaire_data]) ?> + + +
+ isAnswerable()) : ?> + "return STUDIP.Questionnaire.beforeAnswer.call(this);"]) ?> + + resultsVisible()) : ?> + getId()), ['data-dialog' => '']) ?> + + isEditable() && (!$questionnaire->isRunning() || !$questionnaire->countAnswers())) : ?> + getId()), ['data-dialog' => '']) ?> + + isEditable()) : ?> + getId(), ['range_type' => $range_type, 'range_id' => $range_id]), ['data-dialog' => '']) ?> + + isCopyable()) : ?> + getId()), ['data-dialog' => '']) ?> + + isEditable() && (!$questionnaire->isRunning())) : ?> + getId(), in_array($range_type, ['course', 'insitute']) ? ['redirect' => $range_type . "/overview"] : [])) ?> + + isEditable() && $questionnaire->isRunning()) : ?> + getId(), in_array($range_type, ['course', 'insitute']) ? ['redirect' => $range_type . "/overview"] : [])) ?> + +
diff --git a/lib/models/Pagebreak.php b/lib/models/Pagebreak.php new file mode 100644 index 0000000..01e5acf --- /dev/null +++ b/lib/models/Pagebreak.php @@ -0,0 +1,94 @@ + $answers has_many QuestionnaireAnswer + * @property Questionnaire $questionnaire belongs_to Questionnaire + */ +class Pagebreak extends QuestionnaireQuestion implements QuestionType +{ + public static function isDesignElement() + { + return true; + } + + public static function getIcon(bool $active = false) : Icon + { + return Icon::create(static::getIconShape(), $active ? 'clickable' : 'info'); + } + + /** + * Returns the shape of the icon of this QuestionType + * @return string + */ + public static function getIconShape() + { + // TODO we need an icon + return 'files'; + } + + public static function getName() + { + return _('Seitenumbruch'); + } + + + public function getDisplayTemplate() + { + $factory = new Flexi\Factory(realpath(__DIR__.'/../../app/views')); + $template = $factory->open('questionnaire/question_types/designelements/divider'); + $template->set_attribute('vote', $this); + return $template; + } + + static public function getEditingComponent() + { + return ['PagebreakEdit', '']; + } + + static public function getAnsweringComponent() + { + return ['PagebreakAnswer', '']; + } + + public function beforeStoringQuestiondata($questiondata) + { + $questiondata['description'] = \Studip\Markup::markAsHtml( + \Studip\Markup::purifyHtml($questiondata['description']) + ); + return $questiondata; + } + + public function createAnswer() + { + return $this->getMyAnswer(); + } + + public function getUserIdsOfFilteredAnswer($answer_option) + { + return []; + } + + public function getResultTemplate($only_user_ids = null) + { + $factory = new Flexi\Factory(realpath(__DIR__.'/../../app/views')); + $template = $factory->open('questionnaire/question_types/designelements/pagebreak'); + $template->set_attribute('vote', $this); + return $template; + } + + public function getResultArray() + { + return []; + } + +} diff --git a/resources/assets/stylesheets/scss/questionnaire.scss b/resources/assets/stylesheets/scss/questionnaire.scss index 9f6f880..019acc2 100644 --- a/resources/assets/stylesheets/scss/questionnaire.scss +++ b/resources/assets/stylesheets/scss/questionnaire.scss @@ -282,6 +282,7 @@ $width: 270px; .questionnaire_edit, .questionnaire_answer, .questionnaire_results { + flex-grow: 1 !important; .option-cell { text-align: center; } diff --git a/resources/vue/apps/questionnaires/QuestionnaireAnswer.vue b/resources/vue/apps/questionnaires/QuestionnaireAnswer.vue index db33667..5345bb9 100644 --- a/resources/vue/apps/questionnaires/QuestionnaireAnswer.vue +++ b/resources/vue/apps/questionnaires/QuestionnaireAnswer.vue @@ -1,36 +1,73 @@ - + diff --git a/resources/vue/components/questionnaires/AutomatedDataAnswer.vue b/resources/vue/components/questionnaires/AutomatedDataAnswer.vue new file mode 100644 index 0000000..d71c2ba --- /dev/null +++ b/resources/vue/components/questionnaires/AutomatedDataAnswer.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/resources/vue/components/questionnaires/BlankLineEdit.vue b/resources/vue/components/questionnaires/BlankLineEdit.vue index 6dd9b0b..e53866d 100644 --- a/resources/vue/components/questionnaires/BlankLineEdit.vue +++ b/resources/vue/components/questionnaires/BlankLineEdit.vue @@ -11,14 +11,6 @@ export default { created() { this.setDefaultValues({ }); - }, - mounted() { - this.checkValidity(); - }, - methods: { - checkValidity() { - - } } } diff --git a/resources/vue/components/questionnaires/BlankLineView.vue b/resources/vue/components/questionnaires/BlankLineView.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/resources/vue/components/questionnaires/BlankLineView.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/resources/vue/components/questionnaires/DividerEdit.vue b/resources/vue/components/questionnaires/DividerEdit.vue index 085660b..305bc8b 100644 --- a/resources/vue/components/questionnaires/DividerEdit.vue +++ b/resources/vue/components/questionnaires/DividerEdit.vue @@ -14,14 +14,6 @@ export default { created() { this.setDefaultValues({ }); - }, - mounted() { - this.checkValidity(); - }, - methods: { - checkValidity() { - - } } } diff --git a/resources/vue/components/questionnaires/DividerView.vue b/resources/vue/components/questionnaires/DividerView.vue new file mode 100644 index 0000000..c82190b --- /dev/null +++ b/resources/vue/components/questionnaires/DividerView.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/resources/vue/components/questionnaires/FreetextAnswer.vue b/resources/vue/components/questionnaires/FreetextAnswer.vue new file mode 100644 index 0000000..7a6c8f5 --- /dev/null +++ b/resources/vue/components/questionnaires/FreetextAnswer.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/resources/vue/components/questionnaires/HeadlineEdit.vue b/resources/vue/components/questionnaires/HeadlineEdit.vue index 81b2bd0..50a5afa 100644 --- a/resources/vue/components/questionnaires/HeadlineEdit.vue +++ b/resources/vue/components/questionnaires/HeadlineEdit.vue @@ -17,14 +17,6 @@ export default { this.setDefaultValues({ description: '' }); - }, - mounted() { - this.checkValidity(); - }, - methods: { - checkValidity() { - - } } } diff --git a/resources/vue/components/questionnaires/HeadlineView.vue b/resources/vue/components/questionnaires/HeadlineView.vue new file mode 100644 index 0000000..746fd4a --- /dev/null +++ b/resources/vue/components/questionnaires/HeadlineView.vue @@ -0,0 +1,14 @@ + + + diff --git a/resources/vue/components/questionnaires/LikertAnswer.vue b/resources/vue/components/questionnaires/LikertAnswer.vue new file mode 100644 index 0000000..b388a84 --- /dev/null +++ b/resources/vue/components/questionnaires/LikertAnswer.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/resources/vue/components/questionnaires/PagebreakEdit.vue b/resources/vue/components/questionnaires/PagebreakEdit.vue new file mode 100644 index 0000000..a6d664d --- /dev/null +++ b/resources/vue/components/questionnaires/PagebreakEdit.vue @@ -0,0 +1,18 @@ + + + diff --git a/resources/vue/components/questionnaires/PagebreakView.vue b/resources/vue/components/questionnaires/PagebreakView.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/resources/vue/components/questionnaires/PagebreakView.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/resources/vue/components/questionnaires/QuestionnaireInfoView.vue b/resources/vue/components/questionnaires/QuestionnaireInfoView.vue new file mode 100644 index 0000000..63cf316 --- /dev/null +++ b/resources/vue/components/questionnaires/QuestionnaireInfoView.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/resources/vue/components/questionnaires/RangescaleAnswer.vue b/resources/vue/components/questionnaires/RangescaleAnswer.vue new file mode 100644 index 0000000..7b375ba --- /dev/null +++ b/resources/vue/components/questionnaires/RangescaleAnswer.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/resources/vue/components/questionnaires/VoteAnswer.vue b/resources/vue/components/questionnaires/VoteAnswer.vue index 9383c47..cdd6ff1 100644 --- a/resources/vue/components/questionnaires/VoteAnswer.vue +++ b/resources/vue/components/questionnaires/VoteAnswer.vue @@ -1,16 +1,34 @@ + + + {{ $gettext('Ich bin eine Auswahlfrage') }} + {{ question.questiondata.options }} - + -} -- cgit v1.0