예제 #1
0
 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;
     }
 }
예제 #2
0
 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));
     }
 }
예제 #3
0
 /**
  * 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');
 }