ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilSCORM2004Export.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5//require_once("./Modules/LearningModule/classes/class.ilObjContentObject.php");
6
11{
12 private $err; // error object
13 private $db; // database object
14 private $ilias; // ilias object
15 private $cont_obj; // content object (learning module or sco)
16 private $cont_obj_id; // content object id (learning module or sco)
17 private $inst_id; // installation id
18 private $mode; //current export mode
19 private $export_types; // list of supported export types
20 private $module_id;
21
22 private $date;
23 private $settings;
24 private $export_dir;
25 private $subdir;
26 private $filename;
27
32 function ilScorm2004Export(&$a_cont_obj, $a_mode = "SCORM 2004 3rd")
33 {
34 global $ilErr, $ilDB, $ilias;
35
36 $this->export_types = array("SCORM 2004 3rd","SCORM 2004 4th","SCORM 1.2","HTML","ISO","PDF",
37 "HTMLOne");
38
39 if(!in_array($a_mode,$this->export_types))
40 die("Unsupported format");
41
42 $this->cont_obj =& $a_cont_obj;
43
44 $this->err =& $ilErr;
45 $this->ilias =& $ilias;
46 $this->db =& $ilDB;
47 $this->mode = $a_mode;
48
49 $settings = $this->ilias->getAllSettings();
50
51 $this->inst_id = IL_INST_ID;
52
53 switch ($this->cont_obj->getType())
54 {
55 case 'sahs':
56 $this->module_id = $this->cont_obj->getId();
57 $this->cont_obj_id = $this->cont_obj->getId();
58 break;
59 case 'sco':
60 $this->module_id = $this->cont_obj->slm_id;
61 $this->cont_obj_id = $this->cont_obj->getId();
62 break;
63 }
64
65 $this->date = time();
66
67 $this->export_dir = $this->getExportDirectory();
68 $this->subdir = $this->getExportSubDirectory();
69 $this->filename = $this->getExportFileName();
70 }
71
73 {
74 return $this->getExportDirectoryForType($this->mode);
75 }
76
78 {
79 $ret = ilUtil::getDataDir()."/lm_data"."/lm_".$this->module_id."/export_";
80 switch($type)
81 {
82 case "ISO":
83 return $ret."_iso";
84 case "PDF":
85 return $ret."_pdf";
86 case "SCORM 2004 3rd":
87 return $ret."_scorm2004";
88 case "SCORM 2004 4th":
89 return $ret."_scorm2004_4th";
90 case "HTML":
91 return $ret."_html";
92 case "HTMLOne":
93 return $ret."_html_one";
94 case "SCORM 1.2":
95 return $ret."_scorm12";
96 }
97
98 }
99
101 {
102 return $this->date."__".$this->inst_id."__".$this->cont_obj->getType()."_".$this->cont_obj_id;
103 }
104
106 {
107 switch($this->mode)
108 {
109 case "ISO":
110 return $this->subdir.".iso";
111 case "PDF":
112 return $this->subdir.".pdf";
113 default:
114 return $this->subdir.".zip";
115 }
116 }
117
119 {
120 return $this->export_types;
121 }
122
123 function getInstId()
124 {
125 return $this->inst_id;
126 }
127
135 {
136 switch ($this->mode)
137 {
138 case "SCORM 2004 3rd":
139 return $this->buildExportFileSCORM("2004 3rd");
140 case "SCORM 2004 4th":
141 return $this->buildExportFileSCORM("2004 4th");
142 case "SCORM 1.2":
143 return $this->buildExportFileSCORM("12");
144 case "HTML":
145 return $this->buildExportFileHTML();
146 case "HTMLOne":
147 return $this->buildExportFileHTMLOne();
148 case "ISO":
149 return $this->buildExportFileISO();
150 case "PDF":
151 return $this->buildExportFilePDF();
152 }
153 }
154
158 function buildExportFileSCORM($ver)
159 {
160 global $ilBench;
161
162 $ilBench->start("ContentObjectExport", "buildExportFile");
163
164 require_once("./Services/Xml/classes/class.ilXmlWriter.php");
165
166 // create directories
167 $this->createExportDirectory();
168 ilUtil::makeDir($this->export_dir."/".$this->subdir);
169
170 // get Log File
171 $expDir = $this->export_dir;
172 include_once './Services/Logging/classes/class.ilLog.php';
173 $expLog = new ilLog($expDir, "export.log");
174 $expLog->delete();
175 $expLog->setLogFormat("");
176 $expLog->write(date("[y-m-d H:i:s] ")."Start Export");
177
178 // get xml content
179
180 $ilBench->start("ContentObjectExport", "buildExportFile_getXML");
181 $this->cont_obj->exportScorm($this->inst_id, $this->export_dir."/".$this->subdir, $ver, $expLog);
182 $ilBench->stop("ContentObjectExport", "buildExportFile_getXML");
183
184 // zip the file
185 $ilBench->start("ContentObjectExport", "buildExportFile_zipFile");
186 ilUtil::zip($this->export_dir."/".$this->subdir, $this->export_dir."/".$this->subdir.".zip", true);
187 $ilBench->stop("ContentObjectExport", "buildExportFile_zipFile");
188
189 ilUtil::delDir($this->export_dir."/".$this->subdir);
190
191 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export");
192 $ilBench->stop("ContentObjectExport", "buildExportFile");
193
194 return $this->export_dir."/".$this->subdir.".zip";
195 }
196
201 {
202 require_once("./Services/Xml/classes/class.ilXmlWriter.php");
203
204 // create directories
205 $this->createExportDirectory();
206 ilUtil::makeDir($this->export_dir."/".$this->subdir);
207
208 // get Log File
209 $expDir = $this->export_dir;
210 include_once './Services/Logging/classes/class.ilLog.php';
211 $expLog = new ilLog($expDir, "export.log");
212 $expLog->delete();
213 $expLog->setLogFormat("");
214 $expLog->write(date("[y-m-d H:i:s] ")."Start Export");
215
216 // get xml content
217 $this->cont_obj->exportHTML($this->inst_id, $this->export_dir."/".$this->subdir, $expLog);
218
219 // zip the file
220 ilUtil::zip($this->export_dir."/".$this->subdir, $this->export_dir."/".$this->subdir.".zip", true);
221
222 ilUtil::delDir($this->export_dir."/".$this->subdir);
223
224 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export");
225
226 return $this->export_dir."/".$this->subdir.".zip";
227 }
228
233 {
234 require_once("./Services/Xml/classes/class.ilXmlWriter.php");
235
236 // create directories
237 $this->createExportDirectory();
238 ilUtil::makeDir($this->export_dir."/".$this->subdir);
239
240 // get Log File
241 $expDir = $this->export_dir;
242 include_once './Services/Logging/classes/class.ilLog.php';
243 $expLog = new ilLog($expDir, "export.log");
244 $expLog->delete();
245 $expLog->setLogFormat("");
246 $expLog->write(date("[y-m-d H:i:s] ")."Start Export");
247
248 // get xml content
249 $this->cont_obj->exportHTMLOne($this->inst_id, $this->export_dir."/".$this->subdir, $expLog);
250
251 // zip the file
252 ilUtil::zip($this->export_dir."/".$this->subdir, $this->export_dir."/".$this->subdir.".zip", true);
253
254 ilUtil::delDir($this->export_dir."/".$this->subdir);
255
256 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export");
257
258 return $this->export_dir."/".$this->subdir.".zip";
259 }
260
262 {
263 global $ilBench;
264 $result = "";
265 $ilBench->start("ContentObjectExport", "buildExportFile");
266
267 require_once("./Services/Xml/classes/class.ilXmlWriter.php");
268
269 // create directories
270 $this->createExportDirectory();
271 ilUtil::makeDir($this->export_dir."/".$this->subdir);
272
273 // get Log File
274 $expDir = $this->export_dir;
275 include_once './Services/Logging/classes/class.ilLog.php';
276 $expLog = new ilLog($expDir, "export.log");
277 $expLog->delete();
278 $expLog->setLogFormat("");
279 $expLog->write(date("[y-m-d H:i:s] ")."Start Export");
280
281 // get xml content
282
283 $ilBench->start("ContentObjectExport", "buildExportFile_getXML");
284 $this->cont_obj->exportHTML($this->inst_id, $this->export_dir."/".$this->subdir, $expLog);
285 $ilBench->stop("ContentObjectExport", "buildExportFile_getXML");
286
287 // zip the file
288 $ilBench->start("ContentObjectExport", "buildExportFile_zipFile");
289 if(ilUtil::CreateIsoFromFolder($this->export_dir."/".$this->subdir, $this->export_dir."/".$this->subdir.".iso"))
290 {
291 $result = $this->export_dir."/".$this->subdir.".iso";
292 }
293 $ilBench->stop("ContentObjectExport", "buildExportFile_zipFile");
294
295 ilUtil::delDir($this->export_dir."/".$this->subdir);
296
297 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export");
298 $ilBench->stop("ContentObjectExport", "buildExportFile");
299
300 return $result;
301 }
302
304 {
305 global $ilBench;
306 /*include_once('./Services/WebServices/RPC/classes/class.ilRPCServerSettings.php');
307 $pp = ilRPCServerSettings::getInstance();
308 if(!$pp->isEnabled()||!$pp->pingServer())
309 {
310 $this->ilias->raiseError("Xml Rpc Server is not running. Check Administration/Webservices/Java-Server settings", $this->ilias->error_obj->MESSAGE);
311 return;
312 }*/
313
314 $ilBench->start("ContentObjectExport", "buildExportFile");
315
316 require_once("./Services/Xml/classes/class.ilXmlWriter.php");
317
318 // create directories
319 $this->createExportDirectory();
320 ilUtil::makeDir($this->export_dir."/".$this->subdir);
321
322 // get Log File
323 $expDir = $this->export_dir;
324 include_once './Services/Logging/classes/class.ilLog.php';
325 $expLog = new ilLog($expDir, "export.log");
326 $expLog->delete();
327 $expLog->setLogFormat("");
328 $expLog->write(date("[y-m-d H:i:s] ")."Start Export");
329
330 $ilBench->start("ContentObjectExport", "buildExportFile_getXML");
331 $fo_string = $this->cont_obj->exportPDF($this->inst_id, $this->export_dir."/".$this->subdir, $expLog);
332
333 $ilBench->stop("ContentObjectExport", "buildExportFile_getXML");
334
335 $ilBench->start("ContentObjectExport", "buildExportFile_pdfFile");
336 fputs(fopen($this->export_dir."/".$this->subdir.'/temp.fo','w+'),$fo_string);
337
338 global $ilLog;
339 include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
340 try
341 {
342 $pdf_base64 = ilRpcClientFactory::factory('RPCTransformationHandler')->ilFO2PDF($fo_string);
343 //ilUtil::deliverData($pdf_base64->scalar,'learning_progress.pdf','application/pdf');
344 fputs(fopen($this->export_dir.'/'.$this->subdir.'.pdf','w+'),$pdf_base64->scalar);
345 }
347 {
348 ilUtil::sendFailure($e->getMessage(),true);
349 return false;
350 }
351 catch(Exception $e)
352 {
353 ilUtil::sendFailure($e->getMessage(),true);
354 return false;
355 }
356 $ilBench->stop("ContentObjectExport", "buildExportFile_pdfFile");
357
358 ilUtil::delDir($this->export_dir."/".$this->subdir);
359
360 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export");
361 $ilBench->stop("ContentObjectExport", "buildExportFile");
362
363 return $this->export_dir."/".$this->subdir.".pdf";
364 }
365
367 {
368 $lm_data_dir = ilUtil::getDataDir()."/lm_data";
369 if(!is_writable($lm_data_dir))
370 {
371 $this->ilias->raiseError("Content object Data Directory (".$lm_data_dir.") not writeable.",$this->ilias->error_obj->FATAL);
372 }
373 // create learning module directory (data_dir/lm_data/lm_<id>)
374 $lm_dir = $lm_data_dir."/lm_".$this->module_id;
375 ilUtil::makeDir($lm_dir);
376 if(!@is_dir($lm_dir))
377 {
378 $this->ilias->raiseError("Creation of Learning Module Directory failed.",$this->ilias->error_obj->FATAL);
379 }
380
381 //$export_dir = $lm_dir."/export_".$this->mode;
382 ilUtil::makeDir($this->export_dir);
383
384 if(!@is_dir($this->export_dir))
385 {
386 $this->ilias->raiseError("Creation of Export Directory failed.",$this->ilias->error_obj->FATAL);
387 }
388 }
389
390}
391
392?>
$result
logging
Definition: class.ilLog.php:19
static factory($a_package)
Create an XML_RPC2 client instance.
Export class for SCORM 2004 object.
buildExportFileHTMLOne()
build xml export file
buildExportFile()
build export file (complete zip file)
ilScorm2004Export(&$a_cont_obj, $a_mode="SCORM 2004 3rd")
Constructor @access public.
buildExportFileHTML()
build xml export file
buildExportFileSCORM($ver)
build xml export file
static CreateIsoFromFolder($a_dir, $a_file)
static getDataDir()
get data directory (outside webspace)
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static zip($a_dir, $a_file, $compress_content=false)
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
global $ilBench
Definition: ilias.php:18
redirection script todo: (a better solution should control the processing via a xml file)
global $ilDB