public function getBbbDbRecordings($meetingId, $categoryId) { $db = JFactory::getDBO(); $input = JFactory::getApplication()->input; $user = JFactory::getUser(); $bbbRecordingsTemp = array(); $bbbRecordingsArr = array(); $bbb = new BBBHelper(); $meetingId = $meetingId ? $meetingId : 0; $bbbRecordingsTemp = $bbb->getBbbRecordings($meetingId); $query = $db->getQuery(true)->select('id, group_id, group_name')->from($db->quoteName('#__bigbluebutton_excludedgroups')); $db->setQuery($query); $excludedGroups = $db->loadObjectList(); $exGroupArr = array(); foreach ($excludedGroups as $exGroup) { $exGroupArr[$exGroup->group_id] = $exGroup->group_id; } $userInExcludedGroup = false; //if there are no groups assigned foreach ($excludedGroups as $exGroup) { if (in_array($exGroup->group_id, JAccess::getGroupsByUser($user->id))) { $userInExcludedGroup = true; break; } } $meetingIds = array(); foreach ($bbbRecordingsTemp as $bbbRecording) { if ($bbbRecording["recordId"]) { $mid = $bbbRecording["meetingId"]; $query = $db->getQuery(true)->select('id, meeting_id, cat_id, meetingName, meeting_description, voiceBridge, maxParticipants, record, event_moderators, allowed_users, allowed_groups, display_time, start_time, end_time, all_moderator, event_isopen, duration, created')->from($db->quoteName('#__bigbluebutton_meetings'))->where('meeting_id = ' . $db->quote($mid)); $query->order('display_time ASC'); $db->setQuery($query); $meetingD = $db->loadObject(); $eventSkip = 0; $eventModeratorsArr = json_decode($meetingD->event_moderators); $allowedGroupsArr = json_decode($meetingD->allowed_groups); $allowedUsersArr = json_decode($meetingD->allowed_users); $countEventModeratorsArr = count(array_filter($eventModeratorsArr)); $countAllowedGroupsArr = count(array_filter($allowedGroupsArr)); $countAllowedUsersArr = count(array_filter($allowedUsersArr)); $groups = $user->get('groups'); $userAllowed = false; $userIsTeacher = false; $eventGroupIsInExGroup = false; //if there are no groups assigned if ($countAllowedUsersArr > 0) { foreach ($allowedUsersArr as $userId) { if ($user->id == $userId) { $userAllowed = true; break; } } } //if there are no groups assigned if ($countAllowedGroupsArr > 0) { foreach ($allowedGroupsArr as $groupId) { if (in_array($groupId, $exGroupArr)) { $eventGroupIsInExGroup = true; } if (in_array($groupId, JAccess::getGroupsByUser($user->id))) { $userAllowed = true; break; } } } //if there are no Moderators assigned if ($countEventModeratorsArr > 0) { foreach ($eventModeratorsArr as $teacherId) { if ($user->id == $teacherId) { $userIsTeacher = true; } break; } } //No Restrictions. neutralize if ($countAllowedUsersArr == 0 && $countAllowedGroupsArr == 0 || $userIsTeacher) { $userAllowed = true; } //If a category is selected, filter by category if ($categoryId) { if ($categoryId != $meetingD->cat_id) { $eventSkip = 1; } } //If the user belongs to the excluded group, do not display public events, and if not a teacher. //Display event if the event only if the excluded group is assigned in the event. if ($userInExcludedGroup && $eventGroupIsInExGroup != true && $userIsTeacher != true) { continue; } else { } if ($eventSkip || !$userAllowed) { continue; } $bbbRecording["meetingid"] = $meetingD->meeting_id; $bbbRecording["meetingdbid"] = $meetingD->id; $bbbRecording["categoryid"] = $meetingD->cat_id; $bbbRecording["title"] = $meetingD->meetingName; $bbbRecording["description"] = $meetingD->meeting_description; $bbbRecording["display_time"] = $meetingD->display_time; $bbbRecordingsArr[] = $bbbRecording; } } //Sort By Date if ($bbbRecordingsArr) { $recordingsCount = count($bbbRecordingsArr) - 1; for ($counter = $recordingsCount; $counter >= 0; $counter--) { $meetingIds[] = $bbbRecordingsArr[$counter][meetingid]; } } //Last Stop Here $implodedMeetingIds = implode('","', $meetingIds); $query = $db->getQuery(true)->select('id, meeting_id, recording_id, recording_title, recording_description, recording_url, start_time, end_time')->from($db->quoteName('#__bigbluebutton_recordings'))->where('meeting_id IN ("' . $implodedMeetingIds . '")'); $query->order('start_time DESC'); $db->setQuery($query); $bbbRecordingsResult = $db->loadObjectList(); $recResult = array(); foreach ($bbbRecordingsResult as $bbbRecs) { $query = $db->getQuery(true)->select('id, meeting_id, cat_id, meetingName, meeting_description, voiceBridge, maxParticipants, record, event_moderators, allowed_users, allowed_groups, display_time, start_time, end_time, all_moderator, event_isopen, duration, created')->from($db->quoteName('#__bigbluebutton_meetings'))->where('meeting_id = "' . $bbbRecs->meeting_id . '"'); $db->setQuery($query); $res = $db->loadObject(); $bbbRecs->display_time = $res->display_time; $bbbRecs->event_moderators = json_decode($res->event_moderators); $recResult[] = $bbbRecs; } return $recResult; }