diff --git a/mod/quiz/report/responses/responses_table.php b/mod/quiz/report/responses/responses_table.php
index cded6554a85..640a6a9155a 100644
--- a/mod/quiz/report/responses/responses_table.php
+++ b/mod/quiz/report/responses/responses_table.php
@@ -137,6 +137,7 @@ class quiz_report_responses_table extends table_sql {
}
}
function other_cols($colname, $attempt){
+ global $QTYPES;
static $states =array();
if (preg_match('/^qsanswer([0-9]+)$/', $colname, $matches)){
if ($attempt->uniqueid == 0) {
@@ -152,41 +153,37 @@ class quiz_report_responses_table extends table_sql {
$question = $this->questions[$questionid];
restore_question_state($question, $stateforqinattempt);
- if ($responses = get_question_actual_response($question, $stateforqinattempt)){
- $response = (!empty($responses)? implode('; ',$responses) : '-');
+ if (!$this->is_downloading() || $this->is_downloading() == 'xhtml'){
+ $formathtml = true;
} else {
- $response = '';
+ $formathtml = false;
}
+
+ $summary = $QTYPES[$question->qtype]->response_summary($question, $stateforqinattempt,
+ QUIZ_REPORT_RESPONSES_MAX_LEN_TO_DISPLAY, $formathtml);
if (!$this->is_downloading()) {
- if ($response){
- $format_options = new stdClass;
- $format_options->para = false;
- $format_options->newlines = false;
- $response = format_text($response, FORMAT_MOODLE, $format_options);
- if (strlen($response) > QUIZ_REPORT_RESPONSES_MAX_LEN_TO_DISPLAY){
- $response = shorten_text($response, QUIZ_REPORT_RESPONSES_MAX_LEN_TO_DISPLAY);
- }
- $response = link_to_popup_window('/mod/quiz/reviewquestion.php?attempt=' .
+ if ($summary){
+ $summary = link_to_popup_window('/mod/quiz/reviewquestion.php?attempt=' .
$attempt->attempt . '&question=' . $question->id,
- 'reviewquestion', $response, 450, 650, get_string('reviewresponse', 'quiz'),
+ 'reviewquestion', $summary, 450, 650, get_string('reviewresponse', 'quiz'),
'none', true);
if (question_state_is_graded($stateforqinattempt)
- && ($this->questions[$questionid]->maxgrade != 0)){
+ && ($question->maxgrade != 0)){
$grade = $stateforqinattempt->grade
- / $this->questions[$questionid]->maxgrade;
+ / $question->maxgrade;
$qclass = question_get_feedback_class($grade);
$feedbackimg = question_get_feedback_image($grade);
$questionclass = "que";
- return "".$response."$feedbackimg";
+ return "".$summary."$feedbackimg";
} else {
- return $response;
+ return $summary;
}
} else {
return '';
}
} else {
- return $this->format_text($response);
+ return $summary;
}
} else {
return NULL;
diff --git a/mod/quiz/report/statistics/report.php b/mod/quiz/report/statistics/report.php
index 5e2322223e9..7d1ddfa58e3 100644
--- a/mod/quiz/report/statistics/report.php
+++ b/mod/quiz/report/statistics/report.php
@@ -228,7 +228,7 @@ class quiz_statistics_report extends quiz_default_report {
print_heading(get_string('questioninformation', 'quiz_statistics'));
print_table($questioninfotable);
- print_box(format_text($question->questiontext).$actions, 'boxaligncenter generalbox boxwidthnormal mdl-align');
+ print_box(format_text($question->questiontext, $question->questiontextformat).$actions, 'boxaligncenter generalbox boxwidthnormal mdl-align');
print_heading(get_string('questionstatistics', 'quiz_statistics'));
print_table($questionstatstable);
diff --git a/mod/quiz/report/statistics/statistics_question_table.php b/mod/quiz/report/statistics/statistics_question_table.php
index aeb3cc39bc3..90e2474f411 100644
--- a/mod/quiz/report/statistics/statistics_question_table.php
+++ b/mod/quiz/report/statistics/statistics_question_table.php
@@ -57,6 +57,15 @@ class quiz_report_statistics_question_table extends flexible_table {
parent::setup();
}
+ function col_response($response){
+ global $QTYPES;
+ if (!$this->is_downloading() || $this->is_downloading() == 'xhtml'){
+ return $QTYPES[$this->question->qtype]->format_response($response->response, $this->question->questiontextformat);
+ } else {
+ return $response->response;
+ }
+ }
+
function col_subq($response){
return $response->subq;
}
diff --git a/question/type/calculated/questiontype.php b/question/type/calculated/questiontype.php
index 5c330b9ff6c..2a91bf8a727 100644
--- a/question/type/calculated/questiontype.php
+++ b/question/type/calculated/questiontype.php
@@ -695,7 +695,7 @@ class question_calculated_qtype extends default_questiontype {
return $virtualqtype->grade_responses($numericalquestion, $state, $cmoptions) ;
}
- function response_summary($question, $state, $length=80) {
+ function response_summary($question, $state, $length=80, $formatting=true) {
// The actual response is the bit after the hyphen
return substr($state->answer, strpos($state->answer, '-')+1, $length);
}
diff --git a/question/type/essay/questiontype.php b/question/type/essay/questiontype.php
index 5fe289e7109..ac0c0d43351 100644
--- a/question/type/essay/questiontype.php
+++ b/question/type/essay/questiontype.php
@@ -116,11 +116,6 @@ class question_essay_qtype extends default_questiontype {
return true;
}
- function response_summary($question, $state, $length = 80) {
- $responses = $this->get_actual_response($question, $state);
- $response = reset($responses);
- return shorten_text($response, $length);
- }
/**
* Backup the extra information specific to an essay question - over and above
diff --git a/question/type/match/questiontype.php b/question/type/match/questiontype.php
index b5d62c89aa9..c03874adff4 100644
--- a/question/type/match/questiontype.php
+++ b/question/type/match/questiontype.php
@@ -465,10 +465,7 @@ class question_match_qtype extends default_questiontype {
}
return $responsedetails;
}
-
- function response_summary($question, $state, $length=80) {
- return shorten_text(implode(', ', $this->get_actual_response($question, $state)), $length);
- }
+
/**
* @param object $question
diff --git a/question/type/multianswer/questiontype.php b/question/type/multianswer/questiontype.php
index 0842b5261df..e9ac4e03c34 100644
--- a/question/type/multianswer/questiontype.php
+++ b/question/type/multianswer/questiontype.php
@@ -653,9 +653,7 @@ class embedded_cloze_qtype extends default_questiontype {
$teststate->responses = array('' => $state->responses[$key]);
$correct = $QTYPES[$wrapped->qtype]
->get_actual_response($wrapped, $teststate);
- // change separator here if you want
- $responsesseparator = ',';
- $responses[$key] = implode($responsesseparator, $correct);
+ $responses[$key] = implode(';', $correct);
}
return $responses;
}
diff --git a/question/type/multichoice/questiontype.php b/question/type/multichoice/questiontype.php
index 6e64dd86d93..c09044109c0 100644
--- a/question/type/multichoice/questiontype.php
+++ b/question/type/multichoice/questiontype.php
@@ -387,7 +387,7 @@ class question_multichoice_qtype extends default_questiontype {
if (!empty($state->responses)) {
foreach ($state->responses as $aid =>$rid){
if (!empty($answers[$rid])) {
- $responses[] = $this->format_text($answers[$rid]->answer, $question->questiontextformat);
+ $responses[] = $answers[$rid]->answer;
}
}
} else {
@@ -396,8 +396,9 @@ class question_multichoice_qtype extends default_questiontype {
return $responses;
}
- function response_summary($question, $state, $length = 80) {
- return implode(',', $this->get_actual_response($question, $state));
+
+ function format_response($response, $format){
+ return $this->format_text($response, $format);
}
/**
* @param object $question
diff --git a/question/type/questiontype.php b/question/type/questiontype.php
index 60151208790..8b5f11e7dd8 100644
--- a/question/type/questiontype.php
+++ b/question/type/questiontype.php
@@ -725,9 +725,9 @@ class default_questiontype {
function get_random_guess_score($question) {
return 0;
}
- /**
+ /**
* Return the actual response to the question in a given state
- * for the question.
+ * for the question. Text is not yet formatted for output.
*
* @return mixed An array containing the response or reponses (multiple answer, match)
* given by the user in a particular attempt.
@@ -1233,25 +1233,40 @@ class default_questiontype {
*
* This function returns a short string of no more than a given length that
* summarizes the student's response in the given $state. This is used for
- * example in the response history table. This string should already be,
- * for output.
+ * example in the response history table. This string should already be
+ * formatted for output.
* @return string The summary of the student response
* @param object $question
* @param object $state The state whose responses are to be summarized
* @param int $length The maximum length of the returned string
*/
- function response_summary($question, $state, $length=80) {
+ function response_summary($question, $state, $length=80, $formatting=true) {
// This should almost certainly be overridden
$responses = $this->get_actual_response($question, $state);
- if (empty($responses) || !is_array($responses)) {
- $responses = array();
- }
- if (is_array($responses)) {
- $responses = implode(',', array_map('s', $responses));
+ if ($formatting){
+ $responses = $this->format_responses($responses, $question->questiontextformat);
}
+ $responses = implode(';', $responses);
return shorten_text($responses, $length);
}
-
+ /**
+ * @param array responses is an array of responses.
+ * @return formatted responses
+ */
+ function format_responses($responses, $format){
+ $toreturn = array();
+ foreach ($responses as $response){
+ $toreturn[] = $this->format_response($response, $format);
+ }
+ return $toreturn;
+ }
+ /**
+ * @param string response is a response.
+ * @return formatted response
+ */
+ function format_response($response, $format){
+ return s($response);
+ }
/**
* Renders the question for printing and returns the LaTeX source produced
*
diff --git a/question/type/truefalse/questiontype.php b/question/type/truefalse/questiontype.php
index 305dc1ad5e9..7d1a7b66649 100644
--- a/question/type/truefalse/questiontype.php
+++ b/question/type/truefalse/questiontype.php
@@ -228,15 +228,6 @@ class question_truefalse_qtype extends default_questiontype {
return true;
}
- function response_summary($question, $state, $length=80) {
- if (isset($question->options->answers[$state->answer])) {
- $responses = $question->options->answers[$state->answer]->answer;
- } else {
- $responses = '';
- }
- return $responses;
- }
-
function get_actual_response($question, $state) {
if (isset($question->options->answers[$state->responses['']])) {
$responses[] = $question->options->answers[$state->responses['']]->answer;