ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilOrgUnitSimpleImport.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
11{
12 public function simpleImport($file_path)
13 {
14 global $DIC;
15 $lng = $DIC['lng'];
16 $this->stats = array("created" => 0, "updated" => 0, "deleted" => 0);
17 $a = file_get_contents($file_path, "r");
18 $xml = new SimpleXMLElement($a);
19
20 if (!count($xml->OrgUnit)) {
21 $this->addError("no_orgunit", null, null);
22 return;
23 }
24
25 foreach ($xml->OrgUnit as $o) {
26 $this->simpleImportElement($o);
27 }
28 }
29
30 public function simpleImportElement(SimpleXMLElement $o)
31 {
32 global $DIC;
33 $tree = $DIC['tree'];
34 $tpl = $DIC['tpl'];
35 $ilUser = $DIC['ilUser'];
36 $title = (string) $o->title;
37 $description = (string) $o->description;
38 $external_id = (string) $o->external_id;
39 $create_mode = true;
40 $attributes = $o->attributes();
41 $action = (string) $attributes->action;
42 $ou_id = (string) $attributes->ou_id;
43 $ou_id_type = (string) $attributes->ou_id_type;
44 $ou_parent_id = (string) $attributes->ou_parent_id;
45 $ou_parent_id_type = (string) $attributes->ou_parent_id_type;
46
47 if ($ou_id == ilObjOrgUnit::getRootOrgRefId()) {
48 $this->addWarning("cannot_change_root_node", $ou_id?$ou_id:$external_id, $action);
49 return;
50 }
51
52 if ($ou_parent_id == "__ILIAS") {
53 $ou_parent_id = ilObjOrgUnit::getRootOrgRefId();
54 $ou_parent_id_type = "reference_id";
55 }
56
57 //see mantis 0024601
58 if ($ou_id_type == 'external_id') {
59
60 if(strlen($external_id) == 0) {
61 $external_id = $ou_id;
62 }
63
64 if ($this->hasMoreThanOneMatch($external_id)) {
65 $this->addError("ou_more_than_one_match_found", $external_id, $action);
66 return;
67 }
68 }
69
70 $ref_id = $this->buildRef($ou_id, $ou_id_type);
71 $parent_ref_id = $this->buildRef($ou_parent_id, $ou_parent_id_type);
72
73 if ($action == "delete") {
74 if (!$parent_ref_id) {
75 $this->addError("ou_parent_id_not_valid", $ou_id?$ou_id:$external_id, $action);
76 return;
77 }
78 if (!$ref_id) {
79 $this->addError("ou_id_not_valid", $ou_id?$ou_id:$external_id, $action);
80 return;
81 }
82 $ru = new ilRepUtil($this);
83 try {
84 $ru->deleteObjects($parent_ref_id, array($ref_id)) !== false;
85 $this->stats["deleted"]++;
86 } catch (Exception $e) {
87 $this->addWarning("orgu_already_deleted", $ou_id?$ou_id:$external_id, $action);
88 }
89 return;
90 } elseif ($action == "update") {
91 if (!$parent_ref_id) {
92 $this->addError("ou_parent_id_not_valid", $ou_id?$ou_id:$external_id, $action);
93 return;
94 }
95 if (!$ref_id) {
96 $this->addError("ou_id_not_valid", $ou_id?$ou_id:$external_id, $action);
97 return;
98 }
99 $object = new ilObjOrgUnit($ref_id);
100 $object->setTitle($title);
101
102 $arrTranslations = $object->getTranslations();
103 $object->updateTranslation($title, $description, $ilUser->getLanguage(), "");
104
105 $object->setDescription($description);
106 $object->update();
107 $object->setImportId($external_id);
108 $this->moveObject($ref_id, $parent_ref_id, $ou_id, $external_id);
109
110 $this->stats["updated"]++;
111 } elseif ($action == "create") {
112 if (!$parent_ref_id) {
113 $this->addError("ou_parent_id_not_valid", $ou_id?$ou_id:$external_id, $action);
114 return;
115 }
116 if ($external_id) {
117 $obj_id = ilObject::_lookupObjIdByImportId($external_id);
118 if (ilObject::_hasUntrashedReference($obj_id) && ilObject::_lookupType($obj_id) == 'orgu') {
119 $this->addError("ou_external_id_exists", $ou_id?$ou_id:$external_id, $action);
120 return;
121 }
122 }
123 $object = new ilObjOrgUnit();
124 $object->setTitle($title);
125 $object->setDescription($description);
126 $object->setImportId($external_id);
127 $object->create();
128 $object->createReference();
129 $object->putInTree($parent_ref_id);
130 $object->setPermissions($ou_parent_id);
131 $this->stats["created"]++;
132 } else {
133 $this->addError("no_valid_action_given", $ou_id, $action);
134 }
135 }
136
143 protected function moveObject($ref_id, $parent_ref_id, $ou_id, $external_id)
144 {
145 global $DIC;
146 $tree = $DIC['tree'];
147 if ($parent_ref_id != $tree->getParentId($ref_id)) {
148 try {
149 $path = $tree->getPathId($parent_ref_id);
150 if (in_array($ref_id, $path)) {
151 $this->addWarning("not_movable_to_subtree", $ou_id?$ou_id:$external_id, "update");
152 } else {
153 $tree->moveTree($ref_id, $parent_ref_id);
154 }
155 } catch (Exception $e) {
156 global $DIC;
157 $ilLog = $DIC['ilLog'];
158 $this->addWarning("not_movable", $ou_id?$ou_id:$external_id, "update");
159 $ilLog->write($e->getMessage() . "\\n" . $e->getTraceAsString());
160 error_log($e->getMessage() . "\\n" . $e->getTraceAsString());
161 }
162 }
163 }
164}
$tpl
Definition: ilias.php:10
$path
Definition: aliased.php:25
An exception for terminatinating execution or to throw for unit testing.
Class ilObjOrgUnit.
static getRootOrgRefId()
static _hasUntrashedReference($a_obj_id)
checks wether an object has at least one reference that is not in trash
static _lookupObjIdByImportId($a_import_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
Class ilOrgUnitImporter.
hasMoreThanOneMatch($external_id)
addError($lang_var, $import_id, $action=null)
addWarning($lang_var, $import_id, $action=null)
Class ilOrgUnitSimpleImport.
simpleImportElement(SimpleXMLElement $o)
moveObject($ref_id, $parent_ref_id, $ou_id, $external_id)
Repository Utilities (application layer, put GUI related stuff into ilRepUtilGUI)
if(!file_exists(getcwd() . '/ilias.ini.php'))
registration confirmation script for ilias
Definition: confirmReg.php:12
$action
if(array_key_exists('yes', $_REQUEST)) $attributes
Definition: getconsent.php:85
global $DIC
Definition: saml.php:7
$lng
$ilUser
Definition: imgupload.php:18