Returns a QTI xml representation of the test.
{
include_once("./Services/Xml/classes/class.ilXmlWriter.php");
$a_xml_writer->xmlSetDtdDef("<!DOCTYPE questestinterop SYSTEM \"ims_qtiasiv1p2p1.dtd\">");
$a_xml_writer->xmlStartTag("questestinterop");
$attrs = array(
"ident" => "il_".IL_INST_ID."_tst_".$this->objTest->getTestId(),
"title" => $this->objTest->getTitle()
);
$a_xml_writer->xmlStartTag("assessment", $attrs);
$a_xml_writer->xmlElement("qticomment", NULL, $this->objTest->getDescription());
if ($this->objTest->getEnableProcessingTime())
{
preg_match("/(\d+):(\d+):(\d+)/", $this->objTest->getProcessingTime(), $matches);
$a_xml_writer->xmlElement("duration", NULL, sprintf("P0Y0M0DT%dH%dM%dS", $matches[1], $matches[2], $matches[3]));
}
$a_xml_writer->xmlStartTag("qtimetadata");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "ILIAS_VERSION");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->ilias->getSetting("ilias_version"));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "anonymity");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getAnonymity()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "random_test");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->isRandomTest()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "sequence_settings");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getSequenceSettings());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "author");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getAuthor());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "reset_processing_time");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getResetProcessingTime());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "count_system");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getCountSystem());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "mc_scoring");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getMCScoring());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "score_cutting");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getScoreCutting());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "password");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getPassword());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "allowedUsers");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getAllowedUsers());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "allowedUsersTimeGap");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getAllowedUsersTimeGap());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "pass_scoring");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getPassScoring());
$a_xml_writer->xmlEndTag("qtimetadatafield");
if ($this->objTest->getReportingDate())
{
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "reporting_date");
preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->objTest->getReportingDate(), $matches);
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("P%dY%dM%dDT%dH%dM%dS", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
$a_xml_writer->xmlEndTag("qtimetadatafield");
}
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "nr_of_tries");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getNrOfTries()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "kiosk");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getKiosk()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "use_previous_answers");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getUsePreviousAnswers());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "title_output");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getTitleOutput()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "random_question_count");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getRandomQuestionCount()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "results_presentation");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getResultsPresentation()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "show_summary");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getListOfQuestionsSettings()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "score_reporting");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getScoreReporting()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "instant_verification");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getInstantFeedbackSolution()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "answer_feedback");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getAnswerFeedback()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "answer_feedback_points");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getAnswerFeedbackPoints()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "show_cancel");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getShowCancel()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "show_marker");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getShowMarker()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "fixed_participants");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getFixedParticipants()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "showfinalstatement");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", (($this->objTest->getShowFinalStatement()) ? "1" : "0")));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "redirect_after_exam");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getRedirectAfterExam());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "redirect_only_kiosk_mode");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", (($this->objTest->getRedirectOnlyKioskMode()) ? "1" : "0")));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "exam_pdf");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", (($this->objTest->getExamPdf()) ? "1" : "0")));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "showinfo");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", (($this->objTest->getShowInfo()) ? "1" : "0")));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "mailnotification");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getMailNotification());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "mailnottype");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getMailNotificationType());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "exportsettings");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getExportSettings());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "forcejs");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", (($this->objTest->getForceJS()) ? "1" : "0")));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "customstyle");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getCustomStyle());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "shuffle_questions");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("%d", $this->objTest->getShuffleQuestions()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "processing_time");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getProcessingTime());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "autosave");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getAutosave());
$a_xml_writer->xmlEndTag("qtimetadatafield");
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "enable_processing_time");
$a_xml_writer->xmlElement("fieldentry", NULL, $this->objTest->getEnableProcessingTime());
$a_xml_writer->xmlEndTag("qtimetadatafield");
if ($this->objTest->getStartingTime())
{
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "starting_time");
preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->objTest->getStartingTime(), $matches);
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("P%dY%dM%dDT%dH%dM%dS", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
$a_xml_writer->xmlEndTag("qtimetadatafield");
}
if ($this->objTest->getEndingTime())
{
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "ending_time");
preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $this->objTest->getEndingTime(), $matches);
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("P%dY%dM%dDT%dH%dM%dS", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
$a_xml_writer->xmlEndTag("qtimetadatafield");
}
foreach ($this->objTest->getMarkSchema()->getMarkSteps() as $index => $mark)
{
$a_xml_writer->xmlStartTag("qtimetadatafield");
$a_xml_writer->xmlElement("fieldlabel", NULL, "mark_step_$index");
$a_xml_writer->xmlElement("fieldentry", NULL, sprintf("<short>%s</short><official>%s</official><percentage>%.2f</percentage><passed>%d</passed>", $mark->getShortName(), $mark->getOfficialName(), $mark->getMinimumLevel(), $mark->getPassed()));
$a_xml_writer->xmlEndTag("qtimetadatafield");
}
$a_xml_writer->xmlEndTag("qtimetadata");
$a_xml_writer->xmlStartTag("objectives");
$this->
addQTIMaterial($a_xml_writer, $this->objTest->getIntroduction());
$a_xml_writer->xmlEndTag("objectives");
if ($this->objTest->getInstantFeedbackSolution() == 1)
{
$attrs = array(
"solutionswitch" => "Yes"
);
}
else
{
$attrs = NULL;
}
$a_xml_writer->xmlElement("assessmentcontrol", $attrs, NULL);
if (strlen($this->objTest->getFinalStatement()))
{
$a_xml_writer->xmlStartTag("presentation_material");
$a_xml_writer->xmlStartTag("flow_mat");
$this->
addQTIMaterial($a_xml_writer, $this->objTest->getFinalStatement());
$a_xml_writer->xmlEndTag("flow_mat");
$a_xml_writer->xmlEndTag("presentation_material");
}
$attrs = array(
"ident" => "1"
);
$a_xml_writer->xmlElement("section", $attrs, NULL);
$a_xml_writer->xmlEndTag("assessment");
$a_xml_writer->xmlEndTag("questestinterop");
$xml = $a_xml_writer->xmlDumpMem(FALSE);
include_once "./Modules/Test/classes/class.ilObjTest.php";
foreach ($this->objTest->getQuestions() as $question_id)
{
$qti_question = $question->toXML(false);
$qti_question = preg_replace("/<questestinterop>/", "", $qti_question);
$qti_question = preg_replace("/<\/questestinterop>/", "", $qti_question);
if (strpos($xml, "</section>") !== false)
{
$xml = str_replace("</section>", "$qti_question</section>", $xml);
}
else
{
$xml = str_replace("<section ident=\"1\"/>", "<section ident=\"1\">\n$qti_question</section>", $xml);
}
}
return $xml;
}