/** * Is ECS (for current object) active? * * @return boolean */ protected function isActive() { include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php'; if (ilECSServerSettings::getInstance()->activeServerExists()) { // imported objects cannot be exported include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; if (!ilECSImport::lookupServerId($this->content_obj->getId())) { return true; } } return false; }
/** * Delete tree */ protected function dDeleteTree() { include_once './Services/WebServices/ECS/classes/Tree/class.ilECSCmsData.php'; include_once './Services/WebServices/ECS/classes/Tree/class.ilECSCmsTree.php'; $GLOBALS['ilLog']->write('Deleting tree'); $tree = new ilECSCmsTree((int) $_REQUEST['tid']); $tree->deleteTree($tree->getNodeData(ilECSCmsTree::lookupRootId((int) $_REQUEST['tid']))); // also delete import information include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; ilECSImport::deleteRessources($this->getServer()->getServerId(), $this->getMid(), ilECSCmsData::lookupCmsIdsOfTree($this->getServer()->getServerId(), $this->getMid(), (int) $_REQUEST['tid'])); $data = new ilECSCmsData(); $data->setServerId($this->getServer()->getServerId()); $data->setMid($this->getMid()); $data->setTreeId((int) $_REQUEST['tid']); $data->deleteTree(); include_once './Services/WebServices/ECS/classes/Mapping/class.ilECSNodeMappingAssignments.php'; ilECSNodeMappingAssignments::deleteMappings($this->getServer()->getServerId(), $this->getMid(), (int) $_REQUEST['tid']); ilUtil::sendSuccess($this->lng->txt('ecs_cms_tree_deleted'), true); $this->ctrl->redirect($this, 'dTrees'); }
/** * Set new course object imported * @param int $a_content_id * @param ilObjCourse $crs */ protected function setImported($a_content_id, $object, $a_ecs_id = 0, $a_sub_id = 0) { include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $import = new ilECSImport($this->getServer()->getServerId(), is_object($object) ? $object->getId() : 0); $GLOBALS['ilLog']->write(__METHOD__ . ': Imported with ecs id ' . $a_ecs_id); $import->setSubId($a_sub_id); $import->setMID($this->getMid()); $import->setEContentId($a_ecs_id); $import->setContentId($a_content_id); $import->setImported(true); $import->save(); return true; }
/** * Parse * * @access public * @param array array of remote course ids * */ public function parse($a_rcrs) { global $ilObjDataCache; // Preload object data $ilObjDataCache->preloadReferenceCache($a_rcrs); // Read participants include_once './Modules/RemoteCourse/classes/class.ilObjRemoteCourse.php'; include_once './Services/WebServices/ECS/classes/class.ilECSCommunityReader.php'; include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; // read obj_ids $obj_ids = array(); foreach ($a_rcrs as $rcrs_ref_id) { $obj_id = $ilObjDataCache->lookupObjId($rcrs_ref_id); $obj_ids[$obj_id] = $ilObjDataCache->lookupObjId($rcrs_ref_id); } foreach ($obj_ids as $obj_id => $obj_id) { $tmp_arr['obj_id'] = $obj_id; $tmp_arr['sid'] = ilECSImport::lookupServerId($obj_id); $tmp_arr['title'] = $ilObjDataCache->lookupTitle($obj_id); $tmp_arr['desc'] = $ilObjDataCache->lookupDescription($obj_id); $tmp_arr['md'] = ''; $mid = ilObjRemoteCourse::_lookupMID($obj_id); if ($tmp_arr['sid']) { try { $reader = ilECSCommunityReader::getInstanceByServerId($tmp_arr['sid']); } catch (ilECSConnectorException $e) { $reader = null; } if ($reader and $participant = $reader->getParticipantByMID($mid)) { $tmp_arr['from'] = $participant->getParticipantName(); $tmp_arr['from_info'] = $participant->getDescription(); } } else { $tmp_arr['from'] = $this->lng->txt("ecs_server_deleted"); } $tmp_arr['last_update'] = $ilObjDataCache->lookupLastUpdate($obj_id); $content[] = $tmp_arr; } $this->setData($content ? $content : array()); }
/** * check if econtent is imported for a specific mid * * @access public * @static * * @param int econtent id * @param int mid */ public static function _isImported($a_server_id, $a_econtent_id, $a_mid, $a_sub_id = 0) { return ilECSImport::_lookupObjId($a_server_id, $a_econtent_id, $a_mid, $a_sub_id); }
/** * get command frame * * @access public * @param * @return */ public function getCommandFrame($a_cmd) { switch ($a_cmd) { case 'show': include_once './Services/WebServices/ECS/classes/class.ilECSExport.php'; include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; if (ilECSExport::_isRemote(ilECSImport::lookupServerId($this->obj_id), ilECSImport::_lookupEContentId($this->obj_id))) { return '_blank'; } default: return parent::getCommandFrame($a_cmd); } }
/** * Perform update * @param type $a_content_id * @param type $course */ protected function doUpdate($a_usr_id, ilECSEnrolmentStatus $status) { include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $obj_ids = ilECSImport::lookupObjIdsByContentId($status->getId()); $obj_id = end($obj_ids); $ref_ids = ilObject::_getAllReferences($obj_id); $ref_id = end($ref_ids); if (!$ref_id) { // Remote object not found return TRUE; } switch ($status->getStatus()) { case ilECSEnrolmentStatus::STATUS_PENDING: // nothing todo in the moment: maybe send mail break; case ilECSEnrolmentStatus::STATUS_ACTIVE: $GLOBALS['ilLog']->write(__METHOD__ . ': Add desktop item: ' . $a_usr_id . ' ' . $ref_id . ' ' . $obj_id); ilObjUser::_addDesktopItem($a_usr_id, $ref_id, ilObject::_lookupType($obj_id)); break; case ilECSEnrolmentStatus::STATUS_ACCOUNT_DEACTIVATED: case ilECSEnrolmentStatus::STATUS_DENIED: case ilECSEnrolmentStatus::STATUS_REJECTED: case ilECSEnrolmentStatus::STATUS_UNSUBSCRIBED: $GLOBALS['ilLog']->write(__METHOD__ . ': Remove desktop item: ' . $a_usr_id . ' ' . $ref_id . ' ' . $obj_id); ilObjUser::_dropDesktopItem($a_usr_id, $ref_id, ilObject::_lookupType($obj_id)); break; } return TRUE; }
/** * Do delete */ protected function doDelete() { $this->initSettings($_REQUEST['server_id']); $this->settings->delete(); // Delete communities include_once './Services/WebServices/ECS/classes/class.ilECSCommunitiesCache.php'; ilECSCommunitiesCache::delete((int) $_REQUEST['server_id']); include_once './Services/WebServices/ECS/classes/class.ilECSDataMappingSettings.php'; ilECSDataMappingSettings::delete((int) $_REQUEST['server_id']); include_once './Services/WebServices/ECS/classes/class.ilECSEventQueueReader.php'; ilECSEventQueueReader::deleteServer((int) $_REQUEST['server_id']); include_once './Services/WebServices/ECS/classes/class.ilECSExport.php'; ilECSExport::deleteByServer((int) $_REQUEST['server_id']); include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; ilECSImport::deleteByServer((int) $_REQUEST['server_id']); include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php'; ilECSParticipantSettings::deleteByServer((int) $_REQUEST['server_id']); ilUtil::sendSuccess($this->lng->txt('ecs_setting_deleted'), true); $this->ctrl->redirect($this, 'overview'); }
/** * delete object or referenced object * (in the case of a referenced object, object data is only deleted * if last reference is deleted) * This function removes an object entirely from system!! * * @access public * @return boolean true if object was removed completely; false if only a references was removed */ function delete() { global $rbacadmin, $log, $ilDB; $remove = false; // delete object_data entry if (!$this->referenced || $this->countReferences() == 1) { // check type match $db_type = ilObject::_lookupType($this->getId()); if ($this->type != $db_type) { $message = "ilObject::delete(): Type mismatch. Object with obj_id: " . $this->id . " " . "was instantiated by type '" . $this->type . "'. DB type is: " . $db_type; // write log entry $log->write($message); // raise error $this->ilias->raiseError("ilObject::delete(): Type mismatch. (" . $this->type . "/" . $this->id . ")", $this->ilias->error_obj->WARNING); } // delete entry in object_data $q = "DELETE FROM object_data " . "WHERE obj_id = " . $ilDB->quote($this->getId(), "integer"); $ilDB->manipulate($q); // delete long description $query = "DELETE FROM object_description WHERE obj_id = " . $ilDB->quote($this->getId(), "integer"); $ilDB->manipulate($query); // write log entry $log->write("ilObject::delete(), deleted object, obj_id: " . $this->getId() . ", type: " . $this->getType() . ", title: " . $this->getTitle()); // remove news include_once "./Services/News/classes/class.ilNewsItem.php"; $news_item = new ilNewsItem(); $news_item->deleteNewsOfContext($this->getId(), $this->getType()); include_once "./Services/Block/classes/class.ilBlockSetting.php"; ilBlockSetting::_deleteSettingsOfBlock($this->getId(), "news"); include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateObjSettings.php'; ilDidacticTemplateObjSettings::deleteByObjId($this->getId()); /* remove notes (see infoscreen gui) as they can be seen as personal data we are keeping them for now include_once("Services/Notes/classes/class.ilNote.php"); foreach(array(IL_NOTE_PRIVATE, IL_NOTE_PUBLIC) as $note_type) { foreach(ilNote::_getNotesOfObject($this->id, 0, $this->type, $note_type) as $note) { $note->delete(); } } */ // BEGIN WebDAV: Delete WebDAV properties $query = "DELETE FROM dav_property " . "WHERE obj_id = " . $ilDB->quote($this->getId(), 'integer'); $res = $ilDB->manipulate($query); // END WebDAV: Delete WebDAV properties include_once './Services/Tracking/classes/class.ilChangeEvent.php'; ilChangeEvent::_delete($this->getId()); include_once './Services/Tracking/classes/class.ilLPCollections.php'; ilLPCollections::_deleteAll($this->getId()); include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; ilECSImport::_deleteByObjId($this->getId()); $remove = true; } else { // write log entry $log->write("ilObject::delete(), object not deleted, number of references: " . $this->countReferences() . ", obj_id: " . $this->getId() . ", type: " . $this->getType() . ", title: " . $this->getTitle()); } // delete object_reference entry if ($this->referenced) { include_once "Services/Object/classes/class.ilObjectActivation.php"; ilObjectActivation::deleteAllEntries($this->getRefId()); // delete entry in object_reference $query = "DELETE FROM object_reference " . "WHERE ref_id = " . $ilDB->quote($this->getRefId(), 'integer'); $res = $ilDB->manipulate($query); // write log entry $log->write("ilObject::delete(), reference deleted, ref_id: " . $this->getRefId() . ", obj_id: " . $this->getId() . ", type: " . $this->getType() . ", title: " . $this->getTitle()); // DELETE PERMISSION ENTRIES IN RBAC_PA // DONE: method overwritten in ilObjRole & ilObjUser. // this call only applies for objects in rbac (not usr,role,rolt) // TODO: Do this for role templates too $rbacadmin->revokePermission($this->getRefId(), 0, false); include_once "Services/AccessControl/classes/class.ilRbacLog.php"; ilRbacLog::delete($this->getRefId()); // Remove applied didactic template setting include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateObjSettings.php'; ilDidacticTemplateObjSettings::deleteByRefId($this->getRefId()); // Remove desktop items ilUtil::removeItemFromDesktops($this->getRefId()); } // remove conditions if ($this->referenced) { $ch =& new ilConditionHandler(); $ch->delete($this->getRefId()); unset($ch); } return $remove; }
/** * Delete */ public function delete() { global $ilDB; // --- cascading delete include_once 'Services/WebServices/ECS/classes/Tree/class.ilECSCmsData.php'; ilECSCmsData::deleteByServerId($this->getServerId()); include_once 'Services/WebServices/ECS/classes/class.ilECSCommunityCache.php'; ilECSCommunityCache::deleteByServerId($this->getServerId()); include_once 'Services/WebServices/ECS/classes/class.ilECSDataMappingSetting.php'; ilECSDataMappingSetting::deleteByServerId($this->getServerId()); include_once 'Services/WebServices/ECS/classes/class.ilECSEventQueueReader.php'; ilECSEventQueueReader::deleteByServerId($this->getServerId()); include_once 'Services/WebServices/ECS/classes/Mapping/class.ilECSNodeMappingAssignment.php'; ilECSNodeMappingAssignment::deleteByServerId($this->getServerId()); include_once 'Services/WebServices/ECS/classes/class.ilECSParticipantSetting.php'; ilECSParticipantSetting::deleteByServerId($this->getServerId()); include_once 'Services/WebServices/ECS/classes/class.ilECSExport.php'; ilECSExport::deleteByServerId($this->getServerId()); // resetting server id to flag items in imported list include_once 'Services/WebServices/ECS/classes/class.ilECSImport.php'; ilECSImport::resetServerId($this->getServerId()); $ilDB->manipulate('DELETE FROM ecs_server ' . 'WHERE server_id = ' . $ilDB->quote($this->getServerId(), 'integer')); $this->server_id = NULL; return true; }
protected function updateCustomFromECSContent(ilECSSetting $a_server, $a_ecs_content) { // add custom values $this->setAvailabilityType($a_ecs_content->status == 'online' ? self::ACTIVATION_UNLIMITED : self::ACTIVATION_OFFLINE); // :TODO: ACTIVATION_LIMITED is currently not supported in ECS yet // adv. metadata include_once './Services/WebServices/ECS/classes/class.ilECSUtils.php'; include_once './Services/WebServices/ECS/classes/class.ilECSDataMappingSetting.php'; $definition = ilECSUtils::getEContentDefinition($this->getECSObjectType()); $this->importMetadataFromJson($a_ecs_content, $a_server, $definition, ilECSDataMappingSetting::MAPPING_IMPORT_RCRS); include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $import = new ilECSImport($a_server->getServerId(), $this->getId()); $import->setContentId($a_ecs_content->courseID); $import->save(); }
/** * send notification about new user accounts * * @access protected */ protected static function _sendNotification(ilECSSetting $server, ilObjUser $user_obj) { if (!count($server->getUserRecipients())) { return true; } // If sub id is set => mail was send include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $import = new ilECSImport($server->getServerId(), $user_obj->getId()); if ($import->getSubId()) { return false; } include_once './Services/Language/classes/class.ilLanguageFactory.php'; $lang = ilLanguageFactory::_getLanguage(); $lang->loadLanguageModule('ecs'); include_once './Services/Mail/classes/class.ilMail.php'; $mail = new ilMail(6); $mail->enableSoap(false); $subject = $lang->txt('ecs_new_user_subject'); // build body $body = $lang->txt('ecs_new_user_body') . "\n\n"; $body .= $lang->txt('ecs_new_user_profile') . "\n\n"; $body .= $user_obj->getProfileAsString($lang) . "\n\n"; $body .= ilMail::_getAutoGeneratedMessageString($lang); $mail->sendMail($server->getUserRecipientsAsString(), "", "", $subject, $body, array(), array("normal")); // Store sub_id = 1 in ecs import which means mail is send $import->setSubId(1); $import->save(); return true; }
/** * Called from base class after successful login * * @param string username */ public function loginObserver($a_username, $a_auth) { include_once './Services/WebServices/ECS/classes/class.ilECSUser.php'; $user = new ilECSUser($_GET); if (!($usr_id = ilObject::_lookupObjIdByImportId($user->getImportId()))) { $username = $this->createUser($user); } else { $username = $this->updateUser($user, $usr_id); } // set user imported include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $import = new ilECSImport($this->getCurrentServer()->getServerId(), $usr_id); $import->save(); $a_auth->setAuth($username); $this->log->write(__METHOD__ . ': Login succesesful'); return true; }
/** * Called from base class after successful login * * @param string username */ public function loginObserver($a_username, $a_auth) { include_once './Services/WebServices/ECS/classes/class.ilECSUser.php'; $user = new ilECSUser($_GET); if (!($usr_id = ilObject::_lookupObjIdByImportId($user->getImportId()))) { $username = $this->createUser($user); } else { $username = $this->updateUser($user, $usr_id); } // set user imported include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $import = new ilECSImport($this->getCurrentServer()->getServerId(), $usr_id); $import->save(); // Store remote user data include_once './Services/WebServices/ECS/classes/class.ilECSRemoteUser.php'; $remote = new ilECSRemoteUser(); $remote->setServerId($this->getCurrentServer()->getServerId()); $remote->setMid($this->getMID()); $remote->setRemoteUserId($user->getImportId()); $remote->setUserId(ilObjUser::_lookupId($username)); $GLOBALS['ilLog']->write(__METHOD__ . ': Current username ' . $username); if (!$remote->exists()) { $remote->create(); } $a_auth->setAuth($username); $this->log->write(__METHOD__ . ': Login succesesful'); return true; }
/** * Reread all imported econtent. * * @return bool * @static * throws ilException, ilECSConnectorException */ public static function handleImportReset(ilECSSetting $server) { global $ilLog; include_once 'Services/WebServices/ECS/classes/class.ilECSConnector.php'; include_once 'Services/WebServices/ECS/classes/class.ilECSConnectorException.php'; try { include_once './Services/WebServices/ECS/classes/class.ilECSEventQueueReader.php'; include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; include_once './Services/WebServices/ECS/classes/class.ilECSExport.php'; $types = self::getAllEContentTypes(); $event_queue = new ilECSEventQueueReader($server->getServerId()); $event_queue->deleteAllEContentEvents($types); $list = self::getAllResourceIds($server, $types); $imported = ilECSImport::getAllImportedRemoteObjects($server->getServerId()); $GLOBALS['ilLog']->write(__METHOD__ . ': Imported = ' . print_r($imported, true)); $GLOBALS['ilLog']->write(__METHOD__ . ': List = ' . print_r($list, true)); foreach ($list as $resource_type => $link_ids) { if (!in_array($resource_type, ilECSUtils::getPossibleRemoteTypes())) { $GLOBALS['ilLog']->write(__METHOD__ . ': Ignoring resource type ' . $resource_type); continue; } foreach ((array) $link_ids as $link_id) { if (!isset($imported[$link_id])) { // Add create event for not imported econtent $event_queue->add($resource_type, $link_id, ilECSEvent::CREATED); } else { // Add update event for already existing events $event_queue->add($resource_type, $link_id, ilECSEvent::UPDATED); } if (isset($imported[$link_id])) { unset($imported[$link_id]); } } } if (is_array($imported)) { // Delete event for deprecated econtent include_once 'Services/WebServices/ECS/classes/class.ilECSObjectSettings.php'; foreach ($imported as $econtent_id => $obj_id) { $type = self::getEventTypeFromObjectType(ilObject::_lookupType($obj_id)); if ($type) { $event_queue->add($type, $econtent_id, ilECSEvent::DESTROYED); } } } } catch (ilECSConnectorException $e1) { $ilLog->write('Cannot connect to ECS server: ' . $e1->getMessage()); throw $e1; } catch (ilException $e2) { $ilLog->write('Update failed: ' . $e2->getMessage()); throw $e2; } return true; }
/** * Read course from ecs * @return boolean */ private function readCourse($course_member) { try { include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $ecs_id = ilECSImport::lookupEContentIdByContentId($this->getServer()->getServerId(), $this->getMid(), $course_member->lectureID); include_once './Services/WebServices/ECS/classes/Course/class.ilECSCourseConnector.php'; $crs_reader = new ilECSCourseConnector($this->getServer()); return $crs_reader->getCourse($ecs_id); } catch (ilECSConnectorException $e) { throw $e; } }
/** * Handle delete event * * called by ilTaskScheduler * * @param ilECSSetting $a_server * @param int $a_econtent_id * @param int $a_mid * @return boolean */ public function handleDelete(ilECSSetting $a_server, $a_econtent_id, $a_mid = 0) { global $tree, $ilLog; include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; // there is no information about the original mid anymore. // Therefor delete any remote objects with given econtent id $obj_ids = ilECSImport::_lookupObjIds($a_server->getServerId(), $a_econtent_id); $ilLog->write(__METHOD__ . ': Received obj_ids ' . print_r($obj_ids, true)); foreach ($obj_ids as $obj_id) { $references = ilObject::_getAllReferences($obj_id); foreach ($references as $ref_id) { if ($tmp_obj = ilObjectFactory::getInstanceByRefId($ref_id, false)) { $ilLog->write(__METHOD__ . ': Deleting obsolete remote course: ' . $tmp_obj->getTitle()); $tmp_obj->delete(); $tree->deleteTree($tree->getNodeData($ref_id)); } unset($tmp_obj); } } return true; }
/** * Sync category * @param ilECSNodeMappingAssignment $ass */ protected function syncCategory(ilECSNodeMappingAssignment $ass, $parent_id) { include_once './Services/WebServices/ECS/classes/Tree/class.ilECSCmsData.php'; $data = new ilECSCmsData($ass->getCSId()); // Check if node is imported => create // perform title update // perform position update include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $obj_id = ilECSImport::lookupObjIdByContentId($this->getServer()->getServerId(), $this->mid, $data->getCmsId()); if ($obj_id) { $refs = ilObject::_getAllReferences($obj_id); $ref_id = end($refs); $cat = ilObjectFactory::getInstanceByRefId($ref_id, false); if ($cat instanceof ilObject and $this->default_settings['title_update']) { $GLOBALS['ilLog']->write(__METHOD__ . ': Updating cms category '); $GLOBALS['ilLog']->write(__METHOD__ . ': Title is ' . $data->getTitle()); $cat->deleteTranslation($GLOBALS['lng']->getDefaultLanguage()); $cat->addTranslation($data->getTitle(), $cat->getLongDescription(), $GLOBALS['lng']->getDefaultLanguage(), 1); $cat->setTitle($data->getTitle()); $cat->update(); } else { $GLOBALS['ilLog']->write(__METHOD__ . ': Updating cms category -> nothing to do'); } return $ref_id; } elseif ($this->getGlobalSettings()->isEmptyContainerCreationEnabled()) { $GLOBALS['ilLog']->write(__METHOD__ . ': Creating new cms category'); // Create category include_once './Modules/Category/classes/class.ilObjCategory.php'; $cat = new ilObjCategory(); $cat->setTitle($data->getTitle()); $cat->create(); // true for upload $cat->createReference(); $cat->putInTree($parent_id); $cat->setPermissions($parent_id); $cat->deleteTranslation($GLOBALS['lng']->getDEfaultLanguage()); $cat->addTranslation($data->getTitle(), $cat->getLongDescription(), $GLOBALS['lng']->getDefaultLanguage(), 1); // set imported $import = new ilECSImport($this->getServer()->getServerId(), $cat->getId()); $import->setMID($this->mid); $import->setContentId($data->getCmsId()); $import->setImported(true); $import->save(); return $cat->getRefId(); } else { $GLOBALS['ilLog']->write(__METHOD__ . ': Creation of empty containers is disabled.'); return 0; } }
/** * Handle delete event * * called by ilTaskScheduler * * @param ilECSSetting $a_server * @param int $a_econtent_id * @param int $a_mid * @return boolean */ public function handleDelete(ilECSSetting $a_server, $a_econtent_id, $a_mid = 0) { global $tree, $ilLog; include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; // if mid is zero delete all obj_ids if (!$a_mid) { $obj_ids = ilECSImport::_lookupObjIds($a_server->getServerId(), $a_econtent_id); } else { $obj_ids = (array) ilECSImport::_lookupObjId($a_server->getServerId(), $a_econtent_id, $a_mid); } $ilLog->write(__METHOD__ . ': Received obj_ids ' . print_r($obj_ids, true)); foreach ($obj_ids as $obj_id) { $references = ilObject::_getAllReferences($obj_id); foreach ($references as $ref_id) { if ($tmp_obj = ilObjectFactory::getInstanceByRefId($ref_id, false)) { $ilLog->write(__METHOD__ . ': Deleting obsolete remote course: ' . $tmp_obj->getTitle()); $tmp_obj->delete(); $tree->deleteTree($tree->getNodeData($ref_id)); } unset($tmp_obj); } } return true; }