diff --git a/question/type/ordering/db/install.xml b/question/type/ordering/db/install.xml
index d1126172d4a..c5be4e5582f 100644
--- a/question/type/ordering/db/install.xml
+++ b/question/type/ordering/db/install.xml
@@ -8,8 +8,9 @@
-
-
+
+
+
diff --git a/question/type/ordering/db/upgrade.php b/question/type/ordering/db/upgrade.php
index 2793f0b6fbd..8d141ef8206 100644
--- a/question/type/ordering/db/upgrade.php
+++ b/question/type/ordering/db/upgrade.php
@@ -219,6 +219,17 @@ function xmldb_qtype_ordering_upgrade($oldversion) {
}
}
+ $newversion = 2016081655;
+ if ($oldversion < $newversion) {
+ $table = new xmldb_table('qtype_ordering_options');
+ $field = new xmldb_field('showgrading', XMLDB_TYPE_INTEGER, '2', null, XMLDB_NOTNULL, null, 1, 'gradingtype');
+ if ($dbman->field_exists($table, $field)) {
+ $dbman->change_field_type($table, $field);
+ } else {
+ $dbman->add_field($table, $field);
+ }
+ upgrade_plugin_savepoint(true, $newversion, 'qtype', 'ordering');
+ }
return true;
}
diff --git a/question/type/ordering/edit_ordering_form.php b/question/type/ordering/edit_ordering_form.php
index c0af4bb76c1..27aa18ba761 100644
--- a/question/type/ordering/edit_ordering_form.php
+++ b/question/type/ordering/edit_ordering_form.php
@@ -107,6 +107,15 @@ class qtype_ordering_edit_form extends question_edit_form {
$mform->addHelpButton($name, $name, $plugin);
$mform->setDefault($name, $this->get_default_value($name, qtype_ordering_question::GRADING_ABSOLUTE_POSITION));
+ // Field for showgrading.
+ $name = 'showgrading';
+ $label = get_string($name, $plugin);
+ $options = array(0 => get_string('hide'),
+ 1 => get_string('show'));
+ $mform->addElement('select', $name, $label, $options);
+ $mform->addHelpButton($name, $name, $plugin);
+ $mform->setDefault($name, $this->get_default_value($name, 1));
+
$elements = array();
$options = array();
@@ -319,8 +328,9 @@ class qtype_ordering_edit_form extends question_edit_form {
$names = array(
'layouttype' => qtype_ordering_question::LAYOUT_VERTICAL,
'selecttype' => qtype_ordering_question::SELECT_ALL,
- 'selectcount' => 0, // 0 means all.
- 'gradingtype' => qtype_ordering_question::GRADING_ABSOLUTE_POSITION
+ 'selectcount' => 0, // 0 means ALL.
+ 'gradingtype' => qtype_ordering_question::GRADING_ABSOLUTE_POSITION,
+ 'showgrading' => 1 // 1 means SHOW.
);
foreach ($names as $name => $default) {
if (isset($question->options->$name)) {
@@ -363,7 +373,7 @@ class qtype_ordering_edit_form extends question_edit_form {
// If adding a new ordering question, update defaults.
if (empty($errors) && empty($data['id'])) {
- $fields = array('layouttype', 'selecttype', 'selectcount', 'gradingtype');
+ $fields = array('layouttype', 'selecttype', 'selectcount', 'gradingtype', 'showgrading');
foreach ($fields as $field) {
if (array_key_exists($field, $data)) {
$this->set_default_value($field, $data[$field]);
diff --git a/question/type/ordering/lang/en/qtype_ordering.php b/question/type/ordering/lang/en/qtype_ordering.php
index eef6def7300..46fb521d791 100644
--- a/question/type/ordering/lang/en/qtype_ordering.php
+++ b/question/type/ordering/lang/en/qtype_ordering.php
@@ -89,4 +89,6 @@ $string['selectcount'] = 'Size of subset';
$string['selectrandom'] = 'Select a random subset of items';
$string['selecttype_help'] = 'Choose whether to display all the items or a subset of the items.';
$string['selecttype'] = 'Item selection type';
+$string['showgrading_help'] = 'Choose whether to show or hide details of the score calculation when a student reviews a response to this Ordering question.';
+$string['showgrading'] = 'Grading details';
$string['vertical'] = 'Vertical';
diff --git a/question/type/ordering/question.php b/question/type/ordering/question.php
index ae049ff991a..fb8329249d7 100644
--- a/question/type/ordering/question.php
+++ b/question/type/ordering/question.php
@@ -451,6 +451,7 @@ class qtype_ordering_question extends question_graded_automatically {
'selecttype' => self::SELECT_ALL,
'selectcount' => 0,
'gradingtype' => self::GRADING_ABSOLUTE_POSITION,
+ 'showgradingdetails' => 1,
'correctfeedback' => '',
'correctfeedbackformat' => FORMAT_MOODLE,
'incorrectfeedback' => '',
diff --git a/question/type/ordering/questiontype.php b/question/type/ordering/questiontype.php
index 8ba6ca67476..c9618f0a59c 100644
--- a/question/type/ordering/questiontype.php
+++ b/question/type/ordering/questiontype.php
@@ -216,7 +216,8 @@ class qtype_ordering extends question_type {
'layouttype' => $question->layouttype,
'selecttype' => $question->selecttype,
'selectcount' => $question->selectcount,
- 'gradingtype' => $question->gradingtype
+ 'gradingtype' => $question->gradingtype,
+ 'showgrading' => $question->showgrading
);
$options = $this->save_combined_feedback_helper($options, $question, $context, true);
$this->save_hints($question, false);
@@ -379,14 +380,16 @@ class qtype_ordering extends question_type {
'RELATIVE|REL'.
'LONGEST_ORDERED_SUBSET|'.
'LONGEST_CONTIGUOUS_SUBSET)?';
+ $showgrading = '(?:SHOW|TRUE|YES|1|HIDE|FALSE|NO|0)?';
$search = '/^(' . $questionname . ')\s*\{>\s*(' . $selectcount . ')\s*(' . $selecttype . ')\s*' .
- '(' . $layouttype . ')\s*(' . $gradingtype . ')\s*(.*?)\s*\}\s*$/s';
+ '(' . $layouttype . ')\s*(' . $gradingtype . ')\s*(' . $showgrading . ')\s*(.*?)\s*\}\s*$/s';
// Item $1 the question name.
// Item $2 the number of items to be shown.
- // Item $3 the extraction/grading type.
+ // Item $3 the extraction/grading type.
// Item $4 the layout type.
- // Item $5 the grading type.
- // Item $6 the lines of items to be ordered.
+ // Item $5 the grading type.
+ // Item $6 show the grading details (SHOW/HIDE).
+ // Item $7 the lines of items to be ordered.
if (empty($extra) || ! preg_match($search, $lines, $matches)) {
return false; // Format not recognized.
}
@@ -396,7 +399,8 @@ class qtype_ordering extends question_type {
$selecttype = trim($matches[3]);
$layouttype = trim($matches[4]);
$gradingtype = trim($matches[5]);
- $lines = explode(PHP_EOL, $matches[6]);
+ $showgrading = trim($matches[6]);
+ $lines = explode(PHP_EOL, $matches[7]);
unset($matches);
$question->qtype = 'ordering';
@@ -411,7 +415,7 @@ class qtype_ordering extends question_type {
} else {
$selectcount = min(6, count($lines));
}
- $this->set_layout_select_count_grading($question, $layouttype, $selecttype, $selectcount, $gradingtype);
+ $this->set_layout_select_count_grading($question, $layouttype, $selecttype, $selectcount, $gradingtype, $showgrading);
// Remove blank items.
$lines = array_map('trim', $lines);
@@ -456,8 +460,8 @@ class qtype_ordering extends question_type {
}
/**
- * Given question object, returns array with array layouttype, selecttype, selectcount, gradingtype, where
- * layouttype, selecttype, gradingtype are string representation.
+ * Given question object, returns array with array layouttype, selecttype, selectcount, gradingtype, showgrading
+ * where layouttype, selecttype, gradingtype and showgrading are string representations.
*
* @param object $question
* @return array(layouttype, selecttype, selectcount, gradingtype)
@@ -518,10 +522,21 @@ class qtype_ordering extends question_type {
$grading = ''; // Shouldn't happen !!
}
+ switch ($question->options->showgrading) {
+ case 0:
+ $show = 'HIDE';
+ break;
+ case 1:
+ $show = 'SHOW';
+ break;
+ default:
+ $show = ''; // Shouldn't happen !!
+ }
+
// Note: this used to be (selectcount + 2).
$count = $question->options->selectcount;
- return array($layout, $select, $count, $grading);
+ return array($layout, $select, $count, $grading, $show);
}
/**
@@ -536,11 +551,12 @@ class qtype_ordering extends question_type {
global $CFG;
require_once($CFG->dirroot.'/question/type/ordering/question.php');
- list($layouttype, $selecttype, $selectcount, $gradingtype) = $this->extract_layout_select_count_grading($question);
+ list($layouttype, $selecttype, $selectcount, $gradingtype, $showgrading) = $this->extract_layout_select_count_grading($question);
$output = $question->questiontext.'{>'.$selectcount.' '.
$selecttype.' '.
$layouttype.' '.
- $gradingtype."\n";
+ $gradingtype.' '.
+ $showgrading."\n";
foreach ($question->options->answers as $answer) {
$output .= $answer->answer."\n";
}
@@ -560,13 +576,14 @@ class qtype_ordering extends question_type {
global $CFG;
require_once($CFG->dirroot.'/question/type/ordering/question.php');
- list($layouttype, $selecttype, $selectcount, $gradingtype) = $this->extract_layout_select_count_grading($question);
+ list($layouttype, $selecttype, $selectcount, $gradingtype, $showgrading) = $this->extract_layout_select_count_grading($question);
$output = '';
$output .= " $layouttype\n";
$output .= " $selecttype\n";
$output .= " $selectcount\n";
$output .= " $gradingtype\n";
+ $output .= " $showgrading\n";
$output .= $format->write_combined_feedback($question->options, $question->id, $question->contextid);
foreach ($question->options->answers as $answer) {
@@ -626,7 +643,8 @@ class qtype_ordering extends question_type {
$selecttype = $format->getpath($data, array('#', $selecttype, 0, '#'), 'RANDOM');
$selectcount = $format->getpath($data, array('#', $selectcount, 0, '#'), 6);
$gradingtype = $format->getpath($data, array('#', 'gradingtype', 0, '#'), 'RELATIVE');
- $this->set_layout_select_count_grading($newquestion, $layouttype, $selecttype, $selectcount, $gradingtype);
+ $showgrading = $format->getpath($data, array('#', 'showgrading', 0, '#'), '1');
+ $this->set_layout_select_count_grading($newquestion, $layouttype, $selecttype, $selectcount, $gradingtype, $showgrading);
$newquestion->answer = array();
$newquestion->answerformat = array();
@@ -679,21 +697,23 @@ class qtype_ordering extends question_type {
}
/**
- * Set layouttype, selecttype, selectcount, gradingtype based on their textual representation
+ * Set layouttype, selecttype, selectcount, gradingtype, showgrading based on their textual representation
*
* @param object $question (passed by reference)
* @param string $layout the layout type
* @param string $select the select type
* @param string $count the number of items to display
* @param string $grading the grading type
+ * @param string $show the grading details or not
*/
- public function set_layout_select_count_grading(&$question, $layout, $select, $count, $grading) {
+ public function set_layout_select_count_grading(&$question, $layout, $select, $count, $grading, $show) {
// Set default values.
$layouttype = qtype_ordering_question::LAYOUT_VERTICAL;
$selecttype = qtype_ordering_question::SELECT_RANDOM;
$selectcount = 3;
$gradingtype = qtype_ordering_question::GRADING_RELATIVE_NEXT_EXCLUDE_LAST;
+ $showgrading = 1;
switch (strtoupper($layout)) {
@@ -766,9 +786,24 @@ class qtype_ordering extends question_type {
break;
}
+ // Set "showgrading" from $show.
+ switch (strtoupper($show)) {
+ case 'SHOW':
+ case 'TRUE':
+ case 'YES':
+ $showgrading = 1;
+ break;
+ case 'HIDE':
+ case 'FALSE':
+ case 'NO':
+ $showgrading = 0;
+ break;
+ }
+
$question->layouttype = $layouttype;
$question->selecttype = $selecttype;
$question->selectcount = $selectcount;
$question->gradingtype = $gradingtype;
+ $question->showgrading = $showgrading;
}
}
diff --git a/question/type/ordering/renderer.php b/question/type/ordering/renderer.php
index 2a002eebd43..bfdb4c30b03 100644
--- a/question/type/ordering/renderer.php
+++ b/question/type/ordering/renderer.php
@@ -198,59 +198,63 @@ class qtype_ordering_renderer extends qtype_with_combined_feedback_renderer {
$plugin = 'qtype_ordering';
$question = $qa->get_question();
- // Fetch grading type.
- $gradingtype = $question->options->gradingtype;
- $gradingtype = qtype_ordering_question::get_grading_types($gradingtype);
+ // show grading details if they are required
+ if ($question->options->showgrading) {
- // Format grading type, e.g. Grading type: Relative to next item, excluding last item.
- if ($gradingtype) {
- $gradingtype = get_string('gradingtype', $plugin).': '.$gradingtype;
- $gradingtype = html_writer::tag('p', $gradingtype, array('class' => 'gradingtype'));
- }
+ // Fetch grading type.
+ $gradingtype = $question->options->gradingtype;
+ $gradingtype = qtype_ordering_question::get_grading_types($gradingtype);
- // Fetch grade details and score details.
- if ($currentresponse = $question->currentresponse) {
-
- $totalscore = 0;
- $totalmaxscore = 0;
-
- $layoutclass = $question->get_ordering_layoutclass();
- $params = array('class' => $layoutclass);
-
- $scoredetails .= html_writer::tag('p', get_string('scoredetails', $plugin));
- $scoredetails .= html_writer::start_tag('ol', array('class' => 'scoredetails'));
-
- // Format scoredetails, e.g. 1 /2 = 50%, for each item.
- foreach ($currentresponse as $position => $answerid) {
- if (array_key_exists($answerid, $question->answers)) {
- $answer = $question->answers[$answerid];
- $score = $this->get_ordering_item_score($question, $position, $answerid);
- list($score, $maxscore, $fraction, $percent, $class, $img) = $score;
- if ($maxscore === null) {
- $score = get_string('noscore', $plugin);
- } else {
- $totalscore += $score;
- $totalmaxscore += $maxscore;
- $score = "$score / $maxscore = $percent%";
- }
- $scoredetails .= html_writer::tag('li', $score, $params);
- }
+ // Format grading type, e.g. Grading type: Relative to next item, excluding last item.
+ if ($gradingtype) {
+ $gradingtype = get_string('gradingtype', $plugin).': '.$gradingtype;
+ $gradingtype = html_writer::tag('p', $gradingtype, array('class' => 'gradingtype'));
}
- $scoredetails .= html_writer::end_tag('ol');
+ // Fetch grade details and score details.
+ if ($currentresponse = $question->currentresponse) {
- if ($totalmaxscore == 0) {
- $scoredetails = ''; // ALL_OR_NOTHING.
- } else {
- // Format gradedetails, e.g. 4 /6 = 67%.
- if ($totalscore == 0) {
- $gradedetails = 0;
- } else {
- $gradedetails = round(100 * $totalscore / $totalmaxscore, 0);
+ $totalscore = 0;
+ $totalmaxscore = 0;
+
+ $layoutclass = $question->get_ordering_layoutclass();
+ $params = array('class' => $layoutclass);
+
+ $scoredetails .= html_writer::tag('p', get_string('scoredetails', $plugin));
+ $scoredetails .= html_writer::start_tag('ol', array('class' => 'scoredetails'));
+
+ // Format scoredetails, e.g. 1 /2 = 50%, for each item.
+ foreach ($currentresponse as $position => $answerid) {
+ if (array_key_exists($answerid, $question->answers)) {
+ $answer = $question->answers[$answerid];
+ $score = $this->get_ordering_item_score($question, $position, $answerid);
+ list($score, $maxscore, $fraction, $percent, $class, $img) = $score;
+ if ($maxscore === null) {
+ $score = get_string('noscore', $plugin);
+ } else {
+ $totalscore += $score;
+ $totalmaxscore += $maxscore;
+ $score = "$score / $maxscore = $percent%";
+ }
+ $scoredetails .= html_writer::tag('li', $score, $params);
+ }
+ }
+
+ $scoredetails .= html_writer::end_tag('ol');
+
+ if ($totalmaxscore == 0) {
+ $scoredetails = ''; // ALL_OR_NOTHING.
+ } else {
+ // Format gradedetails, e.g. 4 /6 = 67%.
+ if ($totalscore == 0) {
+ $gradedetails = 0;
+ } else {
+ $gradedetails = round(100 * $totalscore / $totalmaxscore, 0);
+ }
+ $gradedetails = "$totalscore / $totalmaxscore = $gradedetails%";
+ $gradedetails = get_string('gradedetails', $plugin).': '.$gradedetails;
+ $gradedetails = html_writer::tag('p', $gradedetails, array('class' => 'gradedetails'));
}
- $gradedetails = "$totalscore / $totalmaxscore = $gradedetails%";
- $gradedetails = get_string('gradedetails', $plugin).': '.$gradedetails;
- $gradedetails = html_writer::tag('p', $gradedetails, array('class' => 'gradedetails'));
}
}
}
diff --git a/question/type/ordering/version.php b/question/type/ordering/version.php
index 9000405d387..3204c3c5b38 100644
--- a/question/type/ordering/version.php
+++ b/question/type/ordering/version.php
@@ -29,5 +29,5 @@ $plugin->cron = 0;
$plugin->component = 'qtype_ordering';
$plugin->maturity = MATURITY_STABLE;
$plugin->requires = 2011070100; // Moodle 2.1.
-$plugin->version = 2016051154;
-$plugin->release = '2016-05-11 (54)';
+$plugin->version = 2016081655;
+$plugin->release = '2016-08-16 (55)';