35 include_once(
"./Services/Export/classes/class.ilImportMapping.php");
37 $this->mapping->setTagetId($a_target_id);
51 if (isset($this->configs[$a_comp]))
53 return $this->configs[$a_comp];
57 $comp_arr = explode(
"/", $a_comp);
58 $a_class =
"il".$comp_arr[1].
"ImportConfig";
59 $import_config_file =
"./".$a_comp.
"/classes/class.".$a_class.
".php";
60 if (!is_file($import_config_file))
62 include_once(
"./Services/Export/exceptions/class.ilImportException.php");
63 throw new ilImportException(
'Component "'.$a_comp.
'" does not provide ImportConfig class.');
65 include_once($import_config_file);
66 $imp_config =
new $a_class();
67 $this->configs[$a_comp] = $imp_config;
88 $this->entity_types = $a_val;
98 return $this->entity_types;
109 $this->skip_entity[$a_component][$a_entity] = $skip;
119 $this->current_dataset = $a_val;
130 return $this->current_dataset;
156 $a_entity, $a_component, $a_copy_file =
false)
158 $this->
importObject(null, $a_tmp_file, $a_filename, $a_entity, $a_component, $a_copy_file);
167 final public function importObject($a_new_obj, $a_tmp_file, $a_filename, $a_type,
168 $a_comp =
"", $a_copy_file =
false)
176 copy($a_tmp_file, $tmpdir.
"/".$a_filename);
183 $this->log->debug(
"unzip: ".$tmpdir.
"/".$a_filename);
186 $dir = $tmpdir.
"/".substr($a_filename, 0, strlen($a_filename) - 4);
190 $this->log->debug(
"dir: ".$dir);
196 $new_id =
$ret[
'new_id'];
217 return $ret[
'new_id'];
230 $this->tmp_import_dir = $a_val;
248 protected function doImportObject($dir, $a_type, $a_component =
"", $a_tmpdir =
"")
250 global $objDefinition,
$tpl;
252 if ($a_component ==
"")
254 $comp = $objDefinition->getComponentForType($a_type);
255 $class = $objDefinition->getClassName($a_type);
259 $comp = $a_component;
260 $c = explode(
"/", $comp);
261 $class = $c[count($c) - 1];
270 include_once(
"./Services/Export/classes/class.ilManifestParser.php");
271 if (!is_file($dir.
"/manifest.xml"))
273 include_once(
"./Services/Export/exceptions/class.ilManifestFileNotFoundImportException.php");
275 ?
'Manifest file not found: "'.$dir.
"/manifest.xml".
'".' 276 :
'Manifest file not found: "manifest.xml."';
279 $e->setTmpDir($a_tmpdir);
283 $this->mapping->setInstallUrl($parser->getInstallUrl());
284 $this->mapping->setInstallId($parser->getInstallId());
287 if ($parser->getMainEntity() != $a_type)
289 include_once(
"./Services/Export/exceptions/class.ilImportObjectTypeMismatchException.php");
290 $e =
new ilImportObjectTypeMismatchException(
"Object type does not match. Import file has type '".$parser->getMainEntity().
"' but import being processed for '".$a_type.
"'.");
295 $expfiles = $parser->getExportFiles();
297 include_once(
"./Services/Export/classes/class.ilExportFileParser.php");
298 $all_importers = array();
299 foreach ($expfiles as $expfile)
301 $comp = $expfile[
"component"];
302 $comp_arr = explode(
"/", $comp);
303 $import_class_file =
"./".$comp.
"/classes/class.il".$comp_arr[1].
"Importer.php";
304 $class =
"il".$comp_arr[1].
"Importer";
305 include_once($import_class_file);
306 $this->importer =
new $class();
307 $this->importer->setImport($this);
308 $all_importers[] = $this->importer;
309 $this->importer->setImportDirectory($dir);
310 $this->importer->init();
311 $this->current_comp = $comp;
313 $this->log->debug(
"Process file: ".$dir.
"/".$expfile[
"path"]);
318 $this->log->error(
"Import failed: ".$e->getMessage());
324 foreach ($all_importers as $imp)
326 $this->log->debug(
"Call finalProcessing for: ".get_class($imp));
327 $imp->finalProcessing($this->mapping);
331 $top_mapping = $this->mapping->getMappingsOfEntity($this->comp, $a_type);
332 $new_id = (int) current($top_mapping);
335 'importers' => (array) $all_importers
344 function processItemXml($a_entity, $a_schema_version, $a_id, $a_xml,$a_install_id, $a_install_url)
346 global $objDefinition;
349 if ($this->skip_entity[$this->current_comp][$a_entity])
354 if($objDefinition->isRBACObject($a_entity) &&
355 $this->
getMapping()->getMapping(
'Services/Container',
'imported', $a_id))
357 $this->log->info(
'Ignoring referenced '.$a_entity.
' with id '.$a_id);
360 $this->importer->setInstallId($a_install_id);
361 $this->importer->setInstallUrl($a_install_url);
362 $this->importer->setSchemaVersion($a_schema_version);
363 $this->importer->setSkipEntities($this->skip_entity);
364 $new_id = $this->importer->importXmlRepresentation($a_entity, $a_id, $a_xml, $this->mapping);
367 if($objDefinition->isRBACObject($a_entity))
369 $this->
getMapping()->addMapping(
'Services/Container',
'imported', $a_id, 1);
375 $this->mapping->addMapping($this->comp ,$a_entity, $a_id, $new_id);
setEntityTypes($a_val)
Set entity types.
doImportObject($dir, $a_type, $a_component="", $a_tmpdir="")
Import repository object export file.
importObject($a_new_obj, $a_tmp_file, $a_filename, $a_type, $a_comp="", $a_copy_file=false)
Import repository object export file.
afterEntityTypes()
After entity types are parsed.
getMapping()
Get mapping object.
processItemXml($a_entity, $a_schema_version, $a_id, $a_xml, $a_install_id, $a_install_url)
Process item xml.
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
importEntity($a_tmp_file, $a_filename, $a_entity, $a_component, $a_copy_file=false)
Import entity.
importFromDirectory($dir, $a_type, $a_comp)
Import from directory.
setManifestDir($a_val)
Set manifest directory.
addSkipEntity($a_component, $a_entity, $skip=true)
Add skip entity.
getTemporaryImportDir()
Get temporary import directory.
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
General import exception.
manifest.xml file not found-exception for import
setCurrentDataset($a_val)
Set currrent dataset.
getConfig($a_comp)
Get configuration (note that configurations are optional, null may be returned!)
Manifest parser for ILIAS standard export files.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
getEntityTypes()
Get entity types.
static ilTempnam($a_temp_path=null)
Create a temporary file in an ILIAS writable directory.
static getLogger($a_component_id)
Get component logger.
importRecord($a_entity, $a_types, $a_record)
After entity types are parsed.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
Import object type does not match.
setTemporaryImportDir($a_val)
Set temporary import directory.
getCurrentDataset()
Get currrent dataset.
__construct($a_target_id=0)
Constructor.