Compare commits
45
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52a43acb1a | ||
|
|
e13a019a40 | ||
|
|
91f928ecf4 | ||
|
|
226ae6d109 | ||
|
|
90d1708aab | ||
|
|
6eef246b6a | ||
|
|
fc8ca69729 | ||
|
|
57277c558d | ||
|
|
b0f52ed1d0 | ||
|
|
d64e674c21 | ||
|
|
40c911ff17 | ||
|
|
b6abe8dd5b | ||
|
|
54c3c8f346 | ||
|
|
c250fce84b | ||
|
|
4125cdd373 | ||
|
|
6eb883de73 | ||
|
|
49528c9644 | ||
|
|
4475813a12 | ||
|
|
681e39650b | ||
|
|
bbbe8a8bd3 | ||
|
|
0acab21712 | ||
|
|
a17840d690 | ||
|
|
fe87f21599 | ||
|
|
2756c34702 | ||
|
|
564f9ec06e | ||
|
|
95e1df619e | ||
|
|
4a04d73d08 | ||
|
|
88a8ffe48a | ||
|
|
78d3c6b577 | ||
|
|
f42a41286d | ||
|
|
f8ded4e410 | ||
|
|
6304f3cab4 | ||
|
|
4eb73ab5f3 | ||
|
|
2af72d137d | ||
|
|
f68e068f87 | ||
|
|
89f9706520 | ||
|
|
cde6fb314b | ||
|
|
1a944f320c | ||
|
|
d7ad2bdd11 | ||
|
|
24fca650f8 | ||
|
|
35359b8646 | ||
|
|
b6a2fe405d | ||
|
|
bd9c429cfc | ||
|
|
b18f1bbe6c | ||
|
|
a5a21fb2fd |
@@ -70,14 +70,22 @@ mkdir -p storage/framework/views
|
|||||||
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
|
echo "Current directory contents"
|
||||||
|
ls -al $BASE_DIR
|
||||||
|
|
||||||
|
echo "Parent directory contents"
|
||||||
ls -al $BASE_DIR/../
|
ls -al $BASE_DIR/../
|
||||||
|
|
||||||
tar -czf $TAR_NAME -C $BASE_DIR .
|
echo "Calling find"
|
||||||
|
find $BASE_DIR/../ -type d -maxdepth 2
|
||||||
|
|
||||||
|
tar -czf $TAR_NAME -C $BASE_DIR --xform 's:^\./::' . [--show-transformed-names|--show-stored-names]
|
||||||
sha256sum $TAR_NAME >"$TAR_NAME.sha256"
|
sha256sum $TAR_NAME >"$TAR_NAME.sha256"
|
||||||
|
|
||||||
cd $BASE_DIR;
|
cd $BASE_DIR;
|
||||||
zip -r $ZIP_NAME *
|
zip -r $ZIP_NAME ./
|
||||||
sha256sum $ZIP_NAME >"$ZIP_NAME.sha256"
|
sha256sum $ZIP_NAME >"$ZIP_NAME.sha256"
|
||||||
|
|
||||||
mv $ZIP_NAME /tmp
|
mv $ZIP_NAME /tmp
|
||||||
mv "$ZIP_NAME.sha256" /tmp
|
mv "$ZIP_NAME.sha256" /tmp
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,6 @@ jobs:
|
|||||||
- name: 'Install Release Dependencies'
|
- name: 'Install Release Dependencies'
|
||||||
run: |
|
run: |
|
||||||
rm -rf vendor
|
rm -rf vendor
|
||||||
sudo npm i tar-to-zip -g
|
|
||||||
composer install --no-dev --prefer-dist --no-interaction --verbose
|
composer install --no-dev --prefer-dist --no-interaction --verbose
|
||||||
sudo chmod +x ./.github/scripts/*
|
sudo chmod +x ./.github/scripts/*
|
||||||
|
|
||||||
@@ -179,7 +178,6 @@ jobs:
|
|||||||
- name: 'Install Release Dependencies'
|
- name: 'Install Release Dependencies'
|
||||||
run: |
|
run: |
|
||||||
rm -rf vendor
|
rm -rf vendor
|
||||||
sudo npm i tar-to-zip -g
|
|
||||||
composer install --no-dev --prefer-dist --no-interaction --verbose
|
composer install --no-dev --prefer-dist --no-interaction --verbose
|
||||||
sudo chmod +x ./.github/scripts/*
|
sudo chmod +x ./.github/scripts/*
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
BSD 3-Clause License
|
|
||||||
|
|
||||||
Copyright (c) 2017, phpvms - http://www.phpvms.net
|
Copyright (c) 2017, phpvms - http://www.phpvms.net
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
@@ -17,6 +15,9 @@ modification, are permitted provided that the following conditions are met:
|
|||||||
contributors may be used to endorse or promote products derived from
|
contributors may be used to endorse or promote products derived from
|
||||||
this software without specific prior written permission.
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
* A "powered by phpvms" is required in page footers, unless the license has
|
||||||
|
purchased to omit it.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
|||||||
@@ -82,10 +82,6 @@ test:
|
|||||||
phpcs:
|
phpcs:
|
||||||
@vendor/bin/php-cs-fixer fix --config=.php_cs -v --diff --diff-format=udiff --dry-run
|
@vendor/bin/php-cs-fixer fix --config=.php_cs -v --diff --diff-format=udiff --dry-run
|
||||||
|
|
||||||
#.PHONY: phpstan
|
|
||||||
#phpstan:
|
|
||||||
# vendor/bin/phpstan analyse -c phpstan.neon -v --level 2 app
|
|
||||||
|
|
||||||
.PHONY: replay-acars
|
.PHONY: replay-acars
|
||||||
replay-acars:
|
replay-acars:
|
||||||
#@php artisan phpvms:replay AAL10,AAL3113,BAW172,DAL988,FIN6,MSR986 --manual
|
#@php artisan phpvms:replay AAL10,AAL3113,BAW172,DAL988,FIN6,MSR986 --manual
|
||||||
@@ -95,11 +91,6 @@ replay-acars:
|
|||||||
sass-watch:
|
sass-watch:
|
||||||
sass --watch public/assets/admin/sass/paper-dashboard.scss:public/assets/admin/css/paper-dashboard.css
|
sass --watch public/assets/admin/sass/paper-dashboard.scss:public/assets/admin/css/paper-dashboard.css
|
||||||
|
|
||||||
.PHONY: schema
|
|
||||||
schema:
|
|
||||||
#php artisan infyom:scaffold Aircraft --fieldsFile=database/schema/aircraft.json
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
.PHONY: deploy-package
|
.PHONY: deploy-package
|
||||||
deploy-package:
|
deploy-package:
|
||||||
./.travis/deploy_script.sh
|
./.travis/deploy_script.sh
|
||||||
|
|||||||
@@ -170,6 +170,11 @@ class ImportExport
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach ($split_values as $value) {
|
foreach ($split_values as $value) {
|
||||||
|
$value = trim($value);
|
||||||
|
if ($value === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// This isn't in the query string format, so it's
|
// This isn't in the query string format, so it's
|
||||||
// just a straight key-value pair set
|
// just a straight key-value pair set
|
||||||
if (strpos($value, '?') === false) {
|
if (strpos($value, '?') === false) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace App\Cron\Hourly;
|
|||||||
use App\Contracts\Listener;
|
use App\Contracts\Listener;
|
||||||
use App\Events\CronHourly;
|
use App\Events\CronHourly;
|
||||||
use App\Models\Enums\PirepState;
|
use App\Models\Enums\PirepState;
|
||||||
|
use App\Models\Enums\PirepStatus;
|
||||||
use App\Models\Pirep;
|
use App\Models\Pirep;
|
||||||
use App\Services\PirepService;
|
use App\Services\PirepService;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
@@ -38,7 +39,10 @@ class DeletePireps extends Listener
|
|||||||
protected function deletePireps(int $expire_time_hours, int $state)
|
protected function deletePireps(int $expire_time_hours, int $state)
|
||||||
{
|
{
|
||||||
$dt = Carbon::now('UTC')->subHours($expire_time_hours);
|
$dt = Carbon::now('UTC')->subHours($expire_time_hours);
|
||||||
$pireps = Pirep::where('created_at', '<', $dt)->where(['state' => $state])->get();
|
$pireps = Pirep::where('created_at', '<', $dt)
|
||||||
|
->where(['state' => $state])
|
||||||
|
->where('status', '<>', PirepStatus::PAUSED)
|
||||||
|
->get();
|
||||||
|
|
||||||
/** @var PirepService $pirepSvc */
|
/** @var PirepService $pirepSvc */
|
||||||
$pirepSvc = app(PirepService::class);
|
$pirepSvc = app(PirepService::class);
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class RemoveExpiredLiveFlights extends Listener
|
|||||||
$pireps = Pirep::where('updated_at', '<', $date)
|
$pireps = Pirep::where('updated_at', '<', $date)
|
||||||
->where('state', PirepState::IN_PROGRESS)
|
->where('state', PirepState::IN_PROGRESS)
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
foreach ($pireps as $pirep) {
|
foreach ($pireps as $pirep) {
|
||||||
event(new PirepCancelled($pirep));
|
event(new PirepCancelled($pirep));
|
||||||
Log::info('Cron: Deleting Expired Live PIREP id='.$pirep->id.', state='.PirepState::label($pirep->state));
|
Log::info('Cron: Deleting Expired Live PIREP id='.$pirep->id.', state='.PirepState::label($pirep->state));
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use Illuminate\Contracts\View\Factory;
|
|||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
|
||||||
class ModulesController extends Controller
|
class ModulesController extends Controller
|
||||||
@@ -29,6 +30,7 @@ class ModulesController extends Controller
|
|||||||
{
|
{
|
||||||
$modules = $this->moduleSvc->getAllModules();
|
$modules = $this->moduleSvc->getAllModules();
|
||||||
$new_modules = $this->moduleSvc->scan();
|
$new_modules = $this->moduleSvc->scan();
|
||||||
|
|
||||||
return view('admin.modules.index', [
|
return view('admin.modules.index', [
|
||||||
'modules' => $modules,
|
'modules' => $modules,
|
||||||
'new_modules' => $new_modules,
|
'new_modules' => $new_modules,
|
||||||
@@ -97,7 +99,14 @@ class ModulesController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function enable(Request $request)
|
public function enable(Request $request)
|
||||||
{
|
{
|
||||||
$this->moduleSvc->addModule($request->input('name'));
|
$moduleName = $request->input('name');
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->moduleSvc->addModule($moduleName);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error('Error activating module '.$moduleName);
|
||||||
|
}
|
||||||
|
|
||||||
return redirect(route('admin.modules.index'));
|
return redirect(route('admin.modules.index'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use App\Models\Enums\PirepSource;
|
|||||||
use App\Models\Enums\PirepState;
|
use App\Models\Enums\PirepState;
|
||||||
use App\Models\Pirep;
|
use App\Models\Pirep;
|
||||||
use App\Models\PirepComment;
|
use App\Models\PirepComment;
|
||||||
|
use App\Models\PirepFare;
|
||||||
use App\Repositories\AircraftRepository;
|
use App\Repositories\AircraftRepository;
|
||||||
use App\Repositories\AirlineRepository;
|
use App\Repositories\AirlineRepository;
|
||||||
use App\Repositories\AirportRepository;
|
use App\Repositories\AirportRepository;
|
||||||
@@ -151,10 +152,10 @@ class PirepController extends Controller
|
|||||||
$count = $request->input($field_name);
|
$count = $request->input($field_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
$fares[] = [
|
$fares[] = new PirepFare([
|
||||||
'fare_id' => $fare->id,
|
'fare_id' => $fare->id,
|
||||||
'count' => $count,
|
'count' => $count,
|
||||||
];
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fareSvc->saveForPirep($pirep, $fares);
|
$this->fareSvc->saveForPirep($pirep, $fares);
|
||||||
|
|||||||
@@ -193,9 +193,9 @@ class AcarsController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Change the PIREP status if it's as SCHEDULED before
|
// Change the PIREP status if it's as SCHEDULED before
|
||||||
if ($pirep->status === PirepStatus::INITIATED) {
|
/*if ($pirep->status === PirepStatus::INITIATED) {
|
||||||
$pirep->status = PirepStatus::AIRBORNE;
|
$pirep->status = PirepStatus::AIRBORNE;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
$pirep->save();
|
$pirep->save();
|
||||||
|
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ class AirlineController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$airports = $this->airlineRepo->whereOrder(['active' => true], 'name')->get();
|
$airlines = $this->airlineRepo->whereOrder(['active' => true], 'name')->paginate();
|
||||||
|
|
||||||
return AirlineResource::collection($airports);
|
return AirlineResource::collection($airlines);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers\Api;
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\Contracts\Controller;
|
use App\Contracts\Controller;
|
||||||
|
use App\Exceptions\Unauthorized;
|
||||||
use App\Exceptions\UserNotFound;
|
use App\Exceptions\UserNotFound;
|
||||||
use App\Http\Resources\Bid as BidResource;
|
use App\Http\Resources\Bid as BidResource;
|
||||||
use App\Http\Resources\Pirep as PirepResource;
|
use App\Http\Resources\Pirep as PirepResource;
|
||||||
@@ -144,6 +145,28 @@ class UserController extends Controller
|
|||||||
return BidResource::collection($bids);
|
return BidResource::collection($bids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a particular bid for a user
|
||||||
|
*
|
||||||
|
* @param $bid_id
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
*
|
||||||
|
* @return \App\Http\Resources\Bid
|
||||||
|
*/
|
||||||
|
public function get_bid($bid_id, Request $request)
|
||||||
|
{
|
||||||
|
/** @var \App\Models\User $user */
|
||||||
|
$user = Auth::user();
|
||||||
|
|
||||||
|
// Return the current bid
|
||||||
|
$bid = $this->bidSvc->getBid($user, $bid_id);
|
||||||
|
if ($bid->user_id !== $user->id) {
|
||||||
|
throw new Unauthorized(new \Exception('Bid not not belong to authenticated user'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new BidResource($bid);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the fleet that this user is allowed to
|
* Return the fleet that this user is allowed to
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ class DownloadController extends Controller
|
|||||||
$klass = new $class();
|
$klass = new $class();
|
||||||
$obj = $klass->find($id);
|
$obj = $klass->find($id);
|
||||||
|
|
||||||
|
// Check if the object is there first
|
||||||
|
if (isset($obj)) {
|
||||||
$category = explode('\\', $class);
|
$category = explode('\\', $class);
|
||||||
$category = end($category);
|
$category = end($category);
|
||||||
|
|
||||||
@@ -58,6 +60,7 @@ class DownloadController extends Controller
|
|||||||
|
|
||||||
$regrouped_files[$group_name] = $files;
|
$regrouped_files[$group_name] = $files;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ksort($regrouped_files, SORT_STRING);
|
ksort($regrouped_files, SORT_STRING);
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ use App\Repositories\FlightRepository;
|
|||||||
use App\Repositories\SubfleetRepository;
|
use App\Repositories\SubfleetRepository;
|
||||||
use App\Repositories\UserRepository;
|
use App\Repositories\UserRepository;
|
||||||
use App\Services\GeoService;
|
use App\Services\GeoService;
|
||||||
|
use App\Services\ModuleService;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -25,6 +26,7 @@ class FlightController extends Controller
|
|||||||
private $airlineRepo;
|
private $airlineRepo;
|
||||||
private $airportRepo;
|
private $airportRepo;
|
||||||
private $flightRepo;
|
private $flightRepo;
|
||||||
|
private $moduleSvc;
|
||||||
private $subfleetRepo;
|
private $subfleetRepo;
|
||||||
private $geoSvc;
|
private $geoSvc;
|
||||||
private $userRepo;
|
private $userRepo;
|
||||||
@@ -34,6 +36,7 @@ class FlightController extends Controller
|
|||||||
* @param AirportRepository $airportRepo
|
* @param AirportRepository $airportRepo
|
||||||
* @param FlightRepository $flightRepo
|
* @param FlightRepository $flightRepo
|
||||||
* @param GeoService $geoSvc
|
* @param GeoService $geoSvc
|
||||||
|
* @param ModuleService $moduleSvc
|
||||||
* @param SubfleetRepository $subfleetRepo
|
* @param SubfleetRepository $subfleetRepo
|
||||||
* @param UserRepository $userRepo
|
* @param UserRepository $userRepo
|
||||||
*/
|
*/
|
||||||
@@ -42,6 +45,7 @@ class FlightController extends Controller
|
|||||||
AirportRepository $airportRepo,
|
AirportRepository $airportRepo,
|
||||||
FlightRepository $flightRepo,
|
FlightRepository $flightRepo,
|
||||||
GeoService $geoSvc,
|
GeoService $geoSvc,
|
||||||
|
ModuleService $moduleSvc,
|
||||||
SubfleetRepository $subfleetRepo,
|
SubfleetRepository $subfleetRepo,
|
||||||
UserRepository $userRepo
|
UserRepository $userRepo
|
||||||
) {
|
) {
|
||||||
@@ -49,6 +53,7 @@ class FlightController extends Controller
|
|||||||
$this->airportRepo = $airportRepo;
|
$this->airportRepo = $airportRepo;
|
||||||
$this->flightRepo = $flightRepo;
|
$this->flightRepo = $flightRepo;
|
||||||
$this->geoSvc = $geoSvc;
|
$this->geoSvc = $geoSvc;
|
||||||
|
$this->moduleSvc = $moduleSvc;
|
||||||
$this->subfleetRepo = $subfleetRepo;
|
$this->subfleetRepo = $subfleetRepo;
|
||||||
$this->userRepo = $userRepo;
|
$this->userRepo = $userRepo;
|
||||||
}
|
}
|
||||||
@@ -108,7 +113,12 @@ class FlightController extends Controller
|
|||||||
|
|
||||||
// Get only used Flight Types for the search form
|
// Get only used Flight Types for the search form
|
||||||
// And filter according to settings
|
// And filter according to settings
|
||||||
$usedtypes = Flight::select('flight_type')->where($where)->groupby('flight_type')->orderby('flight_type', 'asc')->get();
|
$usedtypes = Flight::select('flight_type')
|
||||||
|
->where($where)
|
||||||
|
->groupby('flight_type')
|
||||||
|
->orderby('flight_type')
|
||||||
|
->get();
|
||||||
|
|
||||||
// Build collection with type codes and labels
|
// Build collection with type codes and labels
|
||||||
$flight_types = collect('', '');
|
$flight_types = collect('', '');
|
||||||
foreach ($usedtypes as $ftype) {
|
foreach ($usedtypes as $ftype) {
|
||||||
@@ -123,12 +133,20 @@ class FlightController extends Controller
|
|||||||
'simbrief' => function ($query) use ($user) {
|
'simbrief' => function ($query) use ($user) {
|
||||||
$query->where('user_id', $user->id);
|
$query->where('user_id', $user->id);
|
||||||
}, ])
|
}, ])
|
||||||
->orderBy('flight_number', 'asc')
|
->orderBy('flight_number')
|
||||||
->orderBy('route_leg', 'asc')
|
->orderBy('route_leg')
|
||||||
->paginate();
|
->paginate();
|
||||||
|
|
||||||
$saved_flights = Bid::where('user_id', Auth::id())
|
$saved_flights = [];
|
||||||
->pluck('flight_id')->toArray();
|
$bids = Bid::where('user_id', Auth::id())->get();
|
||||||
|
foreach ($bids as $bid) {
|
||||||
|
if (!$bid->flight) {
|
||||||
|
$bid->delete();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$saved_flights[$bid->flight_id] = $bid->id;
|
||||||
|
}
|
||||||
|
|
||||||
return view('flights.index', [
|
return view('flights.index', [
|
||||||
'user' => $user,
|
'user' => $user,
|
||||||
@@ -145,6 +163,7 @@ class FlightController extends Controller
|
|||||||
'subfleet_id' => $request->input('subfleet_id'),
|
'subfleet_id' => $request->input('subfleet_id'),
|
||||||
'simbrief' => !empty(setting('simbrief.api_key')),
|
'simbrief' => !empty(setting('simbrief.api_key')),
|
||||||
'simbrief_bids' => setting('simbrief.only_bids'),
|
'simbrief_bids' => setting('simbrief.only_bids'),
|
||||||
|
'acars_plugin' => $this->moduleSvc->isModuleActive('VMSAcars'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +190,7 @@ class FlightController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$flights->add($bid->flight);
|
$flights->add($bid->flight);
|
||||||
$saved_flights[] = $bid->flight->id;
|
$saved_flights[$bid->flight_id] = $bid->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
return view('flights.bids', [
|
return view('flights.bids', [
|
||||||
@@ -183,6 +202,7 @@ class FlightController extends Controller
|
|||||||
'subfleets' => $this->subfleetRepo->selectBoxList(true),
|
'subfleets' => $this->subfleetRepo->selectBoxList(true),
|
||||||
'simbrief' => !empty(setting('simbrief.api_key')),
|
'simbrief' => !empty(setting('simbrief.api_key')),
|
||||||
'simbrief_bids' => setting('simbrief.only_bids'),
|
'simbrief_bids' => setting('simbrief.only_bids'),
|
||||||
|
'acars_plugin' => $this->moduleSvc->isModuleActive('VMSAcars'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,9 +223,14 @@ class FlightController extends Controller
|
|||||||
|
|
||||||
$map_features = $this->geoSvc->flightGeoJson($flight);
|
$map_features = $this->geoSvc->flightGeoJson($flight);
|
||||||
|
|
||||||
|
// See if the user has a bid for this flight
|
||||||
|
$bid = Bid::where(['user_id' => Auth::id(), 'flight_id' => $flight->id])->first();
|
||||||
|
|
||||||
return view('flights.show', [
|
return view('flights.show', [
|
||||||
'flight' => $flight,
|
'flight' => $flight,
|
||||||
'map_features' => $map_features,
|
'map_features' => $map_features,
|
||||||
|
'bid' => $bid,
|
||||||
|
'acars_plugin' => $this->moduleSvc->isModuleActive('VMSAcars'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ class ProfileController extends Controller
|
|||||||
|
|
||||||
$airlines = $this->airlineRepo->selectBoxList();
|
$airlines = $this->airlineRepo->selectBoxList();
|
||||||
$airports = $this->airportRepo->selectBoxList(false, setting('pilots.home_hubs_only'));
|
$airports = $this->airportRepo->selectBoxList(false, setting('pilots.home_hubs_only'));
|
||||||
$userFields = $this->userRepo->getUserFields($user, true);
|
$userFields = $this->userRepo->getUserFields($user);
|
||||||
|
|
||||||
return view('profile.edit', [
|
return view('profile.edit', [
|
||||||
'user' => $user,
|
'user' => $user,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Frontend;
|
|||||||
|
|
||||||
use App\Exceptions\AssetNotFound;
|
use App\Exceptions\AssetNotFound;
|
||||||
use App\Models\Aircraft;
|
use App\Models\Aircraft;
|
||||||
|
use App\Models\Bid;
|
||||||
use App\Models\Enums\AircraftState;
|
use App\Models\Enums\AircraftState;
|
||||||
use App\Models\Enums\AircraftStatus;
|
use App\Models\Enums\AircraftStatus;
|
||||||
use App\Models\Enums\FareType;
|
use App\Models\Enums\FareType;
|
||||||
@@ -14,6 +15,7 @@ use App\Models\SimBrief;
|
|||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Repositories\FlightRepository;
|
use App\Repositories\FlightRepository;
|
||||||
use App\Services\FareService;
|
use App\Services\FareService;
|
||||||
|
use App\Services\ModuleService;
|
||||||
use App\Services\SimBriefService;
|
use App\Services\SimBriefService;
|
||||||
use App\Services\UserService;
|
use App\Services\UserService;
|
||||||
use Exception;
|
use Exception;
|
||||||
@@ -24,17 +26,20 @@ class SimBriefController
|
|||||||
{
|
{
|
||||||
private $fareSvc;
|
private $fareSvc;
|
||||||
private $flightRepo;
|
private $flightRepo;
|
||||||
|
private $moduleSvc;
|
||||||
private $simBriefSvc;
|
private $simBriefSvc;
|
||||||
private $userSvc;
|
private $userSvc;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
FareService $fareSvc,
|
FareService $fareSvc,
|
||||||
FlightRepository $flightRepo,
|
FlightRepository $flightRepo,
|
||||||
|
ModuleService $moduleSvc,
|
||||||
SimBriefService $simBriefSvc,
|
SimBriefService $simBriefSvc,
|
||||||
UserService $userSvc
|
UserService $userSvc
|
||||||
) {
|
) {
|
||||||
$this->fareSvc = $fareSvc;
|
$this->fareSvc = $fareSvc;
|
||||||
$this->flightRepo = $flightRepo;
|
$this->flightRepo = $flightRepo;
|
||||||
|
$this->moduleSvc = $moduleSvc;
|
||||||
$this->simBriefSvc = $simBriefSvc;
|
$this->simBriefSvc = $simBriefSvc;
|
||||||
$this->userSvc = $userSvc;
|
$this->userSvc = $userSvc;
|
||||||
}
|
}
|
||||||
@@ -106,6 +111,7 @@ class SimBriefController
|
|||||||
if (setting('simbrief.block_aircraft')) {
|
if (setting('simbrief.block_aircraft')) {
|
||||||
// Build a list of aircraft_id's being used for active sb packs
|
// Build a list of aircraft_id's being used for active sb packs
|
||||||
$sb_aircraft = SimBrief::whereNotNull('flight_id')->pluck('aircraft_id');
|
$sb_aircraft = SimBrief::whereNotNull('flight_id')->pluck('aircraft_id');
|
||||||
|
|
||||||
// Filter aircraft list to non used/blocked ones
|
// Filter aircraft list to non used/blocked ones
|
||||||
$aircrafts = $aircrafts->whereNotIn('id', $sb_aircraft);
|
$aircrafts = $aircrafts->whereNotIn('id', $sb_aircraft);
|
||||||
}
|
}
|
||||||
@@ -225,7 +231,7 @@ class SimBriefController
|
|||||||
|
|
||||||
// Show the main simbrief form
|
// Show the main simbrief form
|
||||||
return view('flights.simbrief_form', [
|
return view('flights.simbrief_form', [
|
||||||
'user' => Auth::user(),
|
'user' => $user,
|
||||||
'flight' => $flight,
|
'flight' => $flight,
|
||||||
'aircraft' => $aircraft,
|
'aircraft' => $aircraft,
|
||||||
'pax_weight' => $pax_weight,
|
'pax_weight' => $pax_weight,
|
||||||
@@ -253,7 +259,11 @@ class SimBriefController
|
|||||||
*/
|
*/
|
||||||
public function briefing($id)
|
public function briefing($id)
|
||||||
{
|
{
|
||||||
$simbrief = SimBrief::find($id);
|
/** @var User $user */
|
||||||
|
$user = Auth::user();
|
||||||
|
|
||||||
|
/** @var SimBrief $simbrief */
|
||||||
|
$simbrief = SimBrief::with(['flight'])->find($id);
|
||||||
if (!$simbrief) {
|
if (!$simbrief) {
|
||||||
flash()->error('SimBrief briefing not found');
|
flash()->error('SimBrief briefing not found');
|
||||||
return redirect(route('frontend.flights.index'));
|
return redirect(route('frontend.flights.index'));
|
||||||
@@ -266,11 +276,18 @@ class SimBriefController
|
|||||||
$equipment = substr($str, $wc + 1, $tr - 2);
|
$equipment = substr($str, $wc + 1, $tr - 2);
|
||||||
$transponder = substr($str, $tr + 1);
|
$transponder = substr($str, $tr + 1);
|
||||||
|
|
||||||
|
// See if a bid exists for this flight
|
||||||
|
$bid = Bid::where(['user_id' => $user->id, 'flight_id' => $simbrief->flight_id])->first();
|
||||||
|
|
||||||
return view('flights.simbrief_briefing', [
|
return view('flights.simbrief_briefing', [
|
||||||
|
'user' => $user,
|
||||||
'simbrief' => $simbrief,
|
'simbrief' => $simbrief,
|
||||||
'wakecat' => $wakecat,
|
'wakecat' => $wakecat,
|
||||||
'equipment' => $equipment,
|
'equipment' => $equipment,
|
||||||
'transponder' => $transponder,
|
'transponder' => $transponder,
|
||||||
|
'bid' => $bid,
|
||||||
|
'flight' => $simbrief->flight,
|
||||||
|
'acars_plugin' => $this->moduleSvc->isModuleActive('VMSAcars'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@ use App\Contracts\Model;
|
|||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property string user_id
|
* @property int user_id
|
||||||
* @property string flight_id
|
* @property string flight_id
|
||||||
* @property Carbon created_at
|
* @property Carbon created_at
|
||||||
* @property Carbon updated_at
|
* @property Carbon updated_at
|
||||||
|
|||||||
@@ -4,9 +4,6 @@ namespace App\Models\Enums;
|
|||||||
|
|
||||||
use App\Contracts\Enum;
|
use App\Contracts\Enum;
|
||||||
|
|
||||||
/**
|
|
||||||
* Class PirepState
|
|
||||||
*/
|
|
||||||
class PirepState extends Enum
|
class PirepState extends Enum
|
||||||
{
|
{
|
||||||
public const IN_PROGRESS = 0; // flight is ongoing
|
public const IN_PROGRESS = 0; // flight is ongoing
|
||||||
@@ -16,6 +13,7 @@ class PirepState extends Enum
|
|||||||
public const DELETED = 4;
|
public const DELETED = 4;
|
||||||
public const DRAFT = 5;
|
public const DRAFT = 5;
|
||||||
public const REJECTED = 6;
|
public const REJECTED = 6;
|
||||||
|
public const PAUSED = 7;
|
||||||
|
|
||||||
protected static $labels = [
|
protected static $labels = [
|
||||||
self::IN_PROGRESS => 'pireps.state.in_progress',
|
self::IN_PROGRESS => 'pireps.state.in_progress',
|
||||||
@@ -25,5 +23,6 @@ class PirepState extends Enum
|
|||||||
self::DELETED => 'pireps.state.deleted',
|
self::DELETED => 'pireps.state.deleted',
|
||||||
self::DRAFT => 'pireps.state.draft',
|
self::DRAFT => 'pireps.state.draft',
|
||||||
self::REJECTED => 'pireps.state.rejected',
|
self::REJECTED => 'pireps.state.rejected',
|
||||||
|
self::PAUSED => 'pireps.state.paused',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class PirepStatus extends Enum
|
|||||||
public const ARRIVED = 'ONB'; // On block
|
public const ARRIVED = 'ONB'; // On block
|
||||||
public const CANCELLED = 'DX';
|
public const CANCELLED = 'DX';
|
||||||
public const EMERG_DESCENT = 'EMG';
|
public const EMERG_DESCENT = 'EMG';
|
||||||
|
public const PAUSED = 'PSD';
|
||||||
|
|
||||||
protected static $labels = [
|
protected static $labels = [
|
||||||
self::INITIATED => 'pireps.status.initialized',
|
self::INITIATED => 'pireps.status.initialized',
|
||||||
@@ -59,5 +60,6 @@ class PirepStatus extends Enum
|
|||||||
self::ARRIVED => 'pireps.status.arrived',
|
self::ARRIVED => 'pireps.status.arrived',
|
||||||
self::CANCELLED => 'pireps.status.cancelled',
|
self::CANCELLED => 'pireps.status.cancelled',
|
||||||
self::EMERG_DESCENT => 'pireps.status.emerg_decent',
|
self::EMERG_DESCENT => 'pireps.status.emerg_decent',
|
||||||
|
self::PAUSED => 'pireps.status.paused',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-11
@@ -195,22 +195,22 @@ class Pirep extends Model
|
|||||||
/**
|
/**
|
||||||
* Create a new PIREP from a SimBrief instance
|
* Create a new PIREP from a SimBrief instance
|
||||||
*
|
*
|
||||||
* @param \App\Models\SimBrief $simBrief
|
* @param \App\Models\SimBrief $simbrief
|
||||||
*
|
*
|
||||||
* @return \App\Models\Pirep
|
* @return \App\Models\Pirep
|
||||||
*/
|
*/
|
||||||
public static function fromSimBrief(SimBrief $simBrief): self
|
public static function fromSimBrief(SimBrief $simbrief): self
|
||||||
{
|
{
|
||||||
return new self([
|
return new self([
|
||||||
'flight_id' => $simBrief->flight->id,
|
'flight_id' => $simbrief->flight->id,
|
||||||
'airline_id' => $simBrief->flight->airline_id,
|
'airline_id' => $simbrief->flight->airline_id,
|
||||||
'flight_number' => $simBrief->flight->flight_number,
|
'flight_number' => $simbrief->flight->flight_number,
|
||||||
'route_code' => $simBrief->flight->route_code,
|
'route_code' => $simbrief->flight->route_code,
|
||||||
'route_leg' => $simBrief->flight->route_leg,
|
'route_leg' => $simbrief->flight->route_leg,
|
||||||
'dpt_airport_id' => $simBrief->flight->dpt_airport_id,
|
'dpt_airport_id' => $simbrief->flight->dpt_airport_id,
|
||||||
'arr_airport_id' => $simBrief->flight->arr_airport_id,
|
'arr_airport_id' => $simbrief->flight->arr_airport_id,
|
||||||
'route' => $simBrief->xml->getRouteString(),
|
'route' => $simbrief->xml->getRouteString(),
|
||||||
'level' => $simBrief->xml->getFlightLevel(),
|
'level' => $simbrief->xml->getFlightLevel(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ class SimBrief extends Model
|
|||||||
'updated_at',
|
'updated_at',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'user_id' => 'integer',
|
||||||
|
];
|
||||||
|
|
||||||
/** @var \App\Models\SimBriefXML Store a cached version of the XML object */
|
/** @var \App\Models\SimBriefXML Store a cached version of the XML object */
|
||||||
private $xml_instance;
|
private $xml_instance;
|
||||||
|
|
||||||
@@ -92,14 +96,13 @@ class SimBrief extends Model
|
|||||||
|
|
||||||
public function flight()
|
public function flight()
|
||||||
{
|
{
|
||||||
if (!empty($this->attributes['flight_id'])) {
|
|
||||||
return $this->belongsTo(Flight::class, 'flight_id');
|
return $this->belongsTo(Flight::class, 'flight_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($this->attributes['pirep_id'])) {
|
public function pirep()
|
||||||
|
{
|
||||||
return $this->belongsTo(Pirep::class, 'pirep_id');
|
return $this->belongsTo(Pirep::class, 'pirep_id');
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public function user()
|
public function user()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ class PirepStatusChanged extends Notification implements ShouldQueue
|
|||||||
PirepStatus::LANDED => 'has landed',
|
PirepStatus::LANDED => 'has landed',
|
||||||
PirepStatus::ARRIVED => 'has arrived',
|
PirepStatus::ARRIVED => 'has arrived',
|
||||||
PirepStatus::CANCELLED => 'is cancelled',
|
PirepStatus::CANCELLED => 'is cancelled',
|
||||||
|
PirepStatus::PAUSED => 'is paused',
|
||||||
PirepStatus::EMERG_DESCENT => 'in emergency descent',
|
PirepStatus::EMERG_DESCENT => 'in emergency descent',
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -101,12 +102,12 @@ class PirepStatusChanged extends Notification implements ShouldQueue
|
|||||||
$planned_distance = new Distance($pirep->planned_distance, $unit);
|
$planned_distance = new Distance($pirep->planned_distance, $unit);
|
||||||
$pd = $planned_distance[$planned_distance->unit];
|
$pd = $planned_distance[$planned_distance->unit];
|
||||||
$fields['Distance'] .= '/'.$pd;
|
$fields['Distance'] .= '/'.$pd;
|
||||||
} catch (NonNumericValue | NonStringUnitName $e) {
|
} catch (NonNumericValue|NonStringUnitName $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields['Distance'] .= ' '.$planned_distance->unit;
|
$fields['Distance'] .= ' '.$planned_distance->unit;
|
||||||
} catch (NonNumericValue | NonStringUnitName $e) {
|
} catch (NonNumericValue|NonStringUnitName $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ class PirepSubmitted extends Notification implements ShouldQueue
|
|||||||
|
|
||||||
$pd = $planned_distance[$planned_distance->unit].' '.$planned_distance->unit;
|
$pd = $planned_distance[$planned_distance->unit].' '.$planned_distance->unit;
|
||||||
$fields['Distance (Planned)'] = $pd;
|
$fields['Distance (Planned)'] = $pd;
|
||||||
} catch (NonNumericValue | NonStringUnitName $e) {
|
} catch (NonNumericValue|NonStringUnitName $e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ class NotificationEventsHandler extends Listener
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->notifyUser($user, $notification);
|
// $this->notifyUser($user, $notification);
|
||||||
// Notification::send([$user], $notification);
|
Notification::send([$user], $notification);
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
Log::emergency('Error emailing admin ('.$user->email.'). Error='.$e->getMessage());
|
Log::emergency('Error emailing admin ('.$user->email.'). Error='.$e->getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -584,6 +584,10 @@ class RouteServiceProvider extends ServiceProvider
|
|||||||
Route::get('user/fleet', 'UserController@fleet');
|
Route::get('user/fleet', 'UserController@fleet');
|
||||||
Route::get('user/pireps', 'UserController@pireps');
|
Route::get('user/pireps', 'UserController@pireps');
|
||||||
|
|
||||||
|
Route::get('bids', 'UserController@bids');
|
||||||
|
Route::get('bids/{id}', 'UserController@get_bid');
|
||||||
|
Route::get('user/bids/{id}', 'UserController@get_bid');
|
||||||
|
|
||||||
Route::get('user/bids', 'UserController@bids');
|
Route::get('user/bids', 'UserController@bids');
|
||||||
Route::put('user/bids', 'UserController@bids');
|
Route::put('user/bids', 'UserController@bids');
|
||||||
Route::post('user/bids', 'UserController@bids');
|
Route::post('user/bids', 'UserController@bids');
|
||||||
|
|||||||
@@ -69,11 +69,11 @@ class AcarsRepository extends Repository
|
|||||||
->where(['state' => PirepState::IN_PROGRESS]);
|
->where(['state' => PirepState::IN_PROGRESS]);
|
||||||
|
|
||||||
if ($live_time !== null && $live_time > 0) {
|
if ($live_time !== null && $live_time > 0) {
|
||||||
$st = Carbon::now('UTC')->subHours($live_time);
|
$st = Carbon::now()->subHours($live_time);
|
||||||
$q = $q->whereDate('created_at', '>=', $st);
|
$q = $q->where('updated_at', '>=', $st);
|
||||||
}
|
}
|
||||||
|
|
||||||
$q = $q->orderBy('created_at', 'desc');
|
$q = $q->orderBy('updated_at', 'desc');
|
||||||
return $q->get();
|
return $q->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,14 @@ class UserRepository extends Repository
|
|||||||
*
|
*
|
||||||
* @return \App\Models\UserField[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Support\Collection
|
* @return \App\Models\UserField[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Support\Collection
|
||||||
*/
|
*/
|
||||||
public function getUserFields(User $user, $only_public_fields = true): Collection
|
public function getUserFields(User $user, $only_public_fields = null): Collection
|
||||||
{
|
{
|
||||||
|
if (is_bool($only_public_fields)) {
|
||||||
$fields = UserField::where(['private' => !$only_public_fields])->get();
|
$fields = UserField::where(['private' => !$only_public_fields])->get();
|
||||||
|
} else {
|
||||||
|
$fields = UserField::get();
|
||||||
|
}
|
||||||
|
|
||||||
return $fields->map(function ($field, $_) use ($user) {
|
return $fields->map(function ($field, $_) use ($user) {
|
||||||
foreach ($user->fields as $userFieldValue) {
|
foreach ($user->fields as $userFieldValue) {
|
||||||
if ($userFieldValue->field->slug === $field->slug) {
|
if ($userFieldValue->field->slug === $field->slug) {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use App\Exceptions\UserBidLimit;
|
|||||||
use App\Models\Bid;
|
use App\Models\Bid;
|
||||||
use App\Models\Flight;
|
use App\Models\Flight;
|
||||||
use App\Models\Pirep;
|
use App\Models\Pirep;
|
||||||
|
use App\Models\SimBrief;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
@@ -30,12 +31,24 @@ class BidService extends Service
|
|||||||
*
|
*
|
||||||
* @param $bid_id
|
* @param $bid_id
|
||||||
*
|
*
|
||||||
* @return \App\Models\Bid|\Illuminate\Database\Eloquent\Model|tests/ImporterTest.php:521object|null
|
* @return \App\Models\Bid|\Illuminate\Database\Eloquent\Model|object|null
|
||||||
*/
|
*/
|
||||||
public function getBid($bid_id)
|
public function getBid(User $user, $bid_id): Bid
|
||||||
{
|
{
|
||||||
return Bid::with(['flight', 'flight.simbrief'])
|
$with = [
|
||||||
->where(['id' => $bid_id])->first();
|
'flight',
|
||||||
|
'flight.fares',
|
||||||
|
'flight.simbrief' => function ($query) use ($user) {
|
||||||
|
$query->where('user_id', $user->id);
|
||||||
|
},
|
||||||
|
'flight.simbrief.aircraft',
|
||||||
|
'flight.simbrief.aircraft.subfleet',
|
||||||
|
'flight.subfleets',
|
||||||
|
'flight.subfleets.aircraft',
|
||||||
|
'flight.subfleets.fares',
|
||||||
|
];
|
||||||
|
|
||||||
|
return Bid::with($with)->where(['id' => $bid_id])->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,7 +145,7 @@ class BidService extends Service
|
|||||||
$flight->has_bid = true;
|
$flight->has_bid = true;
|
||||||
$flight->save();
|
$flight->save();
|
||||||
|
|
||||||
return $this->getBid($bid->id);
|
return $this->getBid($user, $bid->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,6 +165,14 @@ class BidService extends Service
|
|||||||
$bid->forceDelete();
|
$bid->forceDelete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove SimBrief OFP when removing the bid if it is not flown
|
||||||
|
if (setting('simbrief.only_bids')) {
|
||||||
|
$simbrief = SimBrief::where([
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'flight_id' => $flight->id,
|
||||||
|
])->whereNull('pirep_id')->delete();
|
||||||
|
}
|
||||||
|
|
||||||
// Only flip the flag if there are no bids left for this flight
|
// Only flip the flag if there are no bids left for this flight
|
||||||
$bid_count = Bid::where(['flight_id' => $flight->id])->count();
|
$bid_count = Bid::where(['flight_id' => $flight->id])->count();
|
||||||
if ($bid_count === 0) {
|
if ($bid_count === 0) {
|
||||||
|
|||||||
@@ -309,7 +309,7 @@ class GeoService extends Service
|
|||||||
foreach ($all_route_points as $point) {
|
foreach ($all_route_points as $point) {
|
||||||
$route->addPoint($point->lat, $point->lon, [
|
$route->addPoint($point->lat, $point->lon, [
|
||||||
'name' => $point->name,
|
'name' => $point->name,
|
||||||
'popup' => $point->name.' ('.$point->name.')',
|
'popup' => $point->name.' ('.$point->lat.', '.$point->lon.')',
|
||||||
'icon' => '',
|
'icon' => '',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@@ -351,7 +351,7 @@ class GeoService extends Service
|
|||||||
foreach ($planned_route as $point) {
|
foreach ($planned_route as $point) {
|
||||||
$planned->addPoint($point->lat, $point->lon, [
|
$planned->addPoint($point->lat, $point->lon, [
|
||||||
'name' => $point->name,
|
'name' => $point->name,
|
||||||
'popup' => $point->name.' ('.$point->name.')',
|
'popup' => $point->name.' ('.$point->lat.', '.$point->lon.')',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,7 +369,7 @@ class GeoService extends Service
|
|||||||
$actual->addPoint($point->lat, $point->lon, [
|
$actual->addPoint($point->lat, $point->lon, [
|
||||||
'pirep_id' => $pirep->id,
|
'pirep_id' => $pirep->id,
|
||||||
'name' => $point->altitude,
|
'name' => $point->altitude,
|
||||||
'popup' => 'GS: '.$point->gs.'<br />Alt: '.$point->altitude,
|
'popup' => 'Spd: '.$point->gs.' kts<br />Alt: '.$point->altitude.' ft<br />Pos: '.$point->lat.', '.$point->lon,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,9 +25,11 @@ class AircraftImporter extends ImportExport
|
|||||||
'subfleet' => 'required',
|
'subfleet' => 'required',
|
||||||
'iata' => 'nullable',
|
'iata' => 'nullable',
|
||||||
'icao' => 'nullable',
|
'icao' => 'nullable',
|
||||||
|
'airport_id' => 'nullable',
|
||||||
'name' => 'required',
|
'name' => 'required',
|
||||||
'registration' => 'required',
|
'registration' => 'required',
|
||||||
'hex_code' => 'nullable',
|
'hex_code' => 'nullable',
|
||||||
|
'mtow' => 'nullable|numeric',
|
||||||
'zfw' => 'nullable|numeric',
|
'zfw' => 'nullable|numeric',
|
||||||
'status' => 'nullable',
|
'status' => 'nullable',
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class FlightImporter extends ImportExport
|
|||||||
'airline' => 'required',
|
'airline' => 'required',
|
||||||
'flight_number' => 'required',
|
'flight_number' => 'required',
|
||||||
'route_code' => 'nullable',
|
'route_code' => 'nullable',
|
||||||
|
'callsign' => 'nullable',
|
||||||
'route_leg' => 'nullable',
|
'route_leg' => 'nullable',
|
||||||
'dpt_airport' => 'required',
|
'dpt_airport' => 'required',
|
||||||
'arr_airport' => 'required',
|
'arr_airport' => 'required',
|
||||||
@@ -45,6 +46,8 @@ class FlightImporter extends ImportExport
|
|||||||
'pilot_pay' => 'nullable',
|
'pilot_pay' => 'nullable',
|
||||||
'route' => 'nullable',
|
'route' => 'nullable',
|
||||||
'notes' => 'nullable',
|
'notes' => 'nullable',
|
||||||
|
'start_date' => 'nullable|date',
|
||||||
|
'end_date' => 'nullable|date',
|
||||||
'active' => 'nullable|boolean',
|
'active' => 'nullable|boolean',
|
||||||
'subfleets' => 'nullable',
|
'subfleets' => 'nullable',
|
||||||
'fares' => 'nullable',
|
'fares' => 'nullable',
|
||||||
@@ -212,6 +215,11 @@ class FlightImporter extends ImportExport
|
|||||||
$count = 0;
|
$count = 0;
|
||||||
$subfleets = $this->parseMultiColumnValues($col);
|
$subfleets = $this->parseMultiColumnValues($col);
|
||||||
foreach ($subfleets as $subfleet_type) {
|
foreach ($subfleets as $subfleet_type) {
|
||||||
|
$subfleet_type = trim($subfleet_type);
|
||||||
|
if (empty($subfleet_type)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$subfleet = Subfleet::firstOrCreate(
|
$subfleet = Subfleet::firstOrCreate(
|
||||||
['type' => $subfleet_type],
|
['type' => $subfleet_type],
|
||||||
['name' => $subfleet_type]
|
['name' => $subfleet_type]
|
||||||
|
|||||||
@@ -20,15 +20,14 @@ class SubfleetImporter extends ImportExport
|
|||||||
*/
|
*/
|
||||||
public static $columns = [
|
public static $columns = [
|
||||||
'airline' => 'required',
|
'airline' => 'required',
|
||||||
|
'hub_id' => 'required',
|
||||||
'type' => 'required',
|
'type' => 'required',
|
||||||
|
'simbrief_type' => 'nullable',
|
||||||
'name' => 'required',
|
'name' => 'required',
|
||||||
'fuel_type' => 'nullable',
|
'fuel_type' => 'nullable',
|
||||||
'cost_block_hour' => 'nullable',
|
'cost_block_hour' => 'nullable',
|
||||||
'cost_delay_minute' => 'nullable',
|
'cost_delay_minute' => 'nullable',
|
||||||
'ground_handling_multiplier' => 'nullable',
|
'ground_handling_multiplier' => 'nullable',
|
||||||
'cargo_capacity' => 'nullable',
|
|
||||||
'fuel_capacity' => 'nullable',
|
|
||||||
'gross_weight' => 'nullable',
|
|
||||||
'fares' => 'nullable',
|
'fares' => 'nullable',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class ConfigService extends Service
|
|||||||
'DB_EMULATE_PREPARES' => false,
|
'DB_EMULATE_PREPARES' => false,
|
||||||
'CACHE_DRIVER' => 'array',
|
'CACHE_DRIVER' => 'array',
|
||||||
'CACHE_PREFIX' => '',
|
'CACHE_PREFIX' => '',
|
||||||
'MAIL_DRIVER' => 'mail',
|
'MAIL_DRIVER' => 'log',
|
||||||
'MAIL_HOST' => '',
|
'MAIL_HOST' => '',
|
||||||
'MAIL_PORT' => 587,
|
'MAIL_PORT' => 587,
|
||||||
'MAIL_ENCRYPTION' => '',
|
'MAIL_ENCRYPTION' => '',
|
||||||
|
|||||||
@@ -88,13 +88,56 @@ class ModuleService extends Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get All modules from Database
|
* Get all of the modules from database but make sure they also exist on disk
|
||||||
*
|
*
|
||||||
* @return object
|
* @return object
|
||||||
*/
|
*/
|
||||||
public function getAllModules(): object
|
public function getAllModules(): array
|
||||||
{
|
{
|
||||||
return Module::all();
|
$modules = [];
|
||||||
|
$moduleList = Module::all();
|
||||||
|
|
||||||
|
/** @var Module $module */
|
||||||
|
foreach ($moduleList as $module) {
|
||||||
|
/** @var \Nwidart\Modules\Module $moduleInstance */
|
||||||
|
$moduleInstance = \Nwidart\Modules\Facades\Module::find($module->name);
|
||||||
|
if (empty($moduleInstance)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_exists($moduleInstance->getPath())) {
|
||||||
|
$modules[] = $module;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $modules;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if a module is active - also checks that the module exists properly
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isModuleActive(string $name): bool
|
||||||
|
{
|
||||||
|
$module = Module::where('name', $name)->first();
|
||||||
|
if (empty($module)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var \Nwidart\Modules\Module $moduleInstance */
|
||||||
|
$moduleInstance = \Nwidart\Modules\Facades\Module::find($module->name);
|
||||||
|
if (empty($moduleInstance)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file_exists($moduleInstance->getPath())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $moduleInstance->isEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -102,9 +145,9 @@ class ModuleService extends Service
|
|||||||
*
|
*
|
||||||
* @param $id
|
* @param $id
|
||||||
*
|
*
|
||||||
* @return object
|
* @return Module
|
||||||
*/
|
*/
|
||||||
public function getModule($id): object
|
public function getModule($id): Module
|
||||||
{
|
{
|
||||||
return Module::find($id);
|
return Module::find($id);
|
||||||
}
|
}
|
||||||
@@ -148,22 +191,20 @@ class ModuleService extends Service
|
|||||||
*/
|
*/
|
||||||
public function installModule(UploadedFile $file): FlashNotifier
|
public function installModule(UploadedFile $file): FlashNotifier
|
||||||
{
|
{
|
||||||
$file_ext = $file->getClientOriginalExtension();
|
$file_ext = strtolower($file->getClientOriginalExtension());
|
||||||
$allowed_extensions = ['zip', 'tar', 'gz'];
|
$allowed_extensions = ['zip', 'tar', 'gz'];
|
||||||
|
|
||||||
if (!in_array($file_ext, $allowed_extensions, true)) {
|
if (!in_array($file_ext, $allowed_extensions, true)) {
|
||||||
throw new ModuleInvalidFileType();
|
throw new ModuleInvalidFileType();
|
||||||
}
|
}
|
||||||
|
|
||||||
$module = null;
|
|
||||||
|
|
||||||
$new_dir = rand();
|
$new_dir = rand();
|
||||||
|
|
||||||
File::makeDirectory(
|
File::makeDirectory(
|
||||||
storage_path('app/tmp/modules/'.$new_dir),
|
storage_path('app/tmp/modules/'.$new_dir),
|
||||||
0777,
|
0777,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
$temp_ext_folder = storage_path('app/tmp/modules/'.$new_dir);
|
$temp_ext_folder = storage_path('app/tmp/modules/'.$new_dir);
|
||||||
$temp = storage_path('app/tmp/modules/'.$new_dir);
|
$temp = storage_path('app/tmp/modules/'.$new_dir);
|
||||||
|
|
||||||
@@ -219,7 +260,6 @@ class ModuleService extends Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
File::moveDirectory($temp, $toCopy);
|
File::moveDirectory($temp, $toCopy);
|
||||||
|
|
||||||
File::deleteDirectory($temp_ext_folder);
|
File::deleteDirectory($temp_ext_folder);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -574,8 +574,8 @@ class PirepService extends Service
|
|||||||
|
|
||||||
foreach ($field_values as $fv) {
|
foreach ($field_values as $fv) {
|
||||||
PirepFieldValue::updateOrCreate(
|
PirepFieldValue::updateOrCreate(
|
||||||
['pirep_id' => $pirep_id, 'name' => $fv->name],
|
['pirep_id' => $pirep_id, 'name' => $fv['name']],
|
||||||
['value' => $fv->value, 'source' => $fv->source]
|
['value' => $fv['value'], 'source' => $fv['source']]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
"laravel/helpers": "^1.4",
|
"laravel/helpers": "^1.4",
|
||||||
"laravelcollective/html": "~6.2.0",
|
"laravelcollective/html": "~6.2.0",
|
||||||
"jeremykendall/php-domain-parser": "~5.7.2",
|
"jeremykendall/php-domain-parser": "~5.7.2",
|
||||||
|
"league/commonmark": "~1.6",
|
||||||
"league/csv": "9.2.*",
|
"league/csv": "9.2.*",
|
||||||
"league/geotools": "0.8.*",
|
"league/geotools": "0.8.*",
|
||||||
"league/iso3166": "^3.0.0",
|
"league/iso3166": "^3.0.0",
|
||||||
|
|||||||
Generated
+581
-447
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ return [
|
|||||||
/*
|
/*
|
||||||
* Set Ajax widget middleware
|
* Set Ajax widget middleware
|
||||||
*/
|
*/
|
||||||
'route_middleware' => [],
|
'route_middleware' => ['web'],
|
||||||
|
|
||||||
'widget_stub' => 'resources/stubs/widgets/widget.stub',
|
'widget_stub' => 'resources/stubs/widgets/widget.stub',
|
||||||
'widget_plain_stub' => 'resources/stubs/widgets/widget_plain.stub',
|
'widget_plain_stub' => 'resources/stubs/widgets/widget_plain.stub',
|
||||||
|
|||||||
+3
-17
@@ -1,21 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
/*
|
'default' => env('MAIL_MAILER', 'smtp'),
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Mail Driver
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Laravel supports both SMTP and PHP's "mail" function as drivers for the
|
|
||||||
| sending of e-mail. You may specify which one you're using throughout
|
|
||||||
| your application here. By default, Laravel is setup for SMTP mail.
|
|
||||||
|
|
|
||||||
| Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill",
|
|
||||||
| "ses", "sparkpost", "log"
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'default' => env('MAIL_DRIVER', 'smtp'),
|
|
||||||
'mailers' => [
|
'mailers' => [
|
||||||
'smtp' => [
|
'smtp' => [
|
||||||
'transport' => 'smtp',
|
'transport' => 'smtp',
|
||||||
@@ -28,7 +14,7 @@ return [
|
|||||||
],
|
],
|
||||||
|
|
||||||
'ses' => [
|
'ses' => [
|
||||||
'transport' => 'seapp/Contracts/Command.php:105s',
|
'transport' => 'ses',
|
||||||
],
|
],
|
||||||
|
|
||||||
'mailgun' => [
|
'mailgun' => [
|
||||||
@@ -46,7 +32,7 @@ return [
|
|||||||
|
|
||||||
'log' => [
|
'log' => [
|
||||||
'transport' => 'log',
|
'transport' => 'log',
|
||||||
'channel' => env('MAIL_LOG_CHANNEL'),
|
'channel' => env('MAIL_LOG_CHANNEL', 'stack'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'array' => [
|
'array' => [
|
||||||
|
|||||||
+11
-19
@@ -1,7 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Models\User;
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@@ -9,31 +7,25 @@ return [
|
|||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| This file is for storing the credentials for third party services such
|
| This file is for storing the credentials for third party services such
|
||||||
| as Stripe, Mailgun, SparkPost and others. This file provides a sane
|
| as Mailgun, Postmark, AWS and more. This file provides the de facto
|
||||||
| default location for this type of information, allowing packages
|
| location for this type of information, allowing packages to have
|
||||||
| to have a conventional place to find your various credentials.
|
| a conventional file to locate the various service credentials.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'mailgun' => [
|
'mailgun' => [
|
||||||
'domain' => env('MAILGUN_DOMAIN'),
|
'domain' => env('MAILGUN_DOMAIN'),
|
||||||
'secret' => env('MAILGUN_SECRET'),
|
'secret' => env('MAILGUN_SECRET'),
|
||||||
|
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
|
||||||
|
],
|
||||||
|
|
||||||
|
'postmark' => [
|
||||||
|
'token' => env('POSTMARK_TOKEN'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'ses' => [
|
'ses' => [
|
||||||
'key' => env('SES_KEY'),
|
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||||
'secret' => env('SES_SECRET'),
|
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||||
'region' => 'us-east-1',
|
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'sparkpost' => [
|
|
||||||
'secret' => env('SPARKPOST_SECRET'),
|
|
||||||
],
|
|
||||||
|
|
||||||
'stripe' => [
|
|
||||||
'model' => User::class,
|
|
||||||
'key' => env('STRIPE_KEY'),
|
|
||||||
'secret' => env('STRIPE_SECRET'),
|
|
||||||
],
|
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ services:
|
|||||||
- ./composer-lock.json:/var/www/composer-lock.json
|
- ./composer-lock.json:/var/www/composer-lock.json
|
||||||
- ./env.php:/var/www/env.php
|
- ./env.php:/var/www/env.php
|
||||||
- ./resources/docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
|
- ./resources/docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
|
||||||
- ./vendor/var/www/vendor
|
- ./vendor:/var/www/vendor
|
||||||
depends_on:
|
depends_on:
|
||||||
- mysql
|
- mysql
|
||||||
- redis
|
- redis
|
||||||
|
|||||||
Generated
+10510
-11545
File diff suppressed because it is too large
Load Diff
+6
-6
@@ -27,14 +27,14 @@
|
|||||||
"jquery": "^3.5.1",
|
"jquery": "^3.5.1",
|
||||||
"jquery-pjax": "~2.0",
|
"jquery-pjax": "~2.0",
|
||||||
"js-yaml": "^3.14.0",
|
"js-yaml": "^3.14.0",
|
||||||
"laravel-mix": "^5.0.7",
|
"laravel-mix": "^6.0.30",
|
||||||
"leaflet": "^1.3.4",
|
"leaflet": "^1.3.4",
|
||||||
"leaflet-ajax": "2.1.0",
|
"leaflet-ajax": "2.1.0",
|
||||||
"leaflet-providers": "1.0.*",
|
"leaflet-providers": "1.0.*",
|
||||||
"leaflet-rotatedmarker": "^0.2.0",
|
"leaflet-rotatedmarker": "^0.2.0",
|
||||||
"leaflet.geodesic": "^2.5.2",
|
"leaflet.geodesic": "^2.5.2",
|
||||||
"lodash": ">=4.17.19",
|
"lodash": ">=4.17.19",
|
||||||
"marked": "^1.2.2",
|
"marked": "^2.1.3",
|
||||||
"minimist": "^1.2.2",
|
"minimist": "^1.2.2",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
"paper-dashboard": "^1.1.0",
|
"paper-dashboard": "^1.1.0",
|
||||||
@@ -44,14 +44,14 @@
|
|||||||
"popper.js": "^1.15.0",
|
"popper.js": "^1.15.0",
|
||||||
"rivets": "^0.9.6",
|
"rivets": "^0.9.6",
|
||||||
"select2": "^4.0.13",
|
"select2": "^4.0.13",
|
||||||
"ssri": "^5.3.0",
|
"ssri": "^8.0.1",
|
||||||
"tar": ">=4.4.2",
|
"tar": ">=4.4.2",
|
||||||
"webpack": "^4.44.2",
|
"webpack": "^5.45.1",
|
||||||
"webpack-cli": "^3.3.12",
|
"webpack-cli": "^3.3.12",
|
||||||
"x-editable": "1.5.1"
|
"x-editable": "1.5.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"copy-webpack-plugin": "^4.6.0",
|
"copy-webpack-plugin": "^9.0.1",
|
||||||
"eslint": "^6.2.2",
|
"eslint": "^6.2.2",
|
||||||
"eslint-config-airbnb": "^18.0.1",
|
"eslint-config-airbnb": "^18.0.1",
|
||||||
"eslint-config-airbnb-base": "^14.0.0",
|
"eslint-config-airbnb-base": "^14.0.0",
|
||||||
@@ -63,6 +63,6 @@
|
|||||||
"tailwindcss": "^0.5.3",
|
"tailwindcss": "^0.5.3",
|
||||||
"vue-template-compiler": "^2.6.12",
|
"vue-template-compiler": "^2.6.12",
|
||||||
"webpack-bundle-analyzer": "^3.9.0",
|
"webpack-bundle-analyzer": "^3.9.0",
|
||||||
"webpack-dev-server": "^3.1.11"
|
"webpack-dev-server": "^1.16.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
+5
-3
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Vendored
+1
-10881
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1263
File diff suppressed because one or more lines are too long
+1
-38
@@ -1,38 +1 @@
|
|||||||
/**
|
CKEDITOR.editorConfig=function(e){e.toolbarGroups=[{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"links"},{name:"insert"},{name:"forms"},{name:"tools"},{name:"document",groups:["mode","document","doctools"]},{name:"others"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"styles"},{name:"colors"},{name:"about"}],e.removeButtons="Underline,Subscript,Superscript",e.format_tags="p;h1;h2;h3;pre",e.removeDialogTabs="image:advanced;link:advanced"};
|
||||||
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
|
|
||||||
* For licensing, see https://ckeditor.com/legal/ckeditor-oss-license
|
|
||||||
*/
|
|
||||||
|
|
||||||
CKEDITOR.editorConfig = function( config ) {
|
|
||||||
// Define changes to default configuration here.
|
|
||||||
// For complete reference see:
|
|
||||||
// https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html
|
|
||||||
|
|
||||||
// The toolbar groups arrangement, optimized for two toolbar rows.
|
|
||||||
config.toolbarGroups = [
|
|
||||||
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },
|
|
||||||
{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] },
|
|
||||||
{ name: 'links' },
|
|
||||||
{ name: 'insert' },
|
|
||||||
{ name: 'forms' },
|
|
||||||
{ name: 'tools' },
|
|
||||||
{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] },
|
|
||||||
{ name: 'others' },
|
|
||||||
'/',
|
|
||||||
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
|
|
||||||
{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },
|
|
||||||
{ name: 'styles' },
|
|
||||||
{ name: 'colors' },
|
|
||||||
{ name: 'about' }
|
|
||||||
];
|
|
||||||
|
|
||||||
// Remove some buttons provided by the standard plugins, which are
|
|
||||||
// not needed in the Standard(s) toolbar.
|
|
||||||
config.removeButtons = 'Underline,Subscript,Superscript';
|
|
||||||
|
|
||||||
// Set the most common block elements.
|
|
||||||
config.format_tags = 'p;h1;h2;h3;pre';
|
|
||||||
|
|
||||||
// Simplify the dialog windows.
|
|
||||||
config.removeDialogTabs = 'image:advanced;link:advanced';
|
|
||||||
};
|
|
||||||
|
|||||||
+1
-208
@@ -1,208 +1 @@
|
|||||||
/*
|
body{font-family:sans-serif,Arial,Verdana,"Trebuchet MS","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:12px;color:#333;background-color:#fff;margin:20px}.cke_editable{font-size:13px;line-height:1.6;word-wrap:break-word}blockquote{font-style:italic;font-family:Georgia,Times,"Times New Roman",serif;padding:2px 0;border-style:solid;border-color:#ccc;border-width:0}.cke_contents_ltr blockquote{padding-left:20px;padding-right:8px;border-left-width:5px}.cke_contents_rtl blockquote{padding-left:8px;padding-right:20px;border-right-width:5px}a{color:#0782c1}dl,ol,ul{padding:0 40px}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.2}hr{border:0;border-top:1px solid #ccc}img.right{border:1px solid #ccc;float:right;margin-left:15px;padding:5px}img.left{border:1px solid #ccc;float:left;margin-right:15px;padding:5px}pre{white-space:pre-wrap;word-wrap:break-word;-moz-tab-size:4;tab-size:4}.marker{background-color:#ff0}span[lang]{font-style:italic}figure{text-align:center;outline:solid 1px #ccc;background:rgba(0,0,0,.05);padding:10px;margin:10px 20px;display:inline-block}figure>figcaption{text-align:center;display:block}a>img{padding:1px;margin:1px;border:none;outline:1px solid #0782C1}.code-featured{border:5px solid red}.math-featured{padding:20px;box-shadow:0 0 2px #c80000;background-color:rgba(255,0,0,.05);margin:10px}.image-clean{border:0;background:0 0;padding:0}.image-clean>figcaption{font-size:.9em;text-align:right}.image-grayscale{background-color:#fff;color:#666}.image-grayscale img,img.image-grayscale{filter:grayscale(100%)}.embed-240p{max-width:426px;max-height:240px;margin:0 auto}.embed-360p{max-width:640px;max-height:360px;margin:0 auto}.embed-480p{max-width:854px;max-height:480px;margin:0 auto}.embed-720p{max-width:1280px;max-height:720px;margin:0 auto}.embed-1080p{max-width:1920px;max-height:1080px;margin:0 auto}
|
||||||
Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
|
|
||||||
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
||||||
*/
|
|
||||||
|
|
||||||
body
|
|
||||||
{
|
|
||||||
/* Font */
|
|
||||||
/* Emoji fonts are added to visualise them nicely in Internet Explorer. */
|
|
||||||
font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
||||||
font-size: 12px;
|
|
||||||
|
|
||||||
/* Text color */
|
|
||||||
color: #333;
|
|
||||||
|
|
||||||
/* Remove the background color to make it transparent. */
|
|
||||||
background-color: #fff;
|
|
||||||
|
|
||||||
margin: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cke_editable
|
|
||||||
{
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: 1.6;
|
|
||||||
|
|
||||||
/* Fix for missing scrollbars with RTL texts. (#10488) */
|
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote
|
|
||||||
{
|
|
||||||
font-style: italic;
|
|
||||||
font-family: Georgia, Times, "Times New Roman", serif;
|
|
||||||
padding: 2px 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #ccc;
|
|
||||||
border-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cke_contents_ltr blockquote
|
|
||||||
{
|
|
||||||
padding-left: 20px;
|
|
||||||
padding-right: 8px;
|
|
||||||
border-left-width: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cke_contents_rtl blockquote
|
|
||||||
{
|
|
||||||
padding-left: 8px;
|
|
||||||
padding-right: 20px;
|
|
||||||
border-right-width: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a
|
|
||||||
{
|
|
||||||
color: #0782C1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol,ul,dl
|
|
||||||
{
|
|
||||||
/* IE7: reset rtl list margin. (#7334) */
|
|
||||||
*margin-right: 0px;
|
|
||||||
/* Preserved spaces for list items with text direction different than the list. (#6249,#8049)*/
|
|
||||||
padding: 0 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2,h3,h4,h5,h6
|
|
||||||
{
|
|
||||||
font-weight: normal;
|
|
||||||
line-height: 1.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr
|
|
||||||
{
|
|
||||||
border: 0px;
|
|
||||||
border-top: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.right
|
|
||||||
{
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
float: right;
|
|
||||||
margin-left: 15px;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.left
|
|
||||||
{
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
float: left;
|
|
||||||
margin-right: 15px;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre
|
|
||||||
{
|
|
||||||
white-space: pre-wrap; /* CSS 2.1 */
|
|
||||||
word-wrap: break-word; /* IE7 */
|
|
||||||
-moz-tab-size: 4;
|
|
||||||
tab-size: 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.marker
|
|
||||||
{
|
|
||||||
background-color: Yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
span[lang]
|
|
||||||
{
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure
|
|
||||||
{
|
|
||||||
text-align: center;
|
|
||||||
outline: solid 1px #ccc;
|
|
||||||
background: rgba(0,0,0,0.05);
|
|
||||||
padding: 10px;
|
|
||||||
margin: 10px 20px;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
figure > figcaption
|
|
||||||
{
|
|
||||||
text-align: center;
|
|
||||||
display: block; /* For IE8 */
|
|
||||||
}
|
|
||||||
|
|
||||||
a > img {
|
|
||||||
padding: 1px;
|
|
||||||
margin: 1px;
|
|
||||||
border: none;
|
|
||||||
outline: 1px solid #0782C1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Widget Styles */
|
|
||||||
.code-featured
|
|
||||||
{
|
|
||||||
border: 5px solid red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.math-featured
|
|
||||||
{
|
|
||||||
padding: 20px;
|
|
||||||
box-shadow: 0 0 2px rgba(200, 0, 0, 1);
|
|
||||||
background-color: rgba(255, 0, 0, 0.05);
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.image-clean
|
|
||||||
{
|
|
||||||
border: 0;
|
|
||||||
background: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.image-clean > figcaption
|
|
||||||
{
|
|
||||||
font-size: .9em;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.image-grayscale
|
|
||||||
{
|
|
||||||
background-color: white;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
|
|
||||||
.image-grayscale img, img.image-grayscale
|
|
||||||
{
|
|
||||||
filter: grayscale(100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.embed-240p
|
|
||||||
{
|
|
||||||
max-width: 426px;
|
|
||||||
max-height: 240px;
|
|
||||||
margin:0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.embed-360p
|
|
||||||
{
|
|
||||||
max-width: 640px;
|
|
||||||
max-height: 360px;
|
|
||||||
margin:0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.embed-480p
|
|
||||||
{
|
|
||||||
max-width: 854px;
|
|
||||||
max-height: 480px;
|
|
||||||
margin:0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.embed-720p
|
|
||||||
{
|
|
||||||
max-width: 1280px;
|
|
||||||
max-height: 720px;
|
|
||||||
margin:0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.embed-1080p
|
|
||||||
{
|
|
||||||
max-width: 1920px;
|
|
||||||
max-height: 1080px;
|
|
||||||
margin:0 auto;
|
|
||||||
}
|
|
||||||
|
|||||||
+1
-137
@@ -1,137 +1 @@
|
|||||||
/**
|
CKEDITOR.stylesSet.add("default",[{name:"Italic Title",element:"h2",styles:{"font-style":"italic"}},{name:"Subtitle",element:"h3",styles:{color:"#aaa","font-style":"italic"}},{name:"Special Container",element:"div",styles:{padding:"5px 10px",background:"#eee",border:"1px solid #ccc"}},{name:"Marker",element:"span",attributes:{class:"marker"}},{name:"Big",element:"big"},{name:"Small",element:"small"},{name:"Typewriter",element:"tt"},{name:"Computer Code",element:"code"},{name:"Keyboard Phrase",element:"kbd"},{name:"Sample Text",element:"samp"},{name:"Variable",element:"var"},{name:"Deleted Text",element:"del"},{name:"Inserted Text",element:"ins"},{name:"Cited Work",element:"cite"},{name:"Inline Quotation",element:"q"},{name:"Language: RTL",element:"span",attributes:{dir:"rtl"}},{name:"Language: LTR",element:"span",attributes:{dir:"ltr"}},{name:"Styled Image (left)",element:"img",attributes:{class:"left"}},{name:"Styled Image (right)",element:"img",attributes:{class:"right"}},{name:"Compact Table",element:"table",attributes:{cellpadding:"5",cellspacing:"0",border:"1",bordercolor:"#ccc"},styles:{"border-collapse":"collapse"}},{name:"Borderless Table",element:"table",styles:{"border-style":"hidden","background-color":"#E6E6FA"}},{name:"Square Bulleted List",element:"ul",styles:{"list-style-type":"square"}},{name:"Clean Image",type:"widget",widget:"image",attributes:{class:"image-clean"}},{name:"Grayscale Image",type:"widget",widget:"image",attributes:{class:"image-grayscale"}},{name:"Featured Snippet",type:"widget",widget:"codeSnippet",attributes:{class:"code-featured"}},{name:"Featured Formula",type:"widget",widget:"mathjax",attributes:{class:"math-featured"}},{name:"240p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-240p"},group:"size"},{name:"360p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-360p"},group:"size"},{name:"480p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-480p"},group:"size"},{name:"720p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-720p"},group:"size"},{name:"1080p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-1080p"},group:"size"},{name:"240p ",type:"widget",widget:"embed",attributes:{class:"embed-240p"},group:"size"},{name:"360p ",type:"widget",widget:"embed",attributes:{class:"embed-360p"},group:"size"},{name:"480p ",type:"widget",widget:"embed",attributes:{class:"embed-480p"},group:"size"},{name:"720p ",type:"widget",widget:"embed",attributes:{class:"embed-720p"},group:"size"},{name:"1080p ",type:"widget",widget:"embed",attributes:{class:"embed-1080p"},group:"size"}]);
|
||||||
* Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
|
|
||||||
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
||||||
*/
|
|
||||||
|
|
||||||
// This file contains style definitions that can be used by CKEditor plugins.
|
|
||||||
//
|
|
||||||
// The most common use for it is the "stylescombo" plugin which shows the Styles drop-down
|
|
||||||
// list containing all styles in the editor toolbar. Other plugins, like
|
|
||||||
// the "div" plugin, use a subset of the styles for their features.
|
|
||||||
//
|
|
||||||
// If you do not have plugins that depend on this file in your editor build, you can simply
|
|
||||||
// ignore it. Otherwise it is strongly recommended to customize this file to match your
|
|
||||||
// website requirements and design properly.
|
|
||||||
//
|
|
||||||
// For more information refer to: https://ckeditor.com/docs/ckeditor4/latest/guide/dev_styles.html#style-rules
|
|
||||||
|
|
||||||
CKEDITOR.stylesSet.add( 'default', [
|
|
||||||
/* Block styles */
|
|
||||||
|
|
||||||
// These styles are already available in the "Format" drop-down list ("format" plugin),
|
|
||||||
// so they are not needed here by default. You may enable them to avoid
|
|
||||||
// placing the "Format" combo in the toolbar, maintaining the same features.
|
|
||||||
/*
|
|
||||||
{ name: 'Paragraph', element: 'p' },
|
|
||||||
{ name: 'Heading 1', element: 'h1' },
|
|
||||||
{ name: 'Heading 2', element: 'h2' },
|
|
||||||
{ name: 'Heading 3', element: 'h3' },
|
|
||||||
{ name: 'Heading 4', element: 'h4' },
|
|
||||||
{ name: 'Heading 5', element: 'h5' },
|
|
||||||
{ name: 'Heading 6', element: 'h6' },
|
|
||||||
{ name: 'Preformatted Text',element: 'pre' },
|
|
||||||
{ name: 'Address', element: 'address' },
|
|
||||||
*/
|
|
||||||
|
|
||||||
{ name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } },
|
|
||||||
{ name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },
|
|
||||||
{
|
|
||||||
name: 'Special Container',
|
|
||||||
element: 'div',
|
|
||||||
styles: {
|
|
||||||
padding: '5px 10px',
|
|
||||||
background: '#eee',
|
|
||||||
border: '1px solid #ccc'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Inline styles */
|
|
||||||
|
|
||||||
// These are core styles available as toolbar buttons. You may opt enabling
|
|
||||||
// some of them in the Styles drop-down list, removing them from the toolbar.
|
|
||||||
// (This requires the "stylescombo" plugin.)
|
|
||||||
/*
|
|
||||||
{ name: 'Strong', element: 'strong', overrides: 'b' },
|
|
||||||
{ name: 'Emphasis', element: 'em' , overrides: 'i' },
|
|
||||||
{ name: 'Underline', element: 'u' },
|
|
||||||
{ name: 'Strikethrough', element: 'strike' },
|
|
||||||
{ name: 'Subscript', element: 'sub' },
|
|
||||||
{ name: 'Superscript', element: 'sup' },
|
|
||||||
*/
|
|
||||||
|
|
||||||
{ name: 'Marker', element: 'span', attributes: { 'class': 'marker' } },
|
|
||||||
|
|
||||||
{ name: 'Big', element: 'big' },
|
|
||||||
{ name: 'Small', element: 'small' },
|
|
||||||
{ name: 'Typewriter', element: 'tt' },
|
|
||||||
|
|
||||||
{ name: 'Computer Code', element: 'code' },
|
|
||||||
{ name: 'Keyboard Phrase', element: 'kbd' },
|
|
||||||
{ name: 'Sample Text', element: 'samp' },
|
|
||||||
{ name: 'Variable', element: 'var' },
|
|
||||||
|
|
||||||
{ name: 'Deleted Text', element: 'del' },
|
|
||||||
{ name: 'Inserted Text', element: 'ins' },
|
|
||||||
|
|
||||||
{ name: 'Cited Work', element: 'cite' },
|
|
||||||
{ name: 'Inline Quotation', element: 'q' },
|
|
||||||
|
|
||||||
{ name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } },
|
|
||||||
{ name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } },
|
|
||||||
|
|
||||||
/* Object styles */
|
|
||||||
|
|
||||||
{
|
|
||||||
name: 'Styled Image (left)',
|
|
||||||
element: 'img',
|
|
||||||
attributes: { 'class': 'left' }
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: 'Styled Image (right)',
|
|
||||||
element: 'img',
|
|
||||||
attributes: { 'class': 'right' }
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: 'Compact Table',
|
|
||||||
element: 'table',
|
|
||||||
attributes: {
|
|
||||||
cellpadding: '5',
|
|
||||||
cellspacing: '0',
|
|
||||||
border: '1',
|
|
||||||
bordercolor: '#ccc'
|
|
||||||
},
|
|
||||||
styles: {
|
|
||||||
'border-collapse': 'collapse'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
{ name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },
|
|
||||||
{ name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } },
|
|
||||||
|
|
||||||
/* Widget styles */
|
|
||||||
|
|
||||||
{ name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-clean' } },
|
|
||||||
{ name: 'Grayscale Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-grayscale' } },
|
|
||||||
|
|
||||||
{ name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { 'class': 'code-featured' } },
|
|
||||||
|
|
||||||
{ name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { 'class': 'math-featured' } },
|
|
||||||
|
|
||||||
{ name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-240p' }, group: 'size' },
|
|
||||||
{ name: '360p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-360p' }, group: 'size' },
|
|
||||||
{ name: '480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-480p' }, group: 'size' },
|
|
||||||
{ name: '720p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-720p' }, group: 'size' },
|
|
||||||
{ name: '1080p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-1080p' }, group: 'size' },
|
|
||||||
|
|
||||||
// Adding space after the style name is an intended workaround. For now, there
|
|
||||||
// is no option to create two styles with the same name for different widget types. See https://dev.ckeditor.com/ticket/16664.
|
|
||||||
{ name: '240p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-240p' }, group: 'size' },
|
|
||||||
{ name: '360p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-360p' }, group: 'size' },
|
|
||||||
{ name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-480p' }, group: 'size' },
|
|
||||||
{ name: '720p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-720p' }, group: 'size' },
|
|
||||||
{ name: '1080p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-1080p' }, group: 'size' }
|
|
||||||
|
|
||||||
] );
|
|
||||||
|
|
||||||
|
|||||||
+22
-12
@@ -1,25 +1,35 @@
|
|||||||
{
|
{
|
||||||
"/assets/admin/js/app.js": "/assets/admin/js/app.js?id=c6f09efd67f43399c980",
|
"/assets/frontend/js/app.js": "/assets/frontend/js/app.js?id=b4f2e97d5ad74fbbb8c1",
|
||||||
"/assets/admin/js/app.js.map": "/assets/admin/js/app.js.map?id=d7cf2fb613c6991e3725",
|
"/assets/installer/js/app.js": "/assets/installer/js/app.js?id=83f3226250dcffc124b0",
|
||||||
"/assets/frontend/js/app.js": "/assets/frontend/js/app.js?id=cd0e1cc7897d01d2b2c8",
|
"/assets/admin/js/app.js": "/assets/admin/js/app.js?id=b3b38b9ffe987af4c1e7",
|
||||||
"/assets/frontend/css/now-ui-kit.css": "/assets/frontend/css/now-ui-kit.css?id=4e7a6eff0f7ee6e041a4",
|
"/assets/admin/css/vendor.min.css": "/assets/admin/css/vendor.min.css?id=bdbd85be3fb1f0381fc2",
|
||||||
"/assets/admin/css/vendor.min.css": "/assets/admin/css/vendor.min.css?id=71ff475a10f4f7af711c",
|
"/assets/frontend/css/now-ui-kit.css": "/assets/frontend/css/now-ui-kit.css?id=c40e60a13efd077c7c02",
|
||||||
"/assets/frontend/js/app.js.map": "/assets/frontend/js/app.js.map?id=354cbdecd6ca9a777054",
|
|
||||||
"/assets/frontend/css/now-ui-kit.css.map": "/assets/frontend/css/now-ui-kit.css.map?id=e5c9b2a4e9d0a7678653",
|
|
||||||
"/assets/admin/css/vendor.min.css.map": "/assets/admin/css/vendor.min.css.map?id=ef71a09a5b9fa35df9a9",
|
|
||||||
"/assets/installer/js/app.js": "/assets/installer/js/app.js?id=4ebdf2b99afe39ca2dc3",
|
|
||||||
"/assets/installer/js/app.js.map": "/assets/installer/js/app.js.map?id=03bfe28bb64a23033bec",
|
|
||||||
"/assets/fonts/glyphicons-halflings-regular.woff2": "/assets/fonts/glyphicons-halflings-regular.woff2?id=349344e92fb16221dd56",
|
"/assets/fonts/glyphicons-halflings-regular.woff2": "/assets/fonts/glyphicons-halflings-regular.woff2?id=349344e92fb16221dd56",
|
||||||
"/assets/admin/fonts/glyphicons-halflings-regular.woff2": "/assets/admin/fonts/glyphicons-halflings-regular.woff2?id=349344e92fb16221dd56",
|
"/assets/admin/fonts/glyphicons-halflings-regular.woff2": "/assets/admin/fonts/glyphicons-halflings-regular.woff2?id=349344e92fb16221dd56",
|
||||||
"/assets/admin/img/clear.png": "/assets/admin/img/clear.png?id=63b3af84650a0145d61a",
|
"/assets/admin/img/clear.png": "/assets/admin/img/clear.png?id=63b3af84650a0145d61a",
|
||||||
"/assets/admin/img/loading.gif": "/assets/admin/img/loading.gif?id=1e2db432947c2dca1b9f",
|
"/assets/admin/img/loading.gif": "/assets/admin/img/loading.gif?id=1e2db432947c2dca1b9f",
|
||||||
"/assets/global/js/jquery.js": "/assets/global/js/jquery.js?id=2849239b95f5a9a2aea3",
|
"/assets/global/js/jquery.js": "/assets/global/js/jquery.js?id=2849239b95f5a9a2aea3",
|
||||||
|
"/assets/global/css/images/layers-2x.png": "/assets/global/css/images/layers-2x.png?id=f905cd0e87fcdde8969b",
|
||||||
|
"/assets/global/css/images/layers.png": "/assets/global/css/images/layers.png?id=3d61d49c98ea3572cae4",
|
||||||
|
"/assets/global/css/images/marker-icon-2x.png": "/assets/global/css/images/marker-icon-2x.png?id=da330e712dc6fc8c7d58",
|
||||||
|
"/assets/global/css/images/marker-icon.png": "/assets/global/css/images/marker-icon.png?id=1045a925825f69b0a874",
|
||||||
|
"/assets/global/css/images/marker-shadow.png": "/assets/global/css/images/marker-shadow.png?id=43ccefc930d47f2e3a17",
|
||||||
"/assets/admin/css/blue.png": "/assets/admin/css/blue.png?id=39437a6200d8066a49d4",
|
"/assets/admin/css/blue.png": "/assets/admin/css/blue.png?id=39437a6200d8066a49d4",
|
||||||
"/assets/admin/css/blue@2x.png": "/assets/admin/css/blue@2x.png?id=127d7cfbb176dc559854",
|
"/assets/admin/css/blue@2x.png": "/assets/admin/css/blue@2x.png?id=127d7cfbb176dc559854",
|
||||||
"/assets/frontend/js/vendor.js": "/assets/frontend/js/vendor.js?id=3ab539b466b46ef2ed84",
|
"/assets/frontend/js/vendor.js": "/assets/frontend/js/vendor.js?id=3ab539b466b46ef2ed84",
|
||||||
"/assets/admin/css/vendor.css": "/assets/admin/css/vendor.css?id=4e79a5c8b0241493191b",
|
"/assets/admin/css/vendor.css": "/assets/admin/css/vendor.css?id=568fd06f4beaec54aa13",
|
||||||
"/assets/admin/js/vendor.js": "/assets/admin/js/vendor.js?id=edb4f99fb0b0998555c1",
|
"/assets/admin/js/vendor.js": "/assets/admin/js/vendor.js?id=edb4f99fb0b0998555c1",
|
||||||
"/assets/installer/css/vendor.css": "/assets/installer/css/vendor.css?id=a60c0e373bba3e7cd76b",
|
"/assets/vendor/ckeditor4/CHANGES.md": "/assets/vendor/ckeditor4/CHANGES.md?id=f6aecaa34a4f047b698b",
|
||||||
|
"/assets/vendor/ckeditor4/LICENSE.md": "/assets/vendor/ckeditor4/LICENSE.md?id=bdd7b1a5211ef8687a2b",
|
||||||
|
"/assets/vendor/ckeditor4/README.md": "/assets/vendor/ckeditor4/README.md?id=54b2071da0fd5125556d",
|
||||||
|
"/assets/vendor/ckeditor4/bower.json": "/assets/vendor/ckeditor4/bower.json?id=a6d6f831706863d6df7a",
|
||||||
|
"/assets/vendor/ckeditor4/ckeditor.js": "/assets/vendor/ckeditor4/ckeditor.js?id=aa81f7b2b2ddb8c4e0dd",
|
||||||
|
"/assets/vendor/ckeditor4/composer.json": "/assets/vendor/ckeditor4/composer.json?id=7d18ab5f522c8ecf3892",
|
||||||
|
"/assets/vendor/ckeditor4/config.js": "/assets/vendor/ckeditor4/config.js?id=dbc65722e8c3bae5b43b",
|
||||||
|
"/assets/vendor/ckeditor4/contents.css": "/assets/vendor/ckeditor4/contents.css?id=471be63a33e8ce099801",
|
||||||
|
"/assets/vendor/ckeditor4/package.json": "/assets/vendor/ckeditor4/package.json?id=4c783954edc3a50b72fc",
|
||||||
|
"/assets/vendor/ckeditor4/styles.js": "/assets/vendor/ckeditor4/styles.js?id=f5d57c2be704fbecec57",
|
||||||
|
"/assets/installer/css/vendor.css": "/assets/installer/css/vendor.css?id=29cfe641b34ad0c7ed19",
|
||||||
"/assets/installer/js/vendor.js": "/assets/installer/js/vendor.js?id=4398fa9f7340f95a1107",
|
"/assets/installer/js/vendor.js": "/assets/installer/js/vendor.js?id=4398fa9f7340f95a1107",
|
||||||
"/assets/global/js/vendor.js": "/assets/global/js/vendor.js?id=bb691042c0629f4af9f5",
|
"/assets/global/js/vendor.js": "/assets/global/js/vendor.js?id=bb691042c0629f4af9f5",
|
||||||
"/assets/global/css/vendor.css": "/assets/global/css/vendor.css?id=e01e86f8033ae9836957"
|
"/assets/global/css/vendor.css": "/assets/global/css/vendor.css?id=e01e86f8033ae9836957"
|
||||||
|
|||||||
@@ -23,17 +23,17 @@ return [
|
|||||||
'departuretime' => 'Abflugzeit',
|
'departuretime' => 'Abflugzeit',
|
||||||
'arrivaltime' => 'Ankunftszeit',
|
'arrivaltime' => 'Ankunftszeit',
|
||||||
'type' => [
|
'type' => [
|
||||||
'pass_scheduled' => 'Passagier - planmäßig',
|
'pass_scheduled' => 'Passagier (Planmäßig)',
|
||||||
'cargo_scheduled' => 'Fracht - planmäßig',
|
'cargo_scheduled' => 'Fracht (Planmäßig)',
|
||||||
'charter_pass_only' => 'Charter - Nur Passagier',
|
'charter_pass_only' => 'Passagier (Charter)',
|
||||||
'addtl_cargo_mail' => 'Zusätzliche Fracht/Post',
|
'addtl_cargo_mail' => 'Fracht (Zusätzliche)',
|
||||||
'special_vip' => 'Spezieller VIP-Flug (FAA/Behörde)',
|
'special_vip' => 'Spezieller VIP-Flug',
|
||||||
'pass_addtl' => 'Passagier - Zusätzlich',
|
'pass_addtl' => 'Passagier (Zusätzlich)',
|
||||||
'charter_cargo' => 'Charter - Fracht/Post',
|
'charter_cargo' => 'Fracht (Charter)',
|
||||||
'ambulance' => 'Ambulanzflug',
|
'ambulance' => 'Ambulanzflug',
|
||||||
'training_flight' => 'Trainingsflug',
|
'training_flight' => 'Trainingsflug',
|
||||||
'mail_service' => 'Postdienst',
|
'mail_service' => 'Postdienst',
|
||||||
'charter_special' => 'Charter mit Sonderbehandlung',
|
'charter_special' => 'Passagier (Charter mit Sonderbehandlung)',
|
||||||
'positioning' => 'Positionierung (Fähre/Lieferung/Demo)',
|
'positioning' => 'Positionierung (Fähre/Lieferung/Demo)',
|
||||||
'technical_test' => 'Technischer Test',
|
'technical_test' => 'Technischer Test',
|
||||||
'military' => 'Militär',
|
'military' => 'Militär',
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ return [
|
|||||||
'cancelled' => 'Abgebrochen',
|
'cancelled' => 'Abgebrochen',
|
||||||
'deleted' => 'Gelöscht',
|
'deleted' => 'Gelöscht',
|
||||||
'draft' => 'Entwurf',
|
'draft' => 'Entwurf',
|
||||||
|
'paused' => 'Angehalten',
|
||||||
],
|
],
|
||||||
'status' => [
|
'status' => [
|
||||||
'initialized' => 'Erstellt',
|
'initialized' => 'Erstellt',
|
||||||
@@ -66,5 +67,6 @@ return [
|
|||||||
'arrived' => 'Angekommen',
|
'arrived' => 'Angekommen',
|
||||||
'cancelled' => 'Abgebrochen',
|
'cancelled' => 'Abgebrochen',
|
||||||
'emerg_decent' => 'Notfall dezent',
|
'emerg_decent' => 'Notfall dezent',
|
||||||
|
'paused' => 'Angehalten',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -23,20 +23,20 @@ return [
|
|||||||
'departuretime' => 'Departure Time',
|
'departuretime' => 'Departure Time',
|
||||||
'arrivaltime' => 'Arrival Time',
|
'arrivaltime' => 'Arrival Time',
|
||||||
'type' => [
|
'type' => [
|
||||||
'pass_scheduled' => 'Passenger - Scheduled',
|
'pass_scheduled' => 'Passenger (Scheduled)',
|
||||||
'cargo_scheduled' => 'Cargo - Scheduled',
|
'pass_addtl' => 'Passenger (Additional)',
|
||||||
'charter_pass_only' => 'Charter - Passenger Only',
|
'charter_pass_only' => 'Passenger (Charter)',
|
||||||
'addtl_cargo_mail' => 'Additional Cargo/Mail',
|
'charter_special' => 'Passenger (Special Charter)',
|
||||||
'special_vip' => 'Special VIP Flight (FAA/Government)',
|
'cargo_scheduled' => 'Cargo (Scheduled)',
|
||||||
'pass_addtl' => 'Passenger - Additional',
|
'addtl_cargo_mail' => 'Cargo (Additional)',
|
||||||
'charter_cargo' => 'Charter - Cargo/Mail',
|
'charter_cargo' => 'Cargo (Charter)',
|
||||||
'ambulance' => 'Ambulance Flight',
|
|
||||||
'training_flight' => 'Training Flight',
|
|
||||||
'mail_service' => 'Mail Service',
|
'mail_service' => 'Mail Service',
|
||||||
'charter_special' => 'Charter w/ Special Handling',
|
'special_vip' => 'VIP Flight',
|
||||||
'positioning' => 'Positioning (Ferry/Delivery/Demo)',
|
'ambulance' => 'Ambulance',
|
||||||
'technical_test' => 'Technical Test',
|
'training_flight' => 'Training',
|
||||||
'military' => 'Military',
|
'military' => 'Military',
|
||||||
|
'positioning' => 'Positioning',
|
||||||
|
'technical_test' => 'Technical Test',
|
||||||
'technical_stop' => 'Technical Stop',
|
'technical_stop' => 'Technical Stop',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ return [
|
|||||||
'cancelled' => 'Cancelled',
|
'cancelled' => 'Cancelled',
|
||||||
'deleted' => 'Deleted',
|
'deleted' => 'Deleted',
|
||||||
'draft' => 'Draft',
|
'draft' => 'Draft',
|
||||||
|
'paused' => 'Paused',
|
||||||
],
|
],
|
||||||
'status' => [
|
'status' => [
|
||||||
'initialized' => 'Initiated',
|
'initialized' => 'Initiated',
|
||||||
@@ -66,5 +67,6 @@ return [
|
|||||||
'arrived' => 'Arrived',
|
'arrived' => 'Arrived',
|
||||||
'cancelled' => 'Cancelled',
|
'cancelled' => 'Cancelled',
|
||||||
'emerg_decent' => 'Emergency decent',
|
'emerg_decent' => 'Emergency decent',
|
||||||
|
'paused' => 'Paused',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -23,18 +23,18 @@ return [
|
|||||||
'departuretime' => 'Hora de salida',
|
'departuretime' => 'Hora de salida',
|
||||||
'arrivaltime' => 'Hora de llegada',
|
'arrivaltime' => 'Hora de llegada',
|
||||||
'type' => [
|
'type' => [
|
||||||
'pass_scheduled' => 'Pasajero - Programado',
|
'pass_scheduled' => 'Pasajero (Programado)',
|
||||||
'cargo_scheduled' => 'Carga - Programado',
|
'cargo_scheduled' => 'Carga (Programado)',
|
||||||
'charter_pass_only' => 'Charter - Solo pasajeros',
|
'charter_pass_only' => 'Pasajero (Charter)',
|
||||||
'addtl_cargo_mail' => 'Carga/correo adicional',
|
'addtl_cargo_mail' => 'Carga (Adicional)',
|
||||||
'special_vip' => 'Vuelo VIP especial (Autoridad de Aviación Civil)',
|
'special_vip' => 'Vuelo VIP especial',
|
||||||
'pass_addtl' => 'Pasajero - Adicional',
|
'pass_addtl' => 'Pasajero (Adicional)',
|
||||||
'charter_cargo' => 'Charter - Carga/Correo',
|
'charter_cargo' => 'Carga (Charter)',
|
||||||
'ambulance' => 'Vuelo ambulancia',
|
'ambulance' => 'Vuelo ambulancia',
|
||||||
'training_flight' => 'Vuelo de entrenamiento',
|
'training_flight' => 'Vuelo de entrenamiento',
|
||||||
'mail_service' => 'Servicio postal',
|
'mail_service' => 'Servicio postal',
|
||||||
'charter_special' => 'Charter con cargas especiales',
|
'charter_special' => 'Pasajero (Charter con cargas especiales)',
|
||||||
'positioning' => 'Posicionamiento (Ferry/Entrega/Demo)',
|
'positioning' => 'Posicionamiento',
|
||||||
'technical_test' => 'Prueba técnica',
|
'technical_test' => 'Prueba técnica',
|
||||||
'military' => 'Militar',
|
'military' => 'Militar',
|
||||||
'technical_stop' => 'Parada técnica',
|
'technical_stop' => 'Parada técnica',
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ return [
|
|||||||
'cancelled' => 'Cancelado',
|
'cancelled' => 'Cancelado',
|
||||||
'deleted' => 'Eliminado',
|
'deleted' => 'Eliminado',
|
||||||
'draft' => 'Borrador',
|
'draft' => 'Borrador',
|
||||||
|
'paused' => 'Pausado',
|
||||||
],
|
],
|
||||||
'status' => [
|
'status' => [
|
||||||
'initialized' => 'Iniciado',
|
'initialized' => 'Iniciado',
|
||||||
@@ -66,5 +67,6 @@ return [
|
|||||||
'arrived' => 'Llegó',
|
'arrived' => 'Llegó',
|
||||||
'cancelled' => 'Cancelado',
|
'cancelled' => 'Cancelado',
|
||||||
'emerg_decent' => 'Descenso de emergencía',
|
'emerg_decent' => 'Descenso de emergencía',
|
||||||
|
'paused' => 'Pausado',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ return [
|
|||||||
'departuretime' => 'Ora di Partenza',
|
'departuretime' => 'Ora di Partenza',
|
||||||
'arrivaltime' => 'Ora di Arrivo',
|
'arrivaltime' => 'Ora di Arrivo',
|
||||||
'type' => [
|
'type' => [
|
||||||
'pass_scheduled' => 'Passeggeri - Programmato',
|
'pass_scheduled' => 'Passeggeri (Programmato)',
|
||||||
'cargo_scheduled' => 'Cargo - Programmato',
|
'cargo_scheduled' => 'Cargo (Programmato)',
|
||||||
'charter_pass_only' => 'Charter - Solo Passeggeri',
|
'charter_pass_only' => 'Passeggeri (Charter)',
|
||||||
'addtl_cargo_mail' => 'Cargo/Posta Addizionale',
|
'addtl_cargo_mail' => 'Cargo (Addizionale)',
|
||||||
'special_vip' => 'Volo VIP Speciale (FAA/Governo)',
|
'special_vip' => 'Volo VIP Speciale',
|
||||||
'pass_addtl' => 'Passeggeri - Addizionale',
|
'pass_addtl' => 'Passeggeri (Addizionale)',
|
||||||
'charter_cargo' => 'Charter - Cargo/Posta',
|
'charter_cargo' => 'Cargo (Charter)',
|
||||||
'ambulance' => 'Volo Ambulanza',
|
'ambulance' => 'Volo Ambulanza',
|
||||||
'training_flight' => 'Volo di Addestramento',
|
'training_flight' => 'Volo di Addestramento',
|
||||||
'mail_service' => 'Servizio Postale',
|
'mail_service' => 'Servizio Postale',
|
||||||
'charter_special' => 'Charter con Manutenzione Speciale',
|
'charter_special' => 'Passeggeri (Charter Speciale)',
|
||||||
'positioning' => 'Posizionamento (Traghetto/Consegna/Dimostrazione)',
|
'positioning' => 'Posizionamento',
|
||||||
'technical_test' => 'Prova Tecnica',
|
'technical_test' => 'Prova Tecnica',
|
||||||
'military' => 'Militare',
|
'military' => 'Militare',
|
||||||
'technical_stop' => 'Fermo Tecnico',
|
'technical_stop' => 'Fermo Tecnico',
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ return [
|
|||||||
'cancelled' => 'Cancellato',
|
'cancelled' => 'Cancellato',
|
||||||
'deleted' => 'Eliminato',
|
'deleted' => 'Eliminato',
|
||||||
'draft' => 'Bozza',
|
'draft' => 'Bozza',
|
||||||
|
'paused' => 'In pausa',
|
||||||
],
|
],
|
||||||
'status' => [
|
'status' => [
|
||||||
'initialized' => 'Iniziato',
|
'initialized' => 'Iniziato',
|
||||||
@@ -67,5 +68,6 @@ return [
|
|||||||
'arrived' => 'Arrivato',
|
'arrived' => 'Arrivato',
|
||||||
'cancelled' => 'Cancellato',
|
'cancelled' => 'Cancellato',
|
||||||
'emerg_decent' => 'Discesa di Emergenza',
|
'emerg_decent' => 'Discesa di Emergenza',
|
||||||
|
'paused' => 'In pausa',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -23,18 +23,18 @@ return [
|
|||||||
'departuretime' => 'Hora de partida',
|
'departuretime' => 'Hora de partida',
|
||||||
'arrivaltime' => 'Hora de chegada',
|
'arrivaltime' => 'Hora de chegada',
|
||||||
'type' => [
|
'type' => [
|
||||||
'pass_scheduled' => 'Passageiro - Programado',
|
'pass_scheduled' => 'Passageiro (Programado)',
|
||||||
'cargo_scheduled' => 'Carga - Programado',
|
'cargo_scheduled' => 'Carga (Programado)',
|
||||||
'charter_pass_only' => 'Charter - Somente passageiros',
|
'charter_pass_only' => 'Passageire (Charter)',
|
||||||
'addtl_cargo_mail' => 'Carga/Mail Adicional',
|
'addtl_cargo_mail' => 'Carga (Adicional)',
|
||||||
'special_vip' => 'Voo VIP especial (FAA/Governo)',
|
'special_vip' => 'Voo VIP especial',
|
||||||
'pass_addtl' => 'Passageiro - Adicional',
|
'pass_addtl' => 'Passageiro (Adicional)',
|
||||||
'charter_cargo' => 'Charter - Carga/Mail',
|
'charter_cargo' => 'Carga (Charter)',
|
||||||
'ambulance' => 'Voo de emergência',
|
'ambulance' => 'Voo de emergência',
|
||||||
'training_flight' => 'Voo de treinamento',
|
'training_flight' => 'Voo de treinamento',
|
||||||
'mail_service' => 'Serviço de correio',
|
'mail_service' => 'Serviço de correio',
|
||||||
'charter_special' => 'Charter c/ Handling Especial',
|
'charter_special' => 'Passageire (Charter Especial)',
|
||||||
'positioning' => 'Posicionamento (Ferry/Delivery/Demo)',
|
'positioning' => 'Posicionamento',
|
||||||
'technical_test' => 'Teste Técnico',
|
'technical_test' => 'Teste Técnico',
|
||||||
'military' => 'Militar',
|
'military' => 'Militar',
|
||||||
'technical_stop' => 'Parada Técnica',
|
'technical_stop' => 'Parada Técnica',
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ return [
|
|||||||
'cancelled' => 'Cancelado',
|
'cancelled' => 'Cancelado',
|
||||||
'deleted' => 'Deletado',
|
'deleted' => 'Deletado',
|
||||||
'draft' => 'Esboçado',
|
'draft' => 'Esboçado',
|
||||||
|
'paused' => 'Em pausa',
|
||||||
],
|
],
|
||||||
'status' => [
|
'status' => [
|
||||||
'initialized' => 'Iniciada',
|
'initialized' => 'Iniciada',
|
||||||
@@ -66,5 +67,6 @@ return [
|
|||||||
'arrived' => 'Chegou',
|
'arrived' => 'Chegou',
|
||||||
'cancelled' => 'Cancelado',
|
'cancelled' => 'Cancelado',
|
||||||
'emerg_decent' => 'Descida de emergência',
|
'emerg_decent' => 'Descida de emergência',
|
||||||
|
'paused' => 'Em pausa',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ CACHE_PREFIX='$CACHE_PREFIX$'
|
|||||||
# If you're using SMTP, I recommend setting the QUEUE_DRIVER to 'database'
|
# If you're using SMTP, I recommend setting the QUEUE_DRIVER to 'database'
|
||||||
# https://docs.phpvms.net/config/optimizing#queue-driver
|
# https://docs.phpvms.net/config/optimizing#queue-driver
|
||||||
|
|
||||||
MAIL_DRIVER=$MAIL_DRIVER$
|
MAIL_MAILER=$MAIL_DRIVER$
|
||||||
MAIL_FROM_NAME='$MAIL_FROM_NAME$'
|
MAIL_FROM_NAME='$MAIL_FROM_NAME$'
|
||||||
MAIL_FROM_ADDRESS='$MAIL_FROM_ADDRESS$'
|
MAIL_FROM_ADDRESS='$MAIL_FROM_ADDRESS$'
|
||||||
MAIL_HOST=$MAIL_HOST$
|
MAIL_HOST=$MAIL_HOST$
|
||||||
|
|||||||
@@ -38,12 +38,15 @@
|
|||||||
<td style="text-align: center;">{{ $atf->code }}</td>
|
<td style="text-align: center;">{{ $atf->code }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="#" data-pk="{{ $atf->id }}" data-name="capacity">{{ $atf->pivot->capacity }}</a>
|
<a href="#" data-pk="{{ $atf->id }}" data-name="capacity">{{ $atf->pivot->capacity }}</a>
|
||||||
|
<span class="small background-color-grey-light">({{ $atf->capacity }})</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="#" data-pk="{{ $atf->id }}" data-name="price">{{ $atf->pivot->price }}</a>
|
<a href="#" data-pk="{{ $atf->id }}" data-name="price">{{ $atf->pivot->price }}</a>
|
||||||
|
<span class="small background-color-grey-light">({{ $atf->price }})</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="#" data-pk="{{ $atf->id }}" data-name="cost">{{ $atf->pivot->cost }}</a>
|
<a href="#" data-pk="{{ $atf->id }}" data-name="cost">{{ $atf->pivot->cost }}</a>
|
||||||
|
<span class="small background-color-grey-light">({{ $atf->cost }})</span>
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align: center; width:3%;">
|
<td style="text-align: center; width:3%;">
|
||||||
{{ Form::open(['url' => '/admin/flights/'.$flight->id.'/fares',
|
{{ Form::open(['url' => '/admin/flights/'.$flight->id.'/fares',
|
||||||
|
|||||||
@@ -16,6 +16,11 @@
|
|||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
|
<div>
|
||||||
|
<span class="description">
|
||||||
|
<b>Pilot</b> {{ $pirep->user->name }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span class="description">
|
<span class="description">
|
||||||
<b>DEP</b> {{ $pirep->dpt_airport_id }}
|
<b>DEP</b> {{ $pirep->dpt_airport_id }}
|
||||||
|
|||||||
@@ -64,8 +64,9 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="copyright">
|
<div class="copyright">
|
||||||
{{--
|
{{--
|
||||||
Please keep the copyright message somewhere, as-per the LICENSE file
|
This "powered by phpVMS" must be kept visible. as-per the the license
|
||||||
Thanks!!
|
If you want to remove the attribution, a license can be purchased
|
||||||
|
https://docs.phpvms.net/#license
|
||||||
--}}
|
--}}
|
||||||
powered by <a href="http://www.phpvms.net" target="_blank">phpvms</a>
|
powered by <a href="http://www.phpvms.net" target="_blank">phpvms</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,7 +6,14 @@
|
|||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<h2>{{ $flight->ident }}</h2>
|
<h2>
|
||||||
|
{{ $flight->ident }}
|
||||||
|
@if ($acars_plugin && $bid)
|
||||||
|
<a href="vmsacars:bid/{{$bid->id}}" class="btn btn-info btn-sm float-right">Load in vmsACARS</a>
|
||||||
|
@elseif ($acars_plugin)
|
||||||
|
<a href="vmsacars:flight/{{$flight->id}}" class="btn btn-info btn-sm float-right">Load in vmsACARS</a>
|
||||||
|
@endif
|
||||||
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|||||||
@@ -7,26 +7,39 @@
|
|||||||
<h2>{{ $simbrief->xml->general->icao_airline }}{{ $simbrief->xml->general->flight_number }}
|
<h2>{{ $simbrief->xml->general->icao_airline }}{{ $simbrief->xml->general->flight_number }}
|
||||||
: {{ $simbrief->xml->origin->icao_code }} to {{ $simbrief->xml->destination->icao_code }}</h2>
|
: {{ $simbrief->xml->origin->icao_code }} to {{ $simbrief->xml->destination->icao_code }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
<div class="col">
|
||||||
@if (empty($simbrief->pirep_id))
|
@if (empty($simbrief->pirep_id))
|
||||||
<a class="btn btn-outline-info pull-right btn-lg"
|
<a class="btn btn-outline-info pull-right btn-lg"
|
||||||
style="margin-top: -10px; margin-bottom: 5px"
|
style="margin-top: -10px; margin-bottom: 5px"
|
||||||
href="{{ url(route('frontend.simbrief.prefile', [$simbrief->id])) }}">Prefile PIREP</a>
|
href="{{ url(route('frontend.simbrief.prefile', [$simbrief->id])) }}">Prefile PIREP</a>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
@if (!empty($simbrief->xml->params->static_id) && $user->id === $simbrief->user_id)
|
||||||
@if (!empty($simbrief->xml->params->static_id) && Auth::id() == $simbrief->user_id)
|
<div class="col">
|
||||||
<a class="btn btn-secondary pull-right btn-lg"
|
<a class="btn btn-secondary btn-lg"
|
||||||
style="margin-top: -10px; margin-bottom: 5px"
|
style="margin-top: -10px; margin-bottom: 5px"
|
||||||
href="#"
|
href="#"
|
||||||
data-toggle="modal" data-target="#OFP_Edit">Edit OFP</a>
|
data-toggle="modal" data-target="#OFP_Edit">Edit OFP</a>
|
||||||
@endif
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
@endif
|
||||||
<a class="btn btn-primary pull-right btn-lg"
|
<div class="col">
|
||||||
|
<a class="btn btn-primary btn-lg"
|
||||||
style="margin-top: -10px; margin-bottom: 5px"
|
style="margin-top: -10px; margin-bottom: 5px"
|
||||||
href="{{ url(route('frontend.simbrief.generate_new', [$simbrief->id])) }}">Generate New OFP</a>
|
href="{{ url(route('frontend.simbrief.generate_new', [$simbrief->id])) }}">Generate New OFP</a>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
@if ($acars_plugin)
|
||||||
|
@if ($bid)
|
||||||
|
<a href="vmsacars:bid/{{$bid->id}}"
|
||||||
|
style="margin-top: -10px; margin-bottom: 5px"
|
||||||
|
class="btn btn-info btn-lg">Load in vmsACARS</a>
|
||||||
|
@else
|
||||||
|
<a href="vmsacars:flight/{{$flight->id}}"
|
||||||
|
style="margin-top: -10px; margin-bottom: 5px"
|
||||||
|
class="btn btn-info btn-lg">Load in vmsACARS</a>
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|||||||
@@ -22,9 +22,9 @@
|
|||||||
"x-saved-class" is the class to add/remove if the bid exists or not
|
"x-saved-class" is the class to add/remove if the bid exists or not
|
||||||
If you change it, remember to change it in the in-array line as well
|
If you change it, remember to change it in the in-array line as well
|
||||||
--}}
|
--}}
|
||||||
@if (!setting('pilots.only_flights_from_current') || $flight->dpt_airport_id == Auth::user()->current_airport->icao)
|
@if (!setting('pilots.only_flights_from_current') || $flight->dpt_airport_id == $user->current_airport->icao)
|
||||||
<button class="btn btn-round btn-icon btn-icon-mini save_flight
|
<button class="btn btn-round btn-icon btn-icon-mini save_flight
|
||||||
{{ in_array($flight->id, $saved, true) ? 'btn-info':'' }}"
|
{{ isset($saved[$flight->id]) ? 'btn-info':'' }}"
|
||||||
x-id="{{ $flight->id }}"
|
x-id="{{ $flight->id }}"
|
||||||
x-saved-class="btn-info"
|
x-saved-class="btn-info"
|
||||||
type="button"
|
type="button"
|
||||||
@@ -39,16 +39,12 @@
|
|||||||
{{--<table class="table-condensed"></table>--}}
|
{{--<table class="table-condensed"></table>--}}
|
||||||
<span class="title">{{ strtoupper(__('flights.dep')) }} </span>
|
<span class="title">{{ strtoupper(__('flights.dep')) }} </span>
|
||||||
{{ optional($flight->dpt_airport)->name ?? $flight->dpt_airport_id }}
|
{{ optional($flight->dpt_airport)->name ?? $flight->dpt_airport_id }}
|
||||||
(<a href="{{route('frontend.airports.show', [
|
(<a href="{{route('frontend.airports.show', ['id' => $flight->dpt_airport_id])}}">{{$flight->dpt_airport_id}}</a>)
|
||||||
'id' => $flight->dpt_airport_id
|
|
||||||
])}}">{{$flight->dpt_airport_id}}</a>)
|
|
||||||
@if($flight->dpt_time), {{ $flight->dpt_time }}@endif
|
@if($flight->dpt_time), {{ $flight->dpt_time }}@endif
|
||||||
<br/>
|
<br/>
|
||||||
<span class="title">{{ strtoupper(__('flights.arr')) }} </span>
|
<span class="title">{{ strtoupper(__('flights.arr')) }} </span>
|
||||||
{{ optional($flight->arr_airport)->name ?? $flight->arr_airport_id }}
|
{{ optional($flight->arr_airport)->name ?? $flight->arr_airport_id }}
|
||||||
(<a href="{{route('frontend.airports.show', [
|
(<a href="{{route('frontend.airports.show', ['id' => $flight->arr_airport_id])}}">{{$flight->arr_airport_id}}</a>)
|
||||||
'id' => $flight->arr_airport_id
|
|
||||||
])}}">{{$flight->arr_airport_id}}</a>)
|
|
||||||
@if($flight->arr_time), {{ $flight->arr_time }}@endif
|
@if($flight->arr_time), {{ $flight->arr_time }}@endif
|
||||||
<br/>
|
<br/>
|
||||||
@if(filled($flight->callsign))
|
@if(filled($flight->callsign))
|
||||||
@@ -76,6 +72,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 text-right">
|
<div class="col-sm-12 text-right">
|
||||||
|
@if ($acars_plugin)
|
||||||
|
@if (isset($saved[$flight->id]))
|
||||||
|
<a href="vmsacars:bid/{{ $saved[$flight->id] }}" class="btn btn-sm btn-outline-primary">Load in vmsACARS</a>
|
||||||
|
@else
|
||||||
|
<a href="vmsacars:flight/{{ $flight->id }}" class="btn btn-sm btn-outline-primary">Load in vmsACARS</a>
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
<!-- Simbrief enabled -->
|
<!-- Simbrief enabled -->
|
||||||
@if ($simbrief !== false)
|
@if ($simbrief !== false)
|
||||||
<!-- If this flight has a briefing, show the link to view it-->
|
<!-- If this flight has a briefing, show the link to view it-->
|
||||||
@@ -86,7 +89,7 @@
|
|||||||
</a>
|
</a>
|
||||||
@else
|
@else
|
||||||
<!-- Show button if the bids-only is disable, or if bids-only is enabled, they've saved it -->
|
<!-- Show button if the bids-only is disable, or if bids-only is enabled, they've saved it -->
|
||||||
@if ($simbrief_bids === false || ($simbrief_bids === true && in_array($flight->id, $saved, true)))
|
@if ($simbrief_bids === false || ($simbrief_bids === true && isset($saved[$flight->id])))
|
||||||
<a href="{{ route('frontend.simbrief.generate') }}?flight_id={{ $flight->id }}"
|
<a href="{{ route('frontend.simbrief.generate') }}?flight_id={{ $flight->id }}"
|
||||||
class="btn btn-sm btn-outline-primary">
|
class="btn btn-sm btn-outline-primary">
|
||||||
Create Simbrief Flight Plan
|
Create Simbrief Flight Plan
|
||||||
@@ -94,7 +97,6 @@
|
|||||||
@endif
|
@endif
|
||||||
@endif
|
@endif
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<a href="{{ route('frontend.pireps.create') }}?flight_id={{ $flight->id }}"
|
<a href="{{ route('frontend.pireps.create') }}?flight_id={{ $flight->id }}"
|
||||||
class="btn btn-sm btn-outline-info">
|
class="btn btn-sm btn-outline-info">
|
||||||
{{ __('pireps.newpirep') }}
|
{{ __('pireps.newpirep') }}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
@component('mail::message')
|
@component('mail::message')
|
||||||
# PIREP Accepted!
|
# PIREP Rejected!
|
||||||
|
|
||||||
Your PIREP has been rejected
|
Your PIREP has been rejected
|
||||||
|
|
||||||
|
|||||||
@@ -185,6 +185,8 @@ class BidTest extends TestCase
|
|||||||
{
|
{
|
||||||
$this->user = factory(User::class)->create();
|
$this->user = factory(User::class)->create();
|
||||||
$user2 = factory(User::class)->create();
|
$user2 = factory(User::class)->create();
|
||||||
|
|
||||||
|
/** @var \App\Models\Flight $flight */
|
||||||
$flight = $this->addFlight($this->user);
|
$flight = $this->addFlight($this->user);
|
||||||
|
|
||||||
$uri = '/api/user/bids';
|
$uri = '/api/user/bids';
|
||||||
@@ -194,6 +196,14 @@ class BidTest extends TestCase
|
|||||||
$body = $body->json('data');
|
$body = $body->json('data');
|
||||||
|
|
||||||
$this->assertEquals($body['flight_id'], $flight->id);
|
$this->assertEquals($body['flight_id'], $flight->id);
|
||||||
|
$this->assertNotEmpty($body['flight']);
|
||||||
|
|
||||||
|
$res = $this->get('/api/bids/'.$body['id']);
|
||||||
|
$res->assertOk();
|
||||||
|
|
||||||
|
$body = $res->json('data');
|
||||||
|
$this->assertEquals($body['flight_id'], $flight->id);
|
||||||
|
$this->assertNotEmpty($body['flight']);
|
||||||
|
|
||||||
// Now try to have the second user bid on it
|
// Now try to have the second user bid on it
|
||||||
// Should return a 409 error
|
// Should return a 409 error
|
||||||
|
|||||||
@@ -149,6 +149,13 @@ class ImporterTest extends TestCase
|
|||||||
'Arrival Gate' => 'C61',
|
'Arrival Gate' => 'C61',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
// Blank values omitted
|
||||||
|
[
|
||||||
|
'input' => 'gate; ',
|
||||||
|
'expected' => [
|
||||||
|
'gate',
|
||||||
|
],
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($tests as $test) {
|
foreach ($tests as $test) {
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
subfleet,iata, icao, name,registration,hex_code,zfw,status
|
subfleet,iata, icao,airport_id, name,registration,hex_code,mtow,zfw,status
|
||||||
A32X,A320,320,A320-211,N309US,,,S
|
A32X,A320,320,,A320-211,N309US,,,,S
|
||||||
74X,747 400, ,,
|
74X,747 400, ,,,
|
||||||
|
|||||||
|
@@ -1,3 +1,3 @@
|
|||||||
subfleet,iata, icao, name,registration,hex_code,zfw,status
|
subfleet,iata, icao,airport_id, name,registration,hex_code,mtow,zfw,status
|
||||||
A32X,A320,320,A320-211,N309US,,,A
|
A32X,A320,320,,A320-211,N309US,,,,A
|
||||||
74X,747 400, ,,
|
74X,747 400,, ,,
|
||||||
|
|||||||
|
@@ -1,3 +1,3 @@
|
|||||||
subfleet,name,registration,hex_code,status
|
subfleet,iata, icao,airport_id, name,registration,hex_code,mtow,zfw,status
|
||||||
A32X,A320-211,N309US,,
|
A32X,A320-211,,N309US,,,
|
||||||
, B744-GE, N304,,
|
, B744-GE,, N304,,,
|
||||||
|
|||||||
|
@@ -1,5 +1,5 @@
|
|||||||
airline,flight_number,route_code,route_leg,dpt_airport,arr_airport,alt_airport,days,dpt_time,arr_time,level,distance,flight_time,flight_type,load_factor, load_factor_variance,pilot_pay,route,notes,active,subfleets,fares,fields
|
airline,flight_number,route_code,callsign,route_leg,dpt_airport,arr_airport,alt_airport,days,dpt_time,arr_time,level,distance,flight_time,flight_type,load_factor, load_factor_variance,pilot_pay,route,notes,start_date,end-date,active,subfleets,fares,fields
|
||||||
VMS,1972,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,85,0,100, ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=4;Arrival Gate=C41
|
VMS,1972,,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,85,0,100, ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",,,1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=4;Arrival Gate=C41
|
||||||
" ",1972,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,100,10, ,ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=4;Arrival Gate=C41
|
" ",1972,,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,100,10, ,ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",,,1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=4;Arrival Gate=C41
|
||||||
VMS,113,,,KJFK,KAUS,KDFW,15,0810 EST,1035 CST,350,,207,J,70,2,,,"Empty distance",1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=C41;Arrival Gate=2
|
VMS,113,,,,KJFK,KAUS,KDFW,15,0810 EST,1035 CST,350,,207,J,70,2,,,"Empty distance",,,1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=C41;Arrival Gate=2
|
||||||
VMS,999,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,85,0,100, ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",1,A32X;B737,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=4;Arrival Gate=C41
|
VMS,999,,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,85,0,100, ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",,,1,A32X;B737,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,Departure Gate=4;Arrival Gate=C41
|
||||||
|
|||||||
|
@@ -1,2 +1,2 @@
|
|||||||
airline,flight_number,route_code,route_leg,dpt_airport,arr_airport,alt_airport,days,dpt_time,arr_time,level,distance,flight_time,flight_type,load_factor, load_factor_variance,pilot_pay,route,notes,active,subfleets,fares,fields
|
airline,flight_number,route_code,callsign,route_leg,dpt_airport,arr_airport,alt_airport,days,dpt_time,arr_time,level,distance,flight_time,flight_type,load_factor, load_factor_variance,pilot_pay,route,notes,start_date,end-date,active,subfleets,fares,fields
|
||||||
VMS,1972,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,,,,ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,
|
VMS,1972,,,,KAUS,KJFK,KLGA,15,0810 CST,1235 EST,350,1477,207,J,,,,ILEXY2 ZENZI LFK ELD J29 MEM Q29 JHW J70 STENT J70 MAGIO J70 LVZ LENDY6,"Just a flight",,,1,A32X,Y?price=300&cost=100&capacity=130;F?price=600&cost=400;B?,
|
||||||
|
|||||||
|
@@ -1,3 +1,3 @@
|
|||||||
airline,type,name,fuel_type,cost_block_hour,cost_delay_minute,ground_handling_multiplier,cargo_capacity,fuel_capacity,gross_weight,fares
|
airline,hub_id,type,simbrief_type,name,fuel_type,cost_block_hour,cost_delay_minute,ground_handling_multiplier,fares
|
||||||
VMS,A32X,"Airbus A320",,1000,0,200,,,,Y;B?capacity=100&price=500%
|
VMS,KAUS,A32X,,"Airbus A320",,1000,0,200,Y;B?capacity=100&price=500%
|
||||||
VMS, ,"Boeing 747-400",,1000,0,200,,,,Y;B?capacity=100&price=500%
|
VMS,EGPH, ,,"Boeing 747-400",,1000,0,200,Y;B?capacity=100&price=500%
|
||||||
|
|||||||
|
Reference in New Issue
Block a user