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])) {
47 return $this->configs[$a_comp];
51 $comp_arr = explode(
"/", $a_comp);
52 $a_class =
"il" . $comp_arr[1] .
"ExportConfig";
53 $export_config_file =
"./" . $a_comp .
"/classes/class." . $a_class .
".php";
54 if (!is_file($export_config_file)) {
55 include_once(
"./Services/Export/exceptions/class.ilExportException.php");
56 throw new ilExportException(
'Component "' . $a_comp .
'" does not provide ExportConfig class.');
58 include_once($export_config_file);
59 $exp_config =
new $a_class();
60 $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) {
79 if (in_array($sub_item[
"type"], self::$export_implementer)) {
80 $valid_items[] = array(
"type" => $sub_item[
"type"],
81 "title" => $sub_item[
"title"],
"ref_id" => $sub_item[
"child"],
82 "obj_id" => $sub_item[
"obj_id"],
102 return $files[0][
"timestamp"];
137 $logger = $DIC->logger()->exp();
140 $objDefinition = $DIC[
'objDefinition'];
142 $ent = ($a_entity ==
"")
147 if ($a_obj_type ==
"") {
151 if (in_array($a_obj_type, self::$new_file_structure)) {
152 include_once
'./Services/FileSystem/classes/class.ilFileSystemStorage.php';
154 $dir .=
'il' . $objDefinition->getClassName($a_obj_type) . $ent . DIRECTORY_SEPARATOR;
160 include_once
'./Services/Export/classes/class.ilImportExportFactory.php';
161 $exporter_class = ilImportExportFactory::getExporterClass($a_obj_type);
162 $export_dir = call_user_func(array($exporter_class,
'lookupExportDirectory'), $a_obj_type, $a_obj_id,
$a_type, $a_entity);
164 $logger->debug(
'Export dir is ' . $export_dir);
171 public static function _getExportFiles($a_obj_id, $a_export_types =
"", $a_obj_type =
"")
173 if ($a_obj_type ==
"") {
177 if ($a_export_types ==
"") {
178 $a_export_types = array(
"xml");
180 if (!is_array($a_export_types)) {
181 $a_export_types = array($a_export_types);
187 $types = $a_export_types;
189 foreach ($types as
$type) {
193 if (!@is_dir($dir)
or 194 !is_writeable($dir)) {
202 while ($entry = $h_dir->read()) {
203 if ($entry !=
"." and 205 substr($entry, -4) ==
".zip" and 206 preg_match(
"/^[0-9]{10}_{2}[0-9]+_{2}(" . $a_obj_type .
"_)*[0-9]+\.zip\$/", $entry)) {
207 $ts = substr($entry, 0, strpos($entry,
"__"));
208 $file[$entry .
$type] = array(
"type" => $type,
"file" => $entry,
209 "size" => filesize($dir .
"/" . $entry),
237 if ($a_obj_type ==
"") {
256 $lng->loadLanguageModule(
"export");
261 $a_tpl =
new ilTemplate(
"tpl.main.html",
true,
true);
263 $a_tpl->setVariable(
"LOCATION_STYLESHEET", $location_stylesheet);
264 $a_tpl->getStandardTemplate();
266 $a_tpl->setDescription(
$lng->txt(
"export_export_date") .
": " .
267 date(
'Y-m-d H:i:s', time()) .
" (" . date_default_timezone_get() .
")");
268 $f_tpl =
new ilTemplate(
"tpl.export_list.html",
true,
true,
"Services/Export");
269 foreach ($a_files as $file) {
270 $f_tpl->setCurrentBlock(
"file_row");
271 $f_tpl->setVariable(
"TITLE", $file[
"title"]);
272 $f_tpl->setVariable(
"TYPE",
$lng->txt(
"obj_" . $file[
"type"]));
273 $f_tpl->setVariable(
"FILE", $file[
"file"]);
274 $f_tpl->parseCurrentBlock();
276 $a_tpl->setContent($f_tpl->get());
277 $index_content = $a_tpl->get(
"DEFAULT",
false,
false,
false,
true,
false,
false);
280 fwrite(
$f, $index_content);
314 $this->log->debug(
"export type: $a_type, id: $a_id, target_release: " . $a_target_release);
317 if ($a_target_release ==
"") {
319 $a_target_release = $v[0] .
"." . $v[1] .
".0";
320 $this->log->debug(
"target_release set to: " . $a_target_release);
324 include_once
"./Services/Xml/classes/class.ilXmlWriter.php";
326 $this->manifest_writer->xmlHeader();
327 $this->manifest_writer->xmlStartTag(
332 "TargetRelease" => $a_target_release,
333 "InstallationId" => IL_INST_ID,
334 "InstallationUrl" => ILIAS_HTTP_PATH)
343 $sub_dir = $ts .
'__' . IL_INST_ID .
'__' .
$a_type .
'_' . $a_id;
344 $new_file = $sub_dir .
'.zip';
346 $this->export_run_dir = $export_dir .
"/" . $sub_dir;
348 $this->log->debug(
"export dir: " . $this->export_run_dir);
350 $this->cnt = array();
352 include_once
'./Services/Export/classes/class.ilImportExportFactory.php';
353 $class = ilImportExportFactory::getExporterClass(
$a_type);
354 $comp = ilImportExportFactory::getComponentForExport(
$a_type);
358 $this->manifest_writer->xmlEndTag(
'Manifest');
360 $this->manifest_writer->xmlDumpFile($this->export_run_dir .
"/manifest.xml",
false);
363 $this->log->debug(
"zip: " . $export_dir .
"/" . $new_file);
364 ilUtil::zip($this->export_run_dir, $export_dir .
"/" . $new_file);
369 include_once
'./Services/Export/classes/class.ilExportFileInfo.php';
371 $exp->setVersion($a_target_release);
373 $exp->setExportType(
'xml');
374 $exp->setFilename($new_file);
381 "directory" => $export_dir
402 $a_type_for_file =
"" 406 $objDefinition = $DIC[
'objDefinition'];
410 if ($a_target_release ==
"") {
412 $a_target_release = $v[0] .
"." . $v[1] .
".0";
415 if ($a_type_for_file ==
"") {
416 $a_type_for_file = $a_entity;
419 $comp = $a_component;
420 $c = explode(
"/", $comp);
421 $class =
"il" .
$c[1] .
"Exporter";
424 include_once
"./Services/Xml/classes/class.ilXmlWriter.php";
426 $this->manifest_writer->xmlHeader();
427 $this->manifest_writer->xmlStartTag(
430 "MainEntity" => $a_entity,
432 "TargetRelease" => $a_target_release,
433 "InstallationId" => IL_INST_ID,
434 "InstallationUrl" => ILIAS_HTTP_PATH)
437 $export_dir = $a_export_dir;
441 $sub_dir = $ts .
'__' . IL_INST_ID .
'__' . $a_type_for_file .
'_' . $a_id;
442 $new_file = $sub_dir .
'.zip';
444 $this->export_run_dir = $export_dir .
"/" . $sub_dir;
447 $this->cnt = array();
451 $this->manifest_writer->xmlEndTag(
'Manifest');
453 $this->manifest_writer->xmlDumpFile($this->export_run_dir .
"/manifest.xml",
false);
456 ilUtil::zip($this->export_run_dir, $export_dir .
"/" . $new_file);
462 "directory" => $export_dir
477 public function processExporter($a_comp, $a_class, $a_entity, $a_target_release, $a_id)
481 $this->log->debug(
"process exporter, comp: " . $a_comp .
", class: " . $a_class .
", entity: " . $a_entity .
482 ", target release " . $a_target_release .
", id: " . $a_id);
484 if (!is_array($a_id)) {
488 $a_id = array($a_id);
492 if (!class_exists($a_class)) {
493 $export_class_file =
"./" . $a_comp .
"/classes/class." . $a_class .
".php";
494 if (!is_file($export_class_file)) {
495 include_once(
"./Services/Export/exceptions/class.ilExportException.php");
496 throw new ilExportException(
'Export class file "' . $export_class_file .
'" not found.');
498 include_once($export_class_file);
501 $exp =
new $a_class();
502 $exp->setExport($this);
503 if (!isset($this->cnt[$a_comp])) {
504 $this->cnt[$a_comp] = 1;
506 $this->cnt[$a_comp]++;
508 $set_dir_relative = $a_comp .
"/set_" . $this->cnt[$a_comp];
509 $set_dir_absolute = $this->export_run_dir .
"/" . $set_dir_relative;
511 $this->log->debug(
"dir: " . $set_dir_absolute);
513 $this->log->debug(
"init exporter");
517 $this->log->debug(
"process head dependencies for " . $a_entity);
518 $sequence = $exp->getXmlExportHeadDependencies($a_entity, $a_target_release, $a_id);
519 foreach ($sequence as
$s) {
520 $comp = explode(
"/", $s[
"component"]);
521 $exp_class =
"il" . $comp[1] .
"Exporter";
536 $export_writer->xmlHeader();
538 $sv = $exp->determineSchemaVersion($a_entity, $a_target_release);
539 $this->log->debug(
"schema version for entity: $a_entity, target release: $a_target_release");
540 $this->log->debug(
"...is: " . $sv[
"schema_version"] .
", namespace: " . $sv[
"namespace"] .
541 ", xsd file: " . $sv[
"xsd_file"] .
", uses_dataset: " . ((
int) $sv[
"uses_dataset"]));
543 $attribs = array(
"InstallationId" => IL_INST_ID,
544 "InstallationUrl" => ILIAS_HTTP_PATH,
545 "Entity" => $a_entity,
"SchemaVersion" => $sv[
"schema_version"],
"TargetRelease" => $a_target_release,
546 "xmlns:xsi" =>
"http://www.w3.org/2001/XMLSchema-instance",
547 "xmlns:exp" =>
"http://www.ilias.de/Services/Export/exp/4_1",
548 "xsi:schemaLocation" =>
"http://www.ilias.de/Services/Export/exp/4_1 " . ILIAS_HTTP_PATH .
"/xml/ilias_export_4_1.xsd" 550 if ($sv[
"namespace"] !=
"" && $sv[
"xsd_file"] !=
"") {
551 $attribs[
"xsi:schemaLocation"] .=
" " . $sv[
"namespace"] .
" " .
552 ILIAS_HTTP_PATH .
"/xml/" . $sv[
"xsd_file"];
553 $attribs[
"xmlns"] = $sv[
"namespace"];
555 if ($sv[
"uses_dataset"]) {
556 $attribs[
"xsi:schemaLocation"] .=
" " .
557 "http://www.ilias.de/Services/DataSet/ds/4_3 " . ILIAS_HTTP_PATH .
"/xml/ilias_ds_4_3.xsd";
558 $attribs[
"xmlns:ds"] =
"http://www.ilias.de/Services/DataSet/ds/4_3";
562 $export_writer->xmlStartTag(
'exp:Export', $attribs);
565 foreach ($a_id as
$id) {
566 $exp->setExportDirectories(
567 $set_dir_relative .
"/expDir_" . $dir_cnt,
568 $set_dir_absolute .
"/expDir_" . $dir_cnt
570 $export_writer->xmlStartTag(
'exp:ExportItem', array(
"Id" => $id));
572 $xml = $exp->getXmlRepresentation($a_entity, $sv[
"schema_version"], $id);
573 $export_writer->appendXml(
$xml);
574 $export_writer->xmlEndTag(
'exp:ExportItem');
578 $export_writer->xmlEndTag(
'exp:Export');
579 $export_writer->xmlDumpFile($set_dir_absolute .
"/export.xml",
false);
581 $this->manifest_writer->xmlElement(
583 array(
"Component" => $a_comp,
"Path" => $set_dir_relative .
"/export.xml")
587 $this->log->debug(
"process tail dependencies of " . $a_entity);
588 $sequence = $exp->getXmlExportTailDependencies($a_entity, $a_target_release, $a_id);
589 foreach ($sequence as $s) {
590 $comp = explode(
"/", $s[
"component"]);
591 $exp_class =
"il" . $comp[1] .
"Exporter";
604 $this->log->debug(
"returning " . ((
int)
$success) .
" for " . $a_entity);
static _createExportDirectory($a_obj_id, $a_export_type="xml", $a_obj_type="")
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
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
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!)
if(!array_key_exists('StateId', $_REQUEST)) $id
static _lookupTitle($a_id)
lookup object title
General export exception.
exportEntity( $a_entity, $a_id, $a_target_release, $a_component, $a_title, $a_export_dir, $a_type_for_file="")
Export an ILIAS entity.
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.
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
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.
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.