public function assignAdmin()
 {
     $this->pluginObj->includeClass('class.ilAdobeConnectRoles.php');
     $xavcRoles = new ilAdobeConnectRoles($this->object->getRefId());
     if (!is_array($_POST['usr_id'])) {
         ilUtil::sendInfo($this->txt('participants_select_one'));
         return $this->editParticipants();
     }
     foreach ($_POST['usr_id'] as $usr_id) {
         $xavcRoles->detachMemberRole($usr_id);
         $xavcRoles->addAdministratorRole($usr_id);
     }
     ilUtil::sendInfo($this->txt('administrators_assigned_successfully'));
     return $this->editParticipants();
 }
 /**
  * Do Cloning
  */
 public function doClone($a_target_id, $a_copy_id, $new_obj)
 {
     /**
      * @var $ilDB   ilDB
      * @var $ilUser ilObjUser
      */
     global $ilDB, $ilUser;
     // to avoid date-conflicts:
     // start_date = now - 2h
     // duration = 1h
     $now = new ilDateTime(time(), IL_CAL_UNIX);
     $this->start_date = new ilDateTime($now->getUnixTime() - 7200, IL_CAL_UNIX);
     //$this->start_date = new ilDateTime(0, IL_CAL_UNIX);
     $this->duration = array('hours' => 1, 'minutes' => 0);
     $new_obj->setStartDate($this->getStartDate());
     $new_obj->setInstructions($this->getInstructions());
     $new_obj->setContactInfo($this->getContactInfo());
     $new_obj->setPermanentRoom($this->getPermanentRoom());
     $new_obj->setReadContents($this->getReadContents());
     $new_obj->setReadRecords($this->getReadRecords());
     $new_obj->setDuration($this->getDuration());
     $new_obj->setURL($this->getURL());
     $new_obj->setScoId($this->getScoId());
     $new_obj->setFolderId($this->getFolderId());
     $new_obj->update();
     // add xavc-member,  assign roles
     $new_obj_id = $new_obj->getId();
     $res = $ilDB->queryF('SELECT sco_id FROM rep_robj_xavc_data WHERE id = %s', array('integer'), array($new_obj_id));
     $row = $ilDB->fetchAssoc($res);
     $new_sco_id = $row['sco_id'];
     $this->pluginObj->includeClass('class.ilXAVCMembers.php');
     $this->pluginObj->includeClass('class.ilAdobeConnectRoles.php');
     $xavcMemberObj = new ilXAVCMembers($new_obj->getRefId(), $ilUser->getId());
     $xavcMemberObj->setPresenterStatus();
     $xavcMemberObj->setScoId($new_sco_id);
     $xavcMemberObj->insertXAVCMember();
     $xavc_role = new ilAdobeConnectRoles($new_obj->getRefId());
     $xavc_role->addAdministratorRole($ilUser->getId());
     if (ilAdobeConnectServer::getSetting('add_to_desktop') == 1) {
         ilObjUser::_addDesktopItem($ilUser->getId(), $new_obj->getRefId(), 'xavc');
     }
 }
 public function performCrsGrpTrigger()
 {
     ignore_user_abort(true);
     @set_time_limit(0);
     $response = new stdClass();
     $response->succcess = false;
     $this->pluginObj->includeClass('class.ilAdobeConnectServer.php');
     if ((int) ilAdobeConnectServer::getSetting('allow_crs_grp_trigger') == 0) {
         echo json_encode($response);
         exit;
     }
     global $tree;
     $this->pluginObj->includeClass('class.ilXAVCMembers.php');
     $parent_crs_ref = $tree->checkForParentType($this->object->getRefId(), 'crs');
     $parent_grp_ref = $tree->checkForParentType($this->object->getRefId(), 'grp');
     $ok = false;
     if ($parent_crs_ref && empty($parent_grp_ref)) {
         $ok = true;
         $obj_id = ilObject::_lookupObjectId($parent_crs_ref);
         include_once 'Modules/Course/classes/class.ilCourseParticipants.php';
         $oParticipants = ilCourseParticipants::_getInstanceByObjId($obj_id);
     } else {
         if ($parent_grp_ref) {
             $ok = true;
             $obj_id = ilObject::_lookupObjectId($parent_grp_ref);
             include_once 'Modules/Group/classes/class.ilGroupParticipants.php';
             $oParticipants = ilGroupParticipants::_getInstanceByObjId($obj_id);
         }
     }
     if ($ok) {
         $sco_id = ilObjAdobeConnect::_lookupScoId(ilObject::_lookupObjectId($this->object->getRefId()));
         $current_member_ids = ilXAVCMembers::getMemberIds($this->object->getRefId());
         $crs_grp_member_ids = $oParticipants->getParticipants();
         if (count($current_member_ids) == 0 && count($crs_grp_member_ids) > 0) {
             $this->object->addCrsGrpMembers($this->object->getRefId(), $sco_id);
         } else {
             $new_member_ids = array_diff($crs_grp_member_ids, $current_member_ids);
             $delete_member_ids = array_diff($current_member_ids, $crs_grp_member_ids);
             $ongoing_member_ids = array_intersect($current_member_ids, $crs_grp_member_ids);
             if (is_array($new_member_ids) && count($new_member_ids) > 0) {
                 $this->object->addCrsGrpMembers($this->object->getRefId(), $sco_id, $new_member_ids);
             }
             if (is_array($delete_member_ids) && count($delete_member_ids) > 0) {
                 $this->object->deleteCrsGrpMembers($sco_id, $delete_member_ids);
             }
             //This is necessary to assure consistency between Ilias Roles on Group/Course and on the Adobe Connect Room.
             //Excemption granted for none Switch Server Types, as there is no way to test this for us.
             $this->pluginObj->includeClass('class.ilAdobeConnectRoles.php');
             $xavc_role = new ilAdobeConnectRoles($this->object->getRefId());
             $settings = ilAdobeConnectServer::_getInstance();
             if ($settings->getAuthMode() == ilAdobeConnectServer::AUTH_MODE_SWITCHAAI) {
                 foreach ($ongoing_member_ids as $member_id) {
                     $is_admin = $xavc_role->isAdministrator($member_id);
                     if ($oParticipants->isAdmin($member_id) && !$is_admin) {
                         $xavc_role->detachMemberRole($member_id);
                         $xavc_role->addAdministratorRole($member_id);
                     } else {
                         if ($oParticipants->isMember($member_id) && $is_admin) {
                             $xavc_role->detachAdministratorRole($member_id);
                             $xavc_role->addMemberRole($member_id);
                         }
                     }
                 }
             }
         }
     }
     $response->succcess = true;
     echo json_encode($response);
     exit;
 }