/** * 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; }
/** * 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 update event * * called by ilTaskScheduler * * @param ilECSSetting $a_server * @param int $a_econtent_id * @param array $a_mids * @return boolean */ public function handleUpdate(ilECSSetting $a_server, $a_econtent_id, array $a_mids) { global $ilLog; // get content details include_once './Services/WebServices/ECS/classes/class.ilECSEContentDetails.php'; $details = ilECSEContentDetails::getInstance($a_server->getServerId(), $a_econtent_id, $this->getECSObjectType()); if (!$details instanceof ilECSEContentDetails) { $this->handleDelete($a_server, $a_econtent_id); $ilLog->write(__METHOD__ . ': Handling delete of deprecated remote object. DONE'); return; } $ilLog->write(__METHOD__ . ': Receivers are ' . print_r($details->getReceivers(), true)); $ilLog->write(__METHOD__ . ': Senders are ' . print_r($details->getSenders(), true)); // check owner (sender mid) include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php'; if (!ilECSParticipantSettings::getInstanceByServerId($a_server->getServerId())->isImportAllowed($details->getSenders())) { $ilLog->write('Ignoring disabled participant. MID: ' . $details->getOwner()); return true; } // new mids include_once 'Services/WebServices/ECS/classes/class.ilECSImport.php'; include_once 'Services/WebServices/ECS/classes/class.ilECSConnector.php'; foreach (array_intersect($a_mids, $details->getReceivers()) as $mid) { try { $connector = new ilECSConnector($a_server); $res = $connector->getResource($this->getECSObjectType(), $a_econtent_id); if ($res->getHTTPCode() == ilECSConnector::HTTP_CODE_NOT_FOUND) { continue; } $json = $res->getResult(); $GLOBALS['ilLog']->write(__METHOD__ . ': Received json: ' . print_r($json, true)); if (!is_object($json)) { // try as array (workaround for invalid content) $json = $json[0]; if (!is_object($json)) { throw new ilECSConnectorException('invalid json'); } } } catch (ilECSConnectorException $exc) { $ilLog->write(__METHOD__ . ': Error parsing result. ' . $exc->getMessage()); $ilLog->logStack(); return false; } // Update existing // Check receiver mid if ($obj_id = ilECSImport::_isImported($a_server->getServerId(), $a_econtent_id, $mid)) { $ilLog->write(__METHOD__ . ': Handling update for existing object'); $remote = ilObjectFactory::getInstanceByObjId($obj_id, false); if (!$remote instanceof ilRemoteObjectBase) { $ilLog->write(__METHOD__ . ': Cannot instantiate remote object. Got object type ' . $remote->getType()); continue; } $remote->updateFromECSContent($a_server, $json, $details->getMySender()); } else { $GLOBALS['ilLog']->write(__METHOD__ . ': my sender ' . $details->getMySender() . 'vs mid' . $mid); $ilLog->write(__METHOD__ . ': Handling create for non existing object'); $this->createFromECSEContent($a_server, $json, $details->getMySender()); // update import status $ilLog->write(__METHOD__ . ': Updating import status'); include_once './Services/WebServices/ECS/classes/class.ilECSImport.php'; $import = new ilECSImport($a_server->getServerId(), $this->getId()); $import->setEContentId($a_econtent_id); // Store receiver mid $import->setMID($mid); $import->save(); $ilLog->write(__METHOD__ . ': Sending notification'); $this->sendNewContentNotification($a_server->getServerId()); } } $ilLog->write(__METHOD__ . ': done'); return true; }