ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilQuestionpoolExport.php
Go to the documentation of this file.
1<?php
2
29{
30 public ilErrorHandling $err; // error object
31 public ilDBInterface $db; // database object
32 public ILIAS $ilias; // ilias object
33 public string $inst_id; // installation id
35
36 private string $export_dir = '';
37 private string $subdir = '';
38 private string $filename = '';
39 private string $zipfilename = '';
40 private string $qti_filename = '';
42
47 public function __construct(
48 protected ilObjQuestionPool $qpl_obj,
49 protected string $mode = "xml",
50 protected ?array $questions = null
51 ) {
52 global $DIC;
53 $this->err = $DIC['ilErr'];
54 $this->db = $DIC['ilDB'];
55 $this->ilias = $DIC['ilias'];
56 $this->lng = $DIC['lng'];
57
58 if (!is_array($this->questions)) {
59 $this->questions = $this->qpl_obj->getAllQuestionIds();
60 }
61
62 $this->inst_id = IL_INST_ID;
63 $date = time();
64
65 $this->qpl_obj->createExportDirectory();
66 switch ($this->mode) {
67 case "xml":
68 $this->export_dir = $this->qpl_obj->getExportDirectory('xml');
69 $this->subdir = $date . "__" . $this->inst_id . "__" .
70 "qpl" . "_" . $this->qpl_obj->getId();
71 $this->filename = $this->subdir . ".xml";
72 $this->qti_filename = $date . "__" . $this->inst_id . "__" .
73 "qti" . "_" . $this->qpl_obj->getId() . ".xml";
74 break;
75 case "xlsx":
76 $this->export_dir = $this->qpl_obj->getExportDirectory('xlsx');
77 $this->filename = $date . "__" . $this->inst_id . "__" .
78 "qpl" . "_" . $this->qpl_obj->getId() . ".xlsx";
79 $this->zipfilename = $date . "__" . $this->inst_id . "__" .
80 "qpl" . "_" . $this->qpl_obj->getId() . ".zip";
81 break;
82 default:
83 $this->export_dir = $this->qpl_obj->getExportDirectory('zip');
84 $this->subdir = $date . "__" . $this->inst_id . "__" .
85 "qpl" . "_" . $this->qpl_obj->getId();
86 $this->filename = $this->subdir . ".xml";
87 $this->qti_filename = $date . "__" . $this->inst_id . "__" .
88 "qti" . "_" . $this->qpl_obj->getId() . ".xml";
89 break;
90 }
91 }
92
93 public function getInstId()
94 {
95 return $this->inst_id;
96 }
97
98
102 public function buildExportFile(): string
103 {
104 switch ($this->mode) {
105 case "xlsx":
106 return $this->buildExportFileXLSX();
107 case "xml":
108 default:
109 return $this->buildExportFileXML();
110 }
111 }
112
116 public function buildExportFileXML(): string
117 {
118 global $DIC;
119 $ilBench = $DIC['ilBench'];
120
121 $ilBench->start("QuestionpoolExport", "buildExportFile");
122
123 $this->xml = new ilXmlWriter();
124 $this->xml->xmlSetDtdDef("<!DOCTYPE Test SYSTEM \"http://www.ilias.uni-koeln.de/download/dtd/ilias_co.dtd\">");
125 $this->xml->xmlSetGenCmt("Export of ILIAS Test Questionpool " .
126 $this->qpl_obj->getId() . " of installation " . $this->inst_id);
127 $this->xml->xmlHeader();
128
129 ilFileUtils::makeDir($this->export_dir . "/" . $this->subdir);
130 ilFileUtils::makeDir($this->export_dir . "/" . $this->subdir . "/objects");
131
132 $expDir = $this->qpl_obj->getExportDirectory();
134
135 $expLog = new ilLog($expDir, "export.log");
136 $expLog->delete();
137 $expLog->setLogFormat("");
138 $expLog->write(date("[y-m-d H:i:s] ") . "Start Export");
139
140 $qti_file = fopen($this->export_dir . "/" . $this->subdir . "/" . $this->qti_filename, "w");
141 fwrite($qti_file, $this->qpl_obj->questionsToXML($this->questions));
142 fclose($qti_file);
143
144 $ilBench->start("QuestionpoolExport", "buildExportFile_getXML");
145 $this->qpl_obj->objectToXmlWriter(
146 $this->xml,
147 $this->inst_id,
148 $this->export_dir . "/" . $this->subdir,
149 $expLog,
150 $this->questions
151 );
152 $ilBench->stop("QuestionpoolExport", "buildExportFile_getXML");
153
154 $ilBench->start("QuestionpoolExport", "buildExportFile_dumpToFile");
155 $this->xml->xmlDumpFile($this->export_dir . "/" . $this->subdir . "/" . $this->filename, false);
156 $ilBench->stop("QuestionpoolExport", "buildExportFile_dumpToFile");
157
158 $ilBench->start("QuestionpoolExport", "buildExportFile_saveAdditionalMobs");
159 $this->exportXHTMLMediaObjects($this->export_dir . "/" . $this->subdir);
160 $ilBench->stop("QuestionpoolExport", "buildExportFile_saveAdditionalMobs");
161
162 $ilBench->start("QuestionpoolExport", "buildExportFile_zipFile");
163 ilFileUtils::zip($this->export_dir . "/" . $this->subdir, $this->export_dir . "/" . $this->subdir . ".zip");
164
165 $ilBench->stop("QuestionpoolExport", "buildExportFile_zipFile");
166
167 $expLog->write(date("[y-m-d H:i:s] ") . "Finished Export");
168 $ilBench->stop("QuestionpoolExport", "buildExportFile");
169
170 return $this->export_dir . "/" . $this->subdir . ".zip";
171 }
172
173 public function exportXHTMLMediaObjects($a_export_dir): void
174 {
175 foreach ($this->questions as $question_id) {
176 $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $question_id);
177 foreach ($mobs as $mob) {
178 if (ilObjMediaObject::_exists($mob)) {
179 $mob_obj = new ilObjMediaObject($mob);
180 $mob_obj->exportFiles($a_export_dir);
181 unset($mob_obj);
182 }
183 }
184 }
185 }
186}
Error Handling & global info handling.
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
static zip(string $a_dir, string $a_file, bool $compress_content=false)
static makeDir(string $a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
language handling
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: class.ilLog.php:31
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
static _getMobsOfObject(string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
buildExportFileXML()
build xml export file
buildExportFile()
build export file (complete zip file)
__construct(protected ilObjQuestionPool $qpl_obj, protected string $mode="xml", protected ?array $questions=null)
Constructor @access public.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const IL_INST_ID
Definition: constants.php:40
Interface ilDBInterface.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
Class ilObjForumAdministration.
global $DIC
Definition: shib_login.php:26