Add AirspaceMap widget; airport overview page
This commit is contained in:
parent
5cbb480f6e
commit
504b33ba2a
57
app/Http/Controllers/Frontend/AirportController.php
Normal file
57
app/Http/Controllers/Frontend/AirportController.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Frontend;
|
||||||
|
|
||||||
|
use App\Interfaces\Controller;
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Repositories\AirportRepository;
|
||||||
|
use App\Repositories\FlightRepository;
|
||||||
|
use Flash;
|
||||||
|
use Illuminate\Database\QueryException;
|
||||||
|
use Request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class HomeController
|
||||||
|
* @package App\Http\Controllers\Frontend
|
||||||
|
*/
|
||||||
|
class AirportController extends Controller
|
||||||
|
{
|
||||||
|
private $airportRepo,
|
||||||
|
$flightRepo;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
AirportRepository $airportRepo,
|
||||||
|
FlightRepository $flightRepo
|
||||||
|
) {
|
||||||
|
$this->airportRepo = $airportRepo;
|
||||||
|
$this->flightRepo = $flightRepo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the airport
|
||||||
|
*/
|
||||||
|
public function show($id, Request $request)
|
||||||
|
{
|
||||||
|
$id = strtoupper($id);
|
||||||
|
|
||||||
|
$airport = $this->airportRepo->find($id);
|
||||||
|
if (empty($airport)) {
|
||||||
|
Flash::error('Airport not found!');
|
||||||
|
return redirect(route('frontend.dashboard.index'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$inbound_flights = $this->flightRepo->findWhere([
|
||||||
|
'arr_airport_id' => $id,
|
||||||
|
])->all();
|
||||||
|
|
||||||
|
$outbound_flights = $this->flightRepo->findWhere([
|
||||||
|
'dpt_airport_id' => $id,
|
||||||
|
])->all();
|
||||||
|
|
||||||
|
return view('airports.show', [
|
||||||
|
'airport' => $airport,
|
||||||
|
'inbound_flights' => $inbound_flights,
|
||||||
|
'outbound_flights' => $outbound_flights,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,7 @@ use App\Repositories\AirportRepository;
|
|||||||
use App\Repositories\Criteria\WhereCriteria;
|
use App\Repositories\Criteria\WhereCriteria;
|
||||||
use App\Repositories\FlightRepository;
|
use App\Repositories\FlightRepository;
|
||||||
use App\Services\GeoService;
|
use App\Services\GeoService;
|
||||||
|
use Flash;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Log;
|
use Log;
|
||||||
@ -132,7 +133,6 @@ class FlightController extends Controller
|
|||||||
$flight = $this->flightRepo->find($id);
|
$flight = $this->flightRepo->find($id);
|
||||||
if (empty($flight)) {
|
if (empty($flight)) {
|
||||||
Flash::error('Flight not found!');
|
Flash::error('Flight not found!');
|
||||||
|
|
||||||
return redirect(route('frontend.dashboard.index'));
|
return redirect(route('frontend.dashboard.index'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,8 @@ Route::group([
|
|||||||
], function () {
|
], function () {
|
||||||
Route::resource('dashboard', 'DashboardController');
|
Route::resource('dashboard', 'DashboardController');
|
||||||
|
|
||||||
|
Route::get('airports/{id}', 'AirportController@show')->name('airports.show');
|
||||||
|
|
||||||
Route::get('flights/bids', 'FlightController@bids')->name('flights.bids');
|
Route::get('flights/bids', 'FlightController@bids')->name('flights.bids');
|
||||||
Route::get('flights/search', 'FlightController@search')->name('flights.search');
|
Route::get('flights/search', 'FlightController@search')->name('flights.search');
|
||||||
Route::resource('flights', 'FlightController');
|
Route::resource('flights', 'FlightController');
|
||||||
|
29
app/Widgets/AirspaceMap.php
Normal file
29
app/Widgets/AirspaceMap.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Widgets;
|
||||||
|
|
||||||
|
use App\Interfaces\Widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the live map in a view
|
||||||
|
* @package App\Widgets
|
||||||
|
*/
|
||||||
|
class AirspaceMap extends Widget
|
||||||
|
{
|
||||||
|
protected $config = [
|
||||||
|
'height' => '800px',
|
||||||
|
'width' => '100%',
|
||||||
|
'lat' => 0,
|
||||||
|
'lon' => 0,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
return view('widgets.airspace_map', [
|
||||||
|
'config' => $this->config,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,13 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.mini-splash {
|
||||||
|
padding: 30px 0;
|
||||||
|
text-align: center;
|
||||||
|
color: #9A9A9A;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
.font-large {
|
.font-large {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ route('admin.flights.edit', [$flight->id]) }}">
|
<a href="{{ route('admin.flights.edit', [$flight->id]) }}">
|
||||||
{{ $flight->airline->code }}{{ $flight->flight_number }}
|
{{$flight->ident}}
|
||||||
@if($flight->route_code)
|
|
||||||
(C: {{ $flight->route_code }} L: {{ $flight->route_leg }})
|
|
||||||
@endif
|
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ $flight->dpt_airport->icao }}</td>
|
<td>{{ $flight->dpt_airport->icao }}</td>
|
||||||
|
34
resources/views/layouts/default/airports/show.blade.php
Normal file
34
resources/views/layouts/default/airports/show.blade.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
@extends('app')
|
||||||
|
@section('title', $airport->full_name)
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h2 class="description">{{ $airport->full_name }}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{ Widget::airspaceMap([
|
||||||
|
'width' => '100%',
|
||||||
|
'height' => '250px',
|
||||||
|
'lat' => $airport->lat,
|
||||||
|
'lon' => $airport->lon,
|
||||||
|
]) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<h3 class="description">Inbound Flights</h3>
|
||||||
|
@if(!$inbound_flights)
|
||||||
|
<div class="mini-splash">
|
||||||
|
no flights found
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
|
@each('airports.table', $inbound_flights, 'flight')
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<h3 class="description">Outbound Flights</h3>
|
||||||
|
@each('airports.table', $outbound_flights, 'flight')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
19
resources/views/layouts/default/airports/table.blade.php
Normal file
19
resources/views/layouts/default/airports/table.blade.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="{{ route('frontend.flights.show', [$flight->id]) }}">
|
||||||
|
{{ $flight->ident }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>{{ $flight->dpt_airport->icao }}</td>
|
||||||
|
<td>
|
||||||
|
{{ $flight->arr_airport->icao }}
|
||||||
|
@if($flight->alt_airport)
|
||||||
|
(Alt: {{ $flight->alt_airport->icao }})
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
{{--<td>{{ $flight->route }}</td>--}}
|
||||||
|
<td>{{ $flight->dpt_time }}</td>
|
||||||
|
<td>{{ $flight->arr_time }}</td>
|
||||||
|
<td>{{ $flight->notes }}</td>
|
||||||
|
</table>
|
@ -0,0 +1,10 @@
|
|||||||
|
<div id="map" style="width: {{ $config['width'] }}; height: {{ $config['height'] }}"></div>
|
||||||
|
|
||||||
|
@section('scripts')
|
||||||
|
<script>
|
||||||
|
phpvms.map.render_airspace_map({
|
||||||
|
lat: "{{$config['lat']}}",
|
||||||
|
lon: "{{$config['lon']}}",
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endsection
|
Loading…
Reference in New Issue
Block a user