From 97880f26b9f6facb70edf2d062102ef77b74cad8 Mon Sep 17 00:00:00 2001 From: Safat Shahin Date: Mon, 31 May 2021 15:26:37 +1000 Subject: [PATCH] MDL-71575 qbank_viewquestiontext: Add View question text plugin to core This implementation will introduce a qbank plugin "viewquestiontext" which will view the question text row in the question bank view by replacing the core class. Having this plugin will give users the flexibility of enabling or disabling the question text row in the question view. --- lib/classes/plugin_manager.php | 1 + .../classes/plugin_feature.php | 36 ++++++++ .../classes/privacy/provider.php | 32 ++++++++ .../classes/question_text_row.php | 82 +++++++++++++++++++ .../lang/en/qbank_viewquestiontext.php | 27 ++++++ .../behat/view_question_name_column.feature | 35 ++++++++ question/bank/viewquestiontext/version.php | 31 +++++++ question/editlib.php | 2 +- 8 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 question/bank/viewquestiontext/classes/plugin_feature.php create mode 100644 question/bank/viewquestiontext/classes/privacy/provider.php create mode 100644 question/bank/viewquestiontext/classes/question_text_row.php create mode 100644 question/bank/viewquestiontext/lang/en/qbank_viewquestiontext.php create mode 100644 question/bank/viewquestiontext/tests/behat/view_question_name_column.feature create mode 100644 question/bank/viewquestiontext/version.php diff --git a/lib/classes/plugin_manager.php b/lib/classes/plugin_manager.php index 5587e60b900..c2e3e9fb888 100644 --- a/lib/classes/plugin_manager.php +++ b/lib/classes/plugin_manager.php @@ -1943,6 +1943,7 @@ class core_plugin_manager { 'editquestion', 'exportquestions', 'importquestions', + 'viewquestiontext' ], 'qbehaviour' => array( diff --git a/question/bank/viewquestiontext/classes/plugin_feature.php b/question/bank/viewquestiontext/classes/plugin_feature.php new file mode 100644 index 00000000000..e102619dc62 --- /dev/null +++ b/question/bank/viewquestiontext/classes/plugin_feature.php @@ -0,0 +1,36 @@ +. + +namespace qbank_viewquestiontext; + +use core_question\local\bank\plugin_features_base; + +/** + * Class columns is the entrypoint for the columns. + * + * @package qbank_viewquestiontext + * @copyright 2021 Catalyst IT Australia Pty Ltd + * @author Safat Shahin + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class plugin_feature extends plugin_features_base { + + public function get_question_columns($qbank): array { + return [ + new question_text_row($qbank) + ]; + } +} diff --git a/question/bank/viewquestiontext/classes/privacy/provider.php b/question/bank/viewquestiontext/classes/privacy/provider.php new file mode 100644 index 00000000000..8c7118b0913 --- /dev/null +++ b/question/bank/viewquestiontext/classes/privacy/provider.php @@ -0,0 +1,32 @@ +. + +namespace qbank_viewquestiontext\privacy; + +/** + * Privacy Subsystem for qbank_viewquestiontext implementing null_provider. + * + * @package qbank_viewquestiontext + * @copyright 2021 Catalyst IT Australia Pty Ltd + * @author Safat Shahin + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class provider implements \core_privacy\local\metadata\null_provider { + + public static function get_reason(): string { + return 'privacy:metadata'; + } +} diff --git a/question/bank/viewquestiontext/classes/question_text_row.php b/question/bank/viewquestiontext/classes/question_text_row.php new file mode 100644 index 00000000000..de69c744121 --- /dev/null +++ b/question/bank/viewquestiontext/classes/question_text_row.php @@ -0,0 +1,82 @@ +. + +namespace qbank_viewquestiontext; + +use core_question\local\bank\row_base; + +/** + * A column type for the name of the question name. + * + * @package qbank_viewquestiontext + * @copyright 2009 Tim Hunt + * @author 2021 Safat Shahin + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class question_text_row extends row_base { + + /** + * To initialise subclasses + * @var $formatoptions + */ + protected $formatoptions; + + protected function init(): void { + $this->formatoptions = new \stdClass(); + $this->formatoptions->noclean = true; + $this->formatoptions->para = false; + } + + public function get_name(): string { + return 'questiontext'; + } + + protected function get_title(): string { + return get_string('questiontext', 'question'); + } + + protected function display_content($question, $rowclasses): void { + $text = question_rewrite_question_preview_urls($question->questiontext, $question->id, + $question->contextid, 'question', 'questiontext', $question->id, + $question->contextid, 'core_question'); + $text = format_text($text, $question->questiontextformat, + $this->formatoptions); + if ($text == '') { + $text = ' '; + } + echo $text; + } + + public function get_extra_joins(): array { + return ['qc' => 'JOIN {question_categories} qc ON qc.id = q.category']; + } + + public function get_required_fields(): array { + return ['q.id', 'q.questiontext', 'q.questiontextformat', 'qc.contextid']; + } + + public function has_preference(): bool { + return true; + } + + public function get_preference_key(): string { + return 'qbshowtext'; + } + + public function get_preference(): bool { + return question_get_display_preference($this->get_preference_key(), 0, PARAM_BOOL, new \moodle_url('')); + } +} diff --git a/question/bank/viewquestiontext/lang/en/qbank_viewquestiontext.php b/question/bank/viewquestiontext/lang/en/qbank_viewquestiontext.php new file mode 100644 index 00000000000..f0d36450b27 --- /dev/null +++ b/question/bank/viewquestiontext/lang/en/qbank_viewquestiontext.php @@ -0,0 +1,27 @@ +. + +/** + * Strings for component qbank_viewquestiontext, language 'en' + * + * @package qbank_viewquestiontext + * @copyright 2021 Catalyst IT Australia Pty Ltd + * @author Safat Shahin + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +$string['pluginname'] = 'View question text'; +$string['privacy:metadata'] = 'View question text question bank plugin does not store any user data.'; diff --git a/question/bank/viewquestiontext/tests/behat/view_question_name_column.feature b/question/bank/viewquestiontext/tests/behat/view_question_name_column.feature new file mode 100644 index 00000000000..742a5e02084 --- /dev/null +++ b/question/bank/viewquestiontext/tests/behat/view_question_name_column.feature @@ -0,0 +1,35 @@ +@qbank @qbank_viewquestiontext +Feature: Use the qbank plugin manager page for viewquestiontext + In order to check the plugin behaviour with enable and disable + + Background: + Given the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "activities" exist: + | activity | name | course | idnumber | + | quiz | Test quiz | C1 | quiz1 | + And the following "question categories" exist: + | contextlevel | reference | name | + | Course | C1 | Test questions | + And the following "questions" exist: + | questioncategory | qtype | name | questiontext | + | Test questions | truefalse | First question | Answer the first question | + + @javascript + Scenario: Enable/disable viewquestiontext column from the base view + Given I log in as "admin" + And I navigate to "Plugins > Question bank plugins > Manage question bank plugins" in site administration + And I should see "View question text" + When I click on "Disable" "link" in the "View question text" "table_row" + And I am on the "Test quiz" "quiz activity" page + And I navigate to "Question bank > Questions" in current page administration + And I should not see "Show question text in the question list" + Then "#categoryquestions .questiontext" "css_element" should not be visible + And I navigate to "Plugins > Question bank plugins > Manage question bank plugins" in site administration + And I click on "Enable" "link" in the "View question text" "table_row" + And I am on the "Test quiz" "quiz activity" page + And I navigate to "Question bank > Questions" in current page administration + And I should see "Show question text in the question list" + And I click on "qbshowtext" "checkbox" + And I should see "Answer the first question" diff --git a/question/bank/viewquestiontext/version.php b/question/bank/viewquestiontext/version.php new file mode 100644 index 00000000000..ff0045533a7 --- /dev/null +++ b/question/bank/viewquestiontext/version.php @@ -0,0 +1,31 @@ +. + +/** + * Version information for qbank_viewquestiontext. + * + * @package qbank_viewquestiontext + * @copyright 2021 Catalyst IT Australia Pty Ltd + * @author Safat Shahin + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$plugin->component = 'qbank_viewquestiontext'; +$plugin->version = 2021070700; +$plugin->requires = 2021052500; +$plugin->maturity = MATURITY_STABLE; diff --git a/question/editlib.php b/question/editlib.php index 4a5e7aa9647..6ec7d1294a9 100644 --- a/question/editlib.php +++ b/question/editlib.php @@ -273,7 +273,7 @@ class_alias('core_question\local\bank\row_base', 'question_bank_row_base', true) * @deprecated since Moodle 2.7 MDL-40457 * @todo MDl-72004 delete the class alias, not done in MDL-71516 for any potential error from other plugins. */ -class_alias('core_question\bank\question_text_row', 'question_bank_question_text_row', true); +class_alias('qbank_viewquestiontext\question_text_row', 'question_bank_question_text_row', true); /** * @copyright 2009 Tim Hunt