skala
Yannick Warnier 14 years ago
commit bdcda4872e
  1. 61
      plugin/bbb/bbb.lib.php
  2. 30
      plugin/bbb/start.php

@ -183,7 +183,6 @@ function wc_isMeetingRunningURL($myIP,$mySecuritySalt,$myMeetingID) {
$queryStr = "meetingID=".$myMeetingID;
$checksum = sha1('isMeetingRunning'.$queryStr.$mySecuritySalt);
$secQueryURL = "http://".$myIP.$checkAPI.$queryStr."&checksum=".$checksum;
return $secQueryURL;
}
@ -276,8 +275,35 @@ function wc_listAttendees() {
/**
* This API is not yet supported in bigbluebutton
*/
function wc_getMeetingInfo() {
return false;
function wc_getMeetingInfo($myIP,$mySecuritySalt,$meetingID,$modPW) {
$checkAPI = "/bigbluebutton/api/getMeetingInfo?";
$queryStr = 'meetingID='.$meetingID.'&password='.$modPW;
$checksum = sha1('getMeetingInfo'.$queryStr.$mySecuritySalt);
$secQueryURL = "http://".$myIP.$checkAPI.$queryStr."&checksum=".$checksum;
$myResponse = @file_get_contents($secQueryURL);
if ($myResponse === false) { return false;}
$doc = new DOMDocument();
$doc->loadXML($myResponse);
$returnCodeNode = $doc->getElementsByTagName("returncode");
$returnCode = $returnCodeNode->item(0)->nodeValue;
$createTimeNode = $doc->getElementsByTagName("createTime");
$createTime = $createTimeNode->item(0)->nodeValue;
$runningNode = $doc->getElementsByTagName("running");
$running = $runningNode->item(0)->nodeValue;
$attendeesNode = $doc->getElementsByTagName("attendee");
$attendees = array();
foreach ($attendeesNode as $attendeeNode) {
$attendee = array();
if ($attendeeNode->childNodes->length) {
foreach ($attendeeNode->childNodes as $i) {
//see http://code.google.com/p/bigbluebutton/wiki/API#Get_Meeting_Info for details
$attendee[$i->nodeName] = $i->nodeValue;
}
}
$attendees[] = $attendee;
}
$info = array('returnCode'=>$returnCode,'createTime'=>$createTime,'attendees'=>$attendees,'running'=>$running);
return $info;
}
/**
@ -313,3 +339,32 @@ function wc_needUpgrade() {
}
return $returnValue;
}
/**
* Gets a list of all meetings currently running
*/
function wc_getRunningMeetings($myIP,$mySecuritySalt) {
$checkAPI = "/bigbluebutton/api/getMeetings?";
$queryStr = '';
$checksum = sha1('getMeetings'.$queryStr.$mySecuritySalt);
$secQueryURL = "http://".$myIP.$checkAPI.$queryStr."&checksum=".$checksum;
$myResponse = @file_get_contents($secQueryURL);
if ($myResponse === false) { return false;}
$doc = new DOMDocument();
$doc->loadXML($myResponse);
$returnCodeNode = $doc->getElementsByTagName("returncode");
$returnCode = $returnCodeNode->item(0)->nodeValue;
$meetingsNode = $doc->getElementsByTagName("meeting");
$meetings = array();
foreach ($meetingsNode as $meetingNode) {
$meeting = array();
if ($meetingNode->childNodes->length) {
foreach ($meetingNode->childNodes as $i) {
//see http://code.google.com/p/bigbluebutton/wiki/API#Get_Meetings for details
$meeting[$i->nodeName] = $i->nodeValue;
}
}
$meetings[] = $meeting;
}
return $meetings;
}

@ -44,12 +44,40 @@ $user_id = api_get_user_id();
$is_running = wc_isMeetingRunning($bbb_host,$bbb_salt,$meeting_name);
if ($is_running == 'true') {
// The conference is running, everything is fine, join
header('location: '.wc_joinMeetingURL($bbb_host,$bbb_salt,$full_user_name,$meeting_name,($teacher?$meeting_mod_pw:$meeting_att_pw),$user_id));
exit;
} else { //$is_running = false or 'false'
// The conference room does not seem to be running...
// First, try harder and ignore the "running" status
$meetings = wc_getRunningMeetings($bbb_host,$bbb_salt);
$found = false;
foreach ($meetings as $meeting) {
//Try to find our meeting room in the list...
if ($meeting['meetingID'] == $meeting_name) {
$meeting_info = wc_getMeetingInfo($bbb_host,$bbb_salt,$meeting_name,$meeting_mod_pw);
error_log('Found passive meeting created '.($meeting_info['createTime']).' seconds ago with '.count($meeting_info['attendees']).' attendees - joining as '.($teacher?'teacher':'student'));
//if the user is a teacher, or if there are already attendees in
// the conference room, then allow joining it
if ($teacher or count($meeting_info['attendees'])>0) {
header('location: '.wc_joinMeetingURL($bbb_host,$bbb_salt,$full_user_name,$meeting_name,($teacher?$meeting_mod_pw:$meeting_att_pw),$user_id));
exit;
}
}
}
// That conference room is really not running or it has no
// accompanying moderator subscribed
if ($teacher) {
// The user is a teacher, so he has the right to create the
// room, so create it and join it
wc_createMeeting($bbb_host,$bbb_salt,$meeting_name,$meeting_name,$meeting_att_pw,$meeting_mod_pw,$meeting_wel_ms,api_get_path(WEB_COURSE_PATH).'/'.$ccode);
header('location: '.wc_joinMeetingURL($bbb_host,$bbb_salt,$full_user_name,$meeting_name,$meeting_mod_pw,$user_id));
header('location: '.wc_joinMeetingURL($bbb_host,$bbb_salt,$full_user_name,$meeting_name,($teacher?$meeting_mod_pw:$meeting_att_pw),$user_id));
exit;
} else {
// There is no conference room for this course and the user
// is a mere student, so he cannot start a conference room by
// himself: a teacher has to launch it first
header('location: '.api_get_path(WEB_COURSE_PATH).'/'.$ccode);
exit;
}
}

Loading…
Cancel
Save