/** * 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; }
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; }