You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
315 lines
12 KiB
315 lines
12 KiB
<?php
|
|
/**
|
|
* This file contains the helper libraries for the BigBlueButton conference plugin.
|
|
* It is based on code written by Dual Code Inc in GNU/GPLv2
|
|
* Copyright (C) 2010 Dual Code Inc. (www.dualcode.com)
|
|
* Copyright (C) 2010 BeezNest Belgium SPRL (www.beeznest.com) - Yannick Warnier - y@beeznest.com
|
|
* @package chamilo.plugin.bigbluebutton
|
|
*/
|
|
/**
|
|
* Inserts an item into the plugin_bbb table
|
|
*/
|
|
function bigbluebutton_insert_record($table,$object) {
|
|
//ignore the first param (used for compatibility with existing code)
|
|
$table = Database::get_main_table('plugin_bbb');
|
|
$sql = "INSERT INTO $table (course_id, name, meeting_name, meeting_id, attendee_pw, moderator_pw, auto_login, new_window, welcome_msg)" .
|
|
"VALUES (" .
|
|
intval($object->course) .", " .
|
|
"'".Database::escape_string($object->name)."'," .
|
|
"'".Database::escape_string($object->meetingname)."'," .
|
|
"'".Database::escape_string($object->meetingid)."'," .
|
|
"'".Database::escape_string($object->attendeepw)."'," .
|
|
"'".Database::escape_string($object->moderatorpw)."'," .
|
|
"'".Database::escape_string($object->autologin)."'," .
|
|
"'".Database::escape_string($object->newwindow)."'," .
|
|
"'".Database::escape_string($object->welcomemsg)."'" .
|
|
")";
|
|
Database::query($sql);
|
|
return Database::insert_id();
|
|
}
|
|
/**
|
|
* Updates a bigbluebutton record
|
|
*/
|
|
function bigbluebutton_update_record($table, $object) {
|
|
//ignore the first param (used for compatibility with existing code) $table = Database::get_main_table('plugin_bbb');
|
|
$sql = "UPDATE $table (course_id, name, meeting_name, meeting_id, attendee_pw, moderator_pw, auto_login, new_window, welcome_msg)" .
|
|
" SET course_id = ".intval($object->course) .", " .
|
|
" name = '".Database::escape_string($object->name)."'," .
|
|
" meeting_name = '".Database::escape_string($object->meetingname)."'," .
|
|
" meeting_id = '".Database::escape_string($object->meetingid)."'," .
|
|
" attendee_pw = '".Database::escape_string($object->attendeepw)."'," .
|
|
" moderator_pw = '".Database::escape_string($object->moderatorpw)."'," .
|
|
" auto_login = '".Database::escape_string($object->autologin)."'," .
|
|
" new_window = '".Database::escape_string($object->newwindow)."'," .
|
|
" welcome_msg = '".Database::escape_string($object->welcomemsg)."'," .
|
|
" WHERE id = " .intval($object->id).
|
|
")";
|
|
Database::query($sql);
|
|
return $oject->id;
|
|
}
|
|
/**
|
|
* Gets a bigbluebutton room record from an ID
|
|
*/
|
|
function bigbluebutton_get_record($table,$field,$id) {
|
|
//ignore the first param (used for compatibility with existing code)
|
|
$table = Database::get_main_table('plugin_bbb');
|
|
$sql = "SELECT * FROM $table WHERE id = ".intval($id);
|
|
$res = Database::query($sql);
|
|
if (Database::num_rows($res)>0) {
|
|
$row = Database::fetch_assoc($res);
|
|
$room = null;
|
|
$room->id = $id;
|
|
$room->course = $row['course_id'];
|
|
$room->name = $row['name'];
|
|
$room->meetingname = $row['meeting_name'];
|
|
$room->meetingid = $row['meeting_id'];
|
|
$room->attendeepw = $row['attendee_pw'];
|
|
$room->moderatorpw = $row['moderator_pw'];
|
|
$room->autologin = $row['auto_login'];
|
|
$room->newwindow = $row['new_window'];
|
|
$room->welcomemsg = $row['welcome_msg'];
|
|
return $room;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
/**
|
|
* Gets a bigbluebutton room record from an ID
|
|
*/
|
|
function bigbluebutton_delete_records($table,$field,$id) {
|
|
//ignore the first param (used for compatibility with existing code)
|
|
$table = Database::get_main_table('plugin_bbb');
|
|
$sql = "DELETE FROM $table WHERE id = ".intval($id);
|
|
}
|
|
/**
|
|
* Add an event
|
|
*/
|
|
function bigbluebutton_add_event($event) {
|
|
//
|
|
}
|
|
/**
|
|
* Given an object containing all the necessary data,
|
|
* (defined by the form in mod.html) this function
|
|
* will create a new instance and return the id number
|
|
* of the new instance.
|
|
*/
|
|
function bigbluebutton_add_instance($bigbluebutton) {
|
|
$bigbluebutton->timemodified = time();
|
|
if ($returnid = bigbluebutton_insert_record('bigbluebutton', $bigbluebutton)) {
|
|
$event = NULL;
|
|
$event->courseid = $bigbluebutton->course;
|
|
$event->name = $bigbluebutton->name;
|
|
$event->meetingname = $bigbluebutton->meetingname;
|
|
$event->meetingid = $bigbluebutton->meetingid;
|
|
$event->attendeepw = $bigbluebutton->attendeepw;
|
|
$event->moderatorpw = $bigbluebutton->moderatorpw;
|
|
$event->autologin = $bigbluebutton->autologin;
|
|
$event->newwindow = $bigbluebutton->newwindow;
|
|
$event->welcomemsg = $bigbluebutton->welcomemsg;
|
|
bigbluebutton_add_event($event);
|
|
}
|
|
return $returnid;
|
|
}
|
|
|
|
|
|
/**
|
|
* Given an object containing all the necessary data,
|
|
* (defined by the form in mod.html) this function
|
|
* will update an existing instance with new data.
|
|
*/
|
|
function bigbluebutton_update_instance($bigbluebutton) {
|
|
$bigbluebutton->timemodified = time();
|
|
$bigbluebutton->id = $bigbluebutton->instance;
|
|
if ($returnid = bigbluebutton_update_record('bigbluebutton', $bigbluebutton)) {
|
|
/*
|
|
$event = NULL;
|
|
if ($event->id = bigbluebutton_get_field('event', 'id', 'modulename', 'bigbluebutton', 'instance', $bigbluebutton->id)) {
|
|
$event->courseid = $bigbluebutton->course;
|
|
$event->name = $bigbluebutton->name;
|
|
$event->meetingname = $bigbluebutton->meetingname;
|
|
$event->meetingid = $bigbluebutton->meetingid;
|
|
$event->attendeepw = $bigbluebutton->attendeepw;
|
|
$event->moderatorpw = $bigbluebutton->moderatorpw;
|
|
$event->autologin = $bigbluebutton->autologin;
|
|
$event->newwindow = $bigbluebutton->newwindow;
|
|
$event->welcomemsg = $bigbluebutton->welcomemsg;
|
|
bigbluebutton_update_event($event);
|
|
}*/
|
|
}
|
|
return $returnid;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Given an ID of an instance of this module,
|
|
* this function will permanently delete the instance
|
|
* and any data that depends on it.
|
|
*/
|
|
function bigbluebutton_delete_instance($id) {
|
|
if (! $bigbluebutton = bigbluebutton_get_record('bigbluebutton', 'id', $id)) {
|
|
return false;
|
|
}
|
|
|
|
$result = true;
|
|
|
|
# Delete any dependent records here #
|
|
|
|
if (! bigbluebutton_delete_records('bigbluebutton', 'id', $bigbluebutton->id)) {
|
|
$result = false;
|
|
}
|
|
/*
|
|
$pagetypes = page_import_types('mod/bigbluebutton/');
|
|
foreach($pagetypes as $pagetype) {
|
|
if(!delete_records('block_instance', 'pageid', $bigbluebutton->id, 'pagetype', $pagetype)) {
|
|
$result = false;
|
|
}
|
|
}
|
|
*/
|
|
/*
|
|
if (! bigbluebutton_delete_records('event', 'modulename', 'bigbluebutton', 'instance', $bigbluebutton->id)) {
|
|
$result = false;
|
|
}
|
|
*/
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Create string where we check if the meeting is running
|
|
*/
|
|
function wc_isMeetingRunningURL($myIP,$mySecuritySalt,$myMeetingID) {
|
|
$checkAPI = "/bigbluebutton/api/isMeetingRunning?";
|
|
$queryStr = "meetingID=".$myMeetingID;
|
|
$checksum = sha1('isMeetingRunning'.$queryStr.$mySecuritySalt);
|
|
$secQueryURL = "http://".$myIP.$checkAPI.$queryStr."&checksum=".$checksum;
|
|
|
|
return $secQueryURL;
|
|
}
|
|
|
|
|
|
/**
|
|
* Determine if the meeting is already running (e.g. has attendees in it)
|
|
*/
|
|
function wc_isMeetingRunning($myIP,$mySecuritySalt,$myMeetingID) {
|
|
$secQueryURL = wc_isMeetingRunningURL($myIP,$mySecuritySalt,$myMeetingID);
|
|
$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;
|
|
$runningNode = $doc->getElementsByTagName("running");
|
|
$isRunning = $runningNode->item(0)->nodeValue;
|
|
return $isRunning;
|
|
}
|
|
|
|
/**
|
|
* Create meeting if it's not already running
|
|
*/
|
|
function wc_createMeeting($myIP,$mySecuritySalt,$myMeetingName,$myMeetingID,$myAttendeePW,$myModeratorPW,$myWelcomeMsg,$myLogoutURL) {
|
|
$createAPI = "/bigbluebutton/api/create?";
|
|
$myVoiceBridge = rand(70000,79999);
|
|
$queryStr = "name=".urlencode($myMeetingName)."&meetingID=".urlencode($myMeetingID)."&attendeePW=".urlencode($myAttendeePW)."&moderatorPW=".urlencode($myModeratorPW)."&voiceBridge=".$myVoiceBridge."&welcome=".urlencode($myWelcomeMsg)."&logoutURL=".urlencode($myLogoutURL);
|
|
$checksum = sha1('create'.$queryStr.$mySecuritySalt);
|
|
$secQueryURL = "http://".$myIP.$createAPI.$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;
|
|
|
|
if ($returnCode=="SUCCESS") {
|
|
return $returnCode;
|
|
} else {
|
|
$messageKeyNode = $doc->getElementsByTagName("messageKey");
|
|
$messageKey = $messageKeyNode->item(0)->nodeValue;
|
|
return $messageKey;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Create a URL to join the meeting
|
|
*/
|
|
function wc_joinMeetingURL($myIP,$mySecuritySalt,$myName,$myMeetingID,$myPassword,$userID) {
|
|
$joinAPI = "/bigbluebutton/api/join?";
|
|
$queryStr = "fullName=".urlencode($myName)."&meetingID=".urlencode($myMeetingID)."&password=".urlencode($myPassword)."&userID=".$userID;
|
|
$checksum = sha1('join'.$queryStr.$mySecuritySalt);
|
|
$createStr = "http://".$myIP.$joinAPI.$queryStr."&checksum=".$checksum;
|
|
|
|
return $createStr;
|
|
}
|
|
|
|
/**
|
|
* This API is not yet supported in bigbluebutton
|
|
*/
|
|
function wc_endMeeting($myIP,$mySecuritySalt,$myMeetingID,$myModeratorPW) {
|
|
$endAPI = "/bigbluebutton/api/end?";
|
|
$myVoiceBridge = rand(70000,79999);
|
|
$queryStr = "meetingID=".$myMeetingID."&moderatorPW=".$myModeratorPW."&voiceBridge=".$myVoiceBridge;
|
|
$checksum = sha1('create'.$queryStr.$mySecuritySalt);
|
|
$secQueryURL = "http://".$myIP.$endAPI.$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;
|
|
if ($returnCode=="SUCCESS") {
|
|
return $returnCode;
|
|
} else {
|
|
$messageKeyNode = $doc->getElementsByTagName("messageKey");
|
|
$messageKey = $messageKeyNode->item(0)->nodeValue;
|
|
return $messageKey;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This API is not yet supported in bigbluebutton
|
|
*/
|
|
function wc_listAttendees() {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* This API is not yet supported in bigbluebutton
|
|
*/
|
|
function wc_getMeetingInfo() {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Determine the URL of the current page (for logoutURL)
|
|
*/
|
|
function wc_currentPageURL() {
|
|
$isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on");
|
|
$port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
|
|
$port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : '';
|
|
$pageURL = ($isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"];
|
|
return $pageURL;
|
|
}
|
|
|
|
|
|
/**
|
|
* Determine the IP/Domain of the current Corporate University
|
|
*/
|
|
function wc_currentDomain() {
|
|
$currentDomain = $_SERVER["SERVER_NAME"];
|
|
return $currentDomain;
|
|
}
|
|
|
|
|
|
/**
|
|
* Determine if a new version of the plug-in is available
|
|
*/
|
|
function wc_needUpgrade() {
|
|
$returnValue = false;
|
|
$installedVersion = "20100805";
|
|
$availableVersion = dc_getVersion();
|
|
if ((int)$installedVersion < (int)$availableVersion) {
|
|
$returnValue = true;
|
|
}
|
|
return $returnValue;
|
|
}
|
|
|