Fix bbb fatal error when listing meetings

ofaj
jmontoyaa 9 years ago
parent 3785740529
commit 0d15a964c4
  1. 83
      plugin/bbb/lib/bbb.lib.php

@ -97,15 +97,16 @@ class bbb
if ($bbbPluginEnabled === 'true') {
$userInfo = api_get_user_info();
if ($userInfo === false && !empty($isGlobalPerUser)) {
if (empty($userInfo) && !empty($isGlobalPerUser)) {
// If we are following a link to a global "per user" conference
// then generate a random guest name to join the conference
// because there is no part of the process where we give a name
$this->userCompleteName = 'Guest' . rand(1000,9999);
$this->userCompleteName = 'Guest'.rand(1000, 9999);
} else {
$this->userCompleteName = $userInfo['complete_name'];
}
$this->salt = $bbb_salt;
$info = parse_url($bbb_host);
$this->url = $bbb_host.'/bigbluebutton/';
@ -158,7 +159,6 @@ class bbb
public function isGlobalConference()
{
if ($this->isGlobalConferenceEnabled() === false) {
return false;
}
@ -180,17 +180,14 @@ class bbb
public function isConferenceManager()
{
if (api_is_coach() || api_is_platform_admin()) {
return true;
}
if ($this->isGlobalConferencePerUserEnabled()) {
$currentUserId = api_get_user_id();
if ($this->userId === $currentUserId) {
return true;
} else {
return false;
}
}
@ -198,7 +195,6 @@ class bbb
$courseInfo = api_get_course_info();
if (!empty($courseInfo)) {
return api_is_course_admin();
}
@ -590,19 +586,11 @@ class bbb
$groupId = 0,
$isAdminReport = false,
$dateRange = []
)
{
) {
$em = Database::getManager();
$manager = $this->isConferenceManager();
if ($manager) {
$pass = $this->getUserMeetingPassword();
} else {
$pass = $this->getModMeetingPassword();
}
$conditions = [];
if ($courseId || $sessionId || $groupId) {
$conditions = array(
'where' => array(
@ -642,7 +630,23 @@ class bbb
$newMeetingList = array();
$item = array();
foreach ($meetingList as $meetingDB) {
$meetingBBB = $this->getMeetingInfo(['meetingId' => $meetingDB['remote_id'], 'password' => $pass]);
$courseId = $meetingDB['c_id'];
$courseInfo = api_get_course_info_by_id($courseId);
$courseCode = $courseInfo['code'];
if ($manager) {
$pass = $this->getUserMeetingPassword($courseCode);
} else {
$pass = $this->getModMeetingPassword($courseCode);
}
$meetingBBB = $this->getMeetingInfo(
[
'meetingId' => $meetingDB['remote_id'],
'password' => $pass
]
);
if ($meetingBBB === false) {
//checking with the remote_id didn't work, so just in case and
// to provide backwards support, check with the id
@ -658,11 +662,12 @@ class bbb
if ($meetingDB['visibility'] == 0 && $this->isConferenceManager() === false) {
continue;
}
$meetingBBB['end_url'] = $this->endUrl($meetingDB);
if (isset($meetingBBB['returncode']) && (string)$meetingBBB['returncode'] == 'FAILED') {
if ($meetingDB['status'] == 1 && $this->isConferenceManager()) {
$this->endMeeting($meetingDB['id']);
$this->endMeeting($meetingDB['id'], $courseCode);
}
} else {
$meetingBBB['add_to_calendar_url'] = $this->addToCalendarUrl($meetingDB);
@ -681,7 +686,6 @@ class bbb
}
$record = [];
if (empty($meetingDB['video_url'])) {
$recordingParams = ['meetingId' => $mId];
$records = $this->api->getRecordingsWithXmlResponseArray($recordingParams);
@ -689,7 +693,6 @@ class bbb
if (!empty($records)) {
if (!isset($records['messageKey']) || $records['messageKey'] != 'noRecordings') {
$record = end($records);
if (!is_array($record) || !isset($record['recordId'])) {
continue;
}
@ -714,7 +717,6 @@ class bbb
: get_lang('NoRecording');
if ($isAdminReport) {
$courseInfo = api_get_course_info_by_id($meetingDB['c_id']);
$this->forceCIdReq($courseInfo['code'], $meetingDB['session_id'], $meetingDB['group_id']);
}
@ -724,7 +726,7 @@ class bbb
}
$item['created_at'] = api_convert_and_format_date($meetingDB['created_at']);
//created_at
// created_at
$meetingDB['created_at'] = $item['created_at']; //avoid overwrite in array_merge() below
$item['publish_url'] = $this->publishUrl($meetingDB);
@ -745,7 +747,6 @@ class bbb
$item['course'] = $em->find('ChamiloCoreBundle:Course', $item['c_id']);
$item['session'] = $em->find('ChamiloCoreBundle:Session', $item['session_id']);
$newMeetingList[] = $item;
}
@ -788,21 +789,28 @@ class bbb
* Closes a meeting (usually when the user click on the close button from
* the conferences listing.
* @param string The internal ID of the meeting (id field for this meeting)
* @param string $courseCode
*
* @return void
* @assert (0) === false
*/
public function endMeeting($id)
public function endMeeting($id, $courseCode = null)
{
if (empty($id)) {
return false;
}
$meetingData = Database::select('*', $this->table, array('where' => array('id = ?' => array($id))), 'first');
$meetingData = Database::select(
'*',
$this->table,
array('where' => array('id = ?' => array($id))),
'first'
);
$manager = $this->isConferenceManager();
if ($manager) {
$pass = $this->getUserMeetingPassword();
$pass = $this->getUserMeetingPassword($courseCode);
} else {
$pass = $this->getModMeetingPassword();
$pass = $this->getModMeetingPassword($courseCode);
}
$endParams = array(
@ -819,40 +827,43 @@ class bbb
/**
* Gets the password for a specific meeting for the current user
* @param string $courseCode
* @return string A moderator password if user is teacher, or the course code otherwise
*
*/
public function getUserMeetingPassword()
public function getUserMeetingPassword($courseCode = null)
{
if ($this->isGlobalConferencePerUserEnabled()) {
return 'url_'.$this->userId.'_'.api_get_current_access_url_id();
}
if ($this->isGlobalConference()) {
return 'url_'.api_get_current_access_url_id();
}
$courseCode = empty($courseCode) ? api_get_course_id() : $courseCode;
return api_get_course_id();
return $courseCode;
}
/**
* Generated a moderator password for the meeting
* @param string $courseCode
*
* @return string A password for the moderation of the videoconference
*/
public function getModMeetingPassword()
public function getModMeetingPassword($courseCode = null)
{
if ($this->isGlobalConferencePerUserEnabled()) {
return 'url_'.$this->userId.'_'.api_get_current_access_url_id().'_mod';
}
if ($this->isGlobalConference()) {
return 'url_'.api_get_current_access_url_id().'_mod';
}
return api_get_course_id().'mod';
$courseCode = empty($courseCode) ? api_get_course_id() : $courseCode;
return $courseCode.'mod';
}
/**

Loading…
Cancel
Save