31 include_once
'./webservice/soap/classes/class.ilSoapAdministration.php';
48 'No import id given.',
55 $ilLog = $DIC[
'ilLog'];
57 $ilLog->write(
"SOAP getObjIdByImportId(): import_id = " . $import_id .
' obj_id = ' . $obj_id);
58 return $obj_id ?:
"0";
74 'No import id given.',
81 $tree = $DIC->repositoryTree();
87 if ($tree->isInTree($ref_id)) {
107 'No object id given.',
114 foreach ($ref_ids as
$ref_id) {
132 if (!count($ref_ids)) {
133 return $this->
raiseError(
'No reference id(s) given.',
'Client');
137 foreach ($ref_ids as
$ref_id) {
138 $ref_id = trim($ref_id);
139 if (!is_numeric($ref_id)) {
140 return $this->
raiseError(
'Reference ID has to be numeric. Value: ' . $ref_id,
'Client');
145 return $this->
raiseError(
'No object found for reference ID. Value: ' . $ref_id,
'Client');
149 'No untrashed reference found for reference ID. Value: ' . $ref_id,
153 $obj_ids[] = $obj_id;
172 return $this->
raiseError(
'Cannot create object instance!',
'Server');
175 return $this->
raiseError(
"Object with ID $a_ref_id has been deleted.",
'Client');
177 include_once
'./webservice/soap/classes/class.ilObjectXMLWriter.php';
180 $xml_writer->enablePermissionCheck(
true);
181 if (is_int($user_id)) {
182 $xml_writer->setUserId($user_id);
183 $xml_writer->enableOperations(
true);
185 $xml_writer->setObjects(array($tmp_obj));
186 if ($xml_writer->start()) {
187 return $xml_writer->getXML();
189 return $this->
raiseError(
'Cannot create object xml !',
'Server');
203 if ($a_title ===
'') {
205 'No valid query string given.',
209 include_once
'./Services/Search/classes/class.ilQueryParser.php';
211 $query_parser->setMinWordLength(0);
213 $query_parser->parse();
214 if (!$query_parser->validate()) {
216 $query_parser->getMessage(),
221 include_once
'./Services/Search/classes/class.ilObjectSearchFactory.php';
222 include_once
'Services/Search/classes/Like/class.ilLikeObjectSearch.php';
224 $object_search->setFields(array(
'title'));
225 $object_search->appendToFilter(
'role');
226 $object_search->appendToFilter(
'rolt');
227 $res = $object_search->performSearch();
229 $res->setUserId($user_id);
235 foreach (
$res->getUniqueResults() as $entry) {
236 if ($entry[
'type'] ===
'role' || $entry[
'type'] ===
'rolt') {
250 include_once
'./webservice/soap/classes/class.ilObjectXMLWriter.php';
253 $xml_writer->enablePermissionCheck(
true);
254 if (is_int($user_id)) {
255 $xml_writer->setUserId($user_id);
256 $xml_writer->enableOperations(
true);
258 $xml_writer->setObjects($objs);
259 if ($xml_writer->start()) {
260 return $xml_writer->getXML();
262 return $this->
raiseError(
'Cannot create object xml !',
'Server');
268 public function searchObjects(
string $sid, ?array $types,
string $key,
string $combination, ?
int $user_id = null)
277 if ($combination !==
'and' && $combination !==
'or') {
279 'No valid combination given. Must be "and" or "or".',
285 include_once
'./Services/Search/classes/class.ilSearchSettings.php';
289 $typeFilterQuery =
'';
290 if (is_array($types)) {
291 foreach ($types as $objectType) {
292 if ($typeFilterQuery ===
'') {
293 $typeFilterQuery .=
'+( ';
295 $typeFilterQuery .=
'OR';
297 $typeFilterQuery .= (
' type:' . $objectType .
' ');
299 $typeFilterQuery .=
') ';
302 include_once
'./Services/Search/classes/Lucene/class.ilLuceneQueryParser.php';
304 $query_parser->parse();
306 include_once
'./Services/Search/classes/Lucene/class.ilLuceneSearcher.php';
310 include_once
'./Services/Search/classes/Lucene/class.ilLuceneSearchResultFilter.php';
311 include_once
'./Services/Search/classes/Lucene/class.ilLucenePathFilter.php';
313 $filter->setCandidates($searcher->getResult());
316 $result_ids = $filter->getResults();
319 foreach ($result_ids as
$ref_id => $obj_id) {
325 include_once
'./Services/Search/classes/Lucene/class.ilLuceneHighlighterResultParser.php';
327 if ($filter->getResultObjIds()) {
328 $highlighter = $searcher->highlight($filter->getResultObjIds());
331 include_once
'./Services/Search/classes/class.ilQueryParser.php';
335 $query_parser->parse();
336 if (!$query_parser->validate()) {
338 $query_parser->getMessage(),
343 include_once
'./Services/Search/classes/Like/class.ilLikeObjectSearch.php';
345 $object_search->setFilter($types);
346 $res = $object_search->performSearch();
347 if (is_int($user_id)) {
348 $res->setUserId($user_id);
350 $res->setMaxHits(100);
354 foreach (
$res->getUniqueResults() as $entry) {
366 include_once
'./webservice/soap/classes/class.ilObjectXMLWriter.php';
369 $xml_writer->enableReferences(
false);
371 $xml_writer->setHighlighter($highlighter);
374 $xml_writer->enablePermissionCheck(
true);
377 $xml_writer->setUserId($user_id);
378 $xml_writer->enableOperations(
true);
381 $xml_writer->setObjects($objs);
382 if ($xml_writer->start()) {
383 return $xml_writer->getXML();
386 return $this->
raiseError(
'Cannot create object xml !',
'Server');
405 $tree = $DIC[
'tree'];
409 'No valid reference id given.',
415 'No valid reference id given.',
420 if (!is_array($types) || empty($types)) {
426 foreach ($tree->getChilds($ref_id,
'title') as $child) {
427 if ($all || in_array($child[
'type'], $types,
true)) {
434 include_once
'./webservice/soap/classes/class.ilObjectXMLWriter.php';
436 $xml_writer->enablePermissionCheck(
true);
437 $xml_writer->setObjects($objs);
438 $xml_writer->enableOperations(
true);
439 if (is_int($user_id)) {
440 $xml_writer->setUserId($user_id);
443 if ($xml_writer->start()) {
444 return $xml_writer->getXML();
446 return $this->
raiseError(
'Cannot create object xml !',
'Server');
452 public function getXMLTree(
string $sid,
int $ref_id, ?array $types = null, ?
int $user_id = null)
463 $tree = $DIC[
'tree'];
464 $access = $DIC[
'ilAccess'];
466 $nodedata = $tree->getNodeData($ref_id);
467 $nodearray = $tree->getSubTree($nodedata);
470 if (!is_array($types) || empty($types)) {
478 $objDefinition = $DIC[
'objDefinition'];
480 foreach ($nodearray as $node) {
482 !$objDefinition->isAdministrationObject($node[
'type']) &&
483 !$objDefinition->isSystemObject($node[
'type']) &&
484 ($all || !in_array($node[
'type'], $filter,
true)) &&
485 $access->checkAccess(
"read",
"", (
int) $node[
'ref_id']) &&
491 include_once
'./webservice/soap/classes/class.ilObjectXMLWriter.php';
493 $xml_writer->enablePermissionCheck(
true);
494 $xml_writer->setObjects($nodes);
495 $xml_writer->enableOperations(
false);
497 if (is_int($user_id)) {
498 $xml_writer->setUserId($user_id);
501 if ($xml_writer->start()) {
502 return $xml_writer->getXML();
505 return $this->
raiseError(
'Cannot create object xml !',
'Server');
511 public function addObject(
string $sid,
int $a_target_id,
string $a_xml)
521 'No valid xml string given.',
528 $rbacsystem = $DIC[
'rbacsystem'];
529 $objDefinition = $DIC[
'objDefinition'];
530 $ilUser = $DIC[
'ilUser'];
532 $ilObjDataCache = $DIC[
'ilObjDataCache'];
536 'No valid target given.',
542 return $this->
raiseError(
"Parent with ID $a_target_id has been deleted.",
'Client');
545 $allowed_types = array(
'root',
'cat',
'grp',
'crs',
'fold');
546 if (!in_array($target_obj->getType(), $allowed_types)) {
548 'No valid target type. Target must be reference id of "course, group, category or folder"',
553 $allowed_subtypes = $target_obj->getPossibleSubObjects();
555 foreach ($allowed_subtypes as $row) {
556 if ($row[
'name'] !==
'rolf') {
557 $allowed[] = $row[
'name'];
561 include_once
'./webservice/soap/classes/class.ilObjectXMLParser.php';
565 $xml_parser->startParsing();
567 return $this->
raiseError($se->getMessage(),
'Client');
569 return $this->
raiseError($e->getMessage(),
'Client');
573 foreach ($xml_parser->getObjectData() as $object_data) {
580 if (!in_array($object_data[
'type'], $allowed,
true)) {
582 'Objects of type: ' . $object_data[
'type'] .
' are not allowed to be subobjects of type ' .
583 $target_obj->getType() .
'!',
587 if (!$rbacsystem->checkAccess(
'create', $a_target_id, $object_data[
'type'])) {
589 'No permission to create objects of type ' . $object_data[
'type'] .
'!',
597 'An object with import id ' . $object_data[
'import_id'] .
' already exists!',
603 $class_name = $objDefinition->getClassName($object_data[
'type']);
604 $location = $objDefinition->getLocation($object_data[
'type']);
606 $class_constr =
"ilObj" . $class_name;
607 require_once(
$location .
"/class.ilObj" . $class_name .
".php");
609 $newObj =
new $class_constr();
610 if (isset($object_data[
'owner']) && $object_data[
'owner'] !=
'') {
611 if ((
int) $object_data[
'owner']) {
613 $ilObjDataCache->lookupType((
int) $object_data[
'owner']) ===
'usr') {
614 $newObj->setOwner((
int) $object_data[
'owner']);
619 $newObj->setOwner((
int) $usr_id);
624 $newObj->setType($object_data[
'type']);
625 if ($object_data[
'import_id'] !=
'') {
626 $newObj->setImportId($object_data[
'import_id']);
629 if ($objDefinition->supportsOfflineHandling($newObj->getType())) {
630 $newObj->setOfflineStatus((
bool) $object_data[
'offline']);
632 $newObj->setTitle($object_data[
'title']);
633 $newObj->setDescription($object_data[
'description']);
635 $newObj->createReference();
636 $newObj->putInTree($a_target_id);
637 $newObj->setPermissions($a_target_id);
639 switch ($object_data[
'type']) {
643 $object_data[
'owner'] ?: $ilUser->getId(),
644 $newObj->getDefaultAdminRole()
652 $newObj->createLMTree();
656 $newObj->addTranslation(
657 $object_data[
"title"],
658 $object_data[
"description"],
677 public function addReference(
string $sid,
int $a_source_id,
int $a_target_id)
688 $objDefinition = $DIC[
'objDefinition'];
689 $rbacsystem = $DIC[
'rbacsystem'];
690 $tree = $DIC[
'tree'];
694 'No valid source id given.',
700 'No valid target id given.',
705 if (!$objDefinition->allowLink($source_obj->getType()) and
706 $source_obj->getType() !==
'cat' and
707 $source_obj->getType() !==
'crs') {
709 'Linking of object type: ' . $source_obj->getType() .
' is not allowed',
714 $allowed_subtypes = $target_obj->getPossibleSubObjects();
716 foreach ($allowed_subtypes as $row) {
717 if ($row[
'name'] !==
'rolf') {
718 $allowed[] = $row[
'name'];
721 if (!in_array($source_obj->getType(), $allowed,
true)) {
723 'Objects of type: ' . $source_obj->getType() .
' are not allowed to be subobjects of type ' .
724 $target_obj->getType() .
'!',
730 if (!$rbacsystem->checkAccess(
'create', $target_obj->getRefId(), $source_obj->getType())) {
732 'No permission to create objects of type ' . $source_obj->getType() .
'!',
736 if (!$rbacsystem->checkAccess(
'delete', $source_obj->getRefId())) {
738 'No permission to link object with id: ' . $source_obj->getRefId() .
'!',
743 if ($source_obj->getType() !==
'cat' and $source_obj->getType() !==
'crs') {
745 $possibleChilds = $tree->getChildsByType($target_obj->getRefId(), $source_obj->getType());
746 foreach ($possibleChilds as $child) {
747 if ((
int) $child[
"obj_id"] === $source_obj->getId()) {
748 return $this->
raiseError(
"Object already linked to target.",
"Client");
754 $new_ref_id = $source_obj->createReference();
755 $source_obj->putInTree($target_obj->getRefId());
756 $source_obj->setPermissions($target_obj->getRefId());
758 return $new_ref_id ?:
"0";
762 switch ($source_obj->getType()) {
764 include_once(
'./Modules/CategoryReference/classes/class.ilObjCategoryReference.php');
769 include_once(
'./Modules/CourseReference/classes/class.ilObjCourseReference.php');
773 include_once(
'./Modules/GroupReference/classes/class.ilObjGroupReference.php');
778 $new_ref_id = $new_ref->createReference();
780 $new_ref->putInTree($target_obj->getRefId());
781 $new_ref->setPermissions($target_obj->getRefId());
783 $new_ref->setTargetId($source_obj->getId());
786 if (!$new_ref instanceof
ilObject) {
790 return $new_ref_id ?: 0;
807 $tree = $DIC->repositoryTree();
808 $rbacsystem = $DIC[
'rbacsystem'];
809 $rbacadmin = $DIC[
'rbacadmin'];
810 $user = $DIC->user();
814 'No valid reference id given.',
818 if (!$rbacsystem->checkAccess(
'delete', $del_obj->getRefId())) {
820 'No permission to delete object with id: ' . $del_obj->getRefId() .
'!',
825 if ($tree->isDeleted($reference_id)) {
826 return $this->
raiseError(
'Node already deleted',
'Server');
829 if ($del_obj->getType() ===
'rolf') {
830 return $this->
raiseError(
'Delete is not available for role folders.',
'Client');
833 $subnodes = $tree->getSubTree($tree->getNodeData($reference_id));
834 foreach ($subnodes as $subnode) {
835 $rbacadmin->revokePermission($subnode[
"child"]);
837 if (!$tree->moveToTrash($reference_id,
true, $user->getId())) {
838 return $this->
raiseError(
'Node already deleted',
'Client');
854 if ($import_id ===
'') {
856 'No import id given. Aborting!',
862 $rbacsystem = $DIC[
'rbacsystem'];
863 $tree = $DIC[
'tree'];
864 $ilLog = $DIC[
'ilLog'];
869 'No object found with import id: ' . $import_id,
875 $permission_ok =
false;
877 if ($rbacsystem->checkAccess(
'delete', $ref_id)) {
878 $permission_ok =
true;
882 if (!$permission_ok) {
884 'No permission to delete the object with import id: ' . $import_id,
890 foreach ($ref_ids as $ref_id) {
892 $node_data = $tree->getNodeData($ref_id);
893 $subtree_nodes = $tree->getSubtree($node_data);
895 foreach ($subtree_nodes as $node) {
896 $ilLog->write(
'Soap: removeFromSystemByImportId(). Deleting object with title id: ' . $node[
'title']);
898 if (!is_object($tmp_obj)) {
900 'Cannot create instance of reference id: ' . $node[
'ref_id'],
907 $tree->deleteTree($node_data);
915 public function updateObjects(
string $sid,
string $a_xml)
925 'No valid xml string given.',
932 $rbacreview = $DIC[
'rbacreview'];
933 $rbacsystem = $DIC[
'rbacsystem'];
935 $ilAccess = $DIC[
'ilAccess'];
936 $objDefinition = $DIC[
'objDefinition'];
938 include_once
'./webservice/soap/classes/class.ilObjectXMLParser.php';
941 $xml_parser->startParsing();
943 return $this->
raiseError($se->getMessage(),
'Client');
945 return $this->
raiseError($e->getMessage(),
'Client');
949 $object_datas = $xml_parser->getObjectData();
950 foreach ($object_datas as &$object_data) {
956 if (!$object_data[
"obj_id"]) {
957 return $this->
raiseError(
'No obj_id in xml found.',
'Client');
958 } elseif ((
int) $object_data[
"obj_id"] === -1 && count($object_data[
"references"]) > 0) {
961 foreach ($object_data[
"references"] as $refid) {
969 if (!$obj_id_from_refid) {
971 'No obj_id found for reference id ' . $object_data[
"references"][0],
972 'CLIENT_OBJECT_NOT_FOUND' 977 $object_data[
"obj_id"] = $obj_id_from_refid;
981 if ($tmp_obj === null) {
983 'No object for id ' . $object_data[
'obj_id'] .
'!',
984 'CLIENT_OBJECT_NOT_FOUND' 988 $object_data[
"instance"] = $tmp_obj;
990 if ($object_data[
'type'] ===
'role') {
991 $rolf_ids = $rbacreview->getFoldersAssignedToRole($object_data[
'obj_id'],
true);
992 $rolf_id = $rolf_ids[0];
994 if (!$rbacsystem->checkAccess(
'write', $rolf_id)) {
996 'No write permission for object with id ' . $object_data[
'obj_id'] .
'!',
1001 $permission_ok =
false;
1003 if ($ilAccess->checkAccess(
'write',
'', $ref_id)) {
1004 $permission_ok =
true;
1008 if (!$permission_ok) {
1010 'No write permission for object with id ' . $object_data[
'obj_id'] .
'!',
1016 unset($object_data);
1019 if (count($object_datas) > 0) {
1020 foreach ($object_datas as $object_data) {
1025 $tmp_obj = $object_data[
"instance"];
1026 $tmp_obj->setTitle($object_data[
'title']);
1027 $tmp_obj->setDescription($object_data[
'description']);
1029 if ($objDefinition->supportsOfflineHandling($tmp_obj->getType())) {
1030 $tmp_obj->setOfflineStatus($object_data[
'offline']);
1034 if ($object_data[
'owner'] !=
'' && is_numeric($object_data[
'owner'])) {
1035 $tmp_obj->setOwner($object_data[
'owner']);
1036 $tmp_obj->updateOwner();
1056 include_once
'./webservice/soap/classes/class.ilSoapUtils.php';
1059 $rbacreview = $DIC[
'rbacreview'];
1060 $rbacadmin = $DIC[
'rbacadmin'];
1061 $objDefinition = $DIC[
'objDefinition'];
1062 $rbacsystem = $DIC[
'rbacsystem'];
1064 $ilUser = $DIC[
'ilUser'];
1065 $tree = $DIC[
'tree'];
1069 return $this->
raiseError(
'No valid source given.',
'Client');
1074 return $this->
raiseError(
'No valid target given.',
'Client');
1079 return $this->
raiseError(
'Object is trashed.',
'Client');
1083 return $this->
raiseError(
'Object is trashed.',
'Client');
1086 $canAddType = $this->
canAddType($source_object_type, $target_object_type, $target_id);
1087 if ($this->
isFault($canAddType)) {
1092 $possibleChilds = $tree->getChildsByType($target_id, $ref_id);
1093 foreach ($possibleChilds as $child) {
1094 if ((
int) $child[
"obj_id"] === $ref_id) {
1095 return $this->
raiseError(
"Object already exists in target.",
"Client");
1100 if ($tree->isGrandChild($ref_id, $target_id)) {
1101 return $this->
raiseError(
"Cannot move object into itself.",
"Client");
1104 $old_parent = $tree->getParentId($ref_id);
1105 $tree->moveTree($ref_id, $target_id);
1106 $rbacadmin->adjustMovedObjectPermissions($ref_id, $old_parent);
1115 public function copyObject(
string $sid,
string $copy_settings_xml)
1124 include_once
'./webservice/soap/classes/class.ilSoapUtils.php';
1127 $rbacreview = $DIC[
'rbacreview'];
1128 $objDefinition = $DIC[
'objDefinition'];
1129 $rbacsystem = $DIC[
'rbacsystem'];
1131 $ilUser = $DIC[
'ilUser'];
1133 include_once
'./webservice/soap/classes/class.ilCopyWizardSettingsXMLParser.php';
1136 $xml_parser->startParsing();
1138 return $this->
raiseError($se->getMessage(),
"Client");
1142 if (!$rbacsystem->checkAccess(
'copy', $xml_parser->getSourceId())) {
1144 "Missing copy permissions for object with reference id " . $xml_parser->getSourceId(),
1150 $source_id = $xml_parser->getSourceId();
1151 $target_id = $xml_parser->getTargetId();
1155 return $this->
raiseError(
'No valid source given.',
'Client');
1160 return $this->
raiseError(
'No valid target given.',
'Client');
1163 $canAddType = $this->
canAddType($source_object_type, $target_object_type, $target_id);
1164 if ($this->
isFault($canAddType)) {
1169 $options = $xml_parser->getOptions();
1174 $clientid = substr($sid, strpos($sid,
"::") + 2);
1175 $sessionid = str_replace(
"::" . $clientid,
"", $sid);
1177 $ret = $source_object->cloneAllObject(
1180 $source_object_type,
1187 return $ret[
'ref_id'];
1193 $wizard_options->saveOwner($ilUser->getId());
1194 $wizard_options->saveRoot($source_id);
1196 foreach ($options as $source_id => $option) {
1197 $wizard_options->addEntry($source_id, $option);
1199 $wizard_options->read();
1202 $newObject = $source_object->cloneObject($xml_parser->getTargetId(), $copy_id);
1203 return is_object($newObject) ? $newObject->getRefId() : -1;
1220 $ilAccess = $DIC[
'ilAccess'];
1221 $objDefinition = $DIC[
'objDefinition'];
1222 $rbacsystem = $DIC[
'rbacsystem'];
1224 $ilUser = $DIC[
'ilUser'];
1226 if (!$rbacsystem->checkAccess(
'read', $ref_id)) {
1227 return $this->
raiseError(
"Missing read permissions for object with reference id " . $ref_id,
'Client');
1231 return $this->
raiseError(
"Object is in Trash",
'Client');
1235 $tree = $DIC[
'tree'];
1237 $items = $tree->getPathFull($ref_id);
1239 include_once
'webservice/soap/classes/class.ilXMLResultSet.php';
1240 include_once
'webservice/soap/classes/class.ilXMLResultSetWriter.php';
1241 include_once
'Modules/Course/classes/class.ilCourseXMLWriter.php';
1244 $xmlResultSet->addColumn(
"ref_id");
1245 $xmlResultSet->addColumn(
"type");
1246 $xmlResultSet->addColumn(
"title");
1249 foreach ($items as $item) {
1250 if ((
int) $item[
"ref_id"] === $ref_id) {
1253 if ($item[
"title"] ===
"ILIAS" && $item[
"type"] ===
"root") {
1254 $item[
"title"] =
$lng->txt(
"repository");
1258 $xmlResultSet->addRow($row);
1259 $row->setValue(
"ref_id", $item[
"ref_id"]);
1260 $row->setValue(
"type", $item[
"type"]);
1261 $row->setValue(
"title", $item[
"title"]);
1264 return $writer->getXML();
1267 private function canAddType(
string $type,
string $target_type,
int $target_id)
1272 $objDefinition = $DIC[
'objDefinition'];
1273 $rbacsystem = $DIC[
'rbacsystem'];
1275 $allowed_types = array(
'root',
'cat',
'grp',
'crs',
'fold');
1276 if (!in_array($target_type, $allowed_types,
true)) {
1278 'No valid target type. Target must be reference id of "course, group, category or folder"',
1283 $allowed_subtypes = $objDefinition->getSubObjects($target_type);
1286 foreach ($allowed_subtypes as $row) {
1287 if ($row[
'name'] !==
'rolf') {
1288 $allowed[] = $row[
'name'];
1292 if (!in_array($type, $allowed,
true)) {
1294 'Objects of type: ' . $type .
' are not allowed to be subobjects of type ' . $target_type .
'!',
1298 if (!$rbacsystem->checkAccess(
'create', $target_id, $type)) {
1299 return $this->
raiseError(
'No permission to create objects of type ' . $type .
'!',
'Client');
1309 $ilAccess = $DIC[
'ilAccess'];
1311 if (!isset($a_object_data[
'references']) || !count($a_object_data[
'references'])) {
1314 if ($a_action ===
'create') {
1315 if (count($a_object_data[
'references']) > 1 && in_array(
1316 $a_object_data[
'type'],
1317 [
'cat',
'crs',
'grp',
'fold'],
1321 "Cannot create references for type " . $a_object_data[
'type'],
1325 if (count($a_object_data[
'references']) === 1 && $a_target_id != $a_object_data[
'references'][0][
'parent_id']) {
1327 "Cannot create references for type " . $a_object_data[
'type'],
1332 foreach ($a_object_data[
'references'] as $ref_data) {
1333 if (!$ref_data[
'parent_id']) {
1334 return $this->
raiseError(
'Element References: No parent Id given!',
'Client');
1338 $can_add_type = $this->
canAddType($a_object_data[
'type'], $target_type, $ref_data[
'parent_id']);
1339 if ($this->
isFault($can_add_type)) {
1340 return $can_add_type;
1346 if ($a_action ===
'update') {
1347 foreach ($a_object_data[
'references'] as $ref_data) {
1348 if (!$ref_data[
'ref_id']) {
1349 return $this->
raiseError(
'Element References: No reference id given!',
'Client');
1352 if (!$ilAccess->checkAccess(
'write',
'', $ref_data[
'ref_id'])) {
1354 'No write permission for object with reference id ' . $ref_data[
'ref_id'] .
'!',
1369 $tree = $DIC[
'tree'];
1370 $ilLog = $DIC[
'ilLog'];
1372 if (!isset($a_object_data[
'references']) || !count($a_object_data[
'references'])) {
1376 foreach ($a_object_data[
'references'] as $ref_data) {
1377 if (isset($ref_data[
'time_target'])) {
1378 include_once(
'./webservice/soap/classes/class.ilObjectXMLWriter.php');
1379 include_once(
'./Services/Object/classes/class.ilObjectActivation.php');
1383 $items->toggleChangeable($ref_data[
'time_target'][
'changeable'] ?? $old[
'changeable']);
1384 $items->setTimingStart($ref_data[
'time_target'][
'starting_time'] ?? $old[
'timing_start']);
1385 $items->setTimingEnd($ref_data[
'time_target'][
'ending_time'] ?? $old[
'timing_end']);
1386 $items->toggleVisible($ref_data[
'time_target'][
'timing_visibility'] ?? $old[
'visible']);
1387 $items->setSuggestionStart($ref_data[
'time_target'][
'suggestion_start'] ?? $old[
'suggestion_start']);
1388 $items->setSuggestionEnd($ref_data[
'time_target'][
'suggestion_end'] ?? $old[
'suggestion_end']);
1390 switch ($ref_data[
'time_target'][
'timing_type']) {
1406 $items->update($ref_data[
'ref_id']);
1415 $tree = $DIC->repositoryTree();
1416 $ilLog = $DIC[
'ilLog'];
1418 if (!isset($a_object_data[
'references']) || !count($a_object_data[
'references'])) {
1422 $original_id = $source->
getRefId();
1424 foreach ($a_object_data[
'references'] as $ref_data) {
1425 $new_ref_id = $original_id;
1426 if ($tree->getParentId($original_id) !== (
int) $ref_data[
'parent_id']) {
1429 $source->
putInTree($ref_data[
'parent_id']);
1432 if (isset($ref_data[
'time_target']) ) {
1433 include_once(
'./webservice/soap/classes/class.ilObjectXMLWriter.php');
1434 include_once(
'./Services/Object/classes/class.ilObjectActivation.php');
1436 if (!isset($ref_data[
'time_target'][
'starting_time'])) {
1437 $ref_data[
'time_target'][
'starting_time'] = time();
1439 if (!isset($ref_data[
'time_target'][
'ending_time'])) {
1440 $ref_data[
'time_target'][
'ending_time'] = time();
1444 $items->toggleChangeable($ref_data[
'time_target'][
'changeable']);
1445 $items->setTimingStart($ref_data[
'time_target'][
'starting_time']);
1446 $items->setTimingEnd($ref_data[
'time_target'][
'ending_time']);
1447 $items->toggleVisible($ref_data[
'time_target'][
'timing_visibility']);
1448 $items->setSuggestionStart($ref_data[
'time_target'][
'suggestion_start']);
1449 $items->setSuggestionEnd($ref_data[
'time_target'][
'suggestion_end']);
1451 switch ($ref_data[
'time_target'][
'timing_type']) {
1467 $items->update($new_ref_id);
static _lookupObjIdByImportId(string $import_id)
Get (latest) object id for an import id.
XML Writer for XMLResultSet.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$location
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getAllReferences(int $id)
get all reference ids for object ID
static getInstance(ilLuceneQueryParser $qp)
Get singleton instance.
getRefIdsByImportId(string $sid, string $import_id)
getObjIdByImportId(string $sid, string $import_id)
raiseError(string $a_message, $a_code)
const TIMINGS_DEACTIVATED
static _hasUntrashedReference(int $obj_id)
checks whether an object has at least one reference that is not in trash
Row Class for XMLResultSet.
static _lookupId($a_user_str)
SaxParserException thrown by ilSaxParser if property throwException is set.
getXMLTree(string $sid, int $ref_id, ?array $types=null, ?int $user_id=null)
setPermissions(int $parent_ref_id)
Exception class for ObjectXMLWriter and ObjectXMLParser.
updateReferences(array $a_object_data)
getPathForRefId(string $sid, int $ref_id)
static getTypeByRefId(int $ref_id, bool $stop_on_error=true)
get object type by reference id
searchObjects(string $sid, ?array $types, string $key, string $combination, ?int $user_id=null)
static _lookupObjId(int $ref_id)
getObjectsByTitle(string $sid, string $a_title, ?int $user_id=null)
getObjIdsByRefIds(string $sid, array $ref_ids)
createReference()
creates reference for object
getObjectByReference(string $sid, int $a_ref_id, ?int $user_id=null)
deleteObject(string $sid, int $reference_id)
canAddType(string $type, string $target_type, int $target_id)
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
const TIMING_TEMPORARILY_AVAILABLE
getRefIdsByObjId(string $sid, int $obj_id)
static getInstance(int $a_user_id)
checkSession(string $sid)
static _isInTrash(int $ref_id)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
static _lookupObjectId(int $ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _adjustMovedObjectConditions(int $a_ref_id)
In the moment it is not allowed to create preconditions on objects that are located outside of a cour...
static _allocateCopyId()
Allocate a copy for further entries.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
copyObject(string $sid, string $copy_settings_xml)
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
putInTree(int $parent_ref_id)
maybe this method should be in tree object!?
static getItem(int $ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
moveObject(string $sid, int $ref_id, int $target_id)
static _getInstance(int $a_copy_id)
addReference(string $sid, int $a_source_id, int $a_target_id)
validateReferences(string $a_action, array $a_object_data, int $a_target_id=0)
static _lookupType(int $id, bool $reference=false)
Class ilObjectActivation.
getTreeChilds(string $sid, int $ref_id, ?array $types=null, ?int $user_id=null)
XML writer class Class to simplify manual writing of xml documents.
removeFromSystemByImportId(string $sid, string $import_id)
addReferences(ilObject $source, array $a_object_data)