}
}
+/**
+ * Serve questiontext files in the question text when they are displayed in this report.
+ * @param context $context the context
+ * @param int $questionid the question id
+ * @param array $args remaining file args
+ * @param bool $forcedownload
+ */
+function core_question_questiontext_preview_pluginfile($context, $questionid, $args, $forcedownload) {
+ global $DB;
+
+ // Verify that contextid matches the question.
+ $question = $DB->get_record_sql('
+ SELECT q.*, qc.contextid
+ FROM {question} q
+ JOIN {question_categories} qc ON qc.id = q.category
+ WHERE q.id = :id AND qc.contextid = :contextid',
+ array('id' => $questionid, 'contextid' => $context->id), MUST_EXIST);
+
+ // Check the capability.
+ list($context, $course, $cm) = get_context_info_array($context->id);
+ require_login($course, false, $cm);
+
+ question_require_capability_on($question, 'use');
+
+ question_send_questiontext_file($questionid, $args, $forcedownload);
+}
+
/**
* Create url for question export
*
}
protected function display_content($question, $rowclasses) {
- $text = format_text($question->questiontext, $question->questiontextformat,
- $this->formatoptions, $this->qbank->get_courseid());
+ $text = question_rewrite_questiontext_preview_urls($question->questiontext,
+ $question->contextid, 'question', $question->id);
+ $text = format_text($text, $question->questiontextformat,
+ $this->formatoptions);
if ($text == '') {
$text = ' ';
}
echo $text;
}
+ public function get_extra_joins() {
+ return array('qc' => 'JOIN {question_categories} qc ON qc.id = q.category');
+ }
+
public function get_required_fields() {
- return array('q.questiontext', 'q.questiontextformat');
+ return array('q.id', 'q.questiontext', 'q.questiontextformat', 'qc.contextid');
}
}
}
/// Build the where clause.
- $tests = array('parent = 0');
+ $tests = array('q.parent = 0');
if (!$showhidden) {
- $tests[] = 'hidden = 0';
+ $tests[] = 'q.hidden = 0';
}
if ($recurse) {