public static function get($room) { //get all servers meeting existed and check for recordings $bbb_servers = $room->meetings()->groupBy('bbb_server')->get(['bbb_server']); $recordings = array(); foreach ($bbb_servers as $bbb_server) { $bbb = new BigBlueButton($bbb_server->bbb_server); //if server is not up do not bring recordings and continue to next server if (!$bbb->isUp()) { continue; } $recordingsParams = array('meetingId' => $room->bbb_meeting_id); $result = $bbb->getRecordingsWithXmlResponseArray($recordingsParams); $isOwner = roomController::checkOwner($room); foreach ($result as $recording) { if ($recording['playbackFormatUrl'] != null) { $duration_sec = $recording['endTime'] - $recording['startTime']; //create download url $parse_url = parse_url($recording['playbackFormatUrl']); $download_url = 'http://' . $parse_url['host'] . '/playback/presentation/download/' . $recording['recordId'] . '.zip'; $duration = gmdate("H:i:s", substr($duration_sec, 0, -3)); //find if we know recording $rec_query = Recording::where('rid', $recording['recordId'])->first(); //if we dont just save if (!$rec_query) { $rec_ins = new Recording(); $rec_ins->rid = $recording['recordId']; $rec_ins->published = 0; $rec_ins->keep = 0; $rec_ins->bbb_server_id = $bbb->id; $rec_ins->owner = $room->owner; $rec_ins->save(); //new recording show only to owner if ($isOwner) { $recordings[] = array('id' => $recording['recordId'], 'url' => $recording['playbackFormatUrl'], 'time' => date('d/m/Y H:i', substr($recording['startTime'], 0, -3)), 'duration' => $duration, 'time_real' => $recording['startTime'], 'download_url' => $download_url, 'server_id' => $bbb->id, 'keep' => false, 'portal_id' => $rec_ins->id, 'published' => false); } } else { if ($rec_query->published || $isOwner) { $recordings[] = array('id' => $recording['recordId'], 'url' => $recording['playbackFormatUrl'], 'time' => date('d/m/Y H:i', substr($recording['startTime'], 0, -3)), 'duration' => $duration, 'time_real' => $recording['startTime'], 'download_url' => $download_url, 'server_id' => $bbb->id, 'keep' => $rec_query->keep, 'portal_id' => $rec_query->id, 'published' => $rec_query->published); } } } } } if (!empty($recordings)) { usort($recordings, function ($a, $b) { return $b['time_real'] - $a['time_real']; }); return $recordings; } else { return null; } }
public static function runningAjax($room_id) { $room = Room::findOrFail($room_id); $access = roomController::checkAccess($room); if (!$access) { return Response::json(array('running' => false)); } $last_meeting = $room->meetings()->latest('created_at')->first(); if ($last_meeting) { //check if last meeting is still running on server $bbb = new BigBlueButton($last_meeting->bbb->id); //if server is down room is not running if ($bbb->isUp()) { $result = $bbb->isMeetingRunningWithXmlResponseArray($room->bbb_meeting_id); if ($result['running'] == 'true') { //return server id return Response::json(array('running' => true)); } } return Response::json(array('running' => false)); } }
/** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { $room = Room::findOrFail($id); if (!roomController::checkOwner($room)) { throw new Exception('Unauthorized'); } //get all servers meeting existed and destroy $bbb_servers = $room->meetings()->groupBy('bbb_server')->get(['bbb_server']); $recordings = array(); //end meeting in bbb if running $bbb_id = bbbController::running($room); if ($bbb_id) { $bbb = new BigBlueButton($bbb_id); if ($bbb->isUp()) { $endParams = array('meetingId' => $room->bbb_meeting_id, 'password' => $room->mod_pass); $bbb->endMeetingWithXmlResponseArray($endParams); } } //delete recordings $recordings = recordingsController::get($room); if ($recordings) { //keep recordings from each server foreach ($recordings as $rec) { $rids[$rec->server_id] = $rec['recordId'] . ','; } //send requests to servers foreach ($rids as $server_id => $recordind_ids) { $bbb = new BigBlueButton($server_id); if ($bbb->isUp()) { $bbb->deleteRecordingsWithXmlResponseArray(array('recordId' => $recording_ids)); } } } //delete room from database $room->delete(); return Redirect::action('roomController@own'); }