= 6 ) { $this->userName = func_get_arg(0); $this->meetingID = func_get_arg(1); $this->welcomeString = func_get_arg(2); $this->modPW = func_get_arg(3); $this->attPW = func_get_arg(4); $this->securitySalt = func_get_arg(5); $this->URL = func_get_arg(6); $arg_list = func_get_args(); }// end else if } //------------------------------------------------GET URLs------------------------------------------------- /** *This method returns the url to join the specified meeting. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param username -- the display name to be used when the user joins the meeting *@param PW -- the attendee or moderator password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return The url to join the meeting */ public static function joinURL( $meetingID, $userName, $PW, $SALT, $URL ) { $url_join = $URL."api/join?"; $params = 'meetingID='.urlencode($meetingID).'&fullName='.urlencode($userName).'&password='.urlencode($PW); return ($url_join.$params.'&checksum='.sha1("join".$params.$SALT) ); } /** *This method returns the url to join the specified meeting. * *@param name -- a name fot the meeting *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param attendeePW -- the attendee of the meeting *@param moderatorPW -- the moderator of the meeting *@param welcome -- the welcome message that gets displayed on the chat window *@param logoutURL -- the URL that the bbb client will go to after users logouut *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server *@param record -- the flag which indicate if the meetings will be recorded or not record=true|false, default false *@param duration -- this value indicate the duration of a meeting to be recorded. Duration is represented in munutes * *@return The url to join the meeting */ public static function createMeetingURL($name, $meetingID, $attendeePW, $moderatorPW, $welcome, $logoutURL, $SALT, $URL, $record = 'false', $duration=0, $voiceBridge=0, $metadata = array() ) { $url_create = $URL."api/create?"; if ( $voiceBridge == 0) $voiceBridge = 70000 + rand(0, 9999); $meta = ''; while ($data = current($metadata)) { $meta = $meta.'&'.key($metadata).'='.urlencode($data); next($metadata); } $params = 'name='.urlencode($name).'&meetingID='.urlencode($meetingID).'&attendeePW='.urlencode($attendeePW).'&moderatorPW='.urlencode($moderatorPW).'&voiceBridge='.$voiceBridge.'&logoutURL='.urlencode($logoutURL).'&record='.$record.$meta; $duration = intval($duration); if( $duration > 0 ) $params .= '&duration='.$duration; if( trim( $welcome ) ) $params .= '&welcome='.urlencode($welcome); return ( $url_create.$params.'&checksum='.sha1("create".$params.$SALT) ); } /** *This method returns the url to check if the specified meeting is running. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return The url to check if the specified meeting is running. */ public static function isMeetingRunningURL( $meetingID, $URL, $SALT ) { $base_url = $URL."api/isMeetingRunning?"; $params = 'meetingID='.urlencode($meetingID); return ($base_url.$params.'&checksum='.sha1("isMeetingRunning".$params.$SALT) ); } /** *This method returns the url to getMeetingInfo of the specified meeting. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param modPW -- the moderator password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return The url to check if the specified meeting is running. */ public static function getMeetingInfoURL( $meetingID, $modPW, $URL, $SALT ) { $base_url = $URL."api/getMeetingInfo?"; $params = 'meetingID='.urlencode($meetingID).'&password='.urlencode($modPW); return ( $base_url.$params.'&checksum='.sha1("getMeetingInfo".$params.$SALT)); } /** *This method returns the url for listing all meetings in the bigbluebuttonbn server. * *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return The url of getMeetings. */ public static function getMeetingsURL($URL, $SALT) { $base_url = $URL."api/getMeetings?"; $params = ''; return ( $base_url.$params.'&checksum='.sha1("getMeetings".$params.$SALT)); } /** *This method returns the url to end the specified meeting. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param modPW -- the moderator password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return The url to end the specified meeting. */ public static function endMeetingURL( $meetingID, $modPW, $URL, $SALT ) { $base_url = $URL."api/end?"; $params = 'meetingID='.urlencode($meetingID).'&password='.urlencode($modPW); return ( $base_url.$params.'&checksum='.sha1("end".$params.$SALT) ); } //-----------------------------------------------CREATE---------------------------------------------------- /** *This method creates a meeting and returnS the join url for moderators. * *@param username *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param welcomeString -- the welcome message to be displayed when a user logs in to the meeting *@param mPW -- the moderator password of the meeting *@param aPW -- the attendee password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server *@param logoutURL -- the url the user should be redirected to when they logout of bigbluebuttonbn *@param record -- the flag which indicate if the meetings will be recorded or not record=true|false, default false * *@return The joinURL if successful or an error message if unsuccessful */ public static function createMeetingAndGetJoinURL( $username, $meeting_name, $meetingID, $welcomeString, $mPW, $aPW, $SALT, $URL, $logoutURL, $record = 'false', $duration=0, $voiceBridge=0, $metadata = array()) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::createMeetingURL($meeting_name, $meetingID, $aPW, $mPW, $welcomeString, $logoutURL, $SALT, $URL, $record, $duration, $voiceBridge, $metadata ) ); if( $xml && $xml->returncode == 'SUCCESS' ) { return ( BigBlueButtonBN::joinURL( $meetingID, $username, $mPW, $SALT, $URL ) ); } else if( $xml ) { return ( $xml->messageKey.' : '.$xml->message ); } else { return ('Unable to fetch URL '.$url_create.$params.'&checksum='.sha1("create".$params.$SALT) ); } } /** *This method creates a meeting and return an array of the xml packet * *@param username *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param welcomeString -- the welcome message to be displayed when a user logs in to the meeting *@param mPW -- the moderator password of the meeting *@param aPW -- the attendee password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server *@param logoutURL -- the url the user should be redirected to when they logout of bigbluebuttonbn *@param record -- the flag which indicate if the meetings will be recorded or not record=true|false, default false * *@return * - Null if unable to reach the bigbluebuttonbn server * - If failed it returns an array containing a returncode, messageKey, message. * - If success it returns an array containing a returncode, messageKey, message, meetingID, attendeePW, moderatorPW, hasBeenForciblyEnded. */ public static function createMeetingArray( $username, $meetingID, $welcomeString, $mPW, $aPW, $SALT, $URL, $logoutURL, $record='false', $duration=0, $voiceBridge=0, $metadata = array() ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::createMeetingURL($username, $meetingID, $aPW, $mPW, $welcomeString, $logoutURL, $SALT, $URL, $record, $duration, $voiceBridge, $metadata ) ); if( $xml ) { if($xml->meetingID) return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey, 'meetingID' => $xml->meetingID, 'attendeePW' => $xml->attendeePW, 'moderatorPW' => $xml->moderatorPW, 'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded ); else return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey ); } else { return null; } } //-------------------------------------------getMeetingInfo--------------------------------------------------- /** *This method calls the getMeetingInfo on the bigbluebuttonbn server and returns an xml packet. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param modPW -- the moderator password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return An xml packet. * If failed it returns an xml packet containing a returncode, messagekey, and message. * If success it returnsan xml packet containing a returncode, */ public static function getMeetingInfo( $meetingID, $modPW, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getMeetingInfoURL( $meetingID, $modPW, $URL, $SALT ) ); if($xml){ return ( str_replace('', '', str_replace("\n", '', $xml->asXML()))); } return false; } /** *This method calls the getMeetingInfo on the bigbluebuttonbn server and returns an array. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param modPW -- the moderator password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return An Array. * - Null if unable to reach the bigbluebuttonbn server * - If failed it returns an array containing a returncode, messagekey, message. * - If success it returns an array containing a meetingID, moderatorPW, attendeePW, hasBeenForciblyEnded, running, startTime, endTime, participantCount, moderatorCount, attendees. */ public static function getMeetingInfoArray( $meetingID, $modPW, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getMeetingInfoURL( $meetingID, $modPW, $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' && $xml->messageKey == null){//The meetings were returned return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey ); } else if($xml && $xml->returncode == 'SUCCESS'){ //If there were meetings already created return array( 'meetingID' => $xml->meetingID, 'moderatorPW' => $xml->moderatorPW, 'attendeePW' => $xml->attendeePW, 'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded, 'running' => $xml->running, 'recording' => $xml->recording, 'startTime' => $xml->startTime, 'endTime' => $xml->endTime, 'participantCount' => $xml->participantCount, 'moderatorCount' => $xml->moderatorCount, 'attendees' => $xml->attendees, 'metadata' => $xml->metadata ); } else if( ($xml && $xml->returncode == 'FAILED') || $xml) { //If the xml packet returned failure it displays the message to the user return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey); //return array('returncode' => $xml->returncode, 'message' => $xml->errors->error['message'], 'messageKey' => $xml->errors->error['key']); //For API version 0.8 } else { //If the server is unreachable, then prompts the user of the necessary action return null; } } //-----------------------------------------------getMeetings------------------------------------------------------ /** *This method calls getMeetings on the bigbluebuttonbn server, then calls getMeetingInfo for each meeting and concatenates the result. * *@param URL -- the url of the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server * *@return * - If failed then returns a boolean of false. * - If succeeded then returns an xml of all the meetings. */ public static function getMeetings( $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getMeetingsURL( $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' ) { if( $xml->messageKey ) return ( $xml->message->asXML() ); ob_start(); echo ''; if( count( $xml->meetings ) && count( $xml->meetings->meeting ) ) { foreach ($xml->meetings->meeting as $meeting) { echo ''; echo BigBlueButtonBN::getMeetingInfo($meeting->meetingID, $meeting->moderatorPW, $URL, $SALT); echo ''; } } echo ''; return (ob_get_clean()); } else { return (false); } } /** *This method calls getMeetings on the bigbluebuttonbn server, then calls getMeetingInfo for each meeting and concatenates the result. * *@param URL -- the url of the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server * *@return * - Null if the server is unreachable * - If FAILED then returns an array containing a returncode, messageKey, message. * - If SUCCESS then returns an array of all the meetings. Each element in the array is an array containing a meetingID, moderatorPW, attendeePW, hasBeenForciblyEnded, running. */ public static function getMeetingsArray( $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getMeetingsURL( $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' && $xml->messageKey ) {//The meetings were returned return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey); } else if($xml && $xml->returncode == 'SUCCESS'){ //If there were meetings already created foreach ($xml->meetings->meeting as $meeting) { $meetings[] = array( 'meetingID' => $meeting->meetingID, 'moderatorPW' => $meeting->moderatorPW, 'attendeePW' => $meeting->attendeePW, 'hasBeenForciblyEnded' => $meeting->hasBeenForciblyEnded, 'running' => $meeting->running ); } return $meetings; } else if( $xml ) { //If the xml packet returned failure it displays the message to the user return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey); } else { //If the server is unreachable, then prompts the user of the necessary action return null; } } //----------------------------------------------getUsers--------------------------------------- /** *This method prints the usernames of the attendees in the specified conference. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param modPW -- the moderator password of the meeting *@param URL -- the url of the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server *@param UNAME -- is a boolean to determine how the username is formatted when printed. Default if false. * *@return A boolean of true if the attendees were printed successfully and false otherwise. */ public static function getUsers( $meetingID, $modPW, $URL, $SALT, $UNAME = false ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getMeetingInfoURL( $meetingID, $modPW, $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' ) { ob_start(); if( count( $xml->attendees ) && count( $xml->attendees->attendee ) ) { foreach ( $xml->attendees->attendee as $attendee ) { if( $UNAME == true ) { echo "User name: ".$attendee->fullName.'
'; } else { echo $attendee->fullName.'
'; } } } return (ob_end_flush()); } else { return (false); } } /** *This method returns an array of the attendees in the specified meeting. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param modPW -- the moderator password of the meeting *@param URL -- the url of the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server * *@return * - Null if the server is unreachable. * - If FAILED, returns an array containing a returncode, messageKey, message. * - If SUCCESS, returns an array of array containing the userID, fullName, role of each attendee */ public static function getUsersArray( $meetingID, $modPW, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getMeetingInfoURL( $meetingID, $modPW, $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' && $xml->messageKey == null ) {//The meetings were returned return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey); } else if($xml && $xml->returncode == 'SUCCESS'){ //If there were meetings already created foreach ($xml->attendees->attendee as $attendee){ $users[] = array( 'userID' => $attendee->userID, 'fullName' => $attendee->fullName, 'role' => $attendee->role ); } return $users; } else if( $xml ) { //If the xml packet returned failure it displays the message to the user return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey); } else { //If the server is unreachable, then prompts the user of the necessary action return null; } } //------------------------------------------------Other Methods------------------------------------ /** *This method calls end meeting on the specified meeting in the bigbluebuttonbn server. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param modPW -- the moderator password of the meeting *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return * - Null if the server is unreachable * - An array containing a returncode, messageKey, message. */ public static function endMeeting( $meetingID, $modPW, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::endMeetingURL( $meetingID, $modPW, $URL, $SALT ) ); if( $xml ) { //If the xml packet returned failure it displays the message to the user return array('returncode' => $xml->returncode, 'message' => $xml->message, 'messageKey' => $xml->messageKey); } else { //If the server is unreachable, then prompts the user of the necessary action return null; } } /** *This method check the BigBlueButton server to see if the meeting is running (i.e. there is someone in the meeting) * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return A boolean of true if the meeting is running and false if it is not running */ public static function isMeetingRunning( $meetingID, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::isMeetingRunningURL( $meetingID, $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' ) return ( ( $xml->running == 'true' ) ? true : false); else return ( false ); } /** *This method calls isMeetingRunning on the BigBlueButton server. * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return * - If SUCCESS it returns an xml packet * - If the FAILED or the server is unreachable returns a string of 'false' */ public static function getMeetingXML( $meetingID, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::isMeetingRunningURL( $meetingID, $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS') return ( str_replace('
', '', str_replace("\n", '', $xml->asXML()))); else return 'false'; } // TODO: WRITE AN ITERATOR WHICH GOES OVER WHATEVER IT IS BEING TOLD IN THE API AND LIST INFORMATION /* we have to define at least 2 variable fields for getInformation to read out information at any position The first is: An identifier to chose if we look for attendees or the meetings or something else The second is: An identifier to chose what integrated functions are supposed to be used @param IDENTIFIER -- needs to be put in for the function to identify the information to print out current values which can be used are 'attendee' and 'meetings' @param meetingID -- needs to be put in to identify the meeting @param modPW -- needs to be put in if the users are supposed to be shown or to retrieve information about the meetings @param URL -- needs to be put in the URL to the bigbluebuttonbn server @param SALT -- needs to be put in for the security salt calculation Note: If 'meetings' is used, then only the parameters URL and SALT needs to be used If 'attendee' is used, then all the parameters needs to be used */ public static function getInformation( $IDENTIFIER, $meetingID, $modPW, $URL, $SALT ) { // if the identifier is null or '', then return false if( $IDENTIFIER == "" || $IDENTIFIER == null ) { echo "You need to type in a valid value into the identifier."; return false; } // if the identifier is attendee, call getUsers else if( $IDENTIFIER == 'attendee' ) { return BigBlueButtonBN::getUsers( $meetingID, $modPW, $URL, $SALT ); } // if the identifier is meetings, call getMeetings else if( $IDENTIFIER == 'meetings' ) { return BigBlueButtonBN::getMeetings( $URL, $SALT ); } // return nothing else { return true; } } function getServerIP() { // get the server url $sIP = $_SERVER['SERVER_ADDR']; return $serverIP = 'http://'.$sIP.'/bigbluebuttonbn/'; } /** *This method check the BigBlueButton server to see if the meeting has been created * *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server * *@return A boolean of true if the meeting has been created, doesn't matter if is running or not and false if it does not exist */ public static function isMeetingCreated( $meetingID, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getMeetingsURL( $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' ) foreach ($xml->meetings->meeting as $meeting) if ( $meeting->meetingID == $meetingID && $meeting->hasBeenForciblyEnded == 'false' ) return true; return false; } /** *This method creates a new meeting room in the BigBlueButton server * *@param name -- a name fot the meeting *@param meetingID -- the unique meeting identifier used to store the meeting in the bigbluebuttonbn server *@param attendeePW -- the attendee of the meeting *@param moderatorPW -- the moderator of the meeting *@param welcome -- the welcome message that gets displayed on the chat window *@param logoutURL -- the URL that the bbb client will go to after users logouut *@param SALT -- the security salt of the bigbluebuttonbn server *@param URL -- the url of the bigbluebuttonbn server *@param record -- the flag which indicate if the meetings will be recorded or not record=true|false, default false * *@return A boolean of true if the meeting has been created, doesn't matter if is running or not and false if it was an error */ public static function createMeeting($name, $meetingID, $attendeePW, $moderatorPW, $welcome, $logoutURL, $SALT, $URL, $record = 'false', $duration=0, $voiceBridge=0, $metadata = array() ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::createMeetingURL($name, $meetingID, $attendeePW, $moderatorPW, $welcome, $logoutURL, $SALT, $URL, $record, $duration, $voiceBridge, $metadata ) ); if( $xml && $xml->returncode == 'SUCCESS' ) return true; else return false; } ////////////////////////TO DO: CHANGE THE DESCRIPTION OF THE NEW METHODS public static function getRecordingsURL($meetingID, $URL, $SALT ) { $base_url_record = $URL."api/getRecordings?"; $params = "meetingID=".urlencode($meetingID); return ($base_url_record.$params."&checksum=".sha1("getRecordings".$params.$SALT) ); } /** *This method calls getMeetings on the bigbluebuttonbn server, then calls getMeetingInfo for each meeting and concatenates the result. * *@param URL -- the url of the bigbluebuttonbn server *@param SALT -- the security salt of the bigbluebuttonbn server * *@return * - Null if the server is unreachable * - If FAILED then returns an array containing a returncode, messageKey, message. * - If SUCCESS then returns an array of all the meetings. Each element in the array is an array containing a meetingID, moderatorPW, attendeePW, hasBeenForciblyEnded, running. */ public static function getRecordingsArray($meetingID, $URL, $SALT ) { $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::getRecordingsURL( $meetingID, $URL, $SALT ) ); if( $xml && $xml->returncode == 'SUCCESS' && $xml->messageKey ) {//The meetings were returned return array('returncode' => (string) $xml->returncode, 'message' => (string) $xml->message, 'messageKey' => (string) $xml->messageKey); } else if($xml && $xml->returncode == 'SUCCESS'){ //If there were meetings already created $recordings = array(); foreach ($xml->recordings->recording as $recording) { $recordings[(string) $recording->recordID] = array( 'recordID' => (string) $recording->recordID, 'meetingID' => (string) $recording->meetingID, 'meetingName' => (string) $recording->name, 'published' => (string) $recording->published, 'startTime' => (string) $recording->startTime, 'endTime' => (string) $recording->endTime ); $recordings[(string) $recording->recordID]['playbacks'] = array(); foreach ( $recording->playback->format as $format ){ $recordings[(string) $recording->recordID]['playbacks'][(string) $format->type] = array( 'type' => (string) $format->type, 'url' => (string) $format->url ); } // THIS IS FOR TESTING MULTIPLE FORMATS, DO REMOVE IT FOR FINAL RELEASE //$recordings[(string) $recording->recordID]['playbacks']['desktop'] = array( 'type' => 'desktop', 'url' => (string) $recording->playback->format->url ); //Add the metadata to the recordings array $metadata = get_object_vars($recording->metadata); while ($data = current($metadata)) { $recordings[(string) $recording->recordID]['meta_'.key($metadata)] = $data; next($metadata); } } ksort($recordings); return $recordings; } else if( $xml ) { //If the xml packet returned failure it displays the message to the user return array('returncode' => (string) $xml->returncode, 'message' => (string) $xml->message, 'messageKey' => (string) $xml->messageKey); } else { //If the server is unreachable, then prompts the user of the necessary action return NULL; } } public static function deleteRecordingsURL( $recordID, $URL, $SALT ) { $url_delete = $URL."api/deleteRecordings?"; $params = 'recordID='.urlencode($recordID); return ($url_delete.$params.'&checksum='.sha1("deleteRecordings".$params.$SALT) ); } public static function deleteRecordings( $recordIDs, $URL, $SALT ) { $ids = explode(",", $recordIDs); foreach( $ids as $id){ $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::deleteRecordingsURL($id, $URL, $SALT) ); if( $xml && $xml->returncode != 'SUCCESS' ) return false; } return true; } public static function setPublishRecordingsURL( $recordID, $set, $URL, $SALT ) { $url_delete = $URL."api/publishRecordings?"; $params = 'recordID='.$recordID."&publish=".$set; return ($url_delete.$params.'&checksum='.sha1("publishRecordings".$params.$SALT) ); } public static function setPublishRecordings( $recordIDs, $set, $URL, $SALT ) { $ids = explode(",", $recordIDs); foreach( $ids as $id){ $xml = BigBlueButtonBN::_wrap_simplexml_load_file( BigBlueButtonBN::setPublishRecordingsURL($id, $set, $URL, $SALT) ); if( $xml && $xml->returncode != 'SUCCESS' ) return false; } return true; } public static function getServerVersion( $URL ){ $base_url_record = $URL."api"; $xml = BigBlueButtonBN::_wrap_simplexml_load_file( $base_url_record ); if( $xml && $xml->returncode == 'SUCCESS' ) return $xml->version; else return NULL; } public static function isServerRunning( $URL ){ $base_url_record = $URL."api"; $xml = BigBlueButtonBN::_wrap_simplexml_load_file( $base_url_record ); if( $xml && $xml->returncode == 'SUCCESS' ) return true; else return false; } public function _wrap_simplexml_load_file($url){ if (extension_loaded('curl')) { $ch = curl_init() or die ( curl_error() ); $timeout = 10; curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout); $data = curl_exec( $ch ); curl_close( $ch ); if ($data) { try { $res = new SimpleXMLElement($data,LIBXML_NOCDATA); } catch (Exception $e) { return false; } return $res; } else { return false; } } return (simplexml_load_file($url,'SimpleXMLElement', LIBXML_NOCDATA)); } }