MDL-65029 questions: change question div id to acutally be unique

This is largely based on Simey Lameze's work.
This commit is contained in:
Tim Hunt
2019-03-29 13:37:44 +00:00
parent 0920f35ed9
commit f1ffd134d3
6 changed files with 28 additions and 4 deletions
+11
View File
@@ -359,6 +359,17 @@ class question_attempt {
return 'q' . $this->usageid . ':' . $this->slot . '_';
}
/**
* When the question is rendered, this unique id is added to the
* outer div of the question. It can be used to uniquely reference
* the question from JavaScript.
*
* @return string id added to the outer <div class="que ..."> when the question is rendered.
*/
public function get_outer_question_div_unique_id() {
return 'question-' . $this->usageid . '-' . $this->slot;
}
/**
* Get one of the steps in this attempt.
*
+1 -1
View File
@@ -89,7 +89,7 @@ class core_question_renderer extends plugin_renderer_base {
$output = '';
$output .= html_writer::start_tag('div', array(
'id' => 'q' . $qa->get_slot(),
'id' => $qa->get_outer_question_div_unique_id(),
'class' => implode(' ', array(
'que',
$qa->get_question()->qtype->name(),
+13
View File
@@ -1,5 +1,18 @@
This files describes API changes for the core question engine.
=== 3.7 ===
1) When a question is rendered, the outer div of the question has an id="q123"
added. Unfortunately, this id was not actually unique, leading to bugs like
MDL-52572. Therefore, we have had to change it. The id used now is what
is returned by the new method $qa->get_outer_question_div_unique_id().
The old code that you need to search for and replace with a call to this
method is "'q' . $qa->get_slot()"
Note, the new method has also been added to Moodle 3.5.6 and 3.6.4, but
returning the old id. This is to help question types that want to support
multiple Moodle versions.
=== 3.1, 3.0.3, 2.9.5 ===
1) The field question_display_options::$extrainfocontent is now displayed in the
+1 -1
View File
@@ -115,7 +115,7 @@ class qtype_ddtoimage_renderer_base extends qtype_with_combined_feedback_rendere
$PAGE->requires->string_for_js('blank', 'qtype_ddimageortext');
$PAGE->requires->js_call_amd('qtype_ddimageortext/question', 'init',
['q' . $qa->get_slot(), $options->readonly, $question->places]);
[$qa->get_outer_question_div_unique_id(), $options->readonly, $question->places]);
if ($qa->get_state() == question_state::$invalid) {
$output .= html_writer::nonempty_tag('div',
+1 -1
View File
@@ -97,7 +97,7 @@ class qtype_ddmarker_renderer extends qtype_ddtoimage_renderer_base {
}
$PAGE->requires->js_call_amd('qtype_ddmarker/question', 'init',
['q' . $qa->get_slot(), $bgimage, $options->readonly, $visibledropzones]);
[$qa->get_outer_question_div_unique_id(), $bgimage, $options->readonly, $visibledropzones]);
if ($qa->get_state() == question_state::$invalid) {
$output .= html_writer::nonempty_tag('div',
+1 -1
View File
@@ -43,7 +43,7 @@ class qtype_ddwtos_renderer extends qtype_elements_embedded_in_question_text_ren
$result = parent::formulation_and_controls($qa, $options);
$PAGE->requires->js_call_amd('qtype_ddwtos/ddwtos', 'init',
['q' . $qa->get_slot(), $options->readonly]);
[$qa->get_outer_question_div_unique_id(), $options->readonly]);
return $result;
}