ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
class.ilQuestionpoolExport.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once "./Modules/Test/classes/inc.AssessmentConstants.php";
5
16{
17 var $err; // error object
18 var $db; // database object
19 var $ilias; // ilias object
20 var $qpl_obj; // questionpool object
21 var $questions; // array with question ids to export
22 var $inst_id; // installation id
23 var $mode;
24 var $lng;
25
30 function ilQuestionpoolExport(&$a_qpl_obj, $a_mode = "xml", $array_questions = null)
31 {
32 global $ilErr, $ilDB, $ilias, $lng;
33
34 $this->qpl_obj =& $a_qpl_obj;
35 if (!is_array($array_questions))
36 {
37 $array_questions =& $a_qpl_obj->getAllQuestionIds();
38 }
39
40 $this->err =& $ilErr;
41 $this->ilias =& $ilias;
42 $this->db =& $ilDB;
43 $this->mode = $a_mode;
44 $this->lng =& $lng;
45
46 $settings = $this->ilias->getAllSettings();
47 $this->inst_id = IL_INST_ID;
48 $this->questions = $array_questions;
49 $date = time();
50 $this->qpl_obj->createExportDirectory();
51 switch($this->mode)
52 {
53 case "xls":
54 $this->export_dir = $this->qpl_obj->getExportDirectory('xls');
55 $this->filename = $date."__".$this->inst_id."__".
56 "qpl"."_".$this->qpl_obj->getId() . ".xls";
57 $this->zipfilename = $date."__".$this->inst_id."__".
58 "qpl"."_".$this->qpl_obj->getId() . ".zip";
59 break;
60 case "xml":
61 default:
62 $this->export_dir = $this->qpl_obj->getExportDirectory('zip');
63 $this->subdir = $date."__".$this->inst_id."__".
64 "qpl"."_".$this->qpl_obj->getId();
65 $this->filename = $this->subdir.".xml";
66 $this->qti_filename = $date."__".$this->inst_id."__".
67 "qti"."_".$this->qpl_obj->getId().".xml";
68 break;
69 }
70 }
71
72 function getInstId()
73 {
74 return $this->inst_id;
75 }
76
77
84 function buildExportFile()
85 {
86 switch ($this->mode)
87 {
88 case "xls":
89 return $this->buildExportFileXLS();
90 break;
91 case "xml":
92 default:
93 return $this->buildExportFileXML();
94 break;
95 }
96 }
97
102 {
103 global $ilBench;
104
105 $ilBench->start("QuestionpoolExport", "buildExportFile");
106
107 include_once("./Services/Xml/classes/class.ilXmlWriter.php");
108 $this->xml = new ilXmlWriter;
109
110 // set dtd definition
111 $this->xml->xmlSetDtdDef("<!DOCTYPE Test SYSTEM \"http://www.ilias.uni-koeln.de/download/dtd/ilias_co.dtd\">");
112
113 // set generated comment
114 $this->xml->xmlSetGenCmt("Export of ILIAS Test Questionpool ".
115 $this->qpl_obj->getId()." of installation ".$this->inst.".");
116
117 // set xml header
118 $this->xml->xmlHeader();
119
120 // create directories
121 include_once "./Services/Utilities/classes/class.ilUtil.php";
122 ilUtil::makeDir($this->export_dir."/".$this->subdir);
123 ilUtil::makeDir($this->export_dir."/".$this->subdir."/objects");
124
125 // get Log File
126 $expDir = $this->qpl_obj->getExportDirectory();
127 ilUtil::makeDirParents($expDir);
128
129 include_once "./Services/Logging/classes/class.ilLog.php";
130 $expLog = new ilLog($expDir, "export.log");
131 $expLog->delete();
132 $expLog->setLogFormat("");
133 $expLog->write(date("[y-m-d H:i:s] ")."Start Export");
134
135 // write qti file
136 $qti_file = fopen($this->export_dir."/".$this->subdir."/".$this->qti_filename, "w");
137 fwrite($qti_file, $this->qpl_obj->toXML($this->questions));
138 fclose($qti_file);
139
140 // get xml content
141 $ilBench->start("QuestionpoolExport", "buildExportFile_getXML");
142 $this->qpl_obj->exportPagesXML($this->xml, $this->inst_id,
143 $this->export_dir."/".$this->subdir, $expLog, $this->questions);
144 $ilBench->stop("QuestionpoolExport", "buildExportFile_getXML");
145
146 // dump xml document to screen (only for debugging reasons)
147 /*
148 echo "<PRE>";
149 echo htmlentities($this->xml->xmlDumpMem($format));
150 echo "</PRE>";
151 */
152
153 // dump xml document to file
154 $ilBench->start("QuestionpoolExport", "buildExportFile_dumpToFile");
155 $this->xml->xmlDumpFile($this->export_dir."/".$this->subdir."/".$this->filename
156 , false);
157 $ilBench->stop("QuestionpoolExport", "buildExportFile_dumpToFile");
158
159 // add media objects which were added with tiny mce
160 $ilBench->start("QuestionpoolExport", "buildExportFile_saveAdditionalMobs");
161 $this->exportXHTMLMediaObjects($this->export_dir."/".$this->subdir);
162 $ilBench->stop("QuestionpoolExport", "buildExportFile_saveAdditionalMobs");
163
164 // zip the file
165 $ilBench->start("QuestionpoolExport", "buildExportFile_zipFile");
166 ilUtil::zip($this->export_dir."/".$this->subdir, $this->export_dir."/".$this->subdir.".zip");
167 if (@is_dir($this->export_dir."/".$this->subdir))
168 {
169 // Do not delete this dir, since it is required for container exports
170 #ilUtil::delDir($this->export_dir."/".$this->subdir);
171 }
172
173 $ilBench->stop("QuestionpoolExport", "buildExportFile_zipFile");
174
175 // destroy writer object
176 $this->xml->_XmlWriter;
177
178 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export");
179 $ilBench->stop("QuestionpoolExport", "buildExportFile");
180
181 return $this->export_dir."/".$this->subdir.".zip";
182 }
183
184 function exportXHTMLMediaObjects($a_export_dir)
185 {
186 include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
187
188 foreach ($this->questions as $question_id)
189 {
190 $mobs = ilObjMediaObject::_getMobsOfObject("qpl:html", $question_id);
191 foreach ($mobs as $mob)
192 {
194 {
195 $mob_obj =& new ilObjMediaObject($mob);
196 $mob_obj->exportFiles($a_export_dir);
197 unset($mob_obj);
198 }
199 }
200 }
201 }
202
207 {
208 global $ilBench;
209
210 $ilBench->start("QuestionpoolExport", "buildExportFile");
211 include_once "./Services/Excel/classes/class.ilExcelWriterAdapter.php";
212 $adapter = new ilExcelWriterAdapter($this->export_dir . "/" . $this->filename, FALSE);
213 $workbook = $adapter->getWorkbook();
214 $workbook->setVersion(8); // Use Excel97/2000 Format
215 $format_bold =& $workbook->addFormat();
216 $format_bold->setBold();
217 $format_percent =& $workbook->addFormat();
218 $format_percent->setNumFormat("0.00%");
219 $format_datetime =& $workbook->addFormat();
220 $format_datetime->setNumFormat("DD/MM/YYYY hh:mm:ss");
221 $format_title =& $workbook->addFormat();
222 $format_title->setBold();
223 $format_title->setColor('black');
224 $format_title->setPattern(1);
225 $format_title->setFgColor('silver');
226 $worksheet =& $workbook->addWorksheet();
227 $row = 0;
228 $col = 0;
229 // title row
230 include_once "./Services/Excel/classes/class.ilExcelUtils.php";
231 include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
232 $worksheet->write($row, $col, ilExcelUtils::_convert_text($this->lng->txt("title"), "latin1"), $format_title);
233 $col++;
234 $worksheet->write($row, $col, ilExcelUtils::_convert_text($this->lng->txt("description"), "latin1"), $format_title);
235 $col++;
236 $worksheet->write($row, $col, ilExcelUtils::_convert_text($this->lng->txt("question_type"), "latin1"), $format_title);
237 $col++;
238 $worksheet->write($row, $col, ilExcelUtils::_convert_text($this->lng->txt("author"), "latin1"), $format_title);
239 $col++;
240 $worksheet->write($row, $col, ilExcelUtils::_convert_text($this->lng->txt("create_date"), "latin1"), $format_title);
241 $col++;
242 $worksheet->write($row, $col, ilExcelUtils::_convert_text($this->lng->txt("last_update"), "latin1"), $format_title);
243 $col = 0;
244 $row++;
245 $questions = $this->qpl_obj->getQuestionList();
246 foreach ($questions as $question)
247 {
248 $worksheet->write($row, $col, ilExcelUtils::_convert_text($question["title"], "latin1"));
249 $col++;
250 $worksheet->write($row, $col, ilExcelUtils::_convert_text($question["description"], "latin1"));
251 $col++;
252 $worksheet->write($row, $col, ilExcelUtils::_convert_text($this->lng->txt($question["type_tag"]), "latin1"));
253 $col++;
254 $worksheet->write($row, $col, ilExcelUtils::_convert_text($question["author"], "latin1"));
255 $col++;
256
257// ilDatePresentation::formatDate(new ilDateTime($question["created"],IL_CAL_UNIX))
258 $worksheet->write($row, $col, ilExcelUtils::_convert_text(ilFormat::formatDate(date('Y-m-d', $question["created"]), "date", false, false), "latin1"));
259 $col++;
260 $worksheet->write($row, $col, ilExcelUtils::_convert_text(ilFormat::formatDate(date('Y-m-d', $question["tstamp"]), "date", false, false), "latin1"));
261 $col = 0;
262 $row++;
263 }
264 $workbook->close();
265 ilUtil::zip($this->export_dir . "/" . $this->filename, $this->export_dir . "/" . $this->zipfilename);
266 if (@file_exists($this->export_dir . "/" . $this->filename)) @unlink($this->export_dir . "/" . $this->filename);
267 }
268}
269
270?>
_convert_text($a_text, $a_target="has been removed")
Class ilExcelWriterAdapter.
formatDate($a_date, $a_mode="datetime", $a_omit_seconds=false, $a_relative=TRUE)
format a date according to the user language shortcut for Format::fmtDateTime @access public
logging
Definition: class.ilLog.php:19
Class ilObjMediaObject.
_getMobsOfObject($a_type, $a_id, $a_usage_hist_nr=0, $a_lang="-")
get mobs of object
static _exists($a_id)
checks wether a lm content object with specified id exists or not
Export class for questionpools.
ilQuestionpoolExport(&$a_qpl_obj, $a_mode="xml", $array_questions=null)
Constructor @access public.
buildExportFileXLS()
build xml export file
buildExportFileXML()
build xml export file
buildExportFile()
build export file (complete zip file)
static zip($a_dir, $a_file, $compress_content=false)
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
XML writer class.
xmlSetDtdDef($dtdDef)
Sets dtd definition.
global $ilBench
Definition: ilias.php:18
redirection script todo: (a better solution should control the processing via a xml file)
global $ilDB
$mobs