From 0b31712cf4af4fe89ec579226f1428110e349c3b Mon Sep 17 00:00:00 2001 From: Thong Bui Date: Mon, 6 Jun 2022 15:02:13 +0700 Subject: [PATCH] MDL-74505 Question bank: Update validation editing question form. --- lang/en/question.php | 1 + question/tests/behat/edit_questions.feature | 28 +++++++++++++++++++++ question/type/edit_question_form.php | 8 +++--- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/lang/en/question.php b/lang/en/question.php index 6c4c48dce0d01..25a77b3f75f78 100644 --- a/lang/en/question.php +++ b/lang/en/question.php @@ -248,6 +248,7 @@ $string['nocate'] = 'No such category {$a}!'; $string['nopermissionadd'] = 'You don\'t have permission to add questions here.'; $string['nopermissionmove'] = 'You don\'t have permission to move questions from here. You must save the question in this category or save it as a new question.'; +$string['nopermissionedit'] = 'You don\'t have permission to edit questions from here.'; $string['noprobs'] = 'No problems found in your question database.'; $string['noquestions'] = 'No questions were found that could be exported. Make sure that you have selected a category to export that contains questions.'; $string['noquestionsinfile'] = 'There are no questions in the import file'; diff --git a/question/tests/behat/edit_questions.feature b/question/tests/behat/edit_questions.feature index 2e342e3222e99..a25119d873d76 100644 --- a/question/tests/behat/edit_questions.feature +++ b/question/tests/behat/edit_questions.feature @@ -34,6 +34,34 @@ Feature: A teacher can edit questions in the question bank And I should not see "Test question to be edited" And "Edited question name" row "Created by" column of "categoryquestions" table should contain "Teacher 1" + Scenario: Edit a previously created question without permission 'moodle/question:moveall' and 'moodle/question:movemine' + Given I log in as "admin" + And the following "permission overrides" exist: + | capability | permission | role | contextlevel | reference | + | moodle/question:movemine | Prevent | editingteacher | System | | + | moodle/question:moveall | Prevent | editingteacher | System | | + When I am on the "Test question to be edited" "core_question > edit" page logged in as "teacher1" + And I set the following fields to these values: + | Question name | Edited question name | + | Question text | Write a lot about what you want | + And I press "id_submitbutton" + Then I should see "Edited question name" + And I should not see "Test question to be edited" + And "Edited question name" row "Created by" column of "categoryquestions" table should contain "Teacher 1" + + Scenario: Edit a previously created question without permission 'moodle/question:editall' and 'moodle/question:editmine' + Given I log in as "admin" + And the following "permission overrides" exist: + | capability | permission | role | contextlevel | reference | + | moodle/question:editmine | Prevent | editingteacher | System | | + | moodle/question:editall | Prevent | editingteacher | System | | + When I am on the "Test question to be edited" "core_question > edit" page logged in as "teacher1" + And I set the following fields to these values: + | Question name | Edited question name | + | Question text | Write a lot about what you want | + And I press "id_submitbutton" + Then I should see "You don't have permission to edit questions from here." + Scenario: Editing a question can be cancelled When I choose "Edit question" action for "Test question to be edited" in the question bank And I set the field "Question name" to "Edited question name" diff --git a/question/type/edit_question_form.php b/question/type/edit_question_form.php index c6f357567dbba..c684030562aa4 100644 --- a/question/type/edit_question_form.php +++ b/question/type/edit_question_form.php @@ -846,11 +846,11 @@ public function validation($fromform, $files) { global $DB; $errors = parent::validation($fromform, $files); + + // Make sure that the user can edit the question. if (empty($fromform['makecopy']) && isset($this->question->id) - && ($this->question->formoptions->canedit || - $this->question->formoptions->cansaveasnew) - && empty($fromform['usecurrentcat']) && !$this->question->formoptions->canmove) { - $errors['currentgrp'] = get_string('nopermissionmove', 'question'); + && !$this->question->formoptions->canedit) { + $errors['currentgrp'] = get_string('nopermissionedit', 'question'); } // Category.