Skip to content

Commit

Permalink
Merge branch 'wip-mdl-27964-MOODLE_20_STABLE' of git://github.com/raj…
Browse files Browse the repository at this point in the history
…eshtaneja/moodle into MOODLE_20_STABLE
  • Loading branch information
stronk7 committed Jun 29, 2011
2 parents abfe9db + 27beb68 commit fb654f6
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 34 deletions.
74 changes: 62 additions & 12 deletions mod/lesson/format.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ function lesson_save_question_options($question, $lesson) {
$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) {
Expand Down Expand Up @@ -113,7 +114,8 @@ function lesson_save_question_options($question, $lesson) {
$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;
Expand All @@ -139,12 +141,13 @@ function lesson_save_question_options($question, $lesson) {
$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);

Expand All @@ -154,12 +157,13 @@ function lesson_save_question_options($question, $lesson) {
$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);

Expand Down Expand Up @@ -191,8 +195,10 @@ function lesson_save_question_options($question, $lesson) {
$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) {
Expand Down Expand Up @@ -247,7 +253,8 @@ function lesson_save_question_options($question, $lesson) {
$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
Expand Down Expand Up @@ -309,14 +316,19 @@ function importprocess($filename, $lesson, $pageid) {
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;

$unsupportedquestions = 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 :
Expand All @@ -325,7 +337,9 @@ function importprocess($filename, $lesson, $pageid) {
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];
Expand Down Expand Up @@ -415,6 +429,27 @@ function importprocess($filename, $lesson, $pageid) {
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
Expand Down Expand Up @@ -484,7 +519,7 @@ function defaultquestion() {

$question = new stdClass();
$question->shuffleanswers = get_config('quiz', 'shuffleanswers');
$question->defaultgrade = 1;
$question->defaultmark = 1;
$question->image = "";
$question->usecase = 0;
$question->multiplier = array();
Expand All @@ -498,6 +533,11 @@ function defaultquestion() {
$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;
}

Expand All @@ -508,6 +548,16 @@ function importpostprocess() {
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);
}
}


12 changes: 8 additions & 4 deletions mod/lesson/import.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,13 @@

require_sesskey();

if (!$importfile = $mform->get_importfile_name()) {
print_error('uploadproblem', 'moodle');
}
$realfilename = $mform->get_new_filename('questionfile');
//TODO: Leave all imported questions in Questionimport for now.
$importfile = "{$CFG->dataroot}/temp/questionimport/{$realfilename}";
make_upload_directory('temp/questionimport');
if (!$result = $mform->save_file('questionfile', $importfile, true)) {
throw new moodle_exception('uploadproblem');
}

$formatclass = 'qformat_'.$data->format;
$formatclassfile = $CFG->dirroot.'/question/format/'.$data->format.'/format.php';
Expand Down Expand Up @@ -102,4 +106,4 @@
$mform->display();
}

echo $OUTPUT->footer();
echo $OUTPUT->footer();
55 changes: 37 additions & 18 deletions mod/lesson/import_form.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,30 +48,49 @@ public function definition() {
$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;
}
}

0 comments on commit fb654f6

Please sign in to comment.