Save bbb "internal meeting id" in plugin_bbb_meeting table see BT#15618

Requires DB change. That id is needed in order to regenerate records.
pull/2958/head
Julio Montoya 6 years ago
parent a348c8f4d2
commit 89fed6ecde
  1. 6
      plugin/bbb/README.md
  2. 36
      plugin/bbb/lib/bbb.lib.php
  3. 46
      plugin/bbb/lib/bbb_api.php
  4. 15
      plugin/bbb/lib/bbb_plugin.class.php

@ -56,4 +56,8 @@ ALTER TABLE plugin_bbb_meeting ADD COLUMN interface INT NOT NULL DEFAULT 0;
ALTER TABLE plugin_bbb_room ADD COLUMN interface INT NOT NULL DEFAULT 0; ALTER TABLE plugin_bbb_room ADD COLUMN interface INT NOT NULL DEFAULT 0;
ALTER TABLE plugin_bbb_room MODIFY COLUMN in_at datetime; ALTER TABLE plugin_bbb_room MODIFY COLUMN in_at datetime;
ALTER TABLE plugin_bbb_room MODIFY COLUMN out_at datetime; ALTER TABLE plugin_bbb_room MODIFY COLUMN out_at datetime;
``` ```
For version 2.8
ALTER TABLE plugin_bbb_meeting ADD COLUMN internal_meeting_id VARCHAR(255) DEFAULT NULL;

@ -357,7 +357,7 @@ class bbb
$meetingName = isset($params['meeting_name']) ? $params['meeting_name'] : $this->getCurrentVideoConferenceName(); $meetingName = isset($params['meeting_name']) ? $params['meeting_name'] : $this->getCurrentVideoConferenceName();
$welcomeMessage = isset($params['welcome_msg']) ? $params['welcome_msg'] : null; $welcomeMessage = isset($params['welcome_msg']) ? $params['welcome_msg'] : null;
$record = isset($params['record']) && $params['record'] ? 'true' : 'false'; $record = isset($params['record']) && $params['record'] ? 'true' : 'false';
$duration = isset($params['duration']) ? intval($params['duration']) : 0; //$duration = isset($params['duration']) ? intval($params['duration']) : 0;
// This setting currently limits the maximum conference duration, // This setting currently limits the maximum conference duration,
// to avoid lingering sessions on the video-conference server #6261 // to avoid lingering sessions on the video-conference server #6261
$duration = 300; $duration = 300;
@ -377,31 +377,23 @@ class bbb
//'meta_category' => '', // Use to pass additional info to BBB server. See API docs. //'meta_category' => '', // Use to pass additional info to BBB server. See API docs.
); );
if ($this->debug) {
error_log("create_meeting params: ".print_r($bbbParams, 1));
}
$status = false; $status = false;
$meeting = null; $meeting = null;
while ($status === false) { while ($status === false) {
$result = $this->api->createMeetingWithXmlResponseArray( $result = $this->api->createMeetingWithXmlResponseArray($bbbParams);
$bbbParams
);
if (isset($result) && strval($result['returncode']) == 'SUCCESS') { if (isset($result) && strval($result['returncode']) == 'SUCCESS') {
if ($this->debug) { if ($this->plugin->get('allow_regenerate_recording') === 'true') {
error_log( $sql = "UPDATE $this->table SET internal_meeting_id = '".$result['internalMeetingID']."'
"create_meeting result: ".print_r($result, 1) WHERE id = $id";
); Database::query($sql);
} }
$meeting = $this->joinMeeting($meetingName, true); $meeting = $this->joinMeeting($meetingName, true);
return $meeting; return $meeting;
} }
} }
return false;
} }
return false; return false;
} }
@ -827,7 +819,7 @@ class bbb
$recordLink = Display::url( $recordLink = Display::url(
$this->plugin->get_lang('ViewRecord'), $this->plugin->get_lang('ViewRecord'),
$record['playbackFormatUrl'], $record['playbackFormatUrl'],
['target' => '_blank'] ['target' => '_blank', 'class' => 'btn btn-default']
); );
} else { } else {
$recordLink = $this->plugin->get_lang('NoRecording'); $recordLink = $this->plugin->get_lang('NoRecording');
@ -1140,13 +1132,15 @@ class bbb
// Check if there are recordings for this meeting // Check if there are recordings for this meeting
$recordings = $this->api->getRecordings(['meetingId' => $meetingData['remote_id']]); $recordings = $this->api->getRecordings(['meetingId' => $meetingData['remote_id']]);
if (!empty($recordings) && isset($recordings['messageKey']) && $recordings['messageKey'] === 'noRecordings') { if (!empty($recordings) && isset($recordings['messageKey']) && $recordings['messageKey'] === 'noRecordings') {
// we regenerate the meeting id // Regenerate the meeting id
$pass = $this->getModMeetingPassword(); if (!empty($meetingData['internal_meeting_id'])) {
return $this->api->generateRecording(['recordId' => $meetingData['internal_meeting_id']]);
}
/*$pass = $this->getModMeetingPassword();
$info = $this->getMeetingInfo(['meetingId' => $meetingData['remote_id'], 'password' => $pass]); $info = $this->getMeetingInfo(['meetingId' => $meetingData['remote_id'], 'password' => $pass]);
if (!empty($info) && isset($info['internalMeetingID'])) { if (!empty($info) && isset($info['internalMeetingID'])) {
return $this->api->generateRecording(['recordId' => $info['internalMeetingID']]); return $this->api->generateRecording(['recordId' => $meetingData['internal_meeting_id']]);
} }*/
return false; return false;
} else { } else {
if (!empty($recordings['records'])) { if (!empty($recordings['records'])) {

@ -138,7 +138,8 @@ class BigBlueButtonBN
return ( $creationUrl.$params.'&checksum='.sha1("create".$params.$this->_securitySalt) ); return ( $creationUrl.$params.'&checksum='.sha1("create".$params.$this->_securitySalt) );
} }
public function createMeetingWithXmlResponseArray($creationParams) { public function createMeetingWithXmlResponseArray($creationParams)
{
/* /*
USAGE: USAGE:
$creationParams = array( $creationParams = array(
@ -160,27 +161,28 @@ class BigBlueButtonBN
$xml = $this->_processXmlResponse($this->getCreateMeetingURL($creationParams)); $xml = $this->_processXmlResponse($this->getCreateMeetingURL($creationParams));
if ($xml) { if ($xml) {
if($xml->meetingID) if ($xml->meetingID) {
return array( return array(
'returncode' => $xml->returncode->__toString(), 'returncode' => $xml->returncode->__toString(),
'message' => $xml->message->__toString(), 'message' => $xml->message->__toString(),
'messageKey' => $xml->messageKey->__toString(), 'messageKey' => $xml->messageKey->__toString(),
'meetingId' => $xml->meetingID->__toString(), 'meetingId' => $xml->meetingID->__toString(),
'attendeePw' => $xml->attendeePW->__toString(), 'attendeePw' => $xml->attendeePW->__toString(),
'moderatorPw' => $xml->moderatorPW->__toString(), 'moderatorPw' => $xml->moderatorPW->__toString(),
'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded->__toString(), 'hasBeenForciblyEnded' => $xml->hasBeenForciblyEnded->__toString(),
'createTime' => $xml->createTime->__toString() 'createTime' => $xml->createTime->__toString(),
); 'internalMeetingID' => $xml->internalMeetingID->__toString()
else );
return array( } else {
'returncode' => $xml->returncode->__toString(), return array(
'message' => $xml->message->__toString(), 'returncode' => $xml->returncode->__toString(),
'messageKey' => $xml->messageKey->__toString() 'message' => $xml->message->__toString(),
); 'messageKey' => $xml->messageKey->__toString(),
} );
else { }
return null; } else {
} return null;
}
} }
public function getJoinMeetingURL($joinParams) { public function getJoinMeetingURL($joinParams) {

@ -42,7 +42,7 @@ class BBBPlugin extends Plugin
protected function __construct() protected function __construct()
{ {
parent::__construct( parent::__construct(
'2.7', '2.8',
'Julio Montoya, Yannick Warnier, Angel Fernando Quiroz Campos', 'Julio Montoya, Yannick Warnier, Angel Fernando Quiroz Campos',
[ [
'tool_enable' => 'boolean', 'tool_enable' => 'boolean',
@ -96,9 +96,9 @@ class BBBPlugin extends Plugin
if ($variable === 'bbb_enable_conference_in_groups') { if ($variable === 'bbb_enable_conference_in_groups') {
if ($this->get('enable_conference_in_course_groups') === 'true') { if ($this->get('enable_conference_in_course_groups') === 'true') {
return true; return true;
} else {
return false;
} }
return false;
} }
return true; return true;
@ -134,12 +134,13 @@ class BBBPlugin extends Plugin
welcome_msg VARCHAR(255) NOT NULL DEFAULT '', welcome_msg VARCHAR(255) NOT NULL DEFAULT '',
session_id INT unsigned DEFAULT 0, session_id INT unsigned DEFAULT 0,
remote_id CHAR(30), remote_id CHAR(30),
internal_meeting_id VARCHAR(255) DEFAULT NULL,
visibility TINYINT NOT NULL DEFAULT 1, visibility TINYINT NOT NULL DEFAULT 1,
voice_bridge INT NOT NULL DEFAULT 1, voice_bridge INT NOT NULL DEFAULT 1,
access_url INT NOT NULL DEFAULT 1, access_url INT NOT NULL DEFAULT 1,
video_url TEXT NULL, video_url TEXT NULL,
has_video_m4v TINYINT NOT NULL DEFAULT 0, has_video_m4v TINYINT NOT NULL DEFAULT 0,
interface INT NOT NULL DEFAULT 0 interface INT NOT NULL DEFAULT 0
)"; )";
Database::query($sql); Database::query($sql);
@ -281,7 +282,7 @@ class BBBPlugin extends Plugin
{ {
$data = [ $data = [
'text' => $this->get_lang('EnterConferenceFlash'), 'text' => $this->get_lang('EnterConferenceFlash'),
'url' => $conferenceUrl . '&interface=' . self::INTERFACE_FLASH, 'url' => $conferenceUrl.'&interface='.self::INTERFACE_FLASH,
'icon' => 'resources/img/64/videoconference_flash.png' 'icon' => 'resources/img/64/videoconference_flash.png'
]; ];
return $data; return $data;
@ -296,8 +297,8 @@ class BBBPlugin extends Plugin
{ {
$data = [ $data = [
'text' => $this->get_lang('EnterConferenceHTML5'), 'text' => $this->get_lang('EnterConferenceHTML5'),
'url' => $conferenceUrl . '&interface=' . self::INTERFACE_HTML5, 'url' => $conferenceUrl.'&interface='.self::INTERFACE_HTML5,
'icon' => 'resources/img/64/videoconference_html5.png' 'icon' => 'resources/img/64/videoconference_html5.png',
]; ];
return $data; return $data;
} }

Loading…
Cancel
Save