airportRepo = $airportRepo; $this->airlineRepo = $airlineRepo; $this->aircraftRepo = $aircraftRepo; $this->pirepRepo = $pirepRepo; $this->pirepSvc = $pirepSvc; $this->subfleetRepo = $subfleetRepo; $this->userSvc = $userSvc; } /** * Dropdown with aircraft grouped by subfleet * @param null $user * @return array */ public function aircraftList($user=null) { $aircraft = []; if($user === null) { $subfleets = $this->subfleetRepo->all(); } else { $subfleets = $this->userSvc->getAllowableSubfleets($user); } foreach ($subfleets as $subfleet) { $tmp = []; foreach ($subfleet->aircraft as $ac) { $tmp[$ac->id] = $ac['name'] . ' - ' . $ac['registration']; } $aircraft[$subfleet->name] = $tmp; } return $aircraft; } /** * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @throws \Prettus\Repository\Exceptions\RepositoryException */ public function index(Request $request) { $criterea = new RequestCriteria($request); $this->pirepRepo->pushCriteria($criterea); $pireps = $this->pirepRepo ->orderBy('created_at', 'desc') ->paginate(); return view('admin.pireps.index', [ 'pireps' => $pireps ]); } /** * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @throws \Prettus\Repository\Exceptions\RepositoryException */ public function pending(Request $request) { $criterea = new RequestCriteria($request); $this->pirepRepo->pushCriteria($criterea); $pireps = $this->pirepRepo ->findWhere(['status' => PirepState::PENDING]) ->orderBy('created_at', 'desc') ->paginate(); return view('admin.pireps.index', [ 'pireps' => $pireps ]); } /** * Show the form for creating a new Pirep. * @return Response */ public function create() { return view('admin.pireps.create', [ 'aircraft' => $this->aircraftList(), 'airports' => $this->airportRepo->selectBoxList(), 'airlines' => $this->airlineRepo->selectBoxList(), ]); } /** * @param CreatePirepRequest $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function store(CreatePirepRequest $request) { $input = $request->all(); $pirep = $this->pirepRepo->create($input); $pirep->flight_time = ((int) Utils::hoursToMinutes($request['hours'])) + ((int) $request['minutes']); Flash::success('Pirep saved successfully.'); return redirect(route('admin.pireps.index')); } /** * Display the specified Pirep. * @param int $id * @return Response */ public function show($id) { $pirep = $this->pirepRepo->find($id); if (empty($pirep)) { Flash::error('Pirep not found'); return redirect(route('admin.pireps.index')); } return view('admin.pireps.show', [ 'pirep' => $pirep, ]); } /** * Show the form for editing the specified Pirep. * @param int $id * @return Response */ public function edit($id) { $pirep = $this->pirepRepo->findWithoutFail($id); if (empty($pirep)) { Flash::error('Pirep not found'); return redirect(route('admin.pireps.index')); } $hms = Utils::minutesToTimeParts($pirep->flight_time); $pirep->hours = $hms['h']; $pirep->minutes = $hms['m']; return view('admin.pireps.edit', [ 'pirep' => $pirep, 'aircraft' => $this->aircraftList(), 'airports' => $this->airportRepo->selectBoxList(), 'airlines' => $this->airlineRepo->selectBoxList(), ]); } /** * @param $id * @param UpdatePirepRequest $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function update($id, UpdatePirepRequest $request) { $pirep = $this->pirepRepo->findWithoutFail($id); $pirep->flight_time = ((int) Utils::hoursToMinutes($request['hours'])) + ((int) $request['minutes']); if (empty($pirep)) { Flash::error('Pirep not found'); return redirect(route('admin.pireps.index')); } $attrs = $request->all(); $orig_route = $pirep->route; $pirep = $this->pirepRepo->update($attrs, $id); // A route change in the PIREP, so update the saved points in the ACARS table if($pirep->route !== $orig_route) { $this->pirepSvc->saveRoute($pirep); } Flash::success('Pirep updated successfully.'); return redirect(route('admin.pireps.index')); } /** * Remove the specified Pirep from storage. * @param int $id * @return Response */ public function destroy($id) { $pirep = $this->pirepRepo->findWithoutFail($id); if (empty($pirep)) { Flash::error('Pirep not found'); return redirect(route('admin.pireps.index')); } $this->pirepRepo->delete($id); Flash::success('Pirep deleted successfully.'); return redirect(route('admin.pireps.index')); } /** * Change or update the PIREP status. Just return the new actionbar * @param Request $request * @return \Illuminate\View\View */ public function status(Request $request) { Log::info('PIREP state update call', [$request->toArray()]); $pirep = $this->pirepRepo->findWithoutFail($request->id); if($request->isMethod('post')) { $new_status = (int) $request->new_status; $pirep = $this->pirepSvc->changeState($pirep, $new_status); } $pirep->refresh(); return view('admin.pireps.actions', ['pirep' => $pirep]); } /** * Add a comment to the Pirep * @param $id * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function comments($id, Request $request) { $user = Auth::user(); $pirep = $this->pirepRepo->findWithoutFail($request->id); if ($request->isMethod('post')) { $comment = new PirepComment([ 'user_id' => $user->id, 'pirep_id' => $pirep->id, 'comment' => $request->get('comment'), ]); $comment->save(); $pirep->refresh(); } if($request->isMethod('delete')) { $comment = PirepComment::find($request->get('comment_id')); $comment->delete(); $pirep->refresh(); } return view('admin.pireps.comments', [ 'pirep' => $pirep, ]); } }