From: thepurpleblob Date: Wed, 7 Feb 2007 10:29:53 +0000 (+0000) Subject: MDL-8450 Added support for including question categories in a quiz export. Also a... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=f1abd39fe5a2d4ad5c3ffe2c1d30da4d9930222d;p=moodle.git MDL-8450 Added support for including question categories in a quiz export. Also a bit of format tidy up and fix a misshandled sesskey. --- diff --git a/question/export.php b/question/export.php index e53c088a90..294e12df02 100644 --- a/question/export.php +++ b/question/export.php @@ -2,7 +2,11 @@ /** * Export quiz questions into the given category * +<<<<<<< export.php * @version $Id$ +======= +* @version $Id$ +>>>>>>> 1.22.2.2 * @author Martin Dougiamas, Howard Miller, and many others. * {@link http://moodle.org} * @license http://www.gnu.org/copyleft/gpl.html GNU Public License @@ -12,10 +16,29 @@ require_once("../config.php"); require_once( "editlib.php" ); + // get parameters $categoryid = optional_param('category',0, PARAM_INT); + $cattofile = optional_param('cattofile',0, PARAM_BOOL); $courseid = required_param('courseid',PARAM_INT); - $format = optional_param('format','', PARAM_FILE ); $exportfilename = optional_param('exportfilename','',PARAM_FILE ); + $format = optional_param('format','', PARAM_FILE ); + + + // get display strings + $txt = new object; + $txt->category = get_string('category','quiz'); + $txt->download = get_string('download','quiz'); + $txt->downloadextra = get_string('downloadextra','quiz'); + $txt->exporterror = get_string('exporterror','quiz'); + $txt->exportname = get_string('exportname','quiz'); + $txt->exportquestions = get_string('exportquestions', 'quiz'); + $txt->fileformat = get_string('fileformat','quiz'); + $txt->exportcategory = get_string('exportcategory','quiz'); + $txt->modulename = get_string('modulename','quiz'); + $txt->modulenameplural = get_string('modulenameplural','quiz'); + $txt->nocategory = get_string('nocategory','quiz'); + $txt->tofile = get_string('tofile','quiz'); + if (! $course = get_record("course", "id", $courseid)) { error("Course does not exist!"); @@ -36,41 +59,33 @@ } if (! $categorycourse = get_record("course", "id", $category->course)) { - error( get_string('nocategory','quiz') ); + error( $txt->nocategory ); } require_login($course->id, false); + // check role capability $context = get_context_instance(CONTEXT_COURSE, $course->id); require_capability('moodle/question:export', $context); // ensure the files area exists for this course make_upload_directory( "$course->id" ); - $strexportquestions = get_string("exportquestions", "quiz"); - $strquestions = get_string("questions", "quiz"); - - $strquizzes = get_string('modulenameplural', 'quiz'); - $streditingquiz = get_string(isset($SESSION->modform->instance) ? "editingquiz" : "editquestions", "quiz"); - - $dirname = get_string("exportfilename","quiz"); - - /// Header: - + /// Header if (isset($SESSION->modform->instance) and $quiz = get_record('quiz', 'id', $SESSION->modform->instance)) { $strupdatemodule = has_capability('moodle/course:manageactivities', $context) - ? update_module_button($SESSION->modform->cmid, $course->id, get_string('modulename', 'quiz')) + ? update_module_button($SESSION->modform->cmid, $course->id, $txt->modulename ) : ""; - print_header_simple($strexportquestions, '', - "wwwroot/mod/quiz/index.php?id=$course->id\">".get_string('modulenameplural', 'quiz').''. - " -> wwwroot/mod/quiz/view.php?q=$quiz->id\">".format_string($quiz->name).''. - ' -> '.$strexportquestions, - "", "", true, $strupdatemodule); + print_header_simple($txt->exportquestions, '', + "wwwroot/mod/quiz/index.php?id=$course->id\">$txt->modulenameplural". + " -> wwwroot/mod/quiz/view.php?q=$quiz->id\">".format_string($quiz->name).''. + ' -> '.$txt->exportquestions, + "", "", true, $strupdatemodule); $currenttab = 'edit'; $mode = 'export'; include($CFG->dirroot.'/mod/quiz/tabs.php'); } else { - print_header_simple($strexportquestions, '', $strexportquestions); + print_header_simple($txt->exportquestions, '', $txt->exportquestions); // print tabs $currenttab = 'export'; include('tabs.php'); @@ -79,14 +94,16 @@ if (!empty($format)) { /// Filename if (!confirm_sesskey()) { - echo( 'Sesskey error' ); + print_error( 'sesskey' ); } if (! is_readable("format/$format/format.php")) { - error('Format not known ('.clean_text($form->format).')'); - } + error( "Format not known ($format)" ); } - require("format.php"); // Parent class + // load parent class for import/export + require("format.php"); + + // and then the class for the selected format require("format/$format/format.php"); $classname = "qformat_$format"; @@ -95,51 +112,53 @@ $qformat->setCategory( $category ); $qformat->setCourse( $course ); $qformat->setFilename( $exportfilename ); + $qformat->setCattofile( $cattofile ); if (! $qformat->exportpreprocess()) { // Do anything before that we need to - error( get_string('exporterror','quiz'), - "$CFG->wwwroot/question/export.php?courseid={$course->id}&category=$category->id"); + error( $txt->exporterror, "$CFG->wwwroot/question/export.php?courseid={$course->id}&category=$category->id"); } if (! $qformat->exportprocess()) { // Process the export data - error( get_string('exporterror','quiz'), - "$CFG->wwwroot/question/export.php?courseid={$course->id}&category=$category->id"); + error( $txt->exporterror, "$CFG->wwwroot/question/export.php?courseid={$course->id}&category=$category->id"); } if (! $qformat->exportpostprocess()) { // In case anything needs to be done after - error( get_string('exporterror','quiz'), - "$CFG->wwwroot/question/export.php?courseid={$course->id}&category=$category->id"); + error( $txt->exporterror, "$CFG->wwwroot/question/export.php?courseid={$course->id}&category=$category->id"); } echo "
"; // link to download the finished file $file_ext = $qformat->export_file_extension(); - $download_str = get_string( 'download', 'quiz' ); - $downloadextra_str = get_string( 'downloadextra','quiz' ); if ($CFG->slasharguments) { $efile = "{$CFG->wwwroot}/file.php/".$qformat->question_get_export_dir()."/$exportfilename".$file_ext."?forcedownload=1"; } else { $efile = "{$CFG->wwwroot}/file.php?file=/".$qformat->question_get_export_dir()."/$exportfilename".$file_ext."&forcedownload=1"; } +<<<<<<< export.php echo "

$download_str

"; echo "

$downloadextra_str

"; +======= + echo "

$txt->download

"; + echo "

$txt->downloadextra

"; +>>>>>>> 1.22.2.2 print_continue("edit.php?courseid=$course->id"); print_footer($course); exit; } - /// Print upload form + /// Display upload form // get valid formats to generate dropdown list - $fileformatnames = get_import_export_formats( "export" ); + $fileformatnames = get_import_export_formats( 'export' ); // get filename if (empty($exportfilename)) { $exportfilename = default_export_filename($course, $category); } +<<<<<<< export.php print_heading_with_help($strexportquestions, "export", "quiz"); print_simple_box_start("center"); @@ -177,12 +196,66 @@ echo " id\" />"; echo " "; echo "\n"; +======= + // DISPLAY MAIN PAGE + print_heading_with_help($txt->exportquestions, 'export', 'quiz'); + print_simple_box_start('center'); + +?> +>>>>>>> 1.22.2.2 +<<<<<<< export.php echo "\n"; echo ''; echo "\n"; +======= +
+ + + + + + + + + + + + + + + + + + + +
category; ?>: + '.question_category_coursename($category).'  '; ?> + + id, true, false, $category->id); + } + echo $txt->tofile; ?> + + exportcategory, 'quiz'); ?> +
fileformat; ?>: + exportquestions, 'quiz'); ?> +
exportname; ?>: + +
+ +
+
+ >>>>>> 1.22.2.2 print_simple_box_end(); - print_footer($course); +?> -?> \ No newline at end of file +<<<<<<< export.php +?>======= +>>>>>>> 1.22.2.2 diff --git a/question/format.php b/question/format.php index 86854954a6..d176fa4425 100644 --- a/question/format.php +++ b/question/format.php @@ -1,4 +1,3 @@ - catfromfile = $catfromfile; } + + /** + * set cattofile + * @param bool cattofile exports categories within export file + */ + function setCattofile( $cattofile ) { + $this->cattofile = $cattofile; + } /// Importing functions @@ -350,9 +358,15 @@ class qformat_default { // results are first written into string (and then to a file) // so create/initialize the string here $expout = ""; + + // track which category questions are in + // if it changes we will record the category change in the output + // file if selected. 0 means that it will get printed before the 1st question + $trackcategory = 0; // iterate through questions foreach($questions as $question) { + // do not export hidden questions if (!empty($question->hidden)) { continue; @@ -362,26 +376,42 @@ class qformat_default { if ($question->qtype==RANDOM) { continue; } - - // export the question displaying message - $count++; - echo "

$count. ".stripslashes($question->questiontext)."

"; - $expout .= $this->writequestion( $question ) . "\n"; + + // check if we need to record category change + if ($this->cattofile) { + if ($question->category != $trackcategory) { + $trackcategory = $question->category; + $categoryname = get_category_path( $trackcategory ); + + // create 'dummy' question for category export + $dummyquestion = new object; + $dummyquestion->qtype = 'category'; + $dummyquestion->category = $categoryname; + $dummyquestion->name = "switch category to $categoryname"; + $dummyquestion->id = 0; + $dummyquestion->questiontextformat = ''; + $expout .= $this->writequestion( $dummyquestion ) . "\n"; + } + } + + // export the question displaying message + $count++; + echo "

$count. ".stripslashes($question->questiontext)."

"; + $expout .= $this->writequestion( $question ) . "\n"; } // final pre-process on exported data $expout = $this->presave_process( $expout ); - + // write file $filepath = $path."/".$this->filename . $this->export_file_extension(); if (!$fh=fopen($filepath,"w")) { error( get_string('cannotopen','quiz',$filepath) ); } - if (!fwrite($fh, $expout)) { + if (!fwrite($fh, $expout, strlen($expout) )) { error( get_string('cannotwrite','quiz',$filepath) ); } fclose($fh); - return true; } diff --git a/question/format/gift/format.php b/question/format/gift/format.php index ae0dfe46d6..e719ab84c6 100755 --- a/question/format/gift/format.php +++ b/question/format/gift/format.php @@ -1,5 +1,5 @@ - qtype) { + case 'category': + // not a real question, used to insert category switch + $expout .= "\$CATEGORY: $question->category\n"; + break; case TRUEFALSE: $trueanswer = $question->options->answers[$question->options->trueanswer]; $falseanswer = $question->options->answers[$question->options->falseanswer]; diff --git a/question/format/xhtml/format.php b/question/format/xhtml/format.php index 77c91751d1..1a74c21c2f 100755 --- a/question/format/xhtml/format.php +++ b/question/format/xhtml/format.php @@ -19,6 +19,11 @@ function writequestion( $question ) { // turns question into string // question reflects database fields for general question and specific to type + // if a category switch, just ignore + if ($question-qtype=='category') { + return ''; + } + // initial string; $expout = ""; $id = $question->id; @@ -39,25 +44,25 @@ function writequestion( $question ) { // selection depends on question type switch($question->qtype) { case TRUEFALSE: - $st_true = get_string( 'true','quiz' ); - $st_false = get_string( 'false','quiz' ); - $expout .= "\n"; - break; + $st_true = get_string( 'true','quiz' ); + $st_false = get_string( 'false','quiz' ); + $expout .= "\n"; + break; case MULTICHOICE: - $expout .= "\n"; break; case SHORTANSWER: $expout .= "