}
header('Content-Type: application/json; charset=utf-8');
if (!isset($error)) {
    if (!isloggedin() && $PAGE->course->id == SITEID) {
        $userid = guest_user()->id;
    } else {
        $userid = $USER->id;
    }
    $hascourseaccess = $PAGE->course->id == SITEID || can_access_course($PAGE->course, $userid);
    if (!$hascourseaccess) {
        header("HTTP/1.0 401 Unauthorized");
    } else {
        $salt = trim($CFG->BigBlueButtonBNSecuritySalt);
        $url = trim(trim($CFG->BigBlueButtonBNServerURL), '/') . '/';
        try {
            $ismeetingrunning = bigbluebuttonbn_isMeetingRunning($meetingID, $url, $salt) ? 'true' : 'false';
            if ($ismeetingrunning === 'true') {
                ///log the join event
                if ($bigbluebuttonbn = $DB->get_record('bigbluebuttonbn', array('id' => $id), '*', MUST_EXIST)) {
                    $course = $DB->get_record('course', array('id' => $bigbluebuttonbn->course), '*', MUST_EXIST);
                    $cm = get_coursemodule_from_instance('bigbluebuttonbn', $bigbluebuttonbn->id, $course->id, false, MUST_EXIST);
                    /// Moodle event logger: Create an event for meeting joined
                    if ($CFG->version < '2014051200') {
                        //This is valid before v2.7
                        add_to_log($course->id, 'bigbluebuttonbn', 'meeting joined', '', $bigbluebuttonbn->name, $cm->id);
                    } else {
                        //This is valid after v2.7
                        $context = context_module::instance($cm->id);
                        $event = \mod_bigbluebuttonbn\event\bigbluebuttonbn_meeting_joined::create(array('context' => $context, 'objectid' => $bigbluebuttonbn->id));
                        $event->trigger();
                    }
         if (isset($bbbsession) && !is_null($bbbsession)) {
             /// Moodle event logger: Create an event for meeting left
             bigbluebuttonbn_event_log(BIGBLUEBUTTON_EVENT_MEETING_LEFT, $bigbluebuttonbn, $context, $cm);
             /// Update the cache
             $meeting_info = bigbluebuttonbn_bbb_broker_get_meeting_info($bbbsession['meetingid'], $bbbsession['modPW'], BIGBLUEBUTTONBN_FORCED);
             /// Close the tab or window where BBB was opened
             bigbluebutton_bbb_view_close_window();
         } else {
             bigbluebutton_bbb_view_close_window_manually();
         }
     }
     break;
 case 'join':
     if (isset($bbbsession) && !is_null($bbbsession)) {
         //See if the session is in progress
         if (bigbluebuttonbn_isMeetingRunning($bbbsession['meetingid'], $bbbsession['endpoint'], $bbbsession['shared_secret'])) {
             /// Since the meeting is already running, we just join the session
             bigbluebutton_bbb_view_execute_join($bbbsession, $cm, $context, $bigbluebuttonbn);
         } else {
             // If user is administrator, moderator or if is viewer and no waiting is required
             if ($bbbsession['administrator'] || $bbbsession['moderator'] || !$bbbsession['wait']) {
                 /// Prepare the metadata
                 $metadata = array("meta_bn-origin" => $bbbsession['origin'], "meta_bbb-origin-version" => $bbbsession['originVersion'], "meta_bbb-origin-server-name" => $bbbsession['originServerName'], "meta_bbb-origin-server-common-name" => $bbbsession['originServerCommonName'], "meta_bbb-origin-tag" => $bbbsession['originTag'], "meta_bbb-context" => $bbbsession['course']->fullname, "meta_bbb-recording-name" => isset($name) && $name != '' ? $name : $bbbsession['contextActivityName'], "meta_bbb-recording-description" => isset($description) && $description != '' ? $description : $bbbsession['contextActivityDescription'], "meta_bbb-recording-tags" => isset($tags) && $tags != '' ? $tags : $bbbsession['contextActivityTags']);
                 if (bigbluebuttonbn_server_offers_bn_capabilities() && bigbluebuttonbn_get_cfg_recordingready_enabled()) {
                     $metadata["meta_bn-recording-ready-url"] = $bbbsession['recordingReadyURL'];
                 }
                 /// Set the duration for the meeting
                 if (bigbluebuttonbn_get_cfg_scheduled_duration_enabled()) {
                     $durationtime = bigbluebuttonbn_get_duration($bigbluebuttonbn->openingtime, $bigbluebuttonbn->closingtime);
                     if ($durationtime > 0) {
                         $bbbsession['welcome'] .= '<br><br>' . str_replace("%duration%", '' . $durationtime, get_string('bbbdurationwarning', 'bigbluebuttonbn'));