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);
 
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
An exception for terminatinating execution or to throw for unit testing.
@classDescription Date and time handling
General export exception.
@classDescription Stores information of creation date and versions of export files
static _getLastExportFileInformation($a_obj_id, $a_type="", $a_obj_type="")
Get last export file information.
static _getExportFiles($a_obj_id, $a_export_types="", $a_obj_type="")
Get Export Files for a repository object.
static $new_file_structure
static _getExportDirectory($a_obj_id, $a_type="xml", $a_obj_type="", $a_entity="")
Get export directory for an repository object.
__construct()
Default constructor.
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.
exportObject($a_type, $a_id, $a_target_release="")
Export an ILIAS object (the object type must be known by objDefinition)
getConfig($a_comp)
Get configuration (note that configurations are optional, null may be returned!)
exportEntity($a_entity, $a_id, $a_target_release, $a_component, $a_title, $a_export_dir, $a_type_for_file="")
Export an ILIAS entity.
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 _createExportDirectory($a_obj_id, $a_export_type="xml", $a_obj_type="")
static $export_implementer
static _getValidExportSubItems($a_ref_id)
Get a list of subitems of a repository resource, that implement the export.
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 getLogger($a_component_id)
Get component logger.
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
special template class to simplify handling of ITX/PEAR
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 sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static zip($a_dir, $a_file, $compress_content=false)
static makeDirParents($a_dir)
Create a new directory and all parent directories.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
const ILIAS_VERSION_NUMERIC
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file