bbb.lib.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <?php
  2. /**
  3. * This file contains the helper libraries for the BigBlueButton conference plugin.
  4. * It is based on code written by Dual Code Inc in GNU/GPLv2
  5. * Copyright (C) 2010 Dual Code Inc. (www.dualcode.com)
  6. * Copyright (C) 2010 BeezNest Belgium SPRL (www.beeznest.com) - Yannick Warnier - y@beeznest.com
  7. */
  8. /**
  9. * Inserts an item into the plugin_bbb table
  10. */
  11. function bigbluebutton_insert_record($table,$object) {
  12. //ignore the first param (used for compatibility with existing code)
  13. $table = Database::get_main_table('plugin_bbb');
  14. $sql = "INSERT INTO $table (course_id, name, meeting_name, meeting_id, attendee_pw, moderator_pw, auto_login, new_window, welcome_msg)" .
  15. "VALUES (" .
  16. intval($object->course) .", " .
  17. "'".Database::escape_string($object->name)."'," .
  18. "'".Database::escape_string($object->meetingname)."'," .
  19. "'".Database::escape_string($object->meetingid)."'," .
  20. "'".Database::escape_string($object->attendeepw)."'," .
  21. "'".Database::escape_string($object->moderatorpw)."'," .
  22. "'".Database::escape_string($object->autologin)."'," .
  23. "'".Database::escape_string($object->newwindow)."'," .
  24. "'".Database::escape_string($object->welcomemsg)."'" .
  25. ")";
  26. Database::query($sql);
  27. return Database::insert_id();
  28. }
  29. /**
  30. * Updates a bigbluebutton record
  31. */
  32. function bigbluebutton_update_record($table, $object) {
  33. //ignore the first param (used for compatibility with existing code) $table = Database::get_main_table('plugin_bbb');
  34. $sql = "UPDATE $table (course_id, name, meeting_name, meeting_id, attendee_pw, moderator_pw, auto_login, new_window, welcome_msg)" .
  35. " SET course_id = ".intval($object->course) .", " .
  36. " name = '".Database::escape_string($object->name)."'," .
  37. " meeting_name = '".Database::escape_string($object->meetingname)."'," .
  38. " meeting_id = '".Database::escape_string($object->meetingid)."'," .
  39. " attendee_pw = '".Database::escape_string($object->attendeepw)."'," .
  40. " moderator_pw = '".Database::escape_string($object->moderatorpw)."'," .
  41. " auto_login = '".Database::escape_string($object->autologin)."'," .
  42. " new_window = '".Database::escape_string($object->newwindow)."'," .
  43. " welcome_msg = '".Database::escape_string($object->welcomemsg)."'," .
  44. " WHERE id = " .intval($object->id).
  45. ")";
  46. Database::query($sql);
  47. return $oject->id;
  48. }
  49. /**
  50. * Gets a bigbluebutton room record from an ID
  51. */
  52. function bigbluebutton_get_record($table,$field,$id) {
  53. //ignore the first param (used for compatibility with existing code)
  54. $table = Database::get_main_table('plugin_bbb');
  55. $sql = "SELECT * FROM $table WHERE id = ".intval($id);
  56. $res = Database::query($sql);
  57. if (Database::num_rows($res)>0) {
  58. $row = Database::fetch_assoc($res);
  59. $room = null;
  60. $room->id = $id;
  61. $room->course = $row['course_id'];
  62. $room->name = $row['name'];
  63. $room->meetingname = $row['meeting_name'];
  64. $room->meetingid = $row['meeting_id'];
  65. $room->attendeepw = $row['attendee_pw'];
  66. $room->moderatorpw = $row['moderator_pw'];
  67. $room->autologin = $row['auto_login'];
  68. $room->newwindow = $row['new_window'];
  69. $room->welcomemsg = $row['welcome_msg'];
  70. return $room;
  71. } else {
  72. return null;
  73. }
  74. }
  75. /**
  76. * Gets a bigbluebutton room record from an ID
  77. */
  78. function bigbluebutton_delete_records($table,$field,$id) {
  79. //ignore the first param (used for compatibility with existing code)
  80. $table = Database::get_main_table('plugin_bbb');
  81. $sql = "DELETE FROM $table WHERE id = ".intval($id);
  82. }
  83. /**
  84. * Add an event
  85. */
  86. function bigbluebutton_add_event($event) {
  87. //
  88. }
  89. /**
  90. * Given an object containing all the necessary data,
  91. * (defined by the form in mod.html) this function
  92. * will create a new instance and return the id number
  93. * of the new instance.
  94. */
  95. function bigbluebutton_add_instance($bigbluebutton) {
  96. $bigbluebutton->timemodified = time();
  97. if ($returnid = bigbluebutton_insert_record('bigbluebutton', $bigbluebutton)) {
  98. $event = NULL;
  99. $event->courseid = $bigbluebutton->course;
  100. $event->name = $bigbluebutton->name;
  101. $event->meetingname = $bigbluebutton->meetingname;
  102. $event->meetingid = $bigbluebutton->meetingid;
  103. $event->attendeepw = $bigbluebutton->attendeepw;
  104. $event->moderatorpw = $bigbluebutton->moderatorpw;
  105. $event->autologin = $bigbluebutton->autologin;
  106. $event->newwindow = $bigbluebutton->newwindow;
  107. $event->welcomemsg = $bigbluebutton->welcomemsg;
  108. bigbluebutton_add_event($event);
  109. }
  110. return $returnid;
  111. }
  112. /**
  113. * Given an object containing all the necessary data,
  114. * (defined by the form in mod.html) this function
  115. * will update an existing instance with new data.
  116. */
  117. function bigbluebutton_update_instance($bigbluebutton) {
  118. $bigbluebutton->timemodified = time();
  119. $bigbluebutton->id = $bigbluebutton->instance;
  120. if ($returnid = bigbluebutton_update_record('bigbluebutton', $bigbluebutton)) {
  121. /*
  122. $event = NULL;
  123. if ($event->id = bigbluebutton_get_field('event', 'id', 'modulename', 'bigbluebutton', 'instance', $bigbluebutton->id)) {
  124. $event->courseid = $bigbluebutton->course;
  125. $event->name = $bigbluebutton->name;
  126. $event->meetingname = $bigbluebutton->meetingname;
  127. $event->meetingid = $bigbluebutton->meetingid;
  128. $event->attendeepw = $bigbluebutton->attendeepw;
  129. $event->moderatorpw = $bigbluebutton->moderatorpw;
  130. $event->autologin = $bigbluebutton->autologin;
  131. $event->newwindow = $bigbluebutton->newwindow;
  132. $event->welcomemsg = $bigbluebutton->welcomemsg;
  133. bigbluebutton_update_event($event);
  134. }*/
  135. }
  136. return $returnid;
  137. }
  138. /**
  139. * Given an ID of an instance of this module,
  140. * this function will permanently delete the instance
  141. * and any data that depends on it.
  142. */
  143. function bigbluebutton_delete_instance($id) {
  144. if (! $bigbluebutton = bigbluebutton_get_record('bigbluebutton', 'id', $id)) {
  145. return false;
  146. }
  147. $result = true;
  148. # Delete any dependent records here #
  149. if (! bigbluebutton_delete_records('bigbluebutton', 'id', $bigbluebutton->id)) {
  150. $result = false;
  151. }
  152. /*
  153. $pagetypes = page_import_types('mod/bigbluebutton/');
  154. foreach($pagetypes as $pagetype) {
  155. if(!delete_records('block_instance', 'pageid', $bigbluebutton->id, 'pagetype', $pagetype)) {
  156. $result = false;
  157. }
  158. }
  159. */
  160. /*
  161. if (! bigbluebutton_delete_records('event', 'modulename', 'bigbluebutton', 'instance', $bigbluebutton->id)) {
  162. $result = false;
  163. }
  164. */
  165. return $result;
  166. }
  167. /**
  168. * Create string where we check if the meeting is running
  169. */
  170. function wc_isMeetingRunningURL($myIP,$mySecuritySalt,$myMeetingID) {
  171. $checkAPI = "/bigbluebutton/api/isMeetingRunning?";
  172. $queryStr = "meetingID=".$myMeetingID;
  173. $checksum = sha1('isMeetingRunning'.$queryStr.$mySecuritySalt);
  174. $secQueryURL = "http://".$myIP.$checkAPI.$queryStr."&checksum=".$checksum;
  175. return $secQueryURL;
  176. }
  177. /**
  178. * Determine if the meeting is already running (e.g. has attendees in it)
  179. */
  180. function wc_isMeetingRunning($myIP,$mySecuritySalt,$myMeetingID) {
  181. $secQueryURL = wc_isMeetingRunningURL($myIP,$mySecuritySalt,$myMeetingID);
  182. $myResponse = @file_get_contents($secQueryURL);
  183. if ($myResponse === false) { return false;}
  184. $doc = new DOMDocument();
  185. $doc->loadXML($myResponse);
  186. $returnCodeNode = $doc->getElementsByTagName("returncode");
  187. $returnCode = $returnCodeNode->item(0)->nodeValue;
  188. $runningNode = $doc->getElementsByTagName("running");
  189. $isRunning = $runningNode->item(0)->nodeValue;
  190. return $isRunning;
  191. }
  192. /**
  193. * Create meeting if it's not already running
  194. */
  195. function wc_createMeeting($myIP,$mySecuritySalt,$myMeetingName,$myMeetingID,$myAttendeePW,$myModeratorPW,$myWelcomeMsg,$myLogoutURL) {
  196. $createAPI = "/bigbluebutton/api/create?";
  197. $myVoiceBridge = rand(70000,79999);
  198. $queryStr = "name=".urlencode($myMeetingName)."&meetingID=".urlencode($myMeetingID)."&attendeePW=".urlencode($myAttendeePW)."&moderatorPW=".urlencode($myModeratorPW)."&voiceBridge=".$myVoiceBridge."&welcome=".urlencode($myWelcomeMsg)."&logoutURL=".urlencode($myLogoutURL);
  199. $checksum = sha1('create'.$queryStr.$mySecuritySalt);
  200. $secQueryURL = "http://".$myIP.$createAPI.$queryStr."&checksum=".$checksum;
  201. $myResponse = @file_get_contents($secQueryURL);
  202. if ($myResponse === false) { return false; }
  203. $doc= new DOMDocument();
  204. $doc->loadXML($myResponse);
  205. $returnCodeNode = $doc->getElementsByTagName("returncode");
  206. $returnCode = $returnCodeNode->item(0)->nodeValue;
  207. if ($returnCode=="SUCCESS") {
  208. return $returnCode;
  209. } else {
  210. $messageKeyNode = $doc->getElementsByTagName("messageKey");
  211. $messageKey = $messageKeyNode->item(0)->nodeValue;
  212. return $messageKey;
  213. }
  214. }
  215. /**
  216. * Create a URL to join the meeting
  217. */
  218. function wc_joinMeetingURL($myIP,$mySecuritySalt,$myName,$myMeetingID,$myPassword,$userID) {
  219. $joinAPI = "/bigbluebutton/api/join?";
  220. $queryStr = "fullName=".urlencode($myName)."&meetingID=".urlencode($myMeetingID)."&password=".urlencode($myPassword)."&userID=".$userID;
  221. $checksum = sha1('join'.$queryStr.$mySecuritySalt);
  222. $createStr = "http://".$myIP.$joinAPI.$queryStr."&checksum=".$checksum;
  223. return $createStr;
  224. }
  225. /**
  226. * This API is not yet supported in bigbluebutton
  227. */
  228. function wc_endMeeting($myIP,$mySecuritySalt,$myMeetingID,$myModeratorPW) {
  229. $endAPI = "/bigbluebutton/api/end?";
  230. $myVoiceBridge = rand(70000,79999);
  231. $queryStr = "meetingID=".$myMeetingID."&moderatorPW=".$myModeratorPW."&voiceBridge=".$myVoiceBridge;
  232. $checksum = sha1('create'.$queryStr.$mySecuritySalt);
  233. $secQueryURL = "http://".$myIP.$endAPI.$queryStr."&checksum=".$checksum;
  234. $myResponse = @file_get_contents($secQueryURL);
  235. if ($myResponse === false) { return false; }
  236. $doc= new DOMDocument();
  237. $doc->loadXML($myResponse);
  238. $returnCodeNode = $doc->getElementsByTagName("returncode");
  239. $returnCode = $returnCodeNode->item(0)->nodeValue;
  240. if ($returnCode=="SUCCESS") {
  241. return $returnCode;
  242. } else {
  243. $messageKeyNode = $doc->getElementsByTagName("messageKey");
  244. $messageKey = $messageKeyNode->item(0)->nodeValue;
  245. return $messageKey;
  246. }
  247. }
  248. /**
  249. * This API is not yet supported in bigbluebutton
  250. */
  251. function wc_listAttendees() {
  252. return false;
  253. }
  254. /**
  255. * This API is not yet supported in bigbluebutton
  256. */
  257. function wc_getMeetingInfo() {
  258. return false;
  259. }
  260. /**
  261. * Determine the URL of the current page (for logoutURL)
  262. */
  263. function wc_currentPageURL() {
  264. $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on");
  265. $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
  266. $port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : '';
  267. $pageURL = ($isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"];
  268. return $pageURL;
  269. }
  270. /**
  271. * Determine the IP/Domain of the current Corporate University
  272. */
  273. function wc_currentDomain() {
  274. $currentDomain = $_SERVER["SERVER_NAME"];
  275. return $currentDomain;
  276. }
  277. /**
  278. * Determine if a new version of the plug-in is available
  279. */
  280. function wc_needUpgrade() {
  281. $returnValue = false;
  282. $installedVersion = "20100805";
  283. $availableVersion = dc_getVersion();
  284. if ((int)$installedVersion < (int)$availableVersion) {
  285. $returnValue = true;
  286. }
  287. return $returnValue;
  288. }