/**
  * @maybe 
  * Constructor
  */
 public function __construct(ilECSSetting $server)
 {
     $this->server = $server;
     $this->mapping = ilECSNodeMappingSettings::getInstance();
     include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
     $this->mid = ilECSParticipantSettings::loookupCmsMid($this->getServer()->getServerId());
 }
 /**
  * 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');
 }
 /**
  * Set tabs
  * @global ilTabsGUI $ilTabs
  */
 protected function setTabs()
 {
     global $ilTabs;
     include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
     $ilTabs->clearTargets();
     $ilTabs->setBackTarget($this->lng->txt('ecs_back_settings'), $this->ctrl->getParentReturn($this));
     // Directories are only visible for import type campus managment.
     if (ilECSParticipantSettings::loookupCmsMid($this->getServer()->getServerId()) == $this->getMid()) {
         $ilTabs->addTab('ecs_dir_allocation', $this->lng->txt('ecs_dir_alloc'), $this->ctrl->getLinkTarget($this, 'dSettings'));
     }
     $ilTabs->addTab('ecs_crs_allocation', $this->lng->txt('ecs_crs_alloc'), $this->ctrl->getLinkTarget($this, 'cStart'));
 }
 /**
  * Refresh participants
  */
 protected function refreshParticipants()
 {
     include_once './Services/WebServices/ECS/classes/class.ilECSCommunityReader.php';
     include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php';
     include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
     include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSetting.php';
     $servers = ilECSServerSettings::getInstance();
     $servers->readInactiveServers();
     foreach ($servers->getServers() as $server) {
         $creader = ilECSCommunityReader::getInstanceByServerId($server->getServerId());
         // read community
         foreach (ilECSParticipantSettings::getAvailabeMids($server->getServerId()) as $mid) {
             if (!$creader->getParticipantByMID($mid)) {
                 $GLOBALS['ilLog']->write(__METHOD__ . ': Deleting deprecated participant ' . $server->getServerId() . ' ' . $mid);
                 $part = new ilECSParticipantSetting($server->getServerId(), $mid);
                 $part->delete();
             }
         }
     }
     ilUtil::sendSuccess($this->lng->txt('settings_saved'), TRUE);
     $this->ctrl->redirect($this, 'communities');
 }
 /**
  * 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;
 }
 /**
  * Update ECS Export Settings
  *
  * Processes post data from addSettingstoForm()
  * to be used in ilObject->update() AFTER object data has been updated
  * 
  * @return bool
  */
 public function handleSettingsUpdate()
 {
     if (!$this->isActive()) {
         return true;
     }
     // Parse post data
     $mids = array();
     foreach ((array) $_POST['ecs_sid'] as $sid_mid) {
         $tmp = explode('_', $sid_mid);
         $mids[$tmp[0]][] = $tmp[1];
     }
     try {
         include_once './Services/WebServices/ECS/classes/class.ilECSCommunitiesCache.php';
         include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
         include_once './Services/WebServices/ECS/classes/class.ilECSSetting.php';
         // Update for each server
         foreach (ilECSParticipantSettings::getExportServers() as $server_id) {
             $server = ilECSSetting::getInstanceByServerId($server_id);
             if ($server->isEnabled()) {
                 // Export
                 $export = true;
                 if (!$_POST['ecs_export']) {
                     $export = false;
                 }
                 if (!count($mids[$server_id])) {
                     $export = false;
                 }
                 $this->handleSettingsForServer($server, $export, $mids[$server_id]);
             }
         }
     } catch (ilECSConnectorException $exc) {
         ilUtil::sendFailure('Error exporting to ECS server: ' . $exc->getMessage());
         return false;
     }
     return true;
 }
 /**
  * init handler
  */
 private function init()
 {
     include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
     $this->mid = ilECSParticipantSettings::loookupCmsMid($this->getServer()->getServerId());
 }
 /**
  * get enabled participants
  *
  * @access public
  * 
  */
 public function getEnabledParticipants()
 {
     include_once './Services/WebServices/ECS/classes/class.ilECSParticipantSettings.php';
     $ps = ilECSParticipantSettings::getInstanceByServerId($this->getServer()->getServerId());
     $en = $ps->getEnabledParticipants();
     foreach ($this->getCommunities() as $community) {
         foreach ($community->getParticipants() as $participant) {
             if (in_array($participant->getMid(), $en)) {
                 $e_part[] = $participant;
             }
         }
     }
     return $e_part ? $e_part : array();
 }