get('tool_enable'); $om_host = $plugin->get('host'); $om_user = $plugin->get('user'); $om_pass = $plugin->get('pass'); $this->table = Database::get_main_table('plugin_om_meeting'); if ( $om_plugin ) { $user_info = api_get_user_info(); $this->user_complete_name = $user_info['complete_name']; $this->user = $om_user; $this->pass = $om_pass; $this->url = $om_host; // Setting OM api define('CONFIG_OMUSER_SALT', $this->user); define('CONFIG_OMPASS_SALT', $this->pass); define('CONFIG_OMSERVER_BASE_URL', $this->url); $this->api = new OpenMeetings(); $this->plugin_enabled = $om_plugin; } } /** * Checks whether a user is teacher in the current course * @return bool True if the user can be considered a teacher in this course, false otherwise */ function is_teacher() { return api_is_course_admin() || api_is_coach() || api_is_platform_admin(); } /** * Login the user with OM Server * @return bool True if the user is correct and false when is incorrect */ function loginUser() { try { $objGetSession = new getSession(); $objloginUser = new loginUser(); $urlWsdl = CONFIG_OMSERVER_BASE_URL . "/services/UserService?wsdl"; $omServices = new SoapClient( $urlWsdl ); //Verifying if there is already an active session if(empty($_SESSION['sessOpenMeeting'])) { $gsFun = $omServices->getSession($objGetSession); $_SESSION['sessOpenMeeting'] = $objloginUser->SID = $this->sessionId = $gsFun->return->session_id; $objloginUser->username = CONFIG_OMUSER_SALT; $objloginUser->userpass = CONFIG_OMPASS_SALT; $luFn = $omServices->loginUser($objloginUser); if ( $luFn->return > 0 ) return true; else return false; }else{ $this->sessionId = $_SESSION['sessOpenMeeting']; return true; } } catch( SoapFault $e){ echo "
We have detected some problems Fault: {$e->faultstring}
"; return false; } } /* * Creating a Room for the meeting * @return bool True if the user is correct and false when is incorrect */ function create_meeting( $params ) { //$id = Database::insert($this->table, $params); try{ $objAddRoom = new addRoomWithModerationAndExternalType(); $roomtypes_id = $isModerated = ( $this->is_teacher() ) ? 1 : 2 ; $params['c_id'] = api_get_course_int_id(); $course_name = 'COURSE_ID_' . $params['c_id'] .'_NAME_' . $params['meeting_name']; $urlWsdl = CONFIG_OMSERVER_BASE_URL . "/services/RoomService?wsdl"; $objAddRoom->SID = $this->sessionId; $objAddRoom->name = $course_name; $objAddRoom->roomtypes_id = $roomtypes_id; $objAddRoom->comment = 'Curso: ' . $params['meeting_name'] . ' Plugin for Chamilo'; $objAddRoom->numberOfPartizipants = 40; $objAddRoom->ispublic = true; $objAddRoom->appointment = false; $objAddRoom->isDemoRoom = false; $objAddRoom->demoTime = false; $objAddRoom->isModeratedRoom = $isModerated; $objAddRoom->externalRoomType = true; $omServices = new SoapClient( $urlWsdl ); $adFun = $omServices->addRoomWithModerationAndExternalType( $objAddRoom ); if( $adFun->return > -1 ){ $meetingId = $params['id'] = $adFun->return; $params['status'] = '1'; $params['meeting_name'] = $course_name; $params['created_at'] = date('l jS \of F Y h:i:s A'); Database::insert($this->table, $params); $this->join_meeting($meetingId); }else{ return -1; } }catch( SoapFault $e){ echo "We have detected some problems Fault: {$e->faultstring}
"; return -1; } } /** * Returns a meeting "join" URL * @param string The name of the meeting (usually the course code) * @return mixed The URL to join the meeting, or false on error * @todo implement moderator pass * @assert ('') === false * @assert ('abcdefghijklmnopqrstuvwxyzabcdefghijklmno') === false */ function join_meeting($meetingid) { if (empty($meetingid)) { return false; } $meeting_data = Database::select('*', $this->table, array('where' => array('id = ? AND status = 1 ' => $meetingid)), 'first'); if (empty($meeting_data)) { if ($this->debug) error_log("meeting does not exist: $meetingid "); return false; } $params = array( 'room_id' => $meetingid ); $returnVal = $this->setUserObjectAndGenerateRoomHashByURLAndRecFlag( $params ); //$urlWithoutProtocol = str_replace("http://", CONFIG_OMSERVER_BASE_URL); //$imgWithoutProtocol = str_replace("http://", $_SESSION['_user']['avatar'] ); $iframe = CONFIG_OMSERVER_BASE_URL . "/?" . "secureHash=" . $returnVal /*. '&username=FRAGOTE' . '&firstname=DD' . '&lastname=DDDD' . '&profilePictureUrl=X' . '&email=xxx' . '&externalUserId=fragote' . '&room_id=38' . '&scopeRoomId=38' . '&becomeModeratorAsInt=1' . '&showAudioVideoTestAsInt=0' . '&allowRecording=1'*/; printf("", $iframe, "100%", 640); } /** * Checks if the videoconference server is running. * Function currently disabled (always returns 1) * @return bool True if server is running, false otherwise * @assert () === false */ function is_server_running() { return true; } /** * Gets the password for a specific meeting for the current user * @return string A moderator password if user is teacher, or the course code otherwise */ function get_user_meeting_password() { if ($this->is_teacher()) { return $this->get_mod_meeting_password(); } else { return api_get_course_id(); } } /** * Generated a moderator password for the meeting * @return string A password for the moderation of the videoconference */ function get_mod_meeting_password() { return api_get_course_id().'mod'; } /** * Get information about the given meeting * @param array ...? * @return mixed Array of information on success, false on error * @assert (array()) === false */ function get_meeting_info($params) { try { $result = $this->api->getMeetingInfoArray($params); if ($result == null) { if ($this->debug) error_log("Failed to get any response. Maybe we can't contact the BBB server."); } else { return $result; } } catch (Exception $e) { if ($this->debug) error_log('Caught exception: ', $e->getMessage(), "\n"); } return false; } function setUserObjectAndGenerateRecordingHashByURL( $params ) { $username = $_SESSION['_user']['username']; $firstname = $_SESSION['_user']['firstname']; $lastname = $_SESSION['_user']['lastname']; $userId = $_SESSION['_user']['user_id']; $systemType = 'chamilo'; $room_id = $params['room_id']; $urlWsdl = CONFIG_OMSERVER_BASE_URL . "/services/UserService?wsdl"; $omServices = new SoapClient( $urlWsdl ); $objRec = new setUserObjectAndGenerateRecordingHashByURL(); $objRec->SID = $this->sessionId; $objRec->username = $username; $objRec->firstname = $firstname; $objRec->lastname = $lastname; $objRec->externalUserId = $userId; $objRec->externalUserType = $systemType; $objRec->recording_id = $recording_id; $orFn = $omServices->setUserObjectAndGenerateRecordingHashByURL( $objRec ); return $orFn->return; } function setUserObjectAndGenerateRoomHashByURLAndRecFlag( $params ) { $username = $_SESSION['_user']['username']; $firstname = $_SESSION['_user']['firstname']; $lastname = $_SESSION['_user']['lastname']; $profilePictureUrl = $_SESSION['_user']['avatar']; $email = $_SESSION['_user']['mail']; $userId = $_SESSION['_user']['user_id']; $systemType = 'Chamilo'; $room_id = $params['room_id']; $becomeModerator = ( $this->is_teacher() ? 1 : 0 ); $allowRecording = 1; //Provisional $urlWsdl = CONFIG_OMSERVER_BASE_URL . "/services/UserService?wsdl"; $omServices = new SoapClient( $urlWsdl ); $objRec = new setUserObjectAndGenerateRoomHashByURLAndRecFlag(); $objRec->SID = $this->sessionId; $objRec->username = $username; $objRec->firstname = $firstname; $objRec->lastname = $lastname; $objRec->profilePictureUrl = $profilePictureUrl; $objRec->email = $email; $objRec->externalUserId = $userId; $objRec->externalUserType = $systemType; $objRec->room_id = $room_id; $objRec->becomeModeratorAsInt = $becomeModerator; $objRec->showAudioVideoTestAsInt = 1; $objRec->allowRecording = $allowRecording; $rcFn = $omServices->setUserObjectAndGenerateRoomHashByURLAndRecFlag( $objRec ); return $rcFn->return; } /** * Gets all the course meetings saved in the plugin_bbb_meeting table * @return array Array of current open meeting rooms */ function get_course_meetings() { $new_meeting_list = array(); $item = array(); $pass = $this->get_user_meeting_password(); $this->loginUser(); $meeting_list = Database::select('*', $this->table, array('where' => array('c_id = ? ' => api_get_course_int_id()))); $urlWsdl = CONFIG_OMSERVER_BASE_URL . "/services/RoomService?wsdl"; $omServices = new SoapClient($urlWsdl); $objRoom = new getRoomById(); $objCurrentUsers = new getRoomWithCurrentUsersById(); $objRoom->SID = $objCurrentUsers->SID = $this->sessionId; foreach ($meeting_list as $meeting_db) { $objRoom->rooms_id = $objCurrentUsers->rooms_id = $meeting_db['id']; try{ $objRoomId = $omServices->getRoomById($objRoom); if(empty($objRoomId->return)){ Database::delete($this->table, "id = {$meeting_db['id']}"); continue; } $objCurUs = $omServices->getRoomWithCurrentUsersById($objCurrentUsers); }catch( SoapFault $e ){ echo $e->faultstring; exit; } //if( empty($objCurUs->returnMeetingID) ) continue; $current_room = array( 'roomtype' => $objCurUs->return->roomtype->roomtypes_id, 'meetingName' => $objCurUs->return->name, 'meetingId' => $objCurUs->return->meetingID, 'createTime' => $objCurUs->return->rooms_id, 'showMicrophoneStatus' => $objCurUs->return->showMicrophoneStatus, 'attendeePw' => $objCurUs->return->attendeePW, 'moderatorPw' => $objCurUs->return->moderators, 'isClosed' => $objCurUs->return->isClosed, 'allowRecording' => $objCurUs->return->allowRecording, 'startTime' => $objCurUs->return->startTime, 'endTime' => $objCurUs->return->updatetime, 'participantCount' => count($objCurUs->return->currentusers), 'maxUsers' => $objCurUs->return->numberOfPartizipants, 'moderatorCount' => count($objCurUs->return->moderators) ); // Then interate through attendee results and return them as part of the array: if (!empty($objCurUs->return->currentusers)) { foreach ($objCurUs->return->currentusers as $a) $current_room[] = array( 'userId' => $a->username, 'fullName' => $a->firstname . " " . $a->lastname, 'isMod' => $a->isMod ); } $meeting_om = $current_room; if (empty( $meeting_om )) if ($meeting_db['status'] == 1 && $this->is_teacher()) $this->end_meeting($meeting_db['id']); else $meeting_om['add_to_calendar_url'] = api_get_self().'?action=add_to_calendar&id='.$meeting_db['id'].'&start='.api_strtotime($meeting_db['startTime']); $meeting_om['end_url'] = api_get_self().'?action=end&id='.$meeting_db['id']; $record_array = array(); // if ($meeting_db['record'] == 1) { // $recordingParams = array( // 'meetingId' => $meeting_db['id'], //-- OPTIONAL - comma separate if multiple ids // ); // // $records = $this->api->getRecordingsWithXmlResponseArray($recordingParams); // if (!empty($records)) { // $count = 1; // if (isset($records['message']) && !empty($records['message'])) { // if ($records['messageKey'] == 'noRecordings') { // $record_array[] = get_lang('NoRecording'); // } else { // //$record_array[] = $records['message']; // } // } else { // foreach ($records as $record) { // if (is_array($record) && isset($record['recordId'])) { // $url = Display::url(get_lang('ViewRecord'), $record['playbackFormatUrl'], array('target' => '_blank')); // if ($this->is_teacher()) { // $url .= Display::url(Display::return_icon('link.gif',get_lang('CopyToLinkTool')), api_get_self().'?action=copy_record_to_link_tool&id='.$meeting_db['id'].'&record_id='.$record['recordId']); // $url .= Display::url(Display::return_icon('agenda.png',get_lang('AddToCalendar')), api_get_self().'?action=add_to_calendar&id='.$meeting_db['id'].'&start='.api_strtotime($meeting_db['created_at']).'&url='.$record['playbackFormatUrl']); // $url .= Display::url(Display::return_icon('delete.png',get_lang('Delete')), api_get_self().'?action=delete_record&id='.$record['recordId']); // } // //$url .= api_get_self().'?action=publish&id='.$record['recordID']; // $count++; // $record_array[] = $url; // } else { // // } // } // } // } // //var_dump($record_array); // $item['show_links'] = implode('We have detected some problems Fault: {$e->faultstring}
"; exit; return -1; } } }