diff --git a/plugin/bbb/bbb_api.php b/plugin/bbb/bbb_api.php
new file mode 100644
index 0000000000..1ac2369c7f
--- /dev/null
+++ b/plugin/bbb/bbb_api.php
@@ -0,0 +1,760 @@
+= 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, $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 && $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)
+ return (new SimpleXMLElement($data,LIBXML_NOCDATA));
+ else
+ return false;
+ }
+
+ return (simplexml_load_file($url,'SimpleXMLElement', LIBXML_NOCDATA));
+ }
+
+
+}
+//----End
\ No newline at end of file