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;
74 $valid_items =
array();
75 $sub_items = $tree->getSubTree($tree->getNodeData($a_ref_id));
76 foreach ($sub_items as $sub_item) {
77 if (in_array($sub_item[
"type"], self::$export_implementer)) {
78 $valid_items[] =
array(
"type" => $sub_item[
"type"],
79 "title" => $sub_item[
"title"],
"ref_id" => $sub_item[
"child"],
80 "obj_id" => $sub_item[
"obj_id"],
100 return $files[0][
"timestamp"];
133 global $objDefinition;
135 $ent = ($a_entity ==
"")
140 if ($a_obj_type ==
"") {
144 if (in_array($a_obj_type, self::$new_file_structure)) {
145 include_once
'./Services/FileSystem/classes/class.ilFileSystemStorage.php';
147 $dir .=
'il' . $objDefinition->getClassName($a_obj_type) . $ent . DIRECTORY_SEPARATOR;
153 include_once
'./Services/Export/classes/class.ilImportExportFactory.php';
154 $exporter_class = ilImportExportFactory::getExporterClass($a_obj_type);
155 $export_dir = call_user_func(
array($exporter_class,
'lookupExportDirectory'), $a_obj_type, $a_obj_id,
$a_type, $a_entity);
157 $GLOBALS[
'ilLog']->write(__METHOD__ .
': Export dir is ' . $export_dir);
164 public static function _getExportFiles($a_obj_id, $a_export_types =
"", $a_obj_type =
"")
166 $GLOBALS[
'ilLog']->write(__METHOD__);
168 if ($a_obj_type ==
"") {
172 if ($a_export_types ==
"") {
173 $a_export_types =
array(
"xml");
175 if (!is_array($a_export_types)) {
176 $a_export_types =
array($a_export_types);
182 $types = $a_export_types;
184 foreach ($types as
$type) {
188 if (!@is_dir($dir) or
189 !is_writeable($dir)) {
197 while ($entry = $h_dir->read()) {
198 if ($entry !=
"." and
200 substr($entry, -4) ==
".zip" and
201 preg_match(
"/^[0-9]{10}_{2}[0-9]+_{2}(" . $a_obj_type .
"_)*[0-9]+\.zip\$/", $entry)) {
202 $ts = substr($entry, 0, strpos($entry,
"__"));
204 "size" => filesize($dir .
"/" . $entry),
230 if ($a_obj_type ==
"") {
247 $lng->loadLanguageModule(
"export");
252 $a_tpl =
new ilTemplate(
"tpl.main.html",
true,
true);
254 $a_tpl->setVariable(
"LOCATION_STYLESHEET", $location_stylesheet);
255 $a_tpl->getStandardTemplate();
257 $a_tpl->setDescription($lng->txt(
"export_export_date") .
": " .
258 date(
'Y-m-d H:i:s',
time()) .
" (" . date_default_timezone_get() .
")");
259 $f_tpl =
new ilTemplate(
"tpl.export_list.html",
true,
true,
"Services/Export");
260 foreach ($a_files as
$file) {
261 $f_tpl->setCurrentBlock(
"file_row");
262 $f_tpl->setVariable(
"TITLE", $file[
"title"]);
263 $f_tpl->setVariable(
"TYPE", $lng->txt(
"obj_" . $file[
"type"]));
264 $f_tpl->setVariable(
"FILE", $file[
"file"]);
265 $f_tpl->parseCurrentBlock();
267 $a_tpl->setContent($f_tpl->get());
268 $index_content = $a_tpl->get(
"DEFAULT",
false,
false,
false,
true,
false,
false);
270 $f = fopen($a_filename,
"w");
271 fwrite($f, $index_content);
305 $this->log->debug(
"export type: $a_type, id: $a_id, target_release: " . $a_target_release);
308 if ($a_target_release ==
"") {
310 $a_target_release = $v[0] .
"." . $v[1] .
".0";
311 $this->log->debug(
"target_release set to: " . $a_target_release);
315 include_once
"./Services/Xml/classes/class.ilXmlWriter.php";
317 $this->manifest_writer->xmlHeader();
318 $this->manifest_writer->xmlStartTag(
323 "TargetRelease" => $a_target_release,
324 "InstallationId" => IL_INST_ID,
325 "InstallationUrl" => ILIAS_HTTP_PATH)
334 $sub_dir = $ts .
'__' . IL_INST_ID .
'__' .
$a_type .
'_' . $a_id;
335 $new_file = $sub_dir .
'.zip';
337 $this->export_run_dir = $export_dir .
"/" . $sub_dir;
339 $this->log->debug(
"export dir: " . $this->export_run_dir);
341 $this->cnt =
array();
343 include_once
'./Services/Export/classes/class.ilImportExportFactory.php';
344 $class = ilImportExportFactory::getExporterClass(
$a_type);
345 $comp = ilImportExportFactory::getComponentForExport(
$a_type);
349 $this->manifest_writer->xmlEndTag(
'Manifest');
351 $this->manifest_writer->xmlDumpFile($this->export_run_dir .
"/manifest.xml",
false);
354 $this->log->debug(
"zip: " . $export_dir .
"/" . $new_file);
355 ilUtil::zip($this->export_run_dir, $export_dir .
"/" . $new_file);
360 include_once
'./Services/Export/classes/class.ilExportFileInfo.php';
362 $exp->setVersion($a_target_release);
364 $exp->setExportType(
'xml');
365 $exp->setFilename($new_file);
372 "directory" => $export_dir
393 $a_type_for_file =
"" 395 global $objDefinition,
$tpl;
398 if ($a_target_release ==
"") {
400 $a_target_release = $v[0] .
"." . $v[1] .
".0";
403 if ($a_type_for_file ==
"") {
404 $a_type_for_file = $a_entity;
407 $comp = $a_component;
408 $c = explode(
"/", $comp);
409 $class =
"il" . $c[1] .
"Exporter";
412 include_once
"./Services/Xml/classes/class.ilXmlWriter.php";
414 $this->manifest_writer->xmlHeader();
415 $this->manifest_writer->xmlStartTag(
418 "MainEntity" => $a_entity,
420 "TargetRelease" => $a_target_release,
421 "InstallationId" => IL_INST_ID,
422 "InstallationUrl" => ILIAS_HTTP_PATH)
425 $export_dir = $a_export_dir;
429 $sub_dir = $ts .
'__' . IL_INST_ID .
'__' . $a_type_for_file .
'_' . $a_id;
430 $new_file = $sub_dir .
'.zip';
432 $this->export_run_dir = $export_dir .
"/" . $sub_dir;
435 $this->cnt =
array();
439 $this->manifest_writer->xmlEndTag(
'Manifest');
441 $this->manifest_writer->xmlDumpFile($this->export_run_dir .
"/manifest.xml",
false);
444 ilUtil::zip($this->export_run_dir, $export_dir .
"/" . $new_file);
450 "directory" => $export_dir
465 public function processExporter($a_comp, $a_class, $a_entity, $a_target_release, $a_id)
469 $this->log->debug(
"process exporter, comp: " . $a_comp .
", class: " . $a_class .
", entity: " . $a_entity .
470 ", target release " . $a_target_release .
", id: " . $a_id);
472 if (!is_array($a_id)) {
476 $a_id =
array($a_id);
480 if (!class_exists($a_class)) {
481 $export_class_file =
"./" . $a_comp .
"/classes/class." . $a_class .
".php";
482 if (!is_file($export_class_file)) {
483 include_once(
"./Services/Export/exceptions/class.ilExportException.php");
484 throw new ilExportException(
'Export class file "' . $export_class_file .
'" not found.');
486 include_once($export_class_file);
489 $exp =
new $a_class();
490 $exp->setExport($this);
491 if (!isset($this->cnt[$a_comp])) {
492 $this->cnt[$a_comp] = 1;
494 $this->cnt[$a_comp]++;
496 $set_dir_relative = $a_comp .
"/set_" . $this->cnt[$a_comp];
497 $set_dir_absolute = $this->export_run_dir .
"/" . $set_dir_relative;
499 $this->log->debug(
"dir: " . $set_dir_absolute);
501 $this->log->debug(
"init exporter");
505 $this->log->debug(
"process head dependencies for " . $a_entity);
506 $sequence = $exp->getXmlExportHeadDependencies($a_entity, $a_target_release, $a_id);
507 foreach ($sequence as
$s) {
508 $comp = explode(
"/", $s[
"component"]);
509 $exp_class =
"il" . $comp[1] .
"Exporter";
524 $export_writer->xmlHeader();
526 $sv = $exp->determineSchemaVersion($a_entity, $a_target_release);
527 $this->log->debug(
"schema version for entity: $a_entity, target release: $a_target_release");
528 $this->log->debug(
"...is: " . $sv[
"schema_version"] .
", namespace: " . $sv[
"namespace"] .
529 ", xsd file: " . $sv[
"xsd_file"] .
", uses_dataset: " . ((
int) $sv[
"uses_dataset"]));
531 $attribs =
array(
"InstallationId" => IL_INST_ID,
532 "InstallationUrl" => ILIAS_HTTP_PATH,
533 "Entity" => $a_entity,
"SchemaVersion" => $sv[
"schema_version"],
"TargetRelease" => $a_target_release,
534 "xmlns:xsi" =>
"http://www.w3.org/2001/XMLSchema-instance",
535 "xmlns:exp" =>
"http://www.ilias.de/Services/Export/exp/4_1",
536 "xsi:schemaLocation" =>
"http://www.ilias.de/Services/Export/exp/4_1 " . ILIAS_HTTP_PATH .
"/xml/ilias_export_4_1.xsd" 538 if ($sv[
"namespace"] !=
"" && $sv[
"xsd_file"] !=
"") {
539 $attribs[
"xsi:schemaLocation"].=
" " . $sv[
"namespace"] .
" " .
540 ILIAS_HTTP_PATH .
"/xml/" . $sv[
"xsd_file"];
541 $attribs[
"xmlns"] = $sv[
"namespace"];
543 if ($sv[
"uses_dataset"]) {
544 $attribs[
"xsi:schemaLocation"].=
" " .
545 "http://www.ilias.de/Services/DataSet/ds/4_3 " . ILIAS_HTTP_PATH .
"/xml/ilias_ds_4_3.xsd";
546 $attribs[
"xmlns:ds"] =
"http://www.ilias.de/Services/DataSet/ds/4_3";
550 $export_writer->xmlStartTag(
'exp:Export', $attribs);
553 foreach ($a_id as
$id) {
554 $exp->setExportDirectories(
555 $set_dir_relative .
"/expDir_" . $dir_cnt,
556 $set_dir_absolute .
"/expDir_" . $dir_cnt
558 $export_writer->xmlStartTag(
'exp:ExportItem',
array(
"Id" => $id));
560 $xml = $exp->getXmlRepresentation($a_entity, $sv[
"schema_version"], $id);
561 $export_writer->appendXml(
$xml);
562 $export_writer->xmlEndTag(
'exp:ExportItem');
566 $export_writer->xmlEndTag(
'exp:Export');
567 $export_writer->xmlDumpFile($set_dir_absolute .
"/export.xml",
false);
569 $this->manifest_writer->xmlElement(
571 array(
"Component" => $a_comp,
"Path" => $set_dir_relative .
"/export.xml")
575 $this->log->debug(
"process tail dependencies of " . $a_entity);
576 $sequence = $exp->getXmlExportTailDependencies($a_entity, $a_target_release, $a_id);
577 foreach ($sequence as $s) {
578 $comp = explode(
"/", $s[
"component"]);
579 $exp_class =
"il" . $comp[1] .
"Exporter";
592 $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!)
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
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.
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.