20 public static $new_file_structure =
array(
'cat',
'exc',
'crs',
'sess',
'file',
'grp',
'frm',
'usr',
'catr',
'crsr',
'grpr');
46 if (isset($this->configs[$a_comp]))
48 return $this->configs[$a_comp];
52 $comp_arr = explode(
"/", $a_comp);
53 $a_class =
"il".$comp_arr[1].
"ExportConfig";
54 $export_config_file =
"./".$a_comp.
"/classes/class.".$a_class.
".php";
55 if (!is_file($export_config_file))
57 include_once(
"./Services/Export/exceptions/class.ilExportException.php");
58 throw new ilExportException(
'Component "'.$a_comp.
'" does not provide ExportConfig class.');
60 include_once($export_config_file);
61 $exp_config =
new $a_class();
62 $this->configs[$a_comp] = $exp_config;
76 $valid_items =
array();
77 $sub_items = $tree->getSubTree($tree->getNodeData($a_ref_id));
78 foreach ($sub_items as $sub_item)
80 if (in_array($sub_item[
"type"], self::$export_implementer))
82 $valid_items[] =
array(
"type" => $sub_item[
"type"],
83 "title" => $sub_item[
"title"],
"ref_id" => $sub_item[
"child"],
84 "obj_id" => $sub_item[
"obj_id"],
105 return $files[0][
"timestamp"];
139 global $objDefinition;
141 $ent = ($a_entity ==
"")
146 if ($a_obj_type ==
"")
151 if(in_array($a_obj_type, self::$new_file_structure))
153 include_once
'./Services/FileSystem/classes/class.ilFileSystemStorage.php';
155 $dir .=
'il'.$objDefinition->getClassName($a_obj_type).$ent.DIRECTORY_SEPARATOR;
157 $dir .= (
$a_type ==
'xml' ?
'export' :
'export_'.$a_type);
161 include_once
'./Services/Export/classes/class.ilImportExportFactory.php';
162 $exporter_class = ilImportExportFactory::getExporterClass($a_obj_type);
163 $export_dir = call_user_func(
array($exporter_class,
'lookupExportDirectory'),$a_obj_type,$a_obj_id,
$a_type,$a_entity);
165 $GLOBALS[
'ilLog']->write(__METHOD__.
': Export dir is '.$export_dir);
174 $GLOBALS[
'ilLog']->write(__METHOD__);
176 if ($a_obj_type ==
"")
181 if ($a_export_types ==
"")
183 $a_export_types =
array(
"xml");
185 if (!is_array($a_export_types))
187 $a_export_types =
array($a_export_types);
193 $types = $a_export_types;
195 foreach($types as $type)
200 if (!@is_dir($dir)
or 210 while ($entry = $h_dir->read())
212 if ($entry !=
"." and 214 substr($entry, -4) ==
".zip" and 215 preg_match(
"/^[0-9]{10}_{2}[0-9]+_{2}(".$a_obj_type.
"_)*[0-9]+\.zip\$/", $entry))
217 $ts = substr($entry, 0, strpos($entry,
"__"));
218 $file[$entry.$type] =
array(
"type" => $type,
"file" => $entry,
219 "size" => filesize($dir.
"/".$entry),
245 if ($a_obj_type ==
"")
263 $lng->loadLanguageModule(
"export");
269 $a_tpl =
new ilTemplate(
"tpl.main.html",
true,
true);
271 $a_tpl->setVariable(
"LOCATION_STYLESHEET",$location_stylesheet);
272 $a_tpl->getStandardTemplate();
274 $a_tpl->setDescription($lng->txt(
"export_export_date").
": ".
275 date(
'Y-m-d H:i:s',
time()).
" (".date_default_timezone_get().
")");
276 $f_tpl =
new ilTemplate(
"tpl.export_list.html",
true,
true,
"Services/Export");
277 foreach ($a_files as
$file)
279 $f_tpl->setCurrentBlock(
"file_row");
280 $f_tpl->setVariable(
"TITLE", $file[
"title"]);
281 $f_tpl->setVariable(
"TYPE", $lng->txt(
"obj_".$file[
"type"]));
282 $f_tpl->setVariable(
"FILE", $file[
"file"]);
283 $f_tpl->parseCurrentBlock();
285 $a_tpl->setContent($f_tpl->get());
286 $index_content = $a_tpl->get(
"DEFAULT",
false,
false,
false,
true,
false,
false);
288 $f = fopen ($a_filename,
"w");
289 fwrite($f, $index_content);
323 $this->log->debug(
"export type: $a_type, id: $a_id, target_release: ".$a_target_release);
326 if ($a_target_release ==
"")
329 $a_target_release = $v[0].
".".$v[1].
".0";
330 $this->log->debug(
"target_release set to: ".$a_target_release);
334 include_once
"./Services/Xml/classes/class.ilXmlWriter.php";
336 $this->manifest_writer->xmlHeader();
337 $this->manifest_writer->xmlStartTag(
342 "TargetRelease" => $a_target_release,
343 "InstallationId" => IL_INST_ID,
344 "InstallationUrl" => ILIAS_HTTP_PATH));
352 $sub_dir = $ts.
'__'.IL_INST_ID.
'__'.
$a_type.
'_'.$a_id;
353 $new_file = $sub_dir.
'.zip';
355 $this->export_run_dir = $export_dir.
"/".$sub_dir;
357 $this->log->debug(
"export dir: ".$this->export_run_dir);
359 $this->cnt =
array();
361 include_once
'./Services/Export/classes/class.ilImportExportFactory.php';
362 $class = ilImportExportFactory::getExporterClass(
$a_type);
363 $comp = ilImportExportFactory::getComponentForExport(
$a_type);
367 $this->manifest_writer->xmlEndTag(
'Manifest');
369 $this->manifest_writer->xmlDumpFile($this->export_run_dir.
"/manifest.xml",
false);
372 $this->log->debug(
"zip: ".$export_dir.
"/".$new_file);
373 ilUtil::zip($this->export_run_dir, $export_dir.
"/".$new_file);
379 include_once
'./Services/Export/classes/class.ilExportFileInfo.php';
381 $exp->setVersion($a_target_release);
383 $exp->setExportType(
'xml');
384 $exp->setFilename($new_file);
391 "directory" => $export_dir
406 $a_component, $a_title, $a_export_dir, $a_type_for_file =
"")
408 global $objDefinition,
$tpl;
411 if ($a_target_release ==
"")
414 $a_target_release = $v[0].
".".$v[1].
".0";
417 if ($a_type_for_file ==
"")
419 $a_type_for_file = $a_entity;
422 $comp = $a_component;
423 $c = explode(
"/", $comp);
424 $class =
"il".$c[1].
"Exporter";
427 include_once
"./Services/Xml/classes/class.ilXmlWriter.php";
429 $this->manifest_writer->xmlHeader();
430 $this->manifest_writer->xmlStartTag(
433 "MainEntity" => $a_entity,
435 "TargetRelease" => $a_target_release,
436 "InstallationId" => IL_INST_ID,
437 "InstallationUrl" => ILIAS_HTTP_PATH));
439 $export_dir = $a_export_dir;
443 $sub_dir = $ts.
'__'.IL_INST_ID.
'__'.$a_type_for_file.
'_'.$a_id;
444 $new_file = $sub_dir.
'.zip';
446 $this->export_run_dir = $export_dir.
"/".$sub_dir;
449 $this->cnt =
array();
453 $this->manifest_writer->xmlEndTag(
'Manifest');
455 $this->manifest_writer->xmlDumpFile($this->export_run_dir.
"/manifest.xml",
false);
458 ilUtil::zip($this->export_run_dir, $export_dir.
"/".$new_file);
464 "directory" => $export_dir
483 $this->log->debug(
"process exporter, comp: ".$a_comp.
", class: ".$a_class.
", entity: ".$a_entity.
484 ", target release ".$a_target_release.
", id: ".$a_id);
486 if (!is_array($a_id))
492 $a_id =
array($a_id);
496 if(!class_exists($a_class))
498 $export_class_file =
"./".$a_comp.
"/classes/class.".$a_class.
".php";
499 if (!is_file($export_class_file))
501 include_once(
"./Services/Export/exceptions/class.ilExportException.php");
502 throw new ilExportException(
'Export class file "'.$export_class_file.
'" not found.');
504 include_once($export_class_file);
507 $exp =
new $a_class();
508 $exp->setExport($this);
509 if (!isset($this->cnt[$a_comp]))
511 $this->cnt[$a_comp] = 1;
515 $this->cnt[$a_comp]++;
517 $set_dir_relative = $a_comp.
"/set_".$this->cnt[$a_comp];
518 $set_dir_absolute = $this->export_run_dir.
"/".$set_dir_relative;
520 $this->log->debug(
"dir: ".$set_dir_absolute);
522 $this->log->debug(
"init exporter");
526 $this->log->debug(
"process head dependencies for ".$a_entity);
527 $sequence = $exp->getXmlExportHeadDependencies($a_entity, $a_target_release, $a_id);
528 foreach ($sequence as $s)
530 $comp = explode(
"/", $s[
"component"]);
531 $exp_class =
"il".$comp[1].
"Exporter";
533 $s[
"entity"], $a_target_release, $s[
"ids"]);
542 $export_writer->xmlHeader();
544 $sv = $exp->determineSchemaVersion($a_entity, $a_target_release);
545 $this->log->debug(
"schema version for entity: $a_entity, target release: $a_target_release");
546 $this->log->debug(
"...is: ".$sv[
"schema_version"].
", namespace: ".$sv[
"namespace"].
547 ", xsd file: ".$sv[
"xsd_file"].
", uses_dataset: ".((
int)$sv[
"uses_dataset"]));
549 $attribs =
array(
"InstallationId" => IL_INST_ID,
550 "InstallationUrl" => ILIAS_HTTP_PATH,
551 "Entity" => $a_entity,
"SchemaVersion" => $sv[
"schema_version"],
"TargetRelease" => $a_target_release,
552 "xmlns:xsi" =>
"http://www.w3.org/2001/XMLSchema-instance",
553 "xmlns:exp" =>
"http://www.ilias.de/Services/Export/exp/4_1",
554 "xsi:schemaLocation" =>
"http://www.ilias.de/Services/Export/exp/4_1 ".ILIAS_HTTP_PATH.
"/xml/ilias_export_4_1.xsd" 556 if ($sv[
"namespace"] !=
"" && $sv[
"xsd_file"] !=
"")
558 $attribs[
"xsi:schemaLocation"].=
" ".$sv[
"namespace"].
" ".
559 ILIAS_HTTP_PATH.
"/xml/".$sv[
"xsd_file"];
560 $attribs[
"xmlns"] = $sv[
"namespace"];
562 if ($sv[
"uses_dataset"])
564 $attribs[
"xsi:schemaLocation"].=
" ".
565 "http://www.ilias.de/Services/DataSet/ds/4_3 ".ILIAS_HTTP_PATH.
"/xml/ilias_ds_4_3.xsd";
566 $attribs[
"xmlns:ds"] =
"http://www.ilias.de/Services/DataSet/ds/4_3";
570 $export_writer->xmlStartTag(
'exp:Export', $attribs);
573 foreach ($a_id as $id)
575 $exp->setExportDirectories($set_dir_relative.
"/expDir_".$dir_cnt,
576 $set_dir_absolute.
"/expDir_".$dir_cnt);
577 $export_writer->xmlStartTag(
'exp:ExportItem',
array(
"Id" => $id));
579 $xml = $exp->getXmlRepresentation($a_entity, $sv[
"schema_version"], $id);
580 $export_writer->appendXml($xml);
581 $export_writer->xmlEndTag(
'exp:ExportItem');
585 $export_writer->xmlEndTag(
'exp:Export');
586 $export_writer->xmlDumpFile($set_dir_absolute.
"/export.xml",
false);
588 $this->manifest_writer->xmlElement(
"ExportFile",
589 array(
"Component" => $a_comp,
"Path" => $set_dir_relative.
"/export.xml"));
592 $this->log->debug(
"process tail dependencies of ".$a_entity);
593 $sequence = $exp->getXmlExportTailDependencies($a_entity, $a_target_release, $a_id);
594 foreach ($sequence as $s)
596 $comp = explode(
"/", $s[
"component"]);
597 $exp_class =
"il".$comp[1].
"Exporter";
599 $s[
"entity"], $a_target_release, $s[
"ids"]);
606 $this->log->debug(
"returning ".((
int)
$success).
" for ".$a_entity);
static _createExportDirectory($a_obj_id, $a_export_type="xml", $a_obj_type="")
static makeDirParents($a_dir)
Create a new directory and all parent directories.
exportObject($a_type, $a_id, $a_target_release="")
Export an ILIAS object (the object type must be known by objDefinition)
static $new_file_structure
const ILIAS_VERSION_NUMERIC
exportEntity($a_entity, $a_id, $a_target_release, $a_component, $a_title, $a_export_dir, $a_type_for_file="")
Export an ILIAS entity.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static _getExportFiles($a_obj_id, $a_export_types="", $a_obj_type="")
Get Export Files for a repository object.
getConfig($a_comp)
Get configuration (note that configurations are optional, null may be returned!)
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static _lookupTitle($a_id)
lookup object title
General export exception.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static _createPathFromId($a_container_id, $a_name)
Create a path from an id: e.g 12345 will be converted to 12/34/<name>_5.
static _getLastExportFileDate($a_obj_id, $a_type="", $a_obj_type="")
Get date of last export file.
processExporter($a_comp, $a_class, $a_entity, $a_target_release, $a_id)
Process exporter.
static _getValidExportSubItems($a_ref_id)
Get a list of subitems of a repository resource, that implement the export.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
special template class to simplify handling of ITX/PEAR
Stores information of creation date and versions of export files
__construct()
Default constructor.
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
static getDataDir()
get data directory (outside webspace)
static _getExportDirectory($a_obj_id, $a_type="xml", $a_obj_type="", $a_entity="")
Get export directory for an repository object.
static _generateIndexFile($a_filename, $a_obj_id, $a_files, $a_type="")
Generates an index.html file including links to all xml files included (for container exports) ...
static getLogger($a_component_id)
Get component logger.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static $export_implementer
static _getLastExportFileInformation($a_obj_id, $a_type="", $a_obj_type="")
Get last export file information.