From b181e78c7c788ab8a1b3ff4b60e91620e2a0a6a6 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Fri, 21 Apr 2023 18:39:44 +0100 Subject: [PATCH] MDL-77997 questions: add back Export as XML to the preview screen The used the exist in Moodle up to 3.11, but then was removed with insufficient thought in 4.0 (because we had grander long-term plans which still have not happened). Until those plans happen, this commit adds the simple link back on the preview screen. --- question/bank/exporttoxml/lib.php | 46 +++++++++++++++++++ .../tests/behat/preview_question.feature | 27 +++++++++++ .../bank/previewquestion/classes/helper.php | 9 ++-- 3 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 question/bank/exporttoxml/lib.php create mode 100644 question/bank/exporttoxml/tests/behat/preview_question.feature diff --git a/question/bank/exporttoxml/lib.php b/question/bank/exporttoxml/lib.php new file mode 100644 index 00000000000..7d3a60783b4 --- /dev/null +++ b/question/bank/exporttoxml/lib.php @@ -0,0 +1,46 @@ +. + +/** + * Helper functions and callbacks. + * + * @package qbank_exporttoxml + * @copyright 2023 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +use core\plugininfo\qbank; +use qbank_exporttoxml\helper; + +/** + * Callback to add content to the question preview screen. + * + * @param question_definition $question the question being previewed. + * @param int $courseid the course id. + * @return string HTML to add to the question preview screen. + */ +function qbank_exporttoxml_preview_display(question_definition $question, int $courseid): string { + if (!qbank::is_plugin_enabled('qbank_exporttoxml')) { + return ''; + } + + if (!question_has_capability_on($question, 'view')) { + return ''; + } + + $exporturl = helper::question_get_export_single_question_url($question); + return html_writer::div(html_writer::link($exporturl, get_string('exportonequestion', 'question'))); +} diff --git a/question/bank/exporttoxml/tests/behat/preview_question.feature b/question/bank/exporttoxml/tests/behat/preview_question.feature new file mode 100644 index 00000000000..9420ecc64ee --- /dev/null +++ b/question/bank/exporttoxml/tests/behat/preview_question.feature @@ -0,0 +1,27 @@ +@qbank @qbank_previewquestion +Feature: A teacher can export a question as XML from the preview question screen + To help reuse questions + As a teacher + I can easily export the question I am previewing + + Background: + Given the following "users" exist: + | username | + | teacher | + And the following "courses" exist: + | fullname | shortname | + | Course 1 | C1 | + And the following "course enrolments" exist: + | user | course | role | + | teacher | C1 | editingteacher | + And the following "question categories" exist: + | name | contextlevel | reference | + | Test questions | Course | C1 | + And the following "questions" exist: + | questioncategory | qtype | name | + | Test questions | numerical | Test question to be previewed | + + Scenario: Question preview shows the question and other information + When I am on the "Test question to be previewed" "core_question > preview" page logged in as teacher + Then the state of "What is pi to two d.p.?" question is shown as "Not yet answered" + And "Download this question in Moodle XML format" "link" should exist diff --git a/question/bank/previewquestion/classes/helper.php b/question/bank/previewquestion/classes/helper.php index 9e1a1ff9cec..c24e498943f 100644 --- a/question/bank/previewquestion/classes/helper.php +++ b/question/bank/previewquestion/classes/helper.php @@ -262,13 +262,12 @@ class helper { * @return array */ public static function get_preview_extra_elements(question_definition $question, int $courseid): array { - $plugintype = 'qbank'; - $functionname = 'preview_display'; - $extrahtml = []; + $plugins = get_plugin_list_with_function('qbank', 'preview_display'); + $comment = ''; - $plugins = get_plugin_list_with_function($plugintype, $functionname); + $extrahtml = []; foreach ($plugins as $componentname => $plugin) { - $pluginhtml = component_callback($componentname, $functionname, [$question, $courseid]); + $pluginhtml = component_callback($componentname, 'preview_display', [$question, $courseid]); if ($componentname === 'qbank_comment') { $comment = $pluginhtml; continue;