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