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)