1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * @package backup-convert 19 * @subpackage cc-library 20 * @copyright 2012 Darko Miletic <dmiletic@moodlerooms.com> 21 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 22 */ 23 24 require_once ('cc_converters.php'); 25 require_once ('cc_general.php'); 26 require_once ('cc_asssesment.php'); 27 require_once ('cc_assesment_truefalse.php'); 28 require_once ('cc_assesment_essay.php'); 29 require_once ('cc_assesment_sfib.php'); 30 31 class cc_converter_quiz extends cc_converter { 32 33 public function __construct(cc_i_item &$item, cc_i_manifest &$manifest, $rootpath, $path) { 34 $this->cc_type = cc_version11::assessment; 35 $this->defaultfile = 'quiz.xml'; 36 $this->defaultname = assesment11_resurce_file::deafultname; 37 parent::__construct($item, $manifest, $rootpath, $path); 38 } 39 40 public function convert($outdir) { 41 $rt = new assesment11_resurce_file(); 42 $title = $this->doc->nodeValue('/activity/quiz/name'); 43 $rt->set_title($title); 44 45 // Metadata. 46 $metadata = new cc_assesment_metadata(); 47 $rt->set_metadata($metadata); 48 $metadata->enable_feedback(); 49 $metadata->enable_hints(); 50 $metadata->enable_solutions(); 51 // Attempts. 52 $max_attempts = (int)$this->doc->nodeValue('/activity/quiz/attempts_number'); 53 if ($max_attempts > 0) { 54 // Qti does not support number of specific attempts bigger than 5 (??) 55 if ($max_attempts > 5) { 56 $max_attempts = cc_qti_values::unlimited; 57 } 58 $metadata->set_maxattempts($max_attempts); 59 } 60 // Time limit must be converted into minutes. 61 $timelimit = (int)floor((int)$this->doc->nodeValue('/activity/quiz/timelimit') / 60); 62 if ($timelimit > 0) { 63 $metadata->set_timelimit($timelimit); 64 $metadata->enable_latesubmissions(false); 65 } 66 67 $contextid = $this->doc->nodeValue('/activity/@contextid'); 68 $result = cc_helpers::process_linked_files( $this->doc->nodeValue('/activity/quiz/intro'), 69 $this->manifest, 70 $this->rootpath, 71 $contextid, 72 $outdir); 73 cc_assesment_helper::add_assesment_description($rt, $result[0], cc_qti_values::htmltype); 74 75 // Section. 76 $section = new cc_assesment_section(); 77 $rt->set_section($section); 78 79 // Process the actual questions. 80 $ndeps = cc_assesment_helper::process_questions($this->doc, 81 $this->manifest, 82 $section, 83 $this->rootpath, 84 $contextid, 85 $outdir); 86 if ($ndeps === false) { 87 // No exportable questions in quiz or quiz has no questions 88 // so just skip it. 89 return true; 90 } 91 // Store any additional dependencies. 92 $deps = array_merge($result[1], $ndeps); 93 94 // Store everything. 95 $this->store($rt, $outdir, $title, $deps); 96 return true; 97 } 98 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body