mirror of
https://github.com/moodle/moodle.git
synced 2025-04-24 18:04:43 +02:00
Merge branch 'MDL-46212' of git://github.com/timhunt/moodle
Conflicts: question/type/calculated/question.php
This commit is contained in:
commit
95d294368f
question
category_class.php
classes/bank
editlib.phpengine
export.phpexport_form.phpformat.phpformat
import_form.phppreviewlib.phpquestion.phptests/behat
type
calculated
datasetdefinitions_form.phpdatasetitems_form.phpedit_calculated_form.phpquestion.phpquestiontype.php
calculatedmulti
calculatedsimple
edit_question_form.phpessay/db
match
multianswer
numerical
questiontypebase.phprandom
randomsamatch
shortanswer
@ -290,7 +290,7 @@ class question_category_object {
|
||||
/// Interface for editing existing categories
|
||||
if ($category = $DB->get_record("question_categories", array("id" => $categoryid))) {
|
||||
|
||||
$category->parent = "$category->parent,$category->contextid";
|
||||
$category->parent = "{$category->parent},{$category->contextid}";
|
||||
$category->submitbutton = get_string('savechanges');
|
||||
$category->categoryheader = $this->str->edit;
|
||||
$this->catform->set_data($category);
|
||||
|
@ -724,7 +724,7 @@ class view {
|
||||
array('qperpage' => DEFAULT_QUESTIONS_PER_PAGE)));
|
||||
$showall = '<a href="'.$url.'">'.get_string('showperpage', 'moodle', DEFAULT_QUESTIONS_PER_PAGE).'</a>';
|
||||
}
|
||||
echo "<div class='paging'>$showall</div>";
|
||||
echo "<div class='paging'>{$showall}</div>";
|
||||
}
|
||||
echo '</div>';
|
||||
|
||||
@ -743,13 +743,13 @@ class view {
|
||||
|
||||
if ($canmoveall && count($addcontexts)) {
|
||||
echo '<input type="submit" name="move" value="'.get_string('moveto', 'question')."\" />\n";
|
||||
question_category_select_menu($addcontexts, false, 0, "$category->id,$category->contextid");
|
||||
question_category_select_menu($addcontexts, false, 0, "{$category->id},{$category->contextid}");
|
||||
}
|
||||
|
||||
if (function_exists('module_specific_controls') && $canuseall) {
|
||||
$modulespecific = module_specific_controls($totalnumber, $recurse, $category, $this->cm->id, $cmoptions);
|
||||
if (!empty($modulespecific)) {
|
||||
echo "<hr />$modulespecific";
|
||||
echo "<hr />{$modulespecific}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -835,13 +835,13 @@ class view {
|
||||
SELECT q.*, c.contextid
|
||||
FROM {question} q
|
||||
JOIN {question_categories} c ON c.id = q.category
|
||||
WHERE q.id $usql", $params);
|
||||
WHERE q.id {$usql}", $params);
|
||||
foreach ($questions as $question) {
|
||||
question_require_capability_on($question, 'move');
|
||||
}
|
||||
question_move_questions_to_category($questionids, $tocategory->id);
|
||||
redirect($this->baseurl->out(false,
|
||||
array('category' => "$tocategoryid,$contextid")));
|
||||
array('category' => "{$tocategoryid},{$contextid}")));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ function get_questions_category( $category, $noparent=false, $recurse=true, $exp
|
||||
|
||||
// Get the list of questions for the category
|
||||
list($usql, $params) = $DB->get_in_or_equal($categorylist);
|
||||
$questions = $DB->get_records_select('question', "category $usql $npsql", $params, 'qtype, name');
|
||||
$questions = $DB->get_records_select('question', "category {$usql} {$npsql}", $params, 'qtype, name');
|
||||
|
||||
// Iterate through questions, getting stuff we need
|
||||
$qresults = array();
|
||||
@ -346,7 +346,7 @@ function question_edit_setup($edittab, $baseurl, $requirecmid = false, $requirec
|
||||
|
||||
$contextlistarr = array();
|
||||
foreach ($contexts->having_one_edit_tab_cap($edittab) as $context){
|
||||
$contextlistarr[] = "'$context->id'";
|
||||
$contextlistarr[] = "'{$context->id}'";
|
||||
}
|
||||
$contextlist = join($contextlistarr, ' ,');
|
||||
if (!empty($pagevars['cat'])){
|
||||
@ -357,7 +357,7 @@ function question_edit_setup($edittab, $baseurl, $requirecmid = false, $requirec
|
||||
}
|
||||
} else {
|
||||
$category = $defaultcategory;
|
||||
$pagevars['cat'] = "$category->id,$category->contextid";
|
||||
$pagevars['cat'] = "{$category->id},{$category->contextid}";
|
||||
}
|
||||
|
||||
// Display options.
|
||||
|
@ -100,7 +100,7 @@ abstract class question_bank {
|
||||
include_once($file);
|
||||
$class = 'qtype_' . $qtypename;
|
||||
if (!class_exists($class)) {
|
||||
throw new coding_exception("Class $class must be defined in $file");
|
||||
throw new coding_exception("Class {$class} must be defined in {$file}.");
|
||||
}
|
||||
self::$questiontypes[$qtypename] = new $class();
|
||||
return self::$questiontypes[$qtypename];
|
||||
@ -381,8 +381,8 @@ abstract class question_bank {
|
||||
// The the positive grades in descending order.
|
||||
foreach ($rawfractions as $fraction) {
|
||||
$percentage = format_float(100 * $fraction, 5, true, true) . '%';
|
||||
self::$fractionoptions["$fraction"] = $percentage;
|
||||
self::$fractionoptionsfull["$fraction"] = $percentage;
|
||||
self::$fractionoptions["{$fraction}"] = $percentage;
|
||||
self::$fractionoptionsfull["{$fraction}"] = $percentage;
|
||||
}
|
||||
|
||||
// The the negative grades in descending order.
|
||||
@ -499,10 +499,10 @@ class question_finder implements cache_data_source {
|
||||
}
|
||||
|
||||
return $DB->get_records_select_menu('question',
|
||||
"category $qcsql
|
||||
"category {$qcsql}
|
||||
AND parent = 0
|
||||
AND hidden = 0
|
||||
$extraconditions", $qcparams + $extraparams, '', 'id,id AS id2');
|
||||
{$extraconditions}", $qcparams + $extraparams, '', 'id,id AS id2');
|
||||
}
|
||||
|
||||
/* See cache_data_source::load_for_cache. */
|
||||
|
@ -651,7 +651,7 @@ $sqlorderby
|
||||
if (!empty($slots)) {
|
||||
list($slottest, $slotsparams) = $this->db->get_in_or_equal(
|
||||
$slots, SQL_PARAMS_NAMED, 'slot');
|
||||
$slotwhere = " AND qa.slot $slottest";
|
||||
$slotwhere = " AND qa.slot {$slottest}";
|
||||
} else {
|
||||
$slotwhere = '';
|
||||
$slotsparams = array();
|
||||
@ -879,9 +879,9 @@ ORDER BY
|
||||
$this->delete_response_files($context->id, $test, $params);
|
||||
|
||||
$this->db->delete_records_select('question_attempt_step_data',
|
||||
"attemptstepid $test", $params);
|
||||
"attemptstepid {$test}", $params);
|
||||
$this->db->delete_records_select('question_attempt_steps',
|
||||
"id $test", $params);
|
||||
"id {$test}", $params);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -942,7 +942,7 @@ ORDER BY
|
||||
protected function full_states_to_summary_state_sql() {
|
||||
$sql = '';
|
||||
foreach (question_state::get_all() as $state) {
|
||||
$sql .= "WHEN '$state' THEN '{$state->get_summary_state()}'\n";
|
||||
$sql .= "WHEN '{$state}' THEN '{$state->get_summary_state()}'\n";
|
||||
}
|
||||
return $sql;
|
||||
}
|
||||
@ -1043,7 +1043,7 @@ ORDER BY
|
||||
JOIN {question_attempt_steps} {$alias}qas ON {$alias}qas.questionattemptid = {$alias}qa.id
|
||||
AND {$alias}qas.sequencenumber = {$this->latest_step_for_qa_subquery($alias . 'qa.id')}
|
||||
WHERE {$qubaids->where()}
|
||||
) $alias", $qubaids->from_where_params());
|
||||
) {$alias}", $qubaids->from_where_params());
|
||||
}
|
||||
|
||||
protected function latest_step_for_qa_subquery($questionattemptid = 'qa.id') {
|
||||
@ -1658,7 +1658,7 @@ class qubaid_join extends qubaid_condition {
|
||||
}
|
||||
|
||||
public function from_question_attempts($alias) {
|
||||
return "$this->from
|
||||
return "{$this->from}
|
||||
JOIN {question_attempts} {$alias} ON " .
|
||||
"{$alias}.questionusageid = $this->usageidcolumn";
|
||||
}
|
||||
@ -1672,7 +1672,7 @@ class qubaid_join extends qubaid_condition {
|
||||
}
|
||||
|
||||
public function usage_id_in() {
|
||||
return "IN (SELECT $this->usageidcolumn FROM $this->from WHERE $this->where)";
|
||||
return "IN (SELECT {$this->usageidcolumn} FROM {$this->from} WHERE {$this->where})";
|
||||
}
|
||||
|
||||
public function usage_id_in_params() {
|
||||
|
@ -656,7 +656,7 @@ abstract class question_flags {
|
||||
$qid = $qa->get_question()->id;
|
||||
$slot = $qa->get_slot();
|
||||
$checksum = self::get_toggle_checksum($qubaid, $qid, $qaid, $slot);
|
||||
return "qaid=$qaid&qubaid=$qubaid&qid=$qid&slot=$slot&checksum=$checksum&sesskey=" .
|
||||
return "qaid={$qaid}&qubaid={$qubaid}&qid={$qid}&slot={$slot}&checksum={$checksum}&sesskey=" .
|
||||
sesskey() . '&newstate=';
|
||||
}
|
||||
|
||||
@ -735,7 +735,7 @@ class question_out_of_sequence_exception extends moodle_exception {
|
||||
$postdata = data_submitted();
|
||||
}
|
||||
parent::__construct('submissionoutofsequence', 'question', '', null,
|
||||
"QUBAid: $qubaid, slot: $slot, post data: " . print_r($postdata, true));
|
||||
"QUBAid: {$qubaid}, slot: {$slot}, post data: " . print_r($postdata, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1351,7 +1351,7 @@ class question_attempt {
|
||||
while ($record->questionattemptid != $questionattemptid) {
|
||||
$record = $records->next();
|
||||
if (!$records->valid()) {
|
||||
throw new coding_exception("Question attempt $questionattemptid not found in the database.");
|
||||
throw new coding_exception("Question attempt {$questionattemptid} not found in the database.");
|
||||
}
|
||||
$record = $records->current();
|
||||
}
|
||||
|
@ -837,7 +837,7 @@ class question_usage_by_activity {
|
||||
while ($record->qubaid != $qubaid) {
|
||||
$records->next();
|
||||
if (!$records->valid()) {
|
||||
throw new coding_exception("Question usage $qubaid not found in the database.");
|
||||
throw new coding_exception("Question usage {$qubaid} not found in the database.");
|
||||
}
|
||||
$record = $records->current();
|
||||
}
|
||||
|
@ -545,10 +545,10 @@ abstract class question_testcase extends advanced_testcase {
|
||||
$compare = (array)$compare;
|
||||
foreach ($expect as $k=>$v) {
|
||||
if (!array_key_exists($k, $compare)) {
|
||||
$this->fail("Property $k does not exist");
|
||||
$this->fail("Property {$k} does not exist");
|
||||
}
|
||||
if ($v != $compare[$k]) {
|
||||
$this->fail("Property $k is different");
|
||||
$this->fail("Property {$k} is different");
|
||||
}
|
||||
}
|
||||
$this->assertTrue(true);
|
||||
|
@ -50,7 +50,7 @@ $export_form = new question_export_form($thispageurl,
|
||||
|
||||
if ($from_form = $export_form->get_data()) {
|
||||
$thiscontext = $contexts->lowest();
|
||||
if (!is_readable("format/$from_form->format/format.php")) {
|
||||
if (!is_readable("format/{$from_form->format}/format.php")) {
|
||||
print_error('unknowformat', '', '', $from_form->format);
|
||||
}
|
||||
$withcategories = 'nocategories';
|
||||
|
@ -51,10 +51,10 @@ class question_export_form extends moodleform {
|
||||
foreach ($fileformatnames as $shortname => $fileformatname) {
|
||||
$currentgrp1 = array();
|
||||
$currentgrp1[] = $mform->createElement('radio', 'format', '', $fileformatname, $shortname);
|
||||
$mform->addGroup($currentgrp1, "formathelp[$i]", '', array('<br />'), false);
|
||||
$mform->addGroup($currentgrp1, "formathelp[{$i}]", '', array('<br />'), false);
|
||||
|
||||
if (get_string_manager()->string_exists('pluginname_help', 'qformat_' . $shortname)) {
|
||||
$mform->addHelpButton("formathelp[$i]", 'pluginname', 'qformat_' . $shortname);
|
||||
$mform->addHelpButton("formathelp[{$i}]", 'pluginname', 'qformat_' . $shortname);
|
||||
}
|
||||
|
||||
$i++ ;
|
||||
|
@ -222,12 +222,12 @@ class qformat_default {
|
||||
$importerrorquestion = get_string('importerrorquestion', 'question');
|
||||
|
||||
echo "<div class=\"importerror\">\n";
|
||||
echo "<strong>$importerrorquestion $questionname</strong>";
|
||||
echo "<strong>{$importerrorquestion} {$questionname}</strong>";
|
||||
if (!empty($text)) {
|
||||
$text = s($text);
|
||||
echo "<blockquote>$text</blockquote>\n";
|
||||
echo "<blockquote>{$text}</blockquote>\n";
|
||||
}
|
||||
echo "<strong>$message</strong>\n";
|
||||
echo "<strong>{$message}</strong>\n";
|
||||
echo "</div>";
|
||||
|
||||
$this->importerrors++;
|
||||
@ -247,7 +247,7 @@ class qformat_default {
|
||||
|
||||
// work out what format we are using
|
||||
$formatname = substr(get_class($this), strlen('qformat_'));
|
||||
$methodname = "import_from_$formatname";
|
||||
$methodname = "import_from_{$formatname}";
|
||||
|
||||
//first try importing using a hint from format
|
||||
if (!empty($qtypehint)) {
|
||||
@ -377,7 +377,7 @@ class qformat_default {
|
||||
|
||||
$count++;
|
||||
|
||||
echo "<hr /><p><b>$count</b>. ".$this->format_question_text($question)."</p>";
|
||||
echo "<hr /><p><b>{$count}</b>. ".$this->format_question_text($question)."</p>";
|
||||
|
||||
$question->category = $this->category->id;
|
||||
$question->stamp = make_unique_id_code(); // Set the unique code (not to be changed)
|
||||
@ -691,7 +691,7 @@ class qformat_default {
|
||||
protected function readquestion($lines) {
|
||||
|
||||
$formatnotimplemented = get_string('formatnotimplemented', 'question');
|
||||
echo "<p>$formatnotimplemented</p>";
|
||||
echo "<p>{$formatnotimplemented}</p>";
|
||||
|
||||
return null;
|
||||
}
|
||||
@ -719,7 +719,7 @@ class qformat_default {
|
||||
protected function try_exporting_using_qtypes($name, $question, $extra=null) {
|
||||
// work out the name of format in use
|
||||
$formatname = substr(get_class($this), strlen('qformat_'));
|
||||
$methodname = "export_to_$formatname";
|
||||
$methodname = "export_to_{$formatname}";
|
||||
|
||||
$qtype = question_bank::get_qtype($name, false);
|
||||
if (method_exists($qtype, $methodname)) {
|
||||
@ -819,7 +819,7 @@ class qformat_default {
|
||||
|
||||
// continue path for following error checks
|
||||
$course = $this->course;
|
||||
$continuepath = "$CFG->wwwroot/question/export.php?courseid=$course->id";
|
||||
$continuepath = "{$CFG->wwwroot}/question/export.php?courseid={$course->id}";
|
||||
|
||||
// did we actually process anything
|
||||
if ($count==0) {
|
||||
@ -924,7 +924,7 @@ class qformat_default {
|
||||
protected function writequestion($question) {
|
||||
// if not overidden, then this is an error.
|
||||
$formatnotimplemented = get_string('formatnotimplemented', 'question');
|
||||
echo "<p>$formatnotimplemented</p>";
|
||||
echo "<p>{$formatnotimplemented}</p>";
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ class qformat_blackboard_six_base extends qformat_based_on_xml {
|
||||
$dirpath = dirname($path);
|
||||
$filename = basename($path);
|
||||
$newfilename = $this->store_file_for_text_field($data, $this->filebase, $dirpath, $filename);
|
||||
$text = preg_replace("|$path|", "@@PLUGINFILE@@/" . $newfilename, $text);
|
||||
$text = preg_replace("|{$path}|", "@@PLUGINFILE@@/" . $newfilename, $text);
|
||||
$filepaths[] = $path;
|
||||
}
|
||||
|
||||
|
@ -416,7 +416,7 @@ class qformat_gift extends qformat_default {
|
||||
list($answer, $wrongfeedback, $rightfeedback) =
|
||||
$this->split_truefalse_comment($answertext, $question->questiontextformat);
|
||||
|
||||
if ($answer['text'] == "T" OR $answer['text'] == "TRUE") {
|
||||
if ($answer['text'] == "T" || $answer['text'] == "TRUE") {
|
||||
$question->correctanswer = 1;
|
||||
$question->feedbacktrue = $rightfeedback;
|
||||
$question->feedbackfalse = $wrongfeedback;
|
||||
@ -634,7 +634,7 @@ class qformat_gift extends qformat_default {
|
||||
global $OUTPUT;
|
||||
|
||||
// Start with a comment.
|
||||
$expout = "// question: $question->id name: $question->name\n";
|
||||
$expout = "// question: {$question->id} name: {$question->name}\n";
|
||||
|
||||
// Output depends on question type.
|
||||
switch($question->qtype) {
|
||||
|
@ -150,7 +150,7 @@ function qformat_webct_convert_formula($formula) {
|
||||
}
|
||||
|
||||
// Replace it!
|
||||
$formula = "$splits[0]pow($base,$exp)$splits[1]";
|
||||
$formula = "{$splits[0]}pow({$base},{$exp}){$splits[1]}";
|
||||
}
|
||||
|
||||
// Nothing more is known to need to be converted.
|
||||
@ -239,7 +239,7 @@ class qformat_webct extends qformat_default {
|
||||
$dirpath = dirname($path);
|
||||
$filename = basename($path);
|
||||
$newfilename = $this->store_file_for_text_field($data, $this->tempdir, $dirpath, $filename);
|
||||
$text = preg_replace("|$path|", "@@PLUGINFILE@@/" . $newfilename, $text);
|
||||
$text = preg_replace("|{$path}|", "@@PLUGINFILE@@/" . $newfilename, $text);
|
||||
$filepaths[] = $path;
|
||||
}
|
||||
|
||||
@ -497,7 +497,7 @@ class qformat_webct extends qformat_default {
|
||||
case 'shortanswer':
|
||||
if ($maxfraction != 1) {
|
||||
$maxfraction = $maxfraction * 100;
|
||||
$errors[] = "'$question->name': ".get_string('wronggrade', 'qformat_webct', $nlinecounter)
|
||||
$errors[] = "'{$question->name}': ".get_string('wronggrade', 'qformat_webct', $nlinecounter)
|
||||
.' '.get_string('fractionsnomax', 'question', $maxfraction);
|
||||
$questionok = false;
|
||||
}
|
||||
@ -509,7 +509,7 @@ class qformat_webct extends qformat_default {
|
||||
if ($question->single) {
|
||||
if ($maxfraction != 1) {
|
||||
$maxfraction = $maxfraction * 100;
|
||||
$errors[] = "'$question->name': ".get_string('wronggrade', 'qformat_webct', $nlinecounter)
|
||||
$errors[] = "'{$question->name}': ".get_string('wronggrade', 'qformat_webct', $nlinecounter)
|
||||
.' '.get_string('fractionsnomax', 'question', $maxfraction);
|
||||
$questionok = false;
|
||||
}
|
||||
@ -517,7 +517,7 @@ class qformat_webct extends qformat_default {
|
||||
$totalfraction = round($totalfraction, 2);
|
||||
if ($totalfraction != 1) {
|
||||
$totalfraction = $totalfraction * 100;
|
||||
$errors[] = "'$question->name': ".get_string('wronggrade', 'qformat_webct', $nlinecounter)
|
||||
$errors[] = "'{$question->name}': ".get_string('wronggrade', 'qformat_webct', $nlinecounter)
|
||||
.' '.get_string('fractionsaddwrong', 'question', $totalfraction);
|
||||
$questionok = false;
|
||||
}
|
||||
@ -527,7 +527,7 @@ class qformat_webct extends qformat_default {
|
||||
case 'calculated':
|
||||
foreach ($question->answers as $answer) {
|
||||
if ($formulaerror = qtype_calculated_find_formula_errors($answer)) {
|
||||
$warnings[] = "'$question->name': ". $formulaerror;
|
||||
$warnings[] = "'{$question->name}': ". $formulaerror;
|
||||
$questionok = false;
|
||||
}
|
||||
}
|
||||
@ -687,7 +687,7 @@ class qformat_webct extends qformat_default {
|
||||
continue;
|
||||
}
|
||||
if (isset($question->qtype ) && 'calculated' == $question->qtype && preg_match(
|
||||
"~^:([[:lower:]].*|::.*)-(MIN|MAX|DEC|VAL([0-9]+))::?:?($webctnumberregex)~", $line, $webctoptions)) {
|
||||
"~^:([[:lower:]].*|::.*)-(MIN|MAX|DEC|VAL([0-9]+))::?:?({$webctnumberregex})~", $line, $webctoptions)) {
|
||||
$datasetname = preg_replace('/^::/', '', $webctoptions[1]);
|
||||
$datasetvalue = qformat_webct_convert_formula($webctoptions[4]);
|
||||
switch ($webctoptions[2]) {
|
||||
@ -803,7 +803,7 @@ class qformat_webct extends qformat_default {
|
||||
}
|
||||
|
||||
if (isset($question->qtype )&& 'calculated' == $question->qtype
|
||||
&& preg_match("~^:TOL:($webctnumberregex)~i", $line, $webctoptions)) {
|
||||
&& preg_match("~^:TOL:({$webctnumberregex})~i", $line, $webctoptions)) {
|
||||
// We can but hope that this always appear before the TOL property.
|
||||
$question->tolerance[$currentchoice] =
|
||||
qformat_webct_convert_formula($webctoptions[1]);
|
||||
@ -858,7 +858,7 @@ class qformat_webct extends qformat_default {
|
||||
if (count($errors) > 0) {
|
||||
echo '<p>'.get_string('errorsdetected', 'qformat_webct', count($errors)).'</p><ul>';
|
||||
foreach ($errors as $error) {
|
||||
echo "<li>$error</li>";
|
||||
echo "<li>{$error}</li>";
|
||||
}
|
||||
echo '</ul>';
|
||||
unset($questions); // No questions imported.
|
||||
@ -867,7 +867,7 @@ class qformat_webct extends qformat_default {
|
||||
if (count($warnings) > 0) {
|
||||
echo '<p>'.get_string('warningsdetected', 'qformat_webct', count($warnings)).'</p><ul>';
|
||||
foreach ($warnings as $warning) {
|
||||
echo "<li>$warning</li>";
|
||||
echo "<li>{$warning}</li>";
|
||||
}
|
||||
echo '</ul>';
|
||||
}
|
||||
|
@ -59,11 +59,11 @@ class qformat_xhtml extends qformat_default {
|
||||
$id = $question->id;
|
||||
|
||||
// Add comment and div tags.
|
||||
$expout .= "<!-- question: $id name: $question->name -->\n";
|
||||
$expout .= "<!-- question: {$id} name: {$question->name} -->\n";
|
||||
$expout .= "<div class=\"question\">\n";
|
||||
|
||||
// Add header.
|
||||
$expout .= "<h3>$question->name</h3>\n";
|
||||
$expout .= "<h3>{$question->name}</h3>\n";
|
||||
|
||||
// Format and add the question text.
|
||||
$text = question_rewrite_question_preview_urls($question->questiontext, $question->id,
|
||||
@ -78,8 +78,8 @@ class qformat_xhtml extends qformat_default {
|
||||
$sttrue = get_string('true', 'qtype_truefalse');
|
||||
$stfalse = get_string('false', 'qtype_truefalse');
|
||||
$expout .= "<ul class=\"truefalse\">\n";
|
||||
$expout .= " <li><input name=\"quest_$id\" type=\"radio\" value=\"$sttrue\" />$sttrue</li>\n";
|
||||
$expout .= " <li><input name=\"quest_$id\" type=\"radio\" value=\"$stfalse\" />$stfalse</li>\n";
|
||||
$expout .= " <li><input name=\"quest_{$id}\" type=\"radio\" value=\"{$sttrue}\" />{$sttrue}</li>\n";
|
||||
$expout .= " <li><input name=\"quest_{$id}\" type=\"radio\" value=\"{$stfalse}\" />{$stfalse}</li>\n";
|
||||
$expout .= "</ul>\n";
|
||||
break;
|
||||
case 'multichoice':
|
||||
@ -87,11 +87,11 @@ class qformat_xhtml extends qformat_default {
|
||||
foreach ($question->options->answers as $answer) {
|
||||
$answertext = $this->repchar( $answer->answer );
|
||||
if ($question->options->single) {
|
||||
$expout .= " <li><input name=\"quest_$id\" type=\"radio\" value=\""
|
||||
. s($answertext) . "\" />$answertext</li>\n";
|
||||
$expout .= " <li><input name=\"quest_{$id}\" type=\"radio\" value=\""
|
||||
. s($answertext) . "\" />{$answertext}</li>\n";
|
||||
} else {
|
||||
$expout .= " <li><input name=\"quest_$id\" type=\"checkbox\" value=\""
|
||||
. s($answertext) . "\" />$answertext</li>\n";
|
||||
$expout .= " <li><input name=\"quest_{$id}\" type=\"checkbox\" value=\""
|
||||
. s($answertext) . "\" />{$answertext}</li>\n";
|
||||
}
|
||||
}
|
||||
$expout .= "</ul>\n";
|
||||
@ -100,7 +100,7 @@ class qformat_xhtml extends qformat_default {
|
||||
$expout .= html_writer::start_tag('ul', array('class' => 'shortanswer'));
|
||||
$expout .= html_writer::start_tag('li');
|
||||
$expout .= html_writer::label(get_string('answer'), 'quest_'.$id, false, array('class' => 'accesshide'));
|
||||
$expout .= html_writer::empty_tag('input', array('id' => "quest_$id", 'name' => "quest_$id", 'type' => 'text'));
|
||||
$expout .= html_writer::empty_tag('input', array('id' => "quest_{$id}", 'name' => "quest_{$id}", 'type' => 'text'));
|
||||
$expout .= html_writer::end_tag('li');
|
||||
$expout .= html_writer::end_tag('ul');
|
||||
break;
|
||||
@ -108,7 +108,7 @@ class qformat_xhtml extends qformat_default {
|
||||
$expout .= html_writer::start_tag('ul', array('class' => 'numerical'));
|
||||
$expout .= html_writer::start_tag('li');
|
||||
$expout .= html_writer::label(get_string('answer'), 'quest_'.$id, false, array('class' => 'accesshide'));
|
||||
$expout .= html_writer::empty_tag('input', array('id' => "quest_$id", 'name' => "quest_$id", 'type' => 'text'));
|
||||
$expout .= html_writer::empty_tag('input', array('id' => "quest_{$id}", 'name' => "quest_{$id}", 'type' => 'text'));
|
||||
$expout .= html_writer::end_tag('li');
|
||||
$expout .= html_writer::end_tag('ul');
|
||||
break;
|
||||
@ -149,7 +149,7 @@ class qformat_xhtml extends qformat_default {
|
||||
break;
|
||||
case 'multianswer':
|
||||
default:
|
||||
$expout .= "<!-- export of $question->qtype type is not supported -->\n";
|
||||
$expout .= "<!-- export of {$question->qtype} type is not supported -->\n";
|
||||
}
|
||||
// Close off div.
|
||||
$expout .= "</div>\n\n\n";
|
||||
@ -163,7 +163,7 @@ class qformat_xhtml extends qformat_default {
|
||||
global $CFG;
|
||||
|
||||
// Get css bit.
|
||||
$csslines = file( "$CFG->dirroot/question/format/xhtml/xhtml.css" );
|
||||
$csslines = file( "{$CFG->dirroot}/question/format/xhtml/xhtml.css" );
|
||||
$css = implode( ' ', $csslines );
|
||||
|
||||
$xp = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
|
||||
|
@ -1072,9 +1072,9 @@ class qformat_xml extends qformat_default {
|
||||
$raw = $this->xml_escape($raw);
|
||||
|
||||
if ($short) {
|
||||
$xml = "$indent<text>$raw</text>\n";
|
||||
$xml = "{$indent}<text>{$raw}</text>\n";
|
||||
} else {
|
||||
$xml = "$indent<text>\n$raw\n$indent</text>\n";
|
||||
$xml = "{$indent}<text>\n{$raw}\n{$indent}</text>\n";
|
||||
}
|
||||
|
||||
return $xml;
|
||||
@ -1137,7 +1137,7 @@ class qformat_xml extends qformat_default {
|
||||
$expout = '';
|
||||
|
||||
// Add a comment linking this to the original question id.
|
||||
$expout .= "<!-- question: $question->id -->\n";
|
||||
$expout .= "<!-- question: {$question->id} -->\n";
|
||||
|
||||
// Check question type.
|
||||
$questiontype = $this->get_qtype($question->qtype);
|
||||
@ -1147,7 +1147,7 @@ class qformat_xml extends qformat_default {
|
||||
$categorypath = $this->writetext($question->category);
|
||||
$expout .= " <question type=\"category\">\n";
|
||||
$expout .= " <category>\n";
|
||||
$expout .= " $categorypath\n";
|
||||
$expout .= " {$categorypath}\n";
|
||||
$expout .= " </category>\n";
|
||||
$expout .= " </question>\n";
|
||||
return $expout;
|
||||
@ -1155,7 +1155,7 @@ class qformat_xml extends qformat_default {
|
||||
|
||||
// Now we know we are are handing a real question.
|
||||
// Output the generic information.
|
||||
$expout .= " <question type=\"$questiontype\">\n";
|
||||
$expout .= " <question type=\"{$questiontype}\">\n";
|
||||
$expout .= " <name>\n";
|
||||
$expout .= $this->writetext($question->name, 3);
|
||||
$expout .= " </name>\n";
|
||||
@ -1209,7 +1209,7 @@ class qformat_xml extends qformat_default {
|
||||
case 'numerical':
|
||||
foreach ($question->options->answers as $answer) {
|
||||
$expout .= $this->write_answer($answer,
|
||||
" <tolerance>$answer->tolerance</tolerance>\n");
|
||||
" <tolerance>{$answer->tolerance}</tolerance>\n");
|
||||
}
|
||||
|
||||
$units = $question->options->units;
|
||||
@ -1333,7 +1333,7 @@ class qformat_xml extends qformat_default {
|
||||
|
||||
foreach ($question->options->answers as $answer) {
|
||||
$percent = 100 * $answer->fraction;
|
||||
$expout .= "<answer fraction=\"$percent\">\n";
|
||||
$expout .= "<answer fraction=\"{$percent}\">\n";
|
||||
// The "<text/>" tags are an added feature, old files won't have them.
|
||||
$expout .= " <text>{$answer->answer}</text>\n";
|
||||
$expout .= " <tolerance>{$answer->tolerance}</tolerance>\n";
|
||||
@ -1412,7 +1412,7 @@ class qformat_xml extends qformat_default {
|
||||
"</maximum>\n";
|
||||
$expout .= " <decimals>" . $this->writetext($def->decimals) .
|
||||
"</decimals>\n";
|
||||
$expout .= " <itemcount>$def->itemcount</itemcount>\n";
|
||||
$expout .= " <itemcount>{$def->itemcount}</itemcount>\n";
|
||||
if ($def->itemcount > 0) {
|
||||
$expout .= " <dataset_items>\n";
|
||||
foreach ($def->items as $item) {
|
||||
@ -1479,7 +1479,7 @@ class qformat_xml extends qformat_default {
|
||||
public function write_answer($answer, $extra = '') {
|
||||
$percent = $answer->fraction * 100;
|
||||
$output = '';
|
||||
$output .= " <answer fraction=\"$percent\" {$this->format($answer->answerformat)}>\n";
|
||||
$output .= " <answer fraction=\"{$percent}\" {$this->format($answer->answerformat)}>\n";
|
||||
$output .= $this->writetext($answer->answer, 3);
|
||||
$output .= $this->write_files($answer->answerfiles);
|
||||
$output .= " <feedback {$this->format($answer->feedbackformat)}>\n";
|
||||
|
@ -53,10 +53,10 @@ class question_import_form extends moodleform {
|
||||
foreach ($fileformatnames as $shortname => $fileformatname) {
|
||||
$currentgrp1 = array();
|
||||
$currentgrp1[] = $mform->createElement('radio', 'format', '', $fileformatname, $shortname);
|
||||
$mform->addGroup($currentgrp1, "formathelp[$i]", '', array('<br />'), false);
|
||||
$mform->addGroup($currentgrp1, "formathelp[{$i}]", '', array('<br />'), false);
|
||||
|
||||
if (get_string_manager()->string_exists('pluginname_help', 'qformat_' . $shortname)) {
|
||||
$mform->addHelpButton("formathelp[$i]", 'pluginname', 'qformat_' . $shortname);
|
||||
$mform->addHelpButton("formathelp[{$i}]", 'pluginname', 'qformat_' . $shortname);
|
||||
}
|
||||
|
||||
$i++ ;
|
||||
|
@ -259,7 +259,7 @@ function question_preview_question_pluginfile($course, $context, $component,
|
||||
|
||||
$fs = get_file_storage();
|
||||
$relativepath = implode('/', $args);
|
||||
$fullpath = "/$context->id/$component/$filearea/$relativepath";
|
||||
$fullpath = "/{$context->id}/{$component}/{$filearea}/{$relativepath}";
|
||||
if (!$file = $fs->get_file_by_hash(sha1($fullpath)) or $file->is_directory()) {
|
||||
send_file_not_found();
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ if ($wizardnow !== '') {
|
||||
$mform = $qtypeobj->create_editing_form('question.php', $question, $category, $contexts, $formeditable);
|
||||
}
|
||||
$toform = fullclone($question); // send the question object and a few more parameters to the form
|
||||
$toform->category = "$category->id,$category->contextid";
|
||||
$toform->category = "{$category->id},{$category->contextid}";
|
||||
$toform->scrollpos = $scrollpos;
|
||||
if ($formeditable && $id){
|
||||
$toform->categorymoveto = $toform->category;
|
||||
@ -317,7 +317,7 @@ if ($mform->is_cancelled()) {
|
||||
$streditingmodule = get_string('editinga', 'moodle', $strmodule);
|
||||
$PAGE->navbar->add(get_string('modulenameplural', $cm->modname), new moodle_url('/mod/'.$cm->modname.'/index.php', array('id'=>$cm->course)));
|
||||
$PAGE->navbar->add(format_string($module->name), new moodle_url('/mod/'.$cm->modname.'/view.php', array('id'=>$cm->id)));
|
||||
if (stripos($returnurl, "$CFG->wwwroot/mod/{$cm->modname}/view.php")!== 0){
|
||||
if (stripos($returnurl, "{$CFG->wwwroot}/mod/{$cm->modname}/view.php")!== 0){
|
||||
//don't need this link if returnurl returns to view.php
|
||||
$PAGE->navbar->add($streditingmodule, $returnurl);
|
||||
}
|
||||
|
@ -75,12 +75,12 @@ class behat_question extends behat_question_base {
|
||||
|
||||
// Split in two checkings to give more feedback in case of exception.
|
||||
$exception = new ElementNotFoundException($this->getSession(), 'Question "' . $questiondescription . '" ');
|
||||
$questionxpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' qtext ')][contains(., $questiondescriptionliteral)]";
|
||||
$questionxpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' qtext ')][contains(., {$questiondescriptionliteral})]";
|
||||
$this->find('xpath', $questionxpath, $exception);
|
||||
|
||||
$exception = new ExpectationException('Question "' . $questiondescription . '" state is not "' . $state . '"', $this->getSession());
|
||||
$xpath = $questionxpath . "/ancestor::div[contains(concat(' ', normalize-space(@class), ' '), ' que ')]" .
|
||||
"/descendant::div[@class='state'][contains(., $stateliteral)]";
|
||||
"/descendant::div[@class='state'][contains(., {$stateliteral})]";
|
||||
$this->find('xpath', $xpath, $exception);
|
||||
}
|
||||
}
|
||||
|
@ -104,14 +104,14 @@ class question_dataset_dependent_definitions_form extends question_wizard_form {
|
||||
$this->qtypeobj->dataset_options($this->question, $datasetname);
|
||||
unset($options['0']); // Mandatory...
|
||||
$label = get_string('wildcard', 'qtype_calculated', $datasetname);
|
||||
$mform->addElement('select', "dataset[$key]", $label, $options);
|
||||
$mform->addElement('select', "dataset[{$key}]", $label, $options);
|
||||
if (isset($datadefscat[$datasetname])) {
|
||||
$mform->addElement('static', "there is a category",
|
||||
get_string('sharedwildcard', 'qtype_calculated', $datasetname),
|
||||
get_string('dataitemdefined', 'qtype_calculated',
|
||||
$datadefscat[$datasetname]));
|
||||
}
|
||||
$mform->setDefault("dataset[$key]", $selected);
|
||||
$mform->setDefault("dataset[{$key}]", $selected);
|
||||
$datasetmenus[$datasetname] = '';
|
||||
$key++;
|
||||
}
|
||||
@ -123,7 +123,7 @@ class question_dataset_dependent_definitions_form extends question_wizard_form {
|
||||
list($options, $selected) = $this->qtypeobj->dataset_options(
|
||||
$this->question, $datasetname, false);
|
||||
$label = get_string('wildcard', 'qtype_calculated', $datasetname);
|
||||
$mform->addElement('select', "dataset[$key]", $label, $options);
|
||||
$mform->addElement('select', "dataset[{$key}]", $label, $options);
|
||||
if (isset($datadefscat[$datasetname])) {
|
||||
$mform->addElement('static', "there is a category",
|
||||
get_string('sharedwildcard', 'qtype_calculated', $datasetname),
|
||||
@ -131,7 +131,7 @@ class question_dataset_dependent_definitions_form extends question_wizard_form {
|
||||
$datadefscat[$datasetname]));
|
||||
}
|
||||
|
||||
$mform->setDefault("dataset[$key]", $selected);
|
||||
$mform->setDefault("dataset[{$key}]", $selected);
|
||||
$datasetmenus[$datasetname] = '';
|
||||
$key++;
|
||||
}
|
||||
|
@ -146,16 +146,16 @@ class question_dataset_dependent_items_form extends question_wizard_form {
|
||||
} else {
|
||||
$name = get_string('wildcard', 'qtype_calculated', $datasetdef->name);
|
||||
}
|
||||
$mform->addElement('text', "number[$j]", $name);
|
||||
$mform->setType("number[$j]", PARAM_RAW); // This parameter will be validated in validation().
|
||||
$mform->addElement('text', "number[{$j}]", $name);
|
||||
$mform->setType("number[{$j}]", PARAM_RAW); // This parameter will be validated in validation().
|
||||
$this->qtypeobj->custom_generator_tools_part($mform, $idx, $j);
|
||||
$idx++;
|
||||
$mform->addElement('hidden', "definition[$j]");
|
||||
$mform->setType("definition[$j]", PARAM_RAW);
|
||||
$mform->addElement('hidden', "itemid[$j]");
|
||||
$mform->setType("itemid[$j]", PARAM_RAW);
|
||||
$mform->addElement('static', "divider[$j]", '', '<hr />');
|
||||
$mform->setType("divider[$j]", PARAM_RAW);
|
||||
$mform->addElement('hidden', "definition[{$j}]");
|
||||
$mform->setType("definition[{$j}]", PARAM_RAW);
|
||||
$mform->addElement('hidden', "itemid[{$j}]");
|
||||
$mform->setType("itemid[{$j}]", PARAM_RAW);
|
||||
$mform->addElement('static', "divider[{$j}]", '', '<hr />');
|
||||
$mform->setType("divider[{$j}]", PARAM_RAW);
|
||||
$j++;
|
||||
}
|
||||
|
||||
@ -218,14 +218,14 @@ class question_dataset_dependent_items_form extends question_wizard_form {
|
||||
$addremoveoptions = array();
|
||||
$addremoveoptions['1']='1';
|
||||
for ($i=10; $i<=100; $i+=10) {
|
||||
$addremoveoptions["$i"]="$i";
|
||||
$addremoveoptions["{$i}"] = "{$i}";
|
||||
}
|
||||
$showoptions = Array();
|
||||
$showoptions['1']='1';
|
||||
$showoptions['2']='2';
|
||||
$showoptions['5']='5';
|
||||
for ($i=10; $i<=100; $i+=10) {
|
||||
$showoptions["$i"]="$i";
|
||||
$showoptions["{$i}"] = "{$i}";
|
||||
}
|
||||
$mform->addElement('header', 'addhdr', get_string('add', 'moodle'));
|
||||
$mform->closeHeaderBefore('addhdr');
|
||||
@ -287,35 +287,35 @@ class question_dataset_dependent_items_form extends question_wizard_form {
|
||||
foreach ($this->datasetdefs as $defkey => $datasetdef) {
|
||||
if ($k > 0) {
|
||||
if ($datasetdef->category == 0 ) {
|
||||
$mform->addElement('text', "number[$j]",
|
||||
$mform->addElement('text', "number[{$j}]",
|
||||
get_string('wildcard', 'qtype_calculated', $datasetdef->name));
|
||||
} else {
|
||||
$mform->addElement('text', "number[$j]", get_string(
|
||||
$mform->addElement('text', "number[{$j}]", get_string(
|
||||
'sharedwildcard', 'qtype_calculated', $datasetdef->name));
|
||||
}
|
||||
|
||||
} else {
|
||||
$mform->addElement('hidden', "number[$j]" , '');
|
||||
$mform->addElement('hidden', "number[{$j}]" , '');
|
||||
}
|
||||
$mform->setType("number[$j]", PARAM_RAW); // This parameter will be validated in validation().
|
||||
$mform->addElement('hidden', "itemid[$j]");
|
||||
$mform->setType("itemid[$j]", PARAM_INT);
|
||||
$mform->setType("number[{$j}]", PARAM_RAW); // This parameter will be validated in validation().
|
||||
$mform->addElement('hidden', "itemid[{$j}]");
|
||||
$mform->setType("itemid[{$j}]", PARAM_INT);
|
||||
|
||||
$mform->addElement('hidden', "definition[$j]");
|
||||
$mform->setType("definition[$j]", PARAM_NOTAGS);
|
||||
$mform->addElement('hidden', "definition[{$j}]");
|
||||
$mform->setType("definition[{$j}]", PARAM_NOTAGS);
|
||||
$data[$datasetdef->name] =$datasetdef->items[$i]->value;
|
||||
|
||||
$j--;
|
||||
}
|
||||
if ('' != $strquestionlabel && ($k > 0 )) {
|
||||
// ... $this->outsidelimit || !empty($this->numbererrors ).
|
||||
$repeated[] = $mform->addElement('static', "answercomment[$i]", $strquestionlabel);
|
||||
$repeated[] = $mform->addElement('static', "answercomment[{$i}]", $strquestionlabel);
|
||||
// Decode equations in question text.
|
||||
$qtext = $this->qtypeobj->substitute_variables(
|
||||
$this->question->questiontext, $data);
|
||||
$textequations = $this->qtypeobj->find_math_equations($qtext);
|
||||
if ($textequations != '' && count($textequations) > 0 ) {
|
||||
$mform->addElement('static', "divider1[$j]", '',
|
||||
$mform->addElement('static', "divider1[{$j}]", '',
|
||||
'Formulas {=..} in question text');
|
||||
foreach ($textequations as $key => $equation) {
|
||||
if ($formulaerrors = qtype_calculated_find_formula_errors($equation)) {
|
||||
@ -324,7 +324,7 @@ class question_dataset_dependent_items_form extends question_wizard_form {
|
||||
eval('$str = '.$equation.';');
|
||||
}
|
||||
$equation = shorten_text($equation, 17, true);
|
||||
$mform->addElement('static', "textequation", "{=$equation}", "=".$str);
|
||||
$mform->addElement('static', "textequation", "{={$equation}}", "=".$str);
|
||||
}
|
||||
}
|
||||
|
||||
@ -408,9 +408,9 @@ class question_dataset_dependent_items_form extends question_wizard_form {
|
||||
$data = array();
|
||||
foreach ($this->datasetdefs as $defid => $datasetdef) {
|
||||
if (isset($datasetdef->items[$itemnumber])) {
|
||||
$formdata["number[$j]"] = $datasetdef->items[$itemnumber]->value;
|
||||
$formdata["definition[$j]"] = $defid;
|
||||
$formdata["itemid[$j]"] = $datasetdef->items[$itemnumber]->id;
|
||||
$formdata["number[{$j}]"] = $datasetdef->items[$itemnumber]->value;
|
||||
$formdata["definition[{$j}]"] = $defid;
|
||||
$formdata["itemid[{$j}]"] = $datasetdef->items[$itemnumber]->id;
|
||||
$data[$datasetdef->name] = $datasetdef->items[$itemnumber]->value;
|
||||
}
|
||||
$j--;
|
||||
@ -438,15 +438,15 @@ class question_dataset_dependent_items_form extends question_wizard_form {
|
||||
foreach ($this->datasetdefs as $defid => $datasetdef) {
|
||||
if (!optional_param('updatedatasets', false, PARAM_BOOL) &&
|
||||
!optional_param('updateanswers', false, PARAM_BOOL)) {
|
||||
$formdata["number[$j]"] = $this->qtypeobj->generate_dataset_item(
|
||||
$formdata["number[{$j}]"] = $this->qtypeobj->generate_dataset_item(
|
||||
$datasetdef->options);
|
||||
} else {
|
||||
$formdata["number[$j]"] = $this->_form->getElementValue("number[$j]");
|
||||
$formdata["number[{$j}]"] = $this->_form->getElementValue("number[{$j}]");
|
||||
}
|
||||
$formdata["definition[$j]"] = $defid;
|
||||
$formdata["itemid[$j]"] = isset($datasetdef->items[$itemnumber]) ?
|
||||
$formdata["definition[{$j}]"] = $defid;
|
||||
$formdata["itemid[{$j}]"] = isset($datasetdef->items[$itemnumber]) ?
|
||||
$datasetdef->items[$itemnumber]->id : 0;
|
||||
$data[$datasetdef->name] = $formdata["number[$j]"];
|
||||
$data[$datasetdef->name] = $formdata["number[{$j}]"];
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
@ -459,9 +459,9 @@ class question_dataset_dependent_items_form extends question_wizard_form {
|
||||
$itemnumber = $this->noofitems + 1;
|
||||
foreach ($this->datasetdefs as $defid => $datasetdef) {
|
||||
if (isset($datasetdef->items[$itemnumber])) {
|
||||
$formdata["number[$j]"] = $datasetdef->items[$itemnumber]->value;
|
||||
$formdata["definition[$j]"] = $defid;
|
||||
$formdata["itemid[$j]"] = $datasetdef->items[$itemnumber]->id;
|
||||
$formdata["number[{$j}]"] = $datasetdef->items[$itemnumber]->value;
|
||||
$formdata["definition[{$j}]"] = $defid;
|
||||
$formdata["itemid[{$j}]"] = $datasetdef->items[$itemnumber]->id;
|
||||
$data[$datasetdef->name] = $datasetdef->items[$itemnumber]->value;
|
||||
}
|
||||
$j++;
|
||||
|
@ -199,9 +199,9 @@ class qtype_calculated_edit_form extends qtype_numerical_edit_form {
|
||||
$key = 0;
|
||||
foreach ($question->options->answers as $answer) {
|
||||
// See comment in the parent method about this hack.
|
||||
unset($this->_form->_defaultValues["tolerancetype[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerlength[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerformat[$key]"]);
|
||||
unset($this->_form->_defaultValues["tolerancetype[{$key}]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerlength[{$key}]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerformat[{$key}]"]);
|
||||
|
||||
$question->tolerancetype[$key] = $answer->tolerancetype;
|
||||
$question->correctanswerlength[$key] = $answer->correctanswerlength;
|
||||
|
@ -385,8 +385,8 @@ class qtype_calculated_variable_substituter {
|
||||
}
|
||||
} else {
|
||||
// Stick to plain numeric format.
|
||||
$answer *= "1e$p10";
|
||||
if (0.1 <= $answer / "1e$length") {
|
||||
$answer *= "1e{$p10}";
|
||||
if (0.1 <= $answer / "1e{$length}") {
|
||||
$x = $sign.$answer;
|
||||
} else {
|
||||
// Could be an idea to add some zeros here.
|
||||
|
@ -122,7 +122,7 @@ class qtype_calculated extends question_type {
|
||||
$def->number_of_items = $n;
|
||||
}
|
||||
}
|
||||
$datasetdefs["1-$r->category-$r->name"] = $def;
|
||||
$datasetdefs["1-{$r->category}-{$r->name}"] = $def;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -407,11 +407,11 @@ class qtype_calculated extends question_type {
|
||||
// See where we're coming from.
|
||||
switch($form->wizardpage) {
|
||||
case 'question':
|
||||
require("$CFG->dirroot/question/type/calculated/datasetdefinitions.php");
|
||||
require("{$CFG->dirroot}/question/type/calculated/datasetdefinitions.php");
|
||||
break;
|
||||
case 'datasetdefinitions':
|
||||
case 'datasetitems':
|
||||
require("$CFG->dirroot/question/type/calculated/datasetitems.php");
|
||||
require("{$CFG->dirroot}/question/type/calculated/datasetitems.php");
|
||||
break;
|
||||
default:
|
||||
print_error('invalidwizardpage', 'question');
|
||||
@ -435,15 +435,15 @@ class qtype_calculated extends question_type {
|
||||
// See where we're coming from.
|
||||
switch($wizardnow) {
|
||||
case 'datasetdefinitions':
|
||||
require("$CFG->dirroot/question/type/calculated/datasetdefinitions_form.php");
|
||||
require("{$CFG->dirroot}/question/type/calculated/datasetdefinitions_form.php");
|
||||
$mform = new question_dataset_dependent_definitions_form(
|
||||
"$submiturl?wizardnow=datasetdefinitions", $question);
|
||||
"{$submiturl}?wizardnow=datasetdefinitions", $question);
|
||||
break;
|
||||
case 'datasetitems':
|
||||
require("$CFG->dirroot/question/type/calculated/datasetitems_form.php");
|
||||
require("{$CFG->dirroot}/question/type/calculated/datasetitems_form.php");
|
||||
$regenerate = optional_param('forceregeneration', false, PARAM_BOOL);
|
||||
$mform = new question_dataset_dependent_items_form(
|
||||
"$submiturl?wizardnow=datasetitems", $question, $regenerate);
|
||||
"{$submiturl}?wizardnow=datasetitems", $question, $regenerate);
|
||||
break;
|
||||
default:
|
||||
print_error('invalidwizardpage', 'question');
|
||||
@ -755,22 +755,22 @@ class qtype_calculated extends question_type {
|
||||
public function custom_generator_tools_part($mform, $idx, $j) {
|
||||
|
||||
$minmaxgrp = array();
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmin[$idx]",
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmin[{$idx}]",
|
||||
get_string('calcmin', 'qtype_calculated'));
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmax[$idx]",
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmax[{$idx}]",
|
||||
get_string('calcmax', 'qtype_calculated'));
|
||||
$mform->addGroup($minmaxgrp, 'minmaxgrp',
|
||||
get_string('minmax', 'qtype_calculated'), ' - ', false);
|
||||
$mform->setType("calcmin[$idx]", PARAM_FLOAT);
|
||||
$mform->setType("calcmax[$idx]", PARAM_FLOAT);
|
||||
$mform->setType("calcmin[{$idx}]", PARAM_FLOAT);
|
||||
$mform->setType("calcmax[{$idx}]", PARAM_FLOAT);
|
||||
|
||||
$precisionoptions = range(0, 10);
|
||||
$mform->addElement('select', "calclength[$idx]",
|
||||
$mform->addElement('select', "calclength[{$idx}]",
|
||||
get_string('calclength', 'qtype_calculated'), $precisionoptions);
|
||||
|
||||
$distriboptions = array('uniform' => get_string('uniform', 'qtype_calculated'),
|
||||
'loguniform' => get_string('loguniform', 'qtype_calculated'));
|
||||
$mform->addElement('select', "calcdistribution[$idx]",
|
||||
$mform->addElement('select', "calcdistribution[{$idx}]",
|
||||
get_string('calcdistribution', 'qtype_calculated'), $distriboptions);
|
||||
}
|
||||
|
||||
@ -779,11 +779,11 @@ class qtype_calculated extends question_type {
|
||||
foreach ($datasetdefs as $datasetdef) {
|
||||
if (preg_match('~^(uniform|loguniform):([^:]*):([^:]*):([0-9]*)$~',
|
||||
$datasetdef->options, $regs)) {
|
||||
$defid = "$datasetdef->type-$datasetdef->category-$datasetdef->name";
|
||||
$formdata["calcdistribution[$idx]"] = $regs[1];
|
||||
$formdata["calcmin[$idx]"] = $regs[2];
|
||||
$formdata["calcmax[$idx]"] = $regs[3];
|
||||
$formdata["calclength[$idx]"] = $regs[4];
|
||||
$defid = "{$datasetdef->type}-{$datasetdef->category}-{$datasetdef->name}";
|
||||
$formdata["calcdistribution[{$idx}]"] = $regs[1];
|
||||
$formdata["calcmin[{$idx}]"] = $regs[2];
|
||||
$formdata["calcmax[{$idx}]"] = $regs[3];
|
||||
$formdata["calclength[{$idx}]"] = $regs[4];
|
||||
}
|
||||
$idx++;
|
||||
}
|
||||
@ -794,7 +794,7 @@ class qtype_calculated extends question_type {
|
||||
global $OUTPUT;
|
||||
if (preg_match('~^(uniform|loguniform):([^:]*):([^:]*):([0-9]*)$~',
|
||||
$datasetdef->options, $regs)) {
|
||||
$defid = "$datasetdef->type-$datasetdef->category-$datasetdef->name";
|
||||
$defid = "{$datasetdef->type}-{$datasetdef->category}-{$datasetdef->name}";
|
||||
for ($i = 0; $i<10; ++$i) {
|
||||
$lengthoptions[$i] = get_string(($regs[1] == 'uniform'
|
||||
? 'decimals'
|
||||
@ -810,10 +810,10 @@ class qtype_calculated extends question_type {
|
||||
'menucalcdistribution', false, array('class' => 'accesshide'));
|
||||
$menu2 .= html_writer::select($options, 'calcdistribution[]', $regs[1], null);
|
||||
return '<input type="submit" onclick="'
|
||||
. "getElementById('addform').regenerateddefid.value='$defid'; return true;"
|
||||
. "getElementById('addform').regenerateddefid.value='{$defid}'; return true;"
|
||||
.'" value="'. get_string('generatevalue', 'qtype_calculated') . '"/><br/>'
|
||||
. '<input type="text" size="3" name="calcmin[]" '
|
||||
. " value=\"$regs[2]\"/> & <input name=\"calcmax[]\" "
|
||||
. " value=\"{$regs[2]}\"/> & <input name=\"calcmax[]\" "
|
||||
. ' type="text" size="3" value="' . $regs[3] .'"/> '
|
||||
. $menu1 . '<br/>'
|
||||
. $menu2;
|
||||
@ -989,7 +989,7 @@ class qtype_calculated extends question_type {
|
||||
// Fix regenerate for this datadefs.
|
||||
$defregenerate = 0;
|
||||
if ($synchronize &&
|
||||
!empty ($fromform->nextpageparam["datasetregenerate[$datasetdef->name"])) {
|
||||
!empty ($fromform->nextpageparam["datasetregenerate[{$datasetdef->name}"])) {
|
||||
$defregenerate = 1;
|
||||
} else if (!$synchronize &&
|
||||
(($regenerate == 1 && $datasetdef->category == 0) ||$regenerate == 2)) {
|
||||
@ -1124,7 +1124,7 @@ class qtype_calculated extends question_type {
|
||||
}
|
||||
if ($answer->min === '') {
|
||||
// This should mean that something is wrong.
|
||||
$comment->stranswers[$key] = " $formattedanswer->answer".'<br/><br/>';
|
||||
$comment->stranswers[$key] = " {$formattedanswer->answer}".'<br/><br/>';
|
||||
} else if ($formula === '*') {
|
||||
$comment->stranswers[$key] = $formula . ' = ' .
|
||||
get_string('anyvalue', 'qtype_calculated') . '<br/><br/><br/>';
|
||||
@ -1179,7 +1179,7 @@ class qtype_calculated extends question_type {
|
||||
}
|
||||
if (!$selected) {
|
||||
if ($mandatory) {
|
||||
$selected = "1-0-$name"; // Default.
|
||||
$selected = "1-0-{$name}"; // Default.
|
||||
} else {
|
||||
$selected = '0'; // Default.
|
||||
}
|
||||
@ -1271,7 +1271,7 @@ class qtype_calculated extends question_type {
|
||||
ORDER BY i.id";
|
||||
if ($records = $DB->get_records_sql($sql, array($questionid))) {
|
||||
foreach ($records as $r) {
|
||||
$datasetdefs["$r->type-$r->category-$r->name"] = $r;
|
||||
$datasetdefs["{$r->type}-{$r->category}-{$r->name}"] = $r;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1514,8 +1514,8 @@ class qtype_calculated extends question_type {
|
||||
$options['0'] = get_string($prefix.'nodataset', $langfile);
|
||||
// New question no local.
|
||||
if (!isset($form->id) || $form->id == 0) {
|
||||
$key = "$type-0-$name";
|
||||
$options[$key] = get_string($prefix."newlocal$type", $langfile);
|
||||
$key = "{$type}-0-{$name}";
|
||||
$options[$key] = get_string($prefix."newlocal{$type}", $langfile);
|
||||
$currentdatasetdef = new stdClass();
|
||||
$currentdatasetdef->type = '0';
|
||||
} else {
|
||||
@ -1528,12 +1528,12 @@ class qtype_calculated extends question_type {
|
||||
$currentdatasetdef = new stdClass();
|
||||
$currentdatasetdef->type = '0';
|
||||
}
|
||||
$key = "$type-0-$name";
|
||||
$key = "{$type}-0-{$name}";
|
||||
if ($currentdatasetdef->type == $type
|
||||
and $currentdatasetdef->category == 0) {
|
||||
$options[$key] = get_string($prefix."keptlocal$type", $langfile);
|
||||
$options[$key] = get_string($prefix."keptlocal{$type}", $langfile);
|
||||
} else {
|
||||
$options[$key] = get_string($prefix."newlocal$type", $langfile);
|
||||
$options[$key] = get_string($prefix."newlocal{$type}", $langfile);
|
||||
}
|
||||
}
|
||||
// Construct question category options.
|
||||
@ -1546,21 +1546,21 @@ class qtype_calculated extends question_type {
|
||||
AND a.category = ?
|
||||
AND a.name = ?", array($form->category, $name));
|
||||
$type = 1;
|
||||
$key = "$type-$form->category-$name";
|
||||
$key = "{$type}-{$form->category}-{$name}";
|
||||
if (!empty($categorydatasetdefs)) {
|
||||
// There is at least one with the same name.
|
||||
if (isset($form->id) && isset($categorydatasetdefs[$form->id])) {
|
||||
// It is already used by this question.
|
||||
$options[$key] = get_string($prefix."keptcategory$type", $langfile);
|
||||
$options[$key] = get_string($prefix."keptcategory{$type}", $langfile);
|
||||
} else {
|
||||
$options[$key] = get_string($prefix."existingcategory$type", $langfile);
|
||||
$options[$key] = get_string($prefix."existingcategory{$type}", $langfile);
|
||||
}
|
||||
} else {
|
||||
$options[$key] = get_string($prefix."newcategory$type", $langfile);
|
||||
$options[$key] = get_string($prefix."newcategory{$type}", $langfile);
|
||||
}
|
||||
// All done!
|
||||
return array($options, $currentdatasetdef->type
|
||||
? "$currentdatasetdef->type-$currentdatasetdef->category-$name"
|
||||
? "{$currentdatasetdef->type}-{$currentdatasetdef->category}-{$name}"
|
||||
: '');
|
||||
}
|
||||
|
||||
@ -1590,8 +1590,8 @@ class qtype_calculated extends question_type {
|
||||
WHERE i.id = d.datasetdefinition AND i.category = ?";
|
||||
if ($records = $DB->get_records_sql($sql, array($form->category))) {
|
||||
foreach ($records as $r) {
|
||||
if (!isset ($datasetdefs["$r->name"])) {
|
||||
$datasetdefs["$r->name"] = $r->itemcount;
|
||||
if (!isset ($datasetdefs["{$r->name}"])) {
|
||||
$datasetdefs["{$r->name}"] = $r->itemcount;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1627,14 +1627,14 @@ class qtype_calculated extends question_type {
|
||||
$sql1 = "SELECT q.*
|
||||
FROM {question} q
|
||||
WHERE q.id = ?";
|
||||
if (!isset ($datasetdefs["$r->type-$r->category-$r->name"])) {
|
||||
$datasetdefs["$r->type-$r->category-$r->name"] = $r;
|
||||
if (!isset ($datasetdefs["{$r->type}-{$r->category}-{$r->name}"])) {
|
||||
$datasetdefs["{$r->type}-{$r->category}-{$r->name}"] = $r;
|
||||
}
|
||||
if ($questionb = $DB->get_records_sql($sql1, array($r->question))) {
|
||||
if (!isset ($datasetdefs["$r->type-$r->category-$r->name"]->questions[$r->question])) {
|
||||
$datasetdefs["$r->type-$r->category-$r->name"]->questions[$r->question] = new stdClass();
|
||||
if (!isset ($datasetdefs["{$r->type}-{$r->category}-{$r->name}"]->questions[$r->question])) {
|
||||
$datasetdefs["{$r->type}-{$r->category}-{$r->name}"]->questions[$r->question] = new stdClass();
|
||||
}
|
||||
$datasetdefs["$r->type-$r->category-$r->name"]->questions[
|
||||
$datasetdefs["{$r->type}-{$r->category}-{$r->name}"]->questions[
|
||||
$r->question]->name = $questionb[$r->question]->name;
|
||||
}
|
||||
}
|
||||
@ -1644,20 +1644,20 @@ class qtype_calculated extends question_type {
|
||||
|
||||
$text = "<table width=\"100%\" border=\"1\"><tr>
|
||||
<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\">$namestr</th>
|
||||
scope=\"col\">{$namestr}</th>
|
||||
<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\">$rangeofvaluestr</th>
|
||||
scope=\"col\">{$rangeofvaluestr}</th>
|
||||
<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\">$itemscountstr</th>
|
||||
scope=\"col\">{$itemscountstr}</th>
|
||||
<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\">$questionusingstr</th>
|
||||
scope=\"col\">{$questionusingstr}</th>
|
||||
</tr>";
|
||||
foreach ($datasetdefs as $datasetdef) {
|
||||
list($distribution, $min, $max, $dec) = explode(':', $datasetdef->options, 4);
|
||||
$text .= "<tr>
|
||||
<td valign=\"top\" align=\"center\">$datasetdef->name</td>
|
||||
<td align=\"center\" valign=\"top\">$min <strong>-</strong> $max</td>
|
||||
<td align=\"right\" valign=\"top\">$datasetdef->itemcount </td>
|
||||
<td valign=\"top\" align=\"center\">{$datasetdef->name}</td>
|
||||
<td align=\"center\" valign=\"top\">{$min} <strong>-</strong> $max</td>
|
||||
<td align=\"right\" valign=\"top\">{$datasetdef->itemcount} </td>
|
||||
<td align=\"left\">";
|
||||
foreach ($datasetdef->questions as $qu) {
|
||||
// Limit the name length displayed.
|
||||
@ -1667,7 +1667,7 @@ class qtype_calculated extends question_type {
|
||||
} else {
|
||||
$qu->name = '';
|
||||
}
|
||||
$text .= " $qu->name <br/>";
|
||||
$text .= " {$qu->name} <br/>";
|
||||
}
|
||||
$text .= "</td></tr>";
|
||||
}
|
||||
@ -1702,7 +1702,7 @@ class qtype_calculated extends question_type {
|
||||
WHERE i.id = d.datasetdefinition AND i.category = ?";
|
||||
if ($records = $DB->get_records_sql($sql, array($category))) {
|
||||
foreach ($records as $r) {
|
||||
$key = "$r->type-$r->category-$r->name";
|
||||
$key = "{$r->type}-{$r->category}-{$r->name}";
|
||||
$sql1 = "SELECT q.*
|
||||
FROM {question} q
|
||||
WHERE q.id = ?";
|
||||
@ -1723,11 +1723,11 @@ class qtype_calculated extends question_type {
|
||||
|
||||
$text = "<table width=\"100%\" border=\"1\"><tr>
|
||||
<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\">$namestr</th>";
|
||||
scope=\"col\">{$namestr}</th>";
|
||||
$text .= "<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\">$itemscountstr</th>";
|
||||
scope=\"col\">{$itemscountstr}</th>";
|
||||
$text .= "<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\"> $questionusingstr </th>";
|
||||
scope=\"col\"> {$questionusingstr} </th>";
|
||||
$text .= "<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
scope=\"col\">Quiz</th>";
|
||||
$text .= "<th style=\"white-space:nowrap;\" class=\"header\"
|
||||
@ -1737,9 +1737,9 @@ class qtype_calculated extends question_type {
|
||||
$count = count($datasetdef->questions);
|
||||
$text .= "<tr>
|
||||
<td style=\"white-space:nowrap;\" valign=\"top\"
|
||||
align=\"center\" rowspan=\"$count\"> $datasetdef->name </td>
|
||||
align=\"center\" rowspan=\"{$count}\"> {$datasetdef->name} </td>
|
||||
<td align=\"right\" valign=\"top\"
|
||||
rowspan=\"$count\">$datasetdef->itemcount</td>";
|
||||
rowspan=\"{$count}\">{$datasetdef->itemcount}</td>";
|
||||
$line = 0;
|
||||
foreach ($datasetdef->questions as $qu) {
|
||||
// Limit the name length displayed.
|
||||
@ -1753,7 +1753,7 @@ class qtype_calculated extends question_type {
|
||||
$text .= "<tr>";
|
||||
}
|
||||
$line++;
|
||||
$text .= "<td align=\"left\" style=\"white-space:nowrap;\">$qu->name</td>";
|
||||
$text .= "<td align=\"left\" style=\"white-space:nowrap;\">{$qu->name}</td>";
|
||||
// TODO MDL-43779 should not have quiz-specific code here.
|
||||
$nbofquiz = $DB->count_records('quiz_slots', array('questionid' => $qu->id));
|
||||
$nbofattempts = $DB->count_records_sql("
|
||||
@ -1763,8 +1763,8 @@ class qtype_calculated extends question_type {
|
||||
WHERE slot.questionid = ?
|
||||
AND quiza.preview = 0", array($qu->id));
|
||||
if ($nbofquiz > 0) {
|
||||
$text .= "<td align=\"center\">$nbofquiz</td>";
|
||||
$text .= "<td align=\"center\">$nbofattempts";
|
||||
$text .= "<td align=\"center\">{$nbofquiz}</td>";
|
||||
$text .= "<td align=\"center\">{$nbofattempts}";
|
||||
} else {
|
||||
$text .= "<td align=\"center\">0</td>";
|
||||
$text .= "<td align=\"left\"><br/>";
|
||||
@ -1915,8 +1915,8 @@ function qtype_calculated_calculate_answer($formula, $individualdata,
|
||||
}
|
||||
} else {
|
||||
// Stick to plain numeric format.
|
||||
$answer *= "1e$p10";
|
||||
if (0.1 <= $answer / "1e$answerlength") {
|
||||
$answer *= "1e{$p10}";
|
||||
if (0.1 <= $answer / "1e{$answerlength}") {
|
||||
$calculated->answer = $sign.$answer;
|
||||
} else {
|
||||
// Could be an idea to add some zeros here.
|
||||
@ -1957,11 +1957,11 @@ function qtype_calculated_find_formula_errors($formula) {
|
||||
$formula = strtolower(str_replace(' ', '', $formula));
|
||||
|
||||
$safeoperatorchar = '-+/*%>:^\~<?=&|!'; /* */
|
||||
$operatorornumber = "[$safeoperatorchar.0-9eE]";
|
||||
$operatorornumber = "[{$safeoperatorchar}.0-9eE]";
|
||||
|
||||
while (preg_match("~(^|[$safeoperatorchar,(])([a-z0-9_]*)" .
|
||||
"\\(($operatorornumber+(,$operatorornumber+((,$operatorornumber+)+)?)?)?\\)~",
|
||||
$formula, $regs)) {
|
||||
while (preg_match("~(^|[{$safeoperatorchar},(])([a-z0-9_]*)" .
|
||||
"\\(({$operatorornumber}+(,{$operatorornumber}+((,{$operatorornumber}+)+)?)?)?\\)~",
|
||||
$formula, $regs)) {
|
||||
switch ($regs[2]) {
|
||||
// Simple parenthesis.
|
||||
case '':
|
||||
@ -2022,11 +2022,11 @@ function qtype_calculated_find_formula_errors($formula) {
|
||||
$formula = str_replace($regs[0], $regs[1] . '1', $formula);
|
||||
} else {
|
||||
// The function call starts the formula.
|
||||
$formula = preg_replace("~^$regs[2]\\([^)]*\\)~", '1', $formula);
|
||||
$formula = preg_replace("~^{$regs[2]}\\([^)]*\\)~", '1', $formula);
|
||||
}
|
||||
}
|
||||
|
||||
if (preg_match("~[^$safeoperatorchar.0-9eE]+~", $formula, $regs)) {
|
||||
if (preg_match("~[^{$safeoperatorchar}.0-9eE]+~", $formula, $regs)) {
|
||||
return get_string('illegalformulasyntax', 'qtype_calculated', $regs[0]);
|
||||
} else {
|
||||
// Formula just might be valid.
|
||||
|
@ -167,12 +167,12 @@ class qtype_calculatedmulti_edit_form extends question_edit_form {
|
||||
$mform->setType('nounits', PARAM_INT);
|
||||
$mform->setConstants(array('nounits'=>$nounits));
|
||||
for ($i = 0; $i < $nounits; $i++) {
|
||||
$mform->addElement('hidden', 'unit'."[$i]",
|
||||
optional_param("unit[$i]", '', PARAM_NOTAGS));
|
||||
$mform->setType('unit'."[$i]", PARAM_NOTAGS);
|
||||
$mform->addElement('hidden', 'multiplier'."[$i]",
|
||||
optional_param("multiplier[$i]", '', PARAM_FLOAT));
|
||||
$mform->setType("multiplier[$i]", PARAM_FLOAT);
|
||||
$mform->addElement('hidden', 'unit'."[{$i}]",
|
||||
optional_param("unit[{$i}]", '', PARAM_NOTAGS));
|
||||
$mform->setType('unit'."[{$i}]", PARAM_NOTAGS);
|
||||
$mform->addElement('hidden', 'multiplier'."[{$i}]",
|
||||
optional_param("multiplier[{$i}]", '', PARAM_FLOAT));
|
||||
$mform->setType("multiplier[{$i}]", PARAM_FLOAT);
|
||||
}
|
||||
|
||||
$this->add_combined_feedback_fields(true);
|
||||
@ -217,10 +217,10 @@ class qtype_calculatedmulti_edit_form extends question_edit_form {
|
||||
$key = 0;
|
||||
foreach ($question->options->answers as $answer) {
|
||||
// See comment in the parent method about this hack.
|
||||
unset($this->_form->_defaultValues["tolerance[$key]"]);
|
||||
unset($this->_form->_defaultValues["tolerancetype[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerlength[$key]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerformat[$key]"]);
|
||||
unset($this->_form->_defaultValues["tolerance[{$key}]"]);
|
||||
unset($this->_form->_defaultValues["tolerancetype[{$key}]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerlength[{$key}]"]);
|
||||
unset($this->_form->_defaultValues["correctanswerformat[{$key}]"]);
|
||||
|
||||
$question->tolerance[$key] = $answer->tolerance;
|
||||
$question->tolerancetype[$key] = $answer->tolerancetype;
|
||||
|
@ -202,8 +202,8 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
// Detect new datasets.
|
||||
$newdataset = false;
|
||||
foreach ($mandatorydatasets as $datasetname) {
|
||||
if (!isset($this->datasetdefs["1-0-$datasetname"])) {
|
||||
$key = "1-0-$datasetname";
|
||||
if (!isset($this->datasetdefs["1-0-{$datasetname}"])) {
|
||||
$key = "1-0-{$datasetname}";
|
||||
$this->datasetdefs[$key] = new stdClass();
|
||||
$this->datasetdefs[$key]->type = 1;
|
||||
$this->datasetdefs[$key]->category = 0;
|
||||
@ -211,7 +211,7 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
$this->datasetdefs[$key]->options = "uniform:1.0:10.0:1";
|
||||
$newdataset = true;
|
||||
} else {
|
||||
$this->datasetdefs["1-0-$datasetname"]->name = $datasetname;
|
||||
$this->datasetdefs["1-0-{$datasetname}"]->name = $datasetname;
|
||||
}
|
||||
}
|
||||
// Remove obsolete datasets.
|
||||
@ -332,15 +332,15 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
if (!empty($this->datasetdefs)) {// Unnecessary test.
|
||||
$j = (($this->noofitems) * count($this->datasetdefs))+1;//
|
||||
foreach ($this->datasetdefs as $defkey => $datasetdef) {
|
||||
$mform->addElement('static', "na[$j]",
|
||||
$mform->addElement('static', "na[{$j}]",
|
||||
get_string('param', 'qtype_calculated', $datasetdef->name));
|
||||
$this->qtypeobj->custom_generator_tools_part($mform, $idx, $j);
|
||||
$mform->addElement('hidden', "datasetdef[$idx]");
|
||||
$mform->setType("datasetdef[$idx]", PARAM_RAW);
|
||||
$mform->addElement('hidden', "defoptions[$idx]");
|
||||
$mform->setType("defoptions[$idx]", PARAM_RAW);
|
||||
$mform->addElement('hidden', "datasetdef[{$idx}]");
|
||||
$mform->setType("datasetdef[{$idx}]", PARAM_RAW);
|
||||
$mform->addElement('hidden', "defoptions[{$idx}]");
|
||||
$mform->setType("defoptions[{$idx}]", PARAM_RAW);
|
||||
$idx++;
|
||||
$mform->addElement('static', "divider[$j]", '', '<hr />');
|
||||
$mform->addElement('static', "divider[{$j}]", '', '<hr />');
|
||||
$j++;
|
||||
}
|
||||
}
|
||||
@ -362,23 +362,23 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
|
||||
foreach ($this->datasetdefs as $defid => $datasetdef) {
|
||||
if (isset($datasetdef->items[$itemnumber])) {
|
||||
$this->formdata["definition[$j]"] = $defid;
|
||||
$this->formdata["itemid[$j]"] =
|
||||
$this->formdata["definition[{$j}]"] = $defid;
|
||||
$this->formdata["itemid[{$j}]"] =
|
||||
$datasetdef->items[$itemnumber]->id;
|
||||
$data[$datasetdef->name] = $datasetdef->items[$itemnumber]->value;
|
||||
$this->formdata["number[$j]"] = $number =
|
||||
$this->formdata["number[{$j}]"] = $number =
|
||||
$datasetdef->items[$itemnumber]->value;
|
||||
if (! is_numeric($number)) {
|
||||
$a = new stdClass();
|
||||
$a->name = '{'.$datasetdef->name.'}';
|
||||
$a->value = $datasetdef->items[$itemnumber]->value;
|
||||
if (stristr($number, ',')) {
|
||||
$this->numbererrors["number[$j]"] =
|
||||
$this->numbererrors["number[{$j}]"] =
|
||||
get_string('nocommaallowed', 'qtype_calculated');
|
||||
$numbererrors .= $this->numbererrors['number['.$j.']']."<br />";
|
||||
|
||||
} else {
|
||||
$this->numbererrors["number[$j]"] =
|
||||
$this->numbererrors["number[{$j}]"] =
|
||||
get_string('notvalidnumber', 'qtype_calculated', $a);
|
||||
$numbererrors .= $this->numbererrors['number['.$j.']']."<br />";
|
||||
}
|
||||
@ -393,7 +393,7 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
$a = new stdClass();
|
||||
$a->name = '{'.$datasetdef->name.'}';
|
||||
$a->value = $datasetdef->items[$itemnumber]->value;
|
||||
$this->numbererrors["number[$j]"] =
|
||||
$this->numbererrors["number[{$j}]"] =
|
||||
get_string('notvalidnumber', 'qtype_calculated', $a);
|
||||
$numbererrors .= $this->numbererrors['number['.$j.']']."<br />";
|
||||
}
|
||||
@ -430,7 +430,7 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
$data = array(); // Data for comment_on_datasetitems later.
|
||||
$idx = 1;
|
||||
foreach ($this->datasetdefs as $defid => $datasetdef) {
|
||||
$this->formdata["datasetdef[$idx]"] = $defid;
|
||||
$this->formdata["datasetdef[{$idx}]"] = $defid;
|
||||
$idx++;
|
||||
}
|
||||
$this->formdata = $this->qtypeobj->custom_generator_set_data(
|
||||
@ -440,14 +440,14 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
$addoptions = Array();
|
||||
$addoptions['1'] = '1';
|
||||
for ($i = 10; $i <= 100; $i += 10) {
|
||||
$addoptions["$i"] = "$i";
|
||||
$addoptions["{$i}"] = "{$i}";
|
||||
}
|
||||
$showoptions = Array();
|
||||
$showoptions['1'] = '1';
|
||||
$showoptions['2'] = '2';
|
||||
$showoptions['5'] = '5';
|
||||
for ($i = 10; $i <= 100; $i += 10) {
|
||||
$showoptions["$i"] = "$i";
|
||||
$showoptions["{$i}"] = "{$i}";
|
||||
}
|
||||
$mform->closeHeaderBefore('additemhdr');
|
||||
$addgrp = array();
|
||||
@ -495,38 +495,38 @@ class qtype_calculatedsimple_edit_form extends qtype_calculated_edit_form {
|
||||
for ($i = $this->noofitems; $i >= 1; $i--) {
|
||||
foreach ($this->datasetdefs as $defkey => $datasetdef) {
|
||||
if ($k > 0 || $this->outsidelimit || !empty($this->numbererrors)) {
|
||||
$mform->addElement('text', "number[$j]", get_string(
|
||||
$mform->addElement('text', "number[{$j}]", get_string(
|
||||
'wildcard', 'qtype_calculatedsimple', $datasetdef->name));
|
||||
$mform->setAdvanced("number[$j]", true);
|
||||
$mform->setAdvanced("number[{$j}]", true);
|
||||
if (!empty($this->numbererrors['number['.$j.']'])) {
|
||||
$mform->addElement('static', "numbercomment[$j]", '',
|
||||
$mform->addElement('static', "numbercomment[{$j}]", '',
|
||||
'<span class="error">' .
|
||||
$this->numbererrors['number['.$j.']'] . '</span>');
|
||||
$mform->setAdvanced("numbercomment[$j]", true);
|
||||
$mform->setAdvanced("numbercomment[{$j}]", true);
|
||||
}
|
||||
} else {
|
||||
$mform->addElement('hidden', "number[$j]", get_string(
|
||||
$mform->addElement('hidden', "number[{$j}]", get_string(
|
||||
'wildcard', 'qtype_calculatedsimple', $datasetdef->name));
|
||||
}
|
||||
$mform->setType("number[$j]", PARAM_RAW); // This parameter will be validated in validation().
|
||||
$mform->setType("number[{$j}]", PARAM_RAW); // This parameter will be validated in validation().
|
||||
|
||||
$mform->addElement('hidden', "itemid[$j]");
|
||||
$mform->setType("itemid[$j]", PARAM_INT);
|
||||
$mform->addElement('hidden', "itemid[{$j}]");
|
||||
$mform->setType("itemid[{$j}]", PARAM_INT);
|
||||
|
||||
$mform->addElement('hidden', "definition[$j]");
|
||||
$mform->setType("definition[$j]", PARAM_NOTAGS);
|
||||
$mform->addElement('hidden', "definition[{$j}]");
|
||||
$mform->setType("definition[{$j}]", PARAM_NOTAGS);
|
||||
|
||||
$j--;
|
||||
}
|
||||
if (!empty($strquestionlabel) && ($k > 0 || $this->outsidelimit ||
|
||||
!empty($this->numbererrors))) {
|
||||
$mform->addElement('static', "answercomment[$i]", "<b>" .
|
||||
$mform->addElement('static', "answercomment[{$i}]", "<b>" .
|
||||
get_string('setno', 'qtype_calculatedsimple', $i) .
|
||||
"</b> " . $strquestionlabel);
|
||||
|
||||
}
|
||||
if ($k > 0 || $this->outsidelimit || !empty($this->numbererrors)) {
|
||||
$mform->addElement('static', "divider1[$j]", '', '<hr />');
|
||||
$mform->addElement('static', "divider1[{$j}]", '', '<hr />');
|
||||
|
||||
}
|
||||
$k--;
|
||||
|
@ -243,23 +243,23 @@ class qtype_calculatedsimple extends qtype_calculated {
|
||||
public function custom_generator_tools_part($mform, $idx, $j) {
|
||||
|
||||
$minmaxgrp = array();
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmin[$idx]",
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmin[{$idx}]",
|
||||
get_string('calcmin', 'qtype_calculated'));
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmax[$idx]",
|
||||
$minmaxgrp[] = $mform->createElement('text', "calcmax[{$idx}]",
|
||||
get_string('calcmax', 'qtype_calculated'));
|
||||
$mform->addGroup($minmaxgrp, 'minmaxgrp',
|
||||
get_string('minmax', 'qtype_calculated'), ' - ', false);
|
||||
$mform->setType("calcmin[$idx]", PARAM_FLOAT);
|
||||
$mform->setType("calcmax[$idx]", PARAM_FLOAT);
|
||||
$mform->setType("calcmin[{$idx}]", PARAM_FLOAT);
|
||||
$mform->setType("calcmax[{$idx}]", PARAM_FLOAT);
|
||||
|
||||
$precisionoptions = range(0, 10);
|
||||
$mform->addElement('select', "calclength[$idx]",
|
||||
$mform->addElement('select', "calclength[{$idx}]",
|
||||
get_string('calclength', 'qtype_calculated'), $precisionoptions);
|
||||
|
||||
$distriboptions = array('uniform' => get_string('uniform', 'qtype_calculated'),
|
||||
'loguniform' => get_string('loguniform', 'qtype_calculated'));
|
||||
$mform->addElement('hidden', "calcdistribution[$idx]", 'uniform');
|
||||
$mform->setType("calcdistribution[$idx]", PARAM_INT);
|
||||
$mform->addElement('hidden', "calcdistribution[{$idx}]", 'uniform');
|
||||
$mform->setType("calcdistribution[{$idx}]", PARAM_INT);
|
||||
}
|
||||
|
||||
public function comment_header($answers) {
|
||||
@ -296,7 +296,7 @@ class qtype_calculatedsimple extends qtype_calculated {
|
||||
}
|
||||
if (!$selected) {
|
||||
if ($mandatory) {
|
||||
$selected = "1-0-$name"; // Default.
|
||||
$selected = "1-0-{$name}"; // Default.
|
||||
} else {
|
||||
$selected = "0"; // Default.
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ abstract class question_edit_form extends question_wizard_form {
|
||||
global $COURSE, $CFG, $DB, $PAGE;
|
||||
|
||||
$qtype = $this->qtype();
|
||||
$langfile = "qtype_$qtype";
|
||||
$langfile = "qtype_{$qtype}";
|
||||
|
||||
$mform = $this->_form;
|
||||
|
||||
@ -418,7 +418,7 @@ abstract class question_edit_form extends question_wizard_form {
|
||||
}
|
||||
$penaltyoptions = array();
|
||||
foreach ($penalties as $penalty) {
|
||||
$penaltyoptions["$penalty"] = (100 * $penalty) . '%';
|
||||
$penaltyoptions["{$penalty}"] = (100 * $penalty) . '%';
|
||||
}
|
||||
$mform->addElement('select', 'penalty',
|
||||
get_string('penaltyforeachincorrecttry', 'question'), $penaltyoptions);
|
||||
@ -560,7 +560,7 @@ abstract class question_edit_form extends question_wizard_form {
|
||||
// are using object notation here, so we will be setting
|
||||
// ->_defaultValues['fraction'][0]. That does not work, so we have
|
||||
// to unset ->_defaultValues['fraction[0]'].
|
||||
unset($this->_form->_defaultValues["fraction[$key]"]);
|
||||
unset($this->_form->_defaultValues["fraction[{$key}]"]);
|
||||
|
||||
// Prepare the feedback editor to display files in draft area.
|
||||
$draftitemid = file_get_submitted_draft_itemid('feedback['.$key.']');
|
||||
@ -613,7 +613,7 @@ abstract class question_edit_form extends question_wizard_form {
|
||||
foreach ($question->options->answers as $answer) {
|
||||
foreach ($extraanswerfields as $field) {
|
||||
// See hack comment in {@link data_preprocessing_answers()}.
|
||||
unset($this->_form->_defaultValues["$field[$key]"]);
|
||||
unset($this->_form->_defaultValues["{$field}[{$key}]"]);
|
||||
$extrafieldsdata[$field][$key] = $this->data_preprocessing_extra_answer_field($answer, $field);
|
||||
}
|
||||
$key++;
|
||||
|
@ -64,7 +64,7 @@ function xmldb_qtype_essay_upgrade($oldversion) {
|
||||
$sql");
|
||||
|
||||
foreach ($toupdate as $data) {
|
||||
$progressbar->update($done, $count, "Updating essay feedback ($done/$count).");
|
||||
$progressbar->update($done, $count, "Updating essay feedback ({$done}/{$count}).");
|
||||
upgrade_set_timeout(60);
|
||||
if ($data->generalfeedbackformat == $data->feedbackformat) {
|
||||
$DB->set_field('question', 'generalfeedback',
|
||||
|
@ -202,7 +202,7 @@ class qtype_match_question extends question_graded_automatically_with_countback
|
||||
} else if ($choicetochoiceno[$choice]) {
|
||||
$choiceselectvalue = $choicenotochoiceselectvalue[$choicetochoiceno[$choice]];
|
||||
} else {
|
||||
throw new coding_exception("Unknown choice $choice in matching question - {$this->name}.");
|
||||
throw new coding_exception("Unknown choice {$choice} in matching question - {$this->name}.");
|
||||
}
|
||||
$postdata[$this->field($shuffledstemno)] = $choiceselectvalue;
|
||||
}
|
||||
|
@ -296,7 +296,7 @@ class qtype_multianswer_edit_form extends question_edit_form {
|
||||
unset($wrapped->options->tolerance);
|
||||
}
|
||||
if ($subanswer->feedback) {
|
||||
$parsableanswerdef .= "#$subanswer->feedback";
|
||||
$parsableanswerdef .= "#{$subanswer->feedback}";
|
||||
}
|
||||
$separator = '~';
|
||||
}
|
||||
|
@ -396,23 +396,23 @@ function qtype_multianswer_extract_question($text) {
|
||||
$remainingalts = $answerregs[ANSWER_REGEX_ALTERNATIVES];
|
||||
while (preg_match('/~?'.ANSWER_ALTERNATIVE_REGEX.'/s', $remainingalts, $altregs)) {
|
||||
if ('=' == $altregs[ANSWER_ALTERNATIVE_REGEX_FRACTION]) {
|
||||
$wrapped->fraction["$answerindex"] = '1';
|
||||
$wrapped->fraction["{$answerindex}"] = '1';
|
||||
} else if ($percentile = $altregs[ANSWER_ALTERNATIVE_REGEX_PERCENTILE_FRACTION]) {
|
||||
$wrapped->fraction["$answerindex"] = .01 * $percentile;
|
||||
$wrapped->fraction["{$answerindex}"] = .01 * $percentile;
|
||||
} else {
|
||||
$wrapped->fraction["$answerindex"] = '0';
|
||||
$wrapped->fraction["{$answerindex}"] = '0';
|
||||
}
|
||||
if (isset($altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK])) {
|
||||
$feedback = html_entity_decode(
|
||||
$altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK], ENT_QUOTES, 'UTF-8');
|
||||
$feedback = str_replace('\}', '}', $feedback);
|
||||
$wrapped->feedback["$answerindex"]['text'] = str_replace('\#', '#', $feedback);
|
||||
$wrapped->feedback["$answerindex"]['format'] = FORMAT_HTML;
|
||||
$wrapped->feedback["$answerindex"]['itemid'] = '';
|
||||
$wrapped->feedback["{$answerindex}"]['text'] = str_replace('\#', '#', $feedback);
|
||||
$wrapped->feedback["{$answerindex}"]['format'] = FORMAT_HTML;
|
||||
$wrapped->feedback["{$answerindex}"]['itemid'] = '';
|
||||
} else {
|
||||
$wrapped->feedback["$answerindex"]['text'] = '';
|
||||
$wrapped->feedback["$answerindex"]['format'] = FORMAT_HTML;
|
||||
$wrapped->feedback["$answerindex"]['itemid'] = '';
|
||||
$wrapped->feedback["{$answerindex}"]['text'] = '';
|
||||
$wrapped->feedback["{$answerindex}"]['format'] = FORMAT_HTML;
|
||||
$wrapped->feedback["{$answerindex}"]['itemid'] = '';
|
||||
|
||||
}
|
||||
if (!empty($answerregs[ANSWER_REGEX_ANSWER_TYPE_NUMERICAL])
|
||||
@ -420,20 +420,20 @@ function qtype_multianswer_extract_question($text) {
|
||||
$altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER], $numregs)) {
|
||||
$wrapped->answer[] = $numregs[NUMERICAL_CORRECT_ANSWER];
|
||||
if (array_key_exists(NUMERICAL_ABS_ERROR_MARGIN, $numregs)) {
|
||||
$wrapped->tolerance["$answerindex"] =
|
||||
$wrapped->tolerance["{$answerindex}"] =
|
||||
$numregs[NUMERICAL_ABS_ERROR_MARGIN];
|
||||
} else {
|
||||
$wrapped->tolerance["$answerindex"] = 0;
|
||||
$wrapped->tolerance["{$answerindex}"] = 0;
|
||||
}
|
||||
} else { // Tolerance can stay undefined for non numerical questions.
|
||||
// Undo quoting done by the HTML editor.
|
||||
$answer = html_entity_decode(
|
||||
$altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER], ENT_QUOTES, 'UTF-8');
|
||||
$answer = str_replace('\}', '}', $answer);
|
||||
$wrapped->answer["$answerindex"] = str_replace('\#', '#', $answer);
|
||||
$wrapped->answer["{$answerindex}"] = str_replace('\#', '#', $answer);
|
||||
if ($wrapped->qtype == 'multichoice') {
|
||||
$wrapped->answer["$answerindex"] = array(
|
||||
'text' => $wrapped->answer["$answerindex"],
|
||||
$wrapped->answer["{$answerindex}"] = array(
|
||||
'text' => $wrapped->answer["{$answerindex}"],
|
||||
'format' => FORMAT_HTML,
|
||||
'itemid' => '');
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ class qtype_numerical_edit_form extends question_edit_form {
|
||||
$key = 0;
|
||||
foreach ($question->options->answers as $answer) {
|
||||
// See comment in the parent method about this hack.
|
||||
unset($this->_form->_defaultValues["tolerance[$key]"]);
|
||||
unset($this->_form->_defaultValues["tolerance[{$key}]"]);
|
||||
|
||||
$question->tolerance[$key] = $answer->tolerance;
|
||||
$key++;
|
||||
|
@ -433,7 +433,7 @@ class qtype_numerical extends question_type {
|
||||
$ans = new qtype_numerical_answer($answer->id, $answer->answer, $answer->fraction,
|
||||
$answer->feedback, $answer->feedbackformat, $answer->tolerance);
|
||||
list($min, $max) = $ans->get_tolerance_interval();
|
||||
$responseclass .= " ($min..$max)";
|
||||
$responseclass .= " ({$min}..{$max})";
|
||||
}
|
||||
|
||||
$responses[$aid] = new question_possible_response($responseclass,
|
||||
@ -569,12 +569,12 @@ class qtype_numerical_answer_processor {
|
||||
$decimalsre = $decsep . '(\d*)';
|
||||
$exponentre = '(?:e|E|(?:x|\*|×)10(?:\^|\*\*))([+-]?\d+)';
|
||||
|
||||
$numberbit = "$beforepointre(?:$decimalsre)?(?:$exponentre)?";
|
||||
$numberbit = "{$beforepointre}(?:{$decimalsre})?(?:{$exponentre})?";
|
||||
|
||||
if ($this->unitsbefore) {
|
||||
$this->regex = "/$numberbit$/";
|
||||
$this->regex = "/{$numberbit}$/";
|
||||
} else {
|
||||
$this->regex = "/^$numberbit/";
|
||||
$this->regex = "/^{$numberbit}/";
|
||||
}
|
||||
return $this->regex;
|
||||
}
|
||||
@ -645,9 +645,9 @@ class qtype_numerical_answer_processor {
|
||||
|
||||
$regex = '[+-]?(?:\d+(?:\\.\d*)?|\\.\d+)(?:e[-+]?\d+)?';
|
||||
if ($this->unitsbefore) {
|
||||
$regex = "/$regex$/";
|
||||
$regex = "/{$regex}$/";
|
||||
} else {
|
||||
$regex = "/^$regex/";
|
||||
$regex = "/^{$regex}/";
|
||||
}
|
||||
if (!preg_match($regex, $response, $matches)) {
|
||||
return array(null, null, null);
|
||||
|
@ -417,7 +417,7 @@ class question_type {
|
||||
}
|
||||
|
||||
if (!empty($result->notice)) {
|
||||
notice($result->notice, "question.php?id=$question->id");
|
||||
notice($result->notice, "question.php?id={$question->id}");
|
||||
}
|
||||
|
||||
if (!empty($result->noticeyesno)) {
|
||||
@ -1181,7 +1181,7 @@ class question_type {
|
||||
$expout='';
|
||||
foreach ($extraquestionfields as $field) {
|
||||
$exportedvalue = $format->xml_escape($question->options->$field);
|
||||
$expout .= " <$field>{$exportedvalue}</$field>\n";
|
||||
$expout .= " <{$field}>{$exportedvalue}</{$field}>\n";
|
||||
}
|
||||
|
||||
$extraanswersfields = $this->extra_answer_fields();
|
||||
|
@ -86,7 +86,7 @@ class qtype_random extends question_type {
|
||||
list($qcsql, $qcparams) = $DB->get_in_or_equal($categorylist);
|
||||
// TODO use in_or_equal for $otherquestionsinuse and $this->manualqtypes.
|
||||
return $DB->record_exists_select('question',
|
||||
"category $qcsql
|
||||
"category {$qcsql}
|
||||
AND parent = 0
|
||||
AND hidden = 0
|
||||
AND id NOT IN ($otherquestionsinuse)
|
||||
|
@ -227,7 +227,7 @@ class qtype_randomsamatch extends question_type {
|
||||
$extraquestionfields = $this->extra_question_fields();
|
||||
array_shift($extraquestionfields);
|
||||
foreach ($extraquestionfields as $extra) {
|
||||
$expout .= " <$extra>" . $question->options->$extra . "</$extra>\n";
|
||||
$expout .= " <{$extra}>" . $question->options->$extra . "</{$extra}>\n";
|
||||
}
|
||||
return $expout;
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ class qtype_shortanswer_edit_form extends question_edit_form {
|
||||
}
|
||||
} else if ($data['fraction'][$key] != 0 ||
|
||||
!html_is_blank($data['feedback'][$key]['text'])) {
|
||||
$errors["answeroptions[$key]"] = get_string('answermustbegiven', 'qtype_shortanswer');
|
||||
$errors["answeroptions[{$key}]"] = get_string('answermustbegiven', 'qtype_shortanswer');
|
||||
$answercount++;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user