From 035b55252d351147f677b66a31ba12376bc66aa2 Mon Sep 17 00:00:00 2001 From: Thong Bui Date: Mon, 6 Jun 2022 15:02:13 +0700 Subject: [PATCH 1/2] MDL-74505 Question bank: Update validation editing question form. --- lang/en/deprecated.txt | 1 + lang/en/question.php | 5 +++- question/tests/behat/edit_questions.feature | 28 +++++++++++++++++++++ question/type/edit_question_form.php | 8 +++--- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/lang/en/deprecated.txt b/lang/en/deprecated.txt index 8be37e81035..83e76c168b6 100644 --- a/lang/en/deprecated.txt +++ b/lang/en/deprecated.txt @@ -82,3 +82,4 @@ close,core_contentbank notflagged,core_question cannotswitcheditmodeon,core_error multilangforceold,core_admin +nopermissionmove,core_question diff --git a/lang/en/question.php b/lang/en/question.php index 6c4c48dce0d..e3e2468469b 100644 --- a/lang/en/question.php +++ b/lang/en/question.php @@ -247,7 +247,7 @@ $string['movingquestionsnofiles'] = 'Are you sure you want to move question(s) { $string['needtochoosecat'] = 'You need to choose a category to move this question to or press \'cancel\'.'; $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'; @@ -501,3 +501,6 @@ $string['questionloaderror'] = 'Could not load the question options.'; // Deprecated since Moodle 4.0. $string['notflagged'] = 'Not flagged'; + +// Deprecated since Moodle 4.1. +$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.'; diff --git a/question/tests/behat/edit_questions.feature b/question/tests/behat/edit_questions.feature index 2e342e3222e..a25119d873d 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 c6f357567db..c684030562a 100644 --- a/question/type/edit_question_form.php +++ b/question/type/edit_question_form.php @@ -846,11 +846,11 @@ abstract class question_edit_form extends question_wizard_form { 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. From def8753d521dcf84b6213fb41782ba228f299849 Mon Sep 17 00:00:00 2001 From: Thong Bui Date: Mon, 6 Jun 2022 15:24:37 +0700 Subject: [PATCH 2/2] MDL-74505 Question bank: Improve behat steps --- question/tests/behat/edit_questions.feature | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/question/tests/behat/edit_questions.feature b/question/tests/behat/edit_questions.feature index a25119d873d..a956995952f 100644 --- a/question/tests/behat/edit_questions.feature +++ b/question/tests/behat/edit_questions.feature @@ -20,12 +20,9 @@ Feature: A teacher can edit questions in the question bank And the following "questions" exist: | questioncategory | qtype | name | questiontext | | Test questions | essay | Test question to be edited | Write about whatever you want | - And I log in as "teacher1" - And I am on "Course 1" course homepage - And I navigate to "Question bank" in current page administration Scenario: Edit a previously created question - When I choose "Edit question" action for "Test question to be edited" in the question bank + 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 | @@ -63,7 +60,7 @@ Feature: A teacher can edit questions in the question bank 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 + When I am on the "Test question to be edited" "core_question > edit" page logged in as "teacher1" And I set the field "Question name" to "Edited question name" And I press "Cancel" Then I should see "Test question to be edited" @@ -73,7 +70,7 @@ Feature: A teacher can edit questions in the question bank Given the following "questions" exist: | questioncategory | qtype | name | idnumber | | Test questions | essay | Question with idnumber | frog | - And I reload the page + When I am on the "Course 1" "core_question > course question bank" page logged in as "teacher1" Then I should see "frog" in the "Question with idnumber" "table_row" When I choose "Edit question" action for "Question with idnumber" in the question bank And I set the field "ID number" to "" @@ -84,7 +81,7 @@ Feature: A teacher can edit questions in the question bank Given the following "questions" exist: | questioncategory | qtype | name | questiontext | | Test questions | missingtype | Broken question | Write something | - When I reload the page + When I am on the "Course 1" "core_question > course question bank" page logged in as "teacher1" Then "Edit question" "link" should not exist in the "Broken question" "table_row" And "Duplicate" "link" should not exist in the "Broken question" "table_row" And "Manage tags" "link" should exist in the "Broken question" "table_row"