$answer->timecreated = $timenow;
$answer->grade = $question->fraction[$key] * 100;
$answer->answer = $dataanswer;
- $answer->response = $question->feedback[$key];
+ $answer->response = $question->feedback[$key]['text'];
+ $answer->responseformat = $question->feedback[$key]['format'];
$answer->id = $DB->insert_record("lesson_answers", $answer);
$answers[] = $answer->id;
if ($question->fraction[$key] > $maxfraction) {
$max = $question->answer[$key] + $question->tolerance[$key];
$answer->answer = $min.":".$max;
// $answer->answer = $question->min[$key].":".$question->max[$key]; original line for min/max
- $answer->response = $question->feedback[$key];
+ $answer->response = $question->feedback[$key]['text'];
+ $answer->responseformat = $question->feedback[$key]['format'];
$answer->id = $DB->insert_record("lesson_answers", $answer);
$answers[] = $answer->id;
$answer->pageid = $question->id;
$answer->timecreated = $timenow;
$answer->answer = get_string("true", "quiz");
- $answer->grade = $question->answer * 100;
+ $answer->grade = $question->correctanswer * 100;
if ($answer->grade > 50 ) {
$answer->jumpto = LESSON_NEXTPAGE;
}
if (isset($question->feedbacktrue)) {
- $answer->response = $question->feedbacktrue;
+ $answer->response = $question->feedbacktrue['text'];
+ $answer->responseformat = $question->feedbacktrue['format'];
}
$DB->insert_record("lesson_answers", $answer);
$answer->pageid = $question->id;
$answer->timecreated = $timenow;
$answer->answer = get_string("false", "quiz");
- $answer->grade = (1 - (int)$question->answer) * 100;
+ $answer->grade = (1 - (int)$question->correctanswer) * 100;
if ($answer->grade > 50 ) {
$answer->jumpto = LESSON_NEXTPAGE;
}
if (isset($question->feedbackfalse)) {
- $answer->response = $question->feedbackfalse;
+ $answer->response = $question->feedbackfalse['text'];
+ $answer->responseformat = $question->feedbackfalse['format'];
}
$DB->insert_record("lesson_answers", $answer);
$answer->score = 1;
}
// end Replace
- $answer->answer = $dataanswer;
- $answer->response = $question->feedback[$key];
+ $answer->answer = $dataanswer['text'];
+ $answer->answerformat = $dataanswer['format'];
+ $answer->response = $question->feedback[$key]['text'];
+ $answer->responseformat = $question->feedback[$key]['format'];
$answer->id = $DB->insert_record("lesson_answers", $answer);
// for Sanity checks
if ($question->fraction[$key] > 0) {
$answertext = $question->subanswers[$key];
if (!empty($questiontext) and !empty($answertext)) {
$answer = clone($defaultanswer);
- $answer->answer = $questiontext;
+ $answer->answer = $questiontext['text'];
+ $answer->answerformat = $questiontext['format'];
$answer->response = $answertext;
if ($i == 0) {
// first answer contains the correct answer jump
return false;
}
- echo $OUTPUT->notification(get_string('importcount', 'lesson', sizeof($questions)));
+ //Avoid category as question type
+ echo $OUTPUT->notification(get_string('importcount', 'lesson',
+ $this->count_questions($questions)), 'notifysuccess');
$count = 0;
foreach ($questions as $question) { // Process and store each question
switch ($question->qtype) {
+ //TODO: Bad way to bypass category in data... Quickfix for MDL-27964
+ case 'category':
+ break;
// the good ones
case SHORTANSWER :
case NUMERICAL :
case MATCH :
$count++;
- echo "<hr><p><b>$count</b>. ".$question->questiontext."</p>";
+ //Show nice formated question in one line.
+ echo "<hr><p><b>$count</b>. ".$this->format_question_text($question)."</p>";
+
$newpage = new stdClass;
$newpage->lessonid = $lesson->id;
$newpage->qtype = $this->qtypeconvert[$question->qtype];
return true;
}
+ /**
+ * Count all non-category questions in the questions array.
+ *
+ * @param array questions An array of question objects.
+ * @return int The count.
+ *
+ */
+ protected function count_questions($questions) {
+ $count = 0;
+ if (!is_array($questions)) {
+ return $count;
+ }
+ foreach ($questions as $question) {
+ if (!is_object($question) || !isset($question->qtype) ||
+ ($question->qtype == 'category')) {
+ continue;
+ }
+ $count++;
+ }
+ return $count;
+ }
function readdata($filename) {
/// Returns complete file with an array, one item per line
$question = new stdClass();
$question->shuffleanswers = get_config('quiz', 'shuffleanswers');
- $question->defaultgrade = 1;
+ $question->defaultmark = 1;
$question->image = "";
$question->usecase = 0;
$question->multiplier = array();
$question->qoption = 0;
$question->layout = 1;
+ // this option in case the questiontypes class wants
+ // to know where the data came from
+ $question->export_process = true;
+ $question->import_process = true;
+
return $question;
}
return true;
}
+ /**
+ * Convert the question text to plain text, so it can safely be displayed
+ * during import to let the user see roughly what is going on.
+ */
+ protected function format_question_text($question) {
+ $formatoptions = new stdClass();
+ $formatoptions->noclean = true;
+ return html_to_text(format_text($question->questiontext,
+ $question->questiontextformat, $formatoptions), 0, false);
+ }
}
$mform->setType('format', 'text');
$mform->addRule('format', null, 'required');
- $mform->addElement('file', 'newfile', get_string('upload'), array('size'=>'50'));
- $mform->addRule('newfile', null, 'required');
-
- $this->add_action_buttons(null, get_string("uploadthisfile"));
+ //Using filemanager as filepicker
+ $mform->addElement('filepicker', 'questionfile', get_string('upload'));
+ $mform->addRule('questionfile', null, 'required', null, 'client');
+ $this->add_action_buttons(null, get_string("import"));
}
- public function get_importfile_name(){
- if ($this->is_submitted() and $this->is_validated()) {
- // return the temporary filename to process
- return $_FILES['newfile']['tmp_name'];
- }else{
- return NULL;
+ /**
+ * Checks that a file has been uploaded, and that it is of a plausible type.
+ * @param array $data the submitted data.
+ * @param array $errors the errors so far.
+ * @return array the updated errors.
+ */
+ protected function validate_uploaded_file($data, $errors) {
+ global $CFG;
+
+ if (empty($data['questionfile'])) {
+ $errors['questionfile'] = get_string('required');
+ return $errors;
+ }
+
+ $files = $this->get_draft_files('questionfile');
+ if (count($files) < 1) {
+ $errors['questionfile'] = get_string('required');
+ return $errors;
}
- }
- public function get_importfile_realname(){
- if ($this->is_submitted() and $this->is_validated()) {
- // return the temporary filename to process
- // TODO change this to use the files API properly.
- return $_FILES['newfile']['name'];
- }else{
- return NULL;
+ $formatfile = $CFG->dirroot.'/question/format/'.$data['format'].'/format.php';
+ if (!is_readable($formatfile)) {
+ throw new moodle_exception('formatnotfound', 'lesson', '', $data['format']);
}
+
+ require_once($formatfile);
+
+ $classname = 'qformat_' . $data['format'];
+ $qformat = new $classname();
+
+ return $errors;
}
+ public function validation($data, $files) {
+ $errors = parent::validation($data, $files);
+ $errors = $this->validate_uploaded_file($data, $errors);
+ return $errors;
+ }
}
\ No newline at end of file