Compare commits

..
Author SHA1 Message Date
Shift 1f78434b71 Add .shift to open Pull Request 2022-01-28 00:53:11 +00:00
56 changed files with 993 additions and 2260 deletions
+2 -4
View File
@@ -15,10 +15,7 @@ declare -a remove_files=(
.idea .idea
.travis .travis
docker docker
node_modules
vendor/willdurand/geocoder/tests
_ide_helper.php _ide_helper.php
.env
.dockerignore .dockerignore
.dpl .dpl
.editorconfig .editorconfig
@@ -41,8 +38,9 @@ declare -a remove_files=(
phpvms.iml phpvms.iml
Procfile Procfile
phpstan.neon phpstan.neon
symfony.lock node_modules
composer.phar composer.phar
vendor/willdurand/geocoder/tests
) )
for file in "${remove_files[@]}"; do for file in "${remove_files[@]}"; do
+4
View File
@@ -0,0 +1,4 @@
This file was added by Shift #54503 in order to open a
Pull Request since no other commits were made.
You should remove this file.
+21
View File
@@ -2,6 +2,7 @@
namespace App\Contracts; namespace App\Contracts;
use App\Notifications\Channels\Discord\DiscordMessage;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
@@ -25,4 +26,24 @@ class Notification extends \Illuminate\Notifications\Notification implements Sho
$this->channels = $notif_config[$klass];*/ $this->channels = $notif_config[$klass];*/
} }
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
*
* @return array
*/
/*public function via($notifiable)
{
return $this->channels;
}*/
/**
* @return DiscordMessage|null
*/
public function toDiscordChannel($notifiable): ?DiscordMessage
{
return null;
}
} }
+2 -28
View File
@@ -34,9 +34,9 @@ airports:
lon: -97.6698889 lon: -97.6698889
hub: 1 hub: 1
ground_handling_cost: 100 ground_handling_cost: 100
- id: KHPN - id: KPHN
iata: HPN iata: HPN
icao: KHPN icao: KPHN
name: Westchester County Airport name: Westchester County Airport
location: White Plains location: White Plains
country: United States country: United States
@@ -45,17 +45,6 @@ airports:
lon: -73.7076 lon: -73.7076
hub: 1 hub: 1
ground_handling_cost: 100 ground_handling_cost: 100
- id: KLGA
iata: LGA
icao: KLGA
name: La Guardia Airport
location: New York, New York, USA
country: United States
timezone: America/New_York
lat: 40.7772
lon: -73.8726
hub: 1
ground_handling_cost: 250
- id: KJFK - id: KJFK
iata: JFK iata: JFK
icao: KJFK icao: KJFK
@@ -586,21 +575,6 @@ flights:
visible: 1 visible: 1
created_at: now created_at: now
updated_at: now updated_at: now
- id: flightid_4
airline_id: 1
flight_number: 100
dpt_airport_id: KHPN
arr_airport_id: KLGA
route: DCT CMK V374 DENNA V44 BELTT/N0346F140 V44 DPK DCT
distance: 75
level: 110
dpt_time: 6PM CST
arr_time: 11PM EST
flight_time: 240
flight_type: J
load_factor: 100
created_at: NOW
updated_at: NOW
flight_fields: flight_fields:
- name: Departure Terminal - name: Departure Terminal
-7
View File
@@ -333,13 +333,6 @@
options: '' options: ''
type: int type: int
description: 'The length of a pilot''s ID' description: 'The length of a pilot''s ID'
- key: pilots.id_code
name: 'Pilot ID Code'
group: pilots
value: ''
options: ''
type: text
description: 'Fixed ICAO code for pilot IDs'
- key: pilots.auto_accept - key: pilots.auto_accept
name: 'Auto Accept New Pilot' name: 'Auto Accept New Pilot'
group: pilots group: pilots
-43
View File
@@ -1,43 +0,0 @@
<?php
namespace App\Exceptions;
class BidNotFound extends AbstractHttpException
{
private $bid_id;
public function __construct($bid_id)
{
$this->bid_id = $bid_id;
parent::__construct(
404,
'The bid '.$bid_id.' was not found'
);
}
/**
* Return the RFC 7807 error type (without the URL root)
*/
public function getErrorType(): string
{
return 'bid-not-found';
}
/**
* Get the detailed error string
*/
public function getErrorDetails(): string
{
return $this->getMessage();
}
/**
* Return an array with the error details, merged with the RFC7807 response
*/
public function getErrorMetadata(): array
{
return [
'bid_id' => $this->bid_id,
];
}
}
@@ -3,7 +3,6 @@
namespace App\Http\Controllers\Api; namespace App\Http\Controllers\Api;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Exceptions\BidNotFound;
use App\Exceptions\Unauthorized; 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;
@@ -161,10 +160,6 @@ class UserController extends Controller
// Return the current bid // Return the current bid
$bid = $this->bidSvc->getBid($user, $bid_id); $bid = $this->bidSvc->getBid($user, $bid_id);
if ($bid === null) {
throw new BidNotFound($bid_id);
}
if ($bid->user_id !== $user->id) { if ($bid->user_id !== $user->id) {
throw new Unauthorized(new \Exception('Bid not not belong to authenticated user')); throw new Unauthorized(new \Exception('Bid not not belong to authenticated user'));
} }
-2
View File
@@ -10,8 +10,6 @@ use Carbon\Carbon;
* @property string flight_id * @property string flight_id
* @property Carbon created_at * @property Carbon created_at
* @property Carbon updated_at * @property Carbon updated_at
* @property Flight flight
* @property User user
*/ */
class Bid extends Model class Bid extends Model
{ {
-1
View File
@@ -24,7 +24,6 @@ use Illuminate\Support\Collection;
* @property Collection subfleets * @property Collection subfleets
* @property int days * @property int days
* @property int distance * @property int distance
* @property int planned_distance
* @property int flight_time * @property int flight_time
* @property string route * @property string route
* @property string dpt_time * @property string dpt_time
+2 -6
View File
@@ -97,10 +97,7 @@ class User extends Authenticatable
*/ */
protected $hidden = [ protected $hidden = [
'api_key', 'api_key',
'email',
'name',
'discord_id', 'discord_id',
'discord_private_channel_id',
'password', 'password',
'last_ip', 'last_ip',
'remember_token', 'remember_token',
@@ -131,9 +128,8 @@ class User extends Authenticatable
public function getIdentAttribute(): string public function getIdentAttribute(): string
{ {
$length = setting('pilots.id_length'); $length = setting('pilots.id_length');
$ident_code = filled(setting('pilots.id_code')) ? setting('pilots.id_code') : optional($this->airline)->icao;
return $ident_code.str_pad($this->pilot_id, $length, '0', STR_PAD_LEFT); return optional($this->airline)->icao.str_pad($this->pilot_id, $length, '0', STR_PAD_LEFT);
} }
/** /**
@@ -152,7 +148,7 @@ class User extends Authenticatable
$first_name = $name_parts[0]; $first_name = $name_parts[0];
$last_name = $name_parts[$count - 1]; $last_name = $name_parts[$count - 1];
return $first_name.' '.mb_substr($last_name, 0, 1); return $first_name.' '.$last_name[0];
} }
/** /**
@@ -20,23 +20,14 @@ class DiscordWebhook
public function send($notifiable, Notification $notification) public function send($notifiable, Notification $notification)
{ {
$message = $notification->toDiscordChannel($notifiable); $message = $notification->toDiscordChannel($notifiable);
if ($message === null) { if ($message === null || empty($message->webhook_url)) {
//Log::debug('Discord notifications not configured, skipping'); Log::debug('Discord notifications not configured, skipping');
return; return;
} }
$webhook_url = $message->webhook_url;
if (empty($webhook_url)) {
$webhook_url = setting('notifications.discord_private_webhook_url');
if (empty($webhook_url)) {
//Log::debug('Discord notifications not configured, skipping');
return;
}
}
try { try {
$data = $message->toArray(); $data = $message->toArray();
$this->httpClient->post($webhook_url, $data); $this->httpClient->post($message->webhook_url, $data);
} catch (RequestException $e) { } catch (RequestException $e) {
$request = Psr7\Message::toString($e->getRequest()); $request = Psr7\Message::toString($e->getRequest());
$response = Psr7\Message::toString($e->getResponse()); $response = Psr7\Message::toString($e->getResponse());
@@ -4,6 +4,8 @@ namespace App\Notifications\Messages;
use App\Contracts\Notification; use App\Contracts\Notification;
use App\Models\User; use App\Models\User;
use App\Notifications\Channels\Discord\DiscordMessage;
use App\Notifications\Channels\Discord\DiscordWebhook;
use App\Notifications\Channels\MailChannel; use App\Notifications\Channels\MailChannel;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
@@ -30,21 +32,32 @@ class AdminUserRegistered extends Notification implements ShouldQueue
); );
} }
/**
* @param $notifiable
*
* @return string[]
*/
public function via($notifiable) public function via($notifiable)
{ {
return ['mail']; return ['mail', DiscordWebhook::class];
} }
/** /**
* @param $notifiable * Send a Discord notification
* *
* @return array * @param User $pirep
* @param mixed $user
*
* @return DiscordMessage|null
*/ */
public function toDiscordChannel($user): ?DiscordMessage
{
if (empty(setting('notifications.discord_private_webhook_url'))) {
return null;
}
$dm = new DiscordMessage();
return $dm->webhook(setting('notifications.discord_private_webhook_url'))
->success()
->title('New User Registered: '.$user->ident)
->fields([]);
}
public function toArray($notifiable) public function toArray($notifiable)
{ {
return [ return [
@@ -1,58 +0,0 @@
<?php
namespace App\Notifications\Messages\Broadcast;
use App\Contracts\Notification;
use App\Models\News;
use App\Notifications\Channels\Discord\DiscordMessage;
use Illuminate\Contracts\Queue\ShouldQueue;
class NewsAdded extends Notification implements ShouldQueue
{
private $news;
public function __construct(News $news)
{
parent::__construct();
$this->news = $news;
}
public function via($notifiable)
{
return ['discord_webhook'];
}
/**
* @param News $news
*
* @return DiscordMessage|null
*/
public function toDiscordChannel($news): ?DiscordMessage
{
$dm = new DiscordMessage();
return $dm->url(setting('notifications.discord_public_webhook_url'))
->success()
->title('News: '.$news->subject)
->author([
'name' => $news->user->ident.' - '.$news->user->name_private,
'url' => '',
'icon_url' => $news->user->resolveAvatarUrl(),
])
->description($news->body);
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
*
* @return array
*/
public function toArray($notifiable)
{
return [
'news_id' => $this->news->id,
];
}
}
@@ -1,74 +0,0 @@
<?php
namespace App\Notifications\Messages\Broadcast;
use App\Contracts\Notification;
use App\Models\User;
use App\Notifications\Channels\Discord\DiscordMessage;
use App\Notifications\Channels\MailChannel;
use Illuminate\Contracts\Queue\ShouldQueue;
/**
* Send a message to a Discord channel that a user was registered
*/
class UserRegistered extends Notification implements ShouldQueue
{
use MailChannel;
private $user;
/**
* Create a new notification instance.
*
* @param \App\Models\User $user
*/
public function __construct(User $user)
{
parent::__construct();
$this->user = $user;
}
/**
* @param $notifiable
*
* @return string[]
*/
public function via($notifiable)
{
return ['discord_webhook'];
}
/**
* Send a Discord notification
*
* @param $notifiable
*
* @return DiscordMessage|null
*/
public function toDiscordChannel($notifiable): ?DiscordMessage
{
$dm = new DiscordMessage();
return $dm->url(setting('notifications.discord_private_webhook_url'))
->success()
->title('New User Registered: '.$this->user->ident)
->author([
'name' => $this->user->ident.' - '.$this->user->name_private,
'url' => '',
'icon_url' => $this->user->resolveAvatarUrl(),
])
->fields([]);
}
/**
* @param $notifiable
*
* @return array
*/
public function toArray($notifiable)
{
return [
'user_id' => $this->user->id,
];
}
}
-53
View File
@@ -1,53 +0,0 @@
<?php
namespace App\Notifications\Messages;
use App\Contracts\Notification;
use App\Models\Pirep;
use App\Notifications\Channels\MailChannel;
use Illuminate\Contracts\Queue\ShouldQueue;
class PirepFiled extends Notification implements ShouldQueue
{
use MailChannel;
private $pirep;
/**
* Create a new notification instance.
*
* @param \App\Models\Pirep $pirep
*/
public function __construct(Pirep $pirep)
{
parent::__construct();
$this->pirep = $pirep;
$this->setMailable(
'New PIREP Submitted',
'notifications.mail.admin.pirep.submitted',
['pirep' => $this->pirep]
);
}
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
*
* @return array
*/
public function toArray($notifiable)
{
return [
'pirep_id' => $this->pirep->id,
'user_id' => $this->pirep->user_id,
];
}
}
@@ -1,6 +1,6 @@
<?php <?php
namespace App\Notifications\Messages\Broadcast; namespace App\Notifications\Messages;
use App\Contracts\Notification; use App\Contracts\Notification;
use App\Models\Pirep; use App\Models\Pirep;
@@ -1,6 +1,6 @@
<?php <?php
namespace App\Notifications\Messages\Broadcast; namespace App\Notifications\Messages;
use App\Contracts\Notification; use App\Contracts\Notification;
use App\Models\Enums\PirepStatus; use App\Models\Enums\PirepStatus;
@@ -9,11 +9,9 @@ use App\Notifications\Channels\Discord\DiscordMessage;
use App\Notifications\Channels\Discord\DiscordWebhook; use App\Notifications\Channels\Discord\DiscordWebhook;
use App\Support\Units\Distance; use App\Support\Units\Distance;
use App\Support\Units\Time; use App\Support\Units\Time;
use function config;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use PhpUnitsOfMeasure\Exception\NonNumericValue; use PhpUnitsOfMeasure\Exception\NonNumericValue;
use PhpUnitsOfMeasure\Exception\NonStringUnitName; use PhpUnitsOfMeasure\Exception\NonStringUnitName;
use function route;
/** /**
* Send the PIREP accepted message to a particular user, can also be sent to Discord * Send the PIREP accepted message to a particular user, can also be sent to Discord
@@ -75,6 +73,10 @@ class PirepStatusChanged extends Notification implements ShouldQueue
*/ */
public function toDiscordChannel($pirep): ?DiscordMessage public function toDiscordChannel($pirep): ?DiscordMessage
{ {
if (empty(setting('notifications.discord_public_webhook_url'))) {
return null;
}
$title = 'Flight '.$pirep->ident.' '.self::$verbs[$pirep->status]; $title = 'Flight '.$pirep->ident.' '.self::$verbs[$pirep->status];
$fields = [ $fields = [
@@ -110,7 +112,7 @@ class PirepStatusChanged extends Notification implements ShouldQueue
} }
$dm = new DiscordMessage(); $dm = new DiscordMessage();
return $dm->url(setting('notifications.discord_public_webhook_url')) return $dm->webhook(setting('notifications.discord_public_webhook_url'))
->success() ->success()
->title($title) ->title($title)
->description($pirep->user->discord_id ? 'Flight by <@'.$pirep->user->discord_id.'>' : '') ->description($pirep->user->discord_id ? 'Flight by <@'.$pirep->user->discord_id.'>' : '')
@@ -1,18 +1,22 @@
<?php <?php
namespace App\Notifications\Messages\Broadcast; namespace App\Notifications\Messages;
use App\Contracts\Notification; use App\Contracts\Notification;
use App\Models\Pirep; use App\Models\Pirep;
use App\Notifications\Channels\Discord\DiscordMessage; use App\Notifications\Channels\Discord\DiscordMessage;
use App\Notifications\Channels\Discord\DiscordWebhook;
use App\Notifications\Channels\MailChannel;
use App\Support\Units\Distance; use App\Support\Units\Distance;
use App\Support\Units\Time; use App\Support\Units\Time;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use PhpUnitsOfMeasure\Exception\NonNumericValue; use PhpUnitsOfMeasure\Exception\NonNumericValue;
use PhpUnitsOfMeasure\Exception\NonStringUnitName; use PhpUnitsOfMeasure\Exception\NonStringUnitName;
class PirepFiled extends Notification implements ShouldQueue class PirepSubmitted extends Notification implements ShouldQueue
{ {
use MailChannel;
private $pirep; private $pirep;
/** /**
@@ -25,11 +29,17 @@ class PirepFiled extends Notification implements ShouldQueue
parent::__construct(); parent::__construct();
$this->pirep = $pirep; $this->pirep = $pirep;
$this->setMailable(
'New PIREP Submitted',
'notifications.mail.admin.pirep.submitted',
['pirep' => $this->pirep]
);
} }
public function via($notifiable) public function via($notifiable)
{ {
return ['discord_webhook']; return ['mail', DiscordWebhook::class];
} }
/** /**
@@ -41,30 +51,34 @@ class PirepFiled extends Notification implements ShouldQueue
*/ */
public function toDiscordChannel($pirep): ?DiscordMessage public function toDiscordChannel($pirep): ?DiscordMessage
{ {
if (empty(setting('notifications.discord_public_webhook_url'))) {
return null;
}
$title = 'Flight '.$pirep->ident.' Filed'; $title = 'Flight '.$pirep->ident.' Filed';
$fields = [ $fields = [
'Flight' => $pirep->ident, 'Flight' => $pirep->ident,
'Departure Airport' => $pirep->dpt_airport_id, 'Departure Airport' => $pirep->dpt_airport_id,
'Arrival Airport' => $pirep->arr_airport_id, 'Arrival Airport' => $pirep->arr_airport_id,
'Equipment' => $pirep->aircraft->ident, 'Equipment' => $pirep->aircraft->ident,
'Flight Time' => Time::minutesToTimeString($pirep->flight_time), 'Flight Time (Planned)' => Time::minutesToTimeString($pirep->planned_flight_time),
]; ];
if ($pirep->distance) { if ($pirep->planned_distance) {
try { try {
$distance = new Distance( $planned_distance = new Distance(
$pirep->distance, $pirep->planned_distance,
config('phpvms.internal_units.distance') config('phpvms.internal_units.distance')
); );
$pd = $distance[$distance->unit].' '.$distance->unit; $pd = $planned_distance[$planned_distance->unit].' '.$planned_distance->unit;
$fields['Distance'] = $pd; $fields['Distance (Planned)'] = $pd;
} catch (NonNumericValue|NonStringUnitName $e) { } catch (NonNumericValue|NonStringUnitName $e) {
} }
} }
$dm = new DiscordMessage(); $dm = new DiscordMessage();
return $dm->url(setting('notifications.discord_public_webhook_url')) return $dm->webhook(setting('notifications.discord_public_webhook_url'))
->success() ->success()
->title($title) ->title($title)
->description($pirep->user->discord_id ? 'Flight by <@'.$pirep->user->discord_id.'>' : '') ->description($pirep->user->discord_id ? 'Flight by <@'.$pirep->user->discord_id.'>' : '')
+10 -22
View File
@@ -134,10 +134,10 @@ class NotificationEventsHandler extends Listener
*/ */
$this->notifyAdmins(new Messages\AdminUserRegistered($event->user)); $this->notifyAdmins(new Messages\AdminUserRegistered($event->user));
/* /**
* Broadcast notifications * Discord and other notifications
*/ */
Notification::send([$event->user], new Messages\Broadcast\UserRegistered($event->user)); Notification::send([$event->user], new Messages\AdminUserRegistered($event->user));
} }
/** /**
@@ -166,20 +166,16 @@ class NotificationEventsHandler extends Listener
public function onPirepPrefile(PirepPrefiled $event): void public function onPirepPrefile(PirepPrefiled $event): void
{ {
Log::info('NotificationEvents::onPirepPrefile: '.$event->pirep->id.' prefiled'); Log::info('NotificationEvents::onPirepPrefile: '.$event->pirep->id.' prefiled');
Notification::send([$event->pirep], new Messages\PirepPrefiled($event->pirep));
/*
* Broadcast notifications
*/
Notification::send([$event->pirep], new Messages\Broadcast\PirepPrefiled($event->pirep));
} }
/** /**
* Status Change notification. Disabled for now, too noisy * Status Change notification
*/ */
public function onPirepStatusChange(PirepStatusChange $event): void public function onPirepStatusChange(PirepStatusChange $event): void
{ {
// Log::info('NotificationEvents::onPirepStatusChange: '.$event->pirep->id.' prefiled'); Log::info('NotificationEvents::onPirepStatusChange: '.$event->pirep->id.' prefiled');
// Notification::send([$event->pirep], new Messages\Discord\PirepStatusChanged($event->pirep)); Notification::send([$event->pirep], new Messages\PirepStatusChanged($event->pirep));
} }
/** /**
@@ -190,12 +186,8 @@ class NotificationEventsHandler extends Listener
public function onPirepFile(PirepFiled $event): void public function onPirepFile(PirepFiled $event): void
{ {
Log::info('NotificationEvents::onPirepFile: '.$event->pirep->id.' filed'); Log::info('NotificationEvents::onPirepFile: '.$event->pirep->id.' filed');
$this->notifyAdmins(new Messages\PirepFiled($event->pirep)); $this->notifyAdmins(new Messages\PirepSubmitted($event->pirep));
Notification::send([$event->pirep], new Messages\PirepSubmitted($event->pirep));
/*
* Broadcast notifications
*/
Notification::send([$event->pirep], new Messages\Broadcast\PirepFiled($event->pirep));
} }
/** /**
@@ -229,10 +221,6 @@ class NotificationEventsHandler extends Listener
{ {
Log::info('NotificationEvents::onNewsAdded'); Log::info('NotificationEvents::onNewsAdded');
$this->notifyAllUsers(new Messages\NewsAdded($event->news)); $this->notifyAllUsers(new Messages\NewsAdded($event->news));
Notification::send([$event->news], new Messages\NewsAdded($event->news));
/*
* Broadcast notifications
*/
Notification::send([$event->news], new Messages\Broadcast\NewsAdded($event->news));
} }
} }
-7
View File
@@ -2,12 +2,10 @@
namespace App\Providers; namespace App\Providers;
use App\Notifications\Channels\Discord\DiscordWebhook;
use App\Services\ModuleService; use App\Services\ModuleService;
use App\Support\ThemeViewFinder; use App\Support\ThemeViewFinder;
use App\Support\Utils; use App\Support\Utils;
use Illuminate\Pagination\Paginator; use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
@@ -17,13 +15,8 @@ class AppServiceProvider extends ServiceProvider
public function boot(): void public function boot(): void
{ {
Schema::defaultStringLength(191); Schema::defaultStringLength(191);
Paginator::useBootstrap(); Paginator::useBootstrap();
View::share('moduleSvc', app(ModuleService::class)); View::share('moduleSvc', app(ModuleService::class));
Notification::extend('discord_webhook', function ($app) {
return app(DiscordWebhook::class);
});
} }
/** /**
+2 -2
View File
@@ -90,11 +90,11 @@ class UserRepository extends Repository
} }
if ($request->filled('name')) { if ($request->filled('name')) {
$where[] = ['name', 'LIKE', '%'.$request->name.'%']; $where['name'] = $request->name;
} }
if ($request->filled('email')) { if ($request->filled('email')) {
$where[] = ['email', 'LIKE', '%'.$request->email.'%']; $where['email'] = $request->email;
} }
if ($request->filled('state')) { if ($request->filled('state')) {
+2 -13
View File
@@ -33,7 +33,7 @@ class BidService extends Service
* *
* @return \App\Models\Bid|\Illuminate\Database\Eloquent\Model|object|null * @return \App\Models\Bid|\Illuminate\Database\Eloquent\Model|object|null
*/ */
public function getBid(User $user, $bid_id): ?Bid public function getBid(User $user, $bid_id): Bid
{ {
$with = [ $with = [
'flight', 'flight',
@@ -48,18 +48,7 @@ class BidService extends Service
'flight.subfleets.fares', 'flight.subfleets.fares',
]; ];
/** @var Bid $bid */ return Bid::with($with)->where(['id' => $bid_id])->first();
$bid = Bid::with($with)->where(['id' => $bid_id])->first();
if ($bid === null) {
return null;
}
// Reconcile the aircraft for this bid
// TODO: Only do this if there isn't a Simbrief attached?
$bid->flight = $this->flightSvc->filterSubfleets($user, $bid->flight);
$bid->flight = $this->fareSvc->getReconciledFaresForFlight($bid->flight);
return $bid;
} }
/** /**
+2 -2
View File
@@ -243,7 +243,7 @@ class PirepService extends Service
// Copy some fields over from Flight if we have it // Copy some fields over from Flight if we have it
if ($pirep->flight) { if ($pirep->flight) {
$pirep->planned_distance = $pirep->flight->planned_distance; $pirep->planned_distance = $pirep->flight->distance;
$pirep->planned_flight_time = $pirep->flight->flight_time; $pirep->planned_flight_time = $pirep->flight->flight_time;
} }
@@ -336,7 +336,7 @@ class PirepService extends Service
// Copy some fields over from Flight if we have it // Copy some fields over from Flight if we have it
if ($pirep->flight) { if ($pirep->flight) {
$pirep->distance = $pirep->flight->distance; $pirep->planned_distance = $pirep->flight->distance;
$pirep->planned_flight_time = $pirep->flight->flight_time; $pirep->planned_flight_time = $pirep->flight->flight_time;
} }
+6 -12
View File
@@ -15,21 +15,15 @@
"ext-bcmath": "*", "ext-bcmath": "*",
"ext-pdo": "*", "ext-pdo": "*",
"ext-intl": "*", "ext-intl": "*",
"cache/adapter-common": "1.2.0",
"cache/array-adapter": "1.1.0",
"cache/hierarchical-cache": "1.1.0",
"symfony/flex": "^1.0",
"symfony/polyfill-intl-icu": "*", "symfony/polyfill-intl-icu": "*",
"symfony/polyfill-intl-idn": "*", "symfony/polyfill-intl-idn": "*",
"symfony/polyfill-mbstring": "*", "symfony/polyfill-mbstring": "*",
"symfony/polyfill-php74": "*", "symfony/polyfill-php74": "*",
"symfony/polyfill-php80": "*", "symfony/polyfill-php80": "*",
"symfony/polyfill-php81": "*", "symfony/polyfill-php81": "*",
"symfony/deprecation-contracts": "^v2.5.0",
"symfony/event-dispatcher-contracts": "^2", "symfony/event-dispatcher-contracts": "^2",
"symfony/property-info": "^5.4", "symfony/property-info": "^5.4",
"symfony/string": "^5.4", "symfony/string": "^5.4",
"symfony/translation": "^5.4",
"psr/container": "1.1.1", "psr/container": "1.1.1",
"composer/composer": "~2.0", "composer/composer": "~2.0",
"composer/installers": "~1.0", "composer/installers": "~1.0",
@@ -52,21 +46,21 @@
"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.0", "league/commonmark": "~1.6",
"league/csv": "9.7.*", "league/csv": "9.7.*",
"league/geotools": "0.8.*", "league/geotools": "0.8.*",
"league/iso3166": "^3.0.0", "league/iso3166": "^3.0.0",
"markrogoyski/math-php": "^1.11.0", "markrogoyski/math-php": "^1.10",
"myclabs/deep-copy": "~1.10.0", "myclabs/deep-copy": "~1.10.0",
"nabeel/vacentral": "~2.0", "nabeel/vacentral": "~2.0",
"nwidart/laravel-modules": "^8.2.0", "nwidart/laravel-modules": "^8.2",
"php-units-of-measure/php-units-of-measure": "~2.1.0", "php-units-of-measure/php-units-of-measure": "~2.1.0",
"phpvms/sample-module": "^1.0", "phpvms/sample-module": "^1.0",
"pragmarx/version": ">=v1.2.3", "pragmarx/version": ">=v1.2.3",
"prettus/l5-repository": "~2.7.0", "prettus/l5-repository": "~2.7.0",
"santigarcor/laratrust": "~6.3.0", "santigarcor/laratrust": "~6.3",
"semver/semver": "~1.1.0", "semver/semver": "~1.1.0",
"spatie/valuestore": "~1.2.0", "spatie/valuestore": "~1.2",
"symfony/polyfill-iconv": "~1.22.0", "symfony/polyfill-iconv": "~1.22.0",
"tivie/php-os-detector": "~1.1.0", "tivie/php-os-detector": "~1.1.0",
"vlucas/phpdotenv": "^5.3.0", "vlucas/phpdotenv": "^5.3.0",
@@ -120,7 +114,7 @@
"module-dir": "modules", "module-dir": "modules",
"symfony": { "symfony": {
"require": "^5.4" "require": "^5.4"
} }
}, },
"scripts": { "scripts": {
"pre-package-uninstall": [ "pre-package-uninstall": [
Generated
+605 -678
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -3,8 +3,8 @@
use App\Notifications\Messages\AdminUserRegistered; use App\Notifications\Messages\AdminUserRegistered;
use App\Notifications\Messages\NewsAdded; use App\Notifications\Messages\NewsAdded;
use App\Notifications\Messages\PirepAccepted; use App\Notifications\Messages\PirepAccepted;
use App\Notifications\Messages\PirepFiled;
use App\Notifications\Messages\PirepRejected; use App\Notifications\Messages\PirepRejected;
use App\Notifications\Messages\PirepSubmitted;
use App\Notifications\Messages\UserPending; use App\Notifications\Messages\UserPending;
use App\Notifications\Messages\UserRegistered; use App\Notifications\Messages\UserRegistered;
use App\Notifications\Messages\UserRejected; use App\Notifications\Messages\UserRejected;
@@ -18,7 +18,7 @@ return [
NewsAdded::class => ['mail'], NewsAdded::class => ['mail'],
PirepAccepted::class => ['mail'], PirepAccepted::class => ['mail'],
PirepRejected::class => ['mail'], PirepRejected::class => ['mail'],
PirepFiled::class => ['mail'], PirepSubmitted::class => ['mail'],
UserPending::class => ['mail'], UserPending::class => ['mail'],
UserRegistered::class => ['mail'], UserRegistered::class => ['mail'],
UserRejected::class => ['mail'], UserRejected::class => ['mail'],
+231 -373
View File
@@ -1,5 +1,5 @@
{ {
"name": "npm-proj-1644437580670-0.60402830570294548RynpF", "name": "phpvms",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
@@ -22,7 +22,7 @@
"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": "^6.0.30", "laravel-mix": "^6.0.25",
"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.*",
@@ -1752,9 +1752,9 @@
} }
}, },
"node_modules/@types/http-proxy": { "node_modules/@types/http-proxy": {
"version": "1.17.8", "version": "1.17.7",
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz",
"integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==",
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
} }
@@ -1801,9 +1801,9 @@
} }
}, },
"node_modules/@types/json-schema": { "node_modules/@types/json-schema": {
"version": "7.0.9", "version": "7.0.8",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg=="
}, },
"node_modules/@types/minimatch": { "node_modules/@types/minimatch": {
"version": "3.0.5", "version": "3.0.5",
@@ -2039,42 +2039,6 @@
"url": "https://github.com/sponsors/epoberezkin" "url": "https://github.com/sponsors/epoberezkin"
} }
}, },
"node_modules/ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dependencies": {
"ajv": "^8.0.0"
},
"peerDependencies": {
"ajv": "^8.0.0"
},
"peerDependenciesMeta": {
"ajv": {
"optional": true
}
}
},
"node_modules/ajv-formats/node_modules/ajv": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
"integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/ajv-keywords": { "node_modules/ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -2118,10 +2082,10 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/ansi-html-community": { "node_modules/ansi-html": {
"version": "0.0.8", "version": "0.0.7",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
"integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
"engines": [ "engines": [
"node >= 0.8.0" "node >= 0.8.0"
], ],
@@ -4045,14 +4009,6 @@
"node": ">= 10" "node": ">= 10"
} }
}, },
"node_modules/define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"engines": {
"node": ">=8"
}
},
"node_modules/define-properties": { "node_modules/define-properties": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -6212,20 +6168,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/has-tostringtag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dependencies": {
"has-symbols": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-value": { "node_modules/has-value": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -7220,12 +7162,11 @@
} }
}, },
"node_modules/is-arguments": { "node_modules/is-arguments": {
"version": "1.1.1", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
"integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
"dependencies": { "dependencies": {
"call-bind": "^1.0.2", "call-bind": "^1.0.0"
"has-tostringtag": "^1.0.0"
}, },
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
@@ -7797,6 +7738,11 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/killable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
"integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg=="
},
"node_modules/kind-of": { "node_modules/kind-of": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -7832,9 +7778,9 @@
} }
}, },
"node_modules/laravel-mix": { "node_modules/laravel-mix": {
"version": "6.0.30", "version": "6.0.25",
"resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.30.tgz", "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.25.tgz",
"integrity": "sha512-Y5EjdPVEqVMgnglzJvDuDEpUa2EouutS4ySrukZkBWh2EPPYM1iszu8TItvQ2J08N5BPIrYWh8McUbTwq6tcrQ==", "integrity": "sha512-SDpLGUnXJ8g0rvtiLljSTJSR6awj86M2Jd3MhbtT32TCgwXdtajVLF7Mv2blsPLixGHtynwZgi+UFlYQbquPLg==",
"dependencies": { "dependencies": {
"@babel/core": "^7.14.5", "@babel/core": "^7.14.5",
"@babel/plugin-proposal-object-rest-spread": "^7.14.5", "@babel/plugin-proposal-object-rest-spread": "^7.14.5",
@@ -7881,7 +7827,7 @@
"vue-style-loader": "^4.1.3", "vue-style-loader": "^4.1.3",
"webpack": "^5.38.1", "webpack": "^5.38.1",
"webpack-cli": "^4.7.2", "webpack-cli": "^4.7.2",
"webpack-dev-server": "4.1.1", "webpack-dev-server": "4.0.0-beta.3",
"webpack-merge": "^5.8.0", "webpack-merge": "^5.8.0",
"webpack-notifier": "^1.13.0", "webpack-notifier": "^1.13.0",
"webpackbar": "^5.0.0-3", "webpackbar": "^5.0.0-3",
@@ -7932,9 +7878,9 @@
} }
}, },
"node_modules/laravel-mix/node_modules/ansi-regex": { "node_modules/laravel-mix/node_modules/ansi-regex": {
"version": "5.0.1", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@@ -8035,26 +7981,18 @@
} }
}, },
"node_modules/laravel-mix/node_modules/http-proxy-middleware": { "node_modules/laravel-mix/node_modules/http-proxy-middleware": {
"version": "2.0.3", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz",
"integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==",
"dependencies": { "dependencies": {
"@types/http-proxy": "^1.17.8", "@types/http-proxy": "^1.17.5",
"http-proxy": "^1.18.1", "http-proxy": "^1.18.1",
"is-glob": "^4.0.1", "is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0", "is-plain-obj": "^3.0.0",
"micromatch": "^4.0.2" "micromatch": "^4.0.2"
}, },
"engines": { "engines": {
"node": ">=12.0.0" "node": ">=8.0.0"
},
"peerDependencies": {
"@types/express": "^4.17.13"
},
"peerDependenciesMeta": {
"@types/express": {
"optional": true
}
} }
}, },
"node_modules/laravel-mix/node_modules/import-local": { "node_modules/laravel-mix/node_modules/import-local": {
@@ -8120,16 +8058,15 @@
} }
}, },
"node_modules/laravel-mix/node_modules/open": { "node_modules/laravel-mix/node_modules/open": {
"version": "8.4.0", "version": "7.4.2",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
"integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
"dependencies": { "dependencies": {
"define-lazy-prop": "^2.0.0", "is-docker": "^2.0.0",
"is-docker": "^2.1.1", "is-wsl": "^2.1.1"
"is-wsl": "^2.2.0"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=8"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
@@ -8238,11 +8175,11 @@
} }
}, },
"node_modules/laravel-mix/node_modules/strip-ansi": { "node_modules/laravel-mix/node_modules/strip-ansi": {
"version": "6.0.1", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"dependencies": { "dependencies": {
"ansi-regex": "^5.0.1" "ansi-regex": "^5.0.0"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@@ -8314,35 +8251,37 @@
} }
}, },
"node_modules/laravel-mix/node_modules/webpack-dev-server": { "node_modules/laravel-mix/node_modules/webpack-dev-server": {
"version": "4.1.1", "version": "4.0.0-beta.3",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.1.1.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.3.tgz",
"integrity": "sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==", "integrity": "sha512-Ud7ieH15No/KiSdRuzk+2k+S4gSCR/N7m4hJhesDbKQEZy3P+NPXTXfsimNOZvbVX2TRuIEFB+VdLZFn8DwGwg==",
"dependencies": { "dependencies": {
"ansi-html-community": "^0.0.8", "ansi-html": "^0.0.7",
"bonjour": "^3.5.0", "bonjour": "^3.5.0",
"chokidar": "^3.5.1", "chokidar": "^3.5.1",
"colorette": "^1.2.2",
"compression": "^1.7.4", "compression": "^1.7.4",
"connect-history-api-fallback": "^1.6.0", "connect-history-api-fallback": "^1.6.0",
"del": "^6.0.0", "del": "^6.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"find-cache-dir": "^3.3.1",
"graceful-fs": "^4.2.6", "graceful-fs": "^4.2.6",
"html-entities": "^2.3.2", "html-entities": "^2.3.2",
"http-proxy-middleware": "^2.0.0", "http-proxy-middleware": "^1.3.1",
"internal-ip": "^6.2.0", "internal-ip": "^6.2.0",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.0",
"open": "^8.0.9", "is-absolute-url": "^3.0.3",
"killable": "^1.0.1",
"open": "^7.4.2",
"p-retry": "^4.5.0", "p-retry": "^4.5.0",
"portfinder": "^1.0.28", "portfinder": "^1.0.28",
"schema-utils": "^3.1.0", "schema-utils": "^3.0.0",
"selfsigned": "^1.10.11", "selfsigned": "^1.10.11",
"serve-index": "^1.9.1", "serve-index": "^1.9.1",
"sockjs": "^0.3.21", "sockjs": "^0.3.21",
"spdy": "^4.0.2", "spdy": "^4.0.2",
"strip-ansi": "^7.0.0", "strip-ansi": "^6.0.0",
"url": "^0.11.0", "url": "^0.11.0",
"webpack-dev-middleware": "^5.0.0", "webpack-dev-middleware": "^4.1.0",
"ws": "^8.1.0" "ws": "^7.4.5"
}, },
"bin": { "bin": {
"webpack-dev-server": "bin/webpack-dev-server.js" "webpack-dev-server": "bin/webpack-dev-server.js"
@@ -8351,7 +8290,7 @@
"node": ">= 12.13.0" "node": ">= 12.13.0"
}, },
"peerDependencies": { "peerDependencies": {
"webpack": "^4.37.0 || ^5.0.0" "webpack": "^4.0.0 || ^5.0.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"webpack-cli": { "webpack-cli": {
@@ -8359,37 +8298,12 @@
} }
} }
}, },
"node_modules/laravel-mix/node_modules/webpack-dev-server/node_modules/ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/laravel-mix/node_modules/webpack-dev-server/node_modules/strip-ansi": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
"integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/laravel-mix/node_modules/ws": { "node_modules/laravel-mix/node_modules/ws": {
"version": "8.5.0", "version": "7.5.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
"integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
"engines": { "engines": {
"node": ">=10.0.0" "node": ">=8.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"bufferutil": "^4.0.1", "bufferutil": "^4.0.1",
@@ -8607,6 +8521,17 @@
"semver": "bin/semver.js" "semver": "bin/semver.js"
} }
}, },
"node_modules/map-age-cleaner": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
"integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"dependencies": {
"p-defer": "^1.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/map-cache": { "node_modules/map-cache": {
"version": "0.2.2", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@@ -8676,10 +8601,33 @@
"node": ">= 0.6" "node": ">= 0.6"
} }
}, },
"node_modules/mem": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
"integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
"dependencies": {
"map-age-cleaner": "^0.1.3",
"mimic-fn": "^3.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/mem?sponsor=1"
}
},
"node_modules/mem/node_modules/mimic-fn": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
"integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/memfs": { "node_modules/memfs": {
"version": "3.4.1", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz",
"integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==",
"dependencies": { "dependencies": {
"fs-monkey": "1.0.3" "fs-monkey": "1.0.3"
}, },
@@ -9607,6 +9555,14 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
"integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
"engines": {
"node": ">=4"
}
},
"node_modules/p-event": { "node_modules/p-event": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
@@ -11376,14 +11332,6 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-main-filename": { "node_modules/require-main-filename": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
@@ -11708,9 +11656,9 @@
"integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==" "integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw=="
}, },
"node_modules/selfsigned": { "node_modules/selfsigned": {
"version": "1.10.14", "version": "1.10.11",
"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz",
"integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==",
"dependencies": { "dependencies": {
"node-forge": "^0.10.0" "node-forge": "^0.10.0"
} }
@@ -13705,18 +13653,19 @@
} }
}, },
"node_modules/webpack-dev-middleware": { "node_modules/webpack-dev-middleware": {
"version": "5.3.1", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz",
"integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==",
"dependencies": { "dependencies": {
"colorette": "^2.0.10", "colorette": "^1.2.2",
"memfs": "^3.4.1", "mem": "^8.1.1",
"mime-types": "^2.1.31", "memfs": "^3.2.2",
"mime-types": "^2.1.30",
"range-parser": "^1.2.1", "range-parser": "^1.2.1",
"schema-utils": "^4.0.0" "schema-utils": "^3.0.0"
}, },
"engines": { "engines": {
"node": ">= 12.13.0" "node": ">= v10.23.3"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@@ -13726,54 +13675,17 @@
"webpack": "^4.0.0 || ^5.0.0" "webpack": "^4.0.0 || ^5.0.0"
} }
}, },
"node_modules/webpack-dev-middleware/node_modules/ajv": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
"integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/webpack-dev-middleware/node_modules/ajv-keywords": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"dependencies": {
"fast-deep-equal": "^3.1.3"
},
"peerDependencies": {
"ajv": "^8.8.2"
}
},
"node_modules/webpack-dev-middleware/node_modules/colorette": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
"integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g=="
},
"node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/webpack-dev-middleware/node_modules/schema-utils": { "node_modules/webpack-dev-middleware/node_modules/schema-utils": {
"version": "4.0.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
"integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.9", "@types/json-schema": "^7.0.8",
"ajv": "^8.8.0", "ajv": "^6.12.5",
"ajv-formats": "^2.1.1", "ajv-keywords": "^3.5.2"
"ajv-keywords": "^5.0.0"
}, },
"engines": { "engines": {
"node": ">= 12.13.0" "node": ">= 10.13.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@@ -15509,9 +15421,9 @@
} }
}, },
"@types/http-proxy": { "@types/http-proxy": {
"version": "1.17.8", "version": "1.17.7",
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz",
"integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==",
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
} }
@@ -15558,9 +15470,9 @@
} }
}, },
"@types/json-schema": { "@types/json-schema": {
"version": "7.0.9", "version": "7.0.8",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg=="
}, },
"@types/minimatch": { "@types/minimatch": {
"version": "3.0.5", "version": "3.0.5",
@@ -15775,32 +15687,6 @@
"uri-js": "^4.2.2" "uri-js": "^4.2.2"
} }
}, },
"ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"requires": {
"ajv": "^8.0.0"
},
"dependencies": {
"ajv": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
"integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
}
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
}
}
},
"ajv-keywords": { "ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -15832,10 +15718,10 @@
} }
} }
}, },
"ansi-html-community": { "ansi-html": {
"version": "0.0.8", "version": "0.0.7",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
"integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
}, },
"ansi-regex": { "ansi-regex": {
"version": "4.1.0", "version": "4.1.0",
@@ -17324,11 +17210,6 @@
"execa": "^5.0.0" "execa": "^5.0.0"
} }
}, },
"define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
"integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
},
"define-properties": { "define-properties": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -19000,14 +18881,6 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
}, },
"has-tostringtag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"requires": {
"has-symbols": "^1.0.2"
}
},
"has-value": { "has-value": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -19764,12 +19637,11 @@
} }
}, },
"is-arguments": { "is-arguments": {
"version": "1.1.1", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
"integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
"requires": { "requires": {
"call-bind": "^1.0.2", "call-bind": "^1.0.0"
"has-tostringtag": "^1.0.0"
} }
}, },
"is-arrayish": { "is-arrayish": {
@@ -20169,6 +20041,11 @@
"resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
"integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==" "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ=="
}, },
"killable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
"integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg=="
},
"kind-of": { "kind-of": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -20198,9 +20075,9 @@
} }
}, },
"laravel-mix": { "laravel-mix": {
"version": "6.0.30", "version": "6.0.25",
"resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.30.tgz", "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.25.tgz",
"integrity": "sha512-Y5EjdPVEqVMgnglzJvDuDEpUa2EouutS4ySrukZkBWh2EPPYM1iszu8TItvQ2J08N5BPIrYWh8McUbTwq6tcrQ==", "integrity": "sha512-SDpLGUnXJ8g0rvtiLljSTJSR6awj86M2Jd3MhbtT32TCgwXdtajVLF7Mv2blsPLixGHtynwZgi+UFlYQbquPLg==",
"requires": { "requires": {
"@babel/core": "^7.14.5", "@babel/core": "^7.14.5",
"@babel/plugin-proposal-object-rest-spread": "^7.14.5", "@babel/plugin-proposal-object-rest-spread": "^7.14.5",
@@ -20247,7 +20124,7 @@
"vue-style-loader": "^4.1.3", "vue-style-loader": "^4.1.3",
"webpack": "^5.38.1", "webpack": "^5.38.1",
"webpack-cli": "^4.7.2", "webpack-cli": "^4.7.2",
"webpack-dev-server": "4.1.1", "webpack-dev-server": "4.0.0-beta.3",
"webpack-merge": "^5.8.0", "webpack-merge": "^5.8.0",
"webpack-notifier": "^1.13.0", "webpack-notifier": "^1.13.0",
"webpackbar": "^5.0.0-3", "webpackbar": "^5.0.0-3",
@@ -20275,9 +20152,9 @@
"requires": {} "requires": {}
}, },
"ansi-regex": { "ansi-regex": {
"version": "5.0.1", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
}, },
"ansi-styles": { "ansi-styles": {
"version": "4.3.0", "version": "4.3.0",
@@ -20345,11 +20222,11 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
}, },
"http-proxy-middleware": { "http-proxy-middleware": {
"version": "2.0.3", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz",
"integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==",
"requires": { "requires": {
"@types/http-proxy": "^1.17.8", "@types/http-proxy": "^1.17.5",
"http-proxy": "^1.18.1", "http-proxy": "^1.18.1",
"is-glob": "^4.0.1", "is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0", "is-plain-obj": "^3.0.0",
@@ -20398,13 +20275,12 @@
} }
}, },
"open": { "open": {
"version": "8.4.0", "version": "7.4.2",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
"integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
"requires": { "requires": {
"define-lazy-prop": "^2.0.0", "is-docker": "^2.0.0",
"is-docker": "^2.1.1", "is-wsl": "^2.1.1"
"is-wsl": "^2.2.0"
} }
}, },
"p-limit": { "p-limit": {
@@ -20473,11 +20349,11 @@
} }
}, },
"strip-ansi": { "strip-ansi": {
"version": "6.0.1", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"requires": { "requires": {
"ansi-regex": "^5.0.1" "ansi-regex": "^5.0.0"
} }
}, },
"supports-color": { "supports-color": {
@@ -20517,56 +20393,43 @@
} }
}, },
"webpack-dev-server": { "webpack-dev-server": {
"version": "4.1.1", "version": "4.0.0-beta.3",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.1.1.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.3.tgz",
"integrity": "sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==", "integrity": "sha512-Ud7ieH15No/KiSdRuzk+2k+S4gSCR/N7m4hJhesDbKQEZy3P+NPXTXfsimNOZvbVX2TRuIEFB+VdLZFn8DwGwg==",
"requires": { "requires": {
"ansi-html-community": "^0.0.8", "ansi-html": "^0.0.7",
"bonjour": "^3.5.0", "bonjour": "^3.5.0",
"chokidar": "^3.5.1", "chokidar": "^3.5.1",
"colorette": "^1.2.2",
"compression": "^1.7.4", "compression": "^1.7.4",
"connect-history-api-fallback": "^1.6.0", "connect-history-api-fallback": "^1.6.0",
"del": "^6.0.0", "del": "^6.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"find-cache-dir": "^3.3.1",
"graceful-fs": "^4.2.6", "graceful-fs": "^4.2.6",
"html-entities": "^2.3.2", "html-entities": "^2.3.2",
"http-proxy-middleware": "^2.0.0", "http-proxy-middleware": "^1.3.1",
"internal-ip": "^6.2.0", "internal-ip": "^6.2.0",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.0",
"open": "^8.0.9", "is-absolute-url": "^3.0.3",
"killable": "^1.0.1",
"open": "^7.4.2",
"p-retry": "^4.5.0", "p-retry": "^4.5.0",
"portfinder": "^1.0.28", "portfinder": "^1.0.28",
"schema-utils": "^3.1.0", "schema-utils": "^3.0.0",
"selfsigned": "^1.10.11", "selfsigned": "^1.10.11",
"serve-index": "^1.9.1", "serve-index": "^1.9.1",
"sockjs": "^0.3.21", "sockjs": "^0.3.21",
"spdy": "^4.0.2", "spdy": "^4.0.2",
"strip-ansi": "^7.0.0", "strip-ansi": "^6.0.0",
"url": "^0.11.0", "url": "^0.11.0",
"webpack-dev-middleware": "^5.0.0", "webpack-dev-middleware": "^4.1.0",
"ws": "^8.1.0" "ws": "^7.4.5"
},
"dependencies": {
"ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
},
"strip-ansi": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
"integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
"requires": {
"ansi-regex": "^6.0.1"
}
}
} }
}, },
"ws": { "ws": {
"version": "8.5.0", "version": "7.5.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
"integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
"requires": {} "requires": {}
} }
} }
@@ -20742,6 +20605,14 @@
} }
} }
}, },
"map-age-cleaner": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
"integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"requires": {
"p-defer": "^1.0.0"
}
},
"map-cache": { "map-cache": {
"version": "0.2.2", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@@ -20796,10 +20667,26 @@
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
}, },
"mem": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
"integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
"requires": {
"map-age-cleaner": "^0.1.3",
"mimic-fn": "^3.1.0"
},
"dependencies": {
"mimic-fn": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
"integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ=="
}
}
},
"memfs": { "memfs": {
"version": "3.4.1", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz",
"integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==",
"requires": { "requires": {
"fs-monkey": "1.0.3" "fs-monkey": "1.0.3"
} }
@@ -21518,6 +21405,11 @@
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true "dev": true
}, },
"p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
"integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
},
"p-event": { "p-event": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
@@ -22803,11 +22695,6 @@
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
}, },
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
},
"require-main-filename": { "require-main-filename": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
@@ -23037,9 +22924,9 @@
"integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==" "integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw=="
}, },
"selfsigned": { "selfsigned": {
"version": "1.10.14", "version": "1.10.11",
"resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz",
"integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==",
"requires": { "requires": {
"node-forge": "^0.10.0" "node-forge": "^0.10.0"
} }
@@ -24690,55 +24577,26 @@
} }
}, },
"webpack-dev-middleware": { "webpack-dev-middleware": {
"version": "5.3.1", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz",
"integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==",
"requires": { "requires": {
"colorette": "^2.0.10", "colorette": "^1.2.2",
"memfs": "^3.4.1", "mem": "^8.1.1",
"mime-types": "^2.1.31", "memfs": "^3.2.2",
"mime-types": "^2.1.30",
"range-parser": "^1.2.1", "range-parser": "^1.2.1",
"schema-utils": "^4.0.0" "schema-utils": "^3.0.0"
}, },
"dependencies": { "dependencies": {
"ajv": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
"integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
}
},
"ajv-keywords": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"requires": {
"fast-deep-equal": "^3.1.3"
}
},
"colorette": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
"integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g=="
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"schema-utils": { "schema-utils": {
"version": "4.0.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
"integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"requires": { "requires": {
"@types/json-schema": "^7.0.9", "@types/json-schema": "^7.0.8",
"ajv": "^8.8.0", "ajv": "^6.12.5",
"ajv-formats": "^2.1.1", "ajv-keywords": "^3.5.2"
"ajv-keywords": "^5.0.0"
} }
} }
} }
+1 -1
View File
@@ -27,7 +27,7 @@
"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": "^6.0.30", "laravel-mix": "^6.0.25",
"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.*",
-12
View File
@@ -1,12 +0,0 @@
<?php
return [
'status' => [
'active' => 'Actif',
'maintenance' => 'Maintenance',
'stored' => 'Stocké',
'retired' => 'Retiré',
'scrapped' => 'Démantelé',
'written' => 'Désaffecté',
],
];
-9
View File
@@ -1,9 +0,0 @@
<?php
return [
'ident' => 'Identification',
'home' => 'Aéroport d\'Attache',
'current' => 'Aéroport Actuel',
'departure' => 'Aéroport de Départ',
'arrival' => 'Aéroport d\'Arrivée',
];
-24
View File
@@ -1,24 +0,0 @@
<?php
return [
'failed' => 'Ces informations d\'identification ne correspondent pas.',
'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.',
'password' => 'Mot de Passe',
'createaccount' => 'Créer un Compte',
'forgotpassword' => 'Mot de Passe Oublié',
'fullname' => 'Nom Complet',
'emailaddress' => 'Adresse Email',
'fillcaptcha' => 'Remplissez le captcha',
'tocaccept' => 'En vous inscrivant, vous accezptez les Conditions Générales d\'Utilisations.',
'register' => 'S\'inscrire',
'registrationpending' => 'Inscription en attente',
'pendingmessage' => 'Votre inscription est en attente d\'approbation. Veuillez vérifier vos emails!',
'registrationsubmitted' => 'Inscription Soumise',
'registrationconfirmation' => 'Confirmation d\'inscription',
'confirmationmessage' => 'Votre demande a été soumise. Elle nécessite l\'approbation d\'un administrateur. Une fois qu\'un administrateur aura examiné votre demande, vous recevrez un email de confirmation.',
'registrationdenied' => 'Inscription Refusée',
'deniedmessage' => 'Votre inscription a été refusée. Veuillez contacter un administrateur.',
'accountsuspended' => 'Compte suspendu',
'suspendedmessage' => 'Votre compte a été suspendu. Veuillez contacter un administrateur.',
'transferhours' => 'Heures transférées',
];
-62
View File
@@ -1,62 +0,0 @@
<?php
return [
'dashboard' => 'Tableau de bord',
'administration' => 'Administration',
'flight' => 'Vol|Vols',
'livemap' => 'Carte des vols',
'pilot' => 'Pilote|Pilotes',
'pirep' => 'PIREP|PIREPs',
'newestpilots' => 'Nouveaux Pilotes',
'profile' => 'Profil',
'email' => 'Email',
'pilot_id' => 'Pilote ID',
'register' => 'S\'inscrire',
'login' => 'Se connecter',
'logout' => 'Se déconnecter',
'timezone' => 'Fuseau horraire',
'country' => 'Pays',
'download' => 'Téléchargement|Téléchargements',
'from' => 'Depuis',
'to' => 'Vers',
'state' => 'Etat',
'status' => 'Statut',
'departure' => 'Départ',
'arrival' => 'Arrivée',
'aircraft' => 'Avion',
'airline' => 'Compagnie',
'subfleet' => 'Sous-Flotte',
'distance' => 'Distance',
'fuel' => 'Carburant',
'metar' => 'METAR',
'hour' => 'Heure|Heures',
'minute' => 'Minute|Minutes',
'note' => 'Note|Notes',
'field' => 'Champ|Champs',
'name' => 'Nom',
'value' => 'Valeur|Valeurs',
'remark' => 'Remarque|Remarques',
'find' => 'Rechercher',
'reset' => 'Réinitialiser',
'submit' => 'Envoyer',
'edit' => 'Editer',
'close' => 'Fermer',
'whoops' => 'Whoops',
'hello' => 'Bonjour',
'regards' => 'Cordialement',
'rightsreserved' => 'Tous droits réservés',
'active' => 'Actif',
'inactive' => 'Inactif',
'yes' => 'Oui',
'no' => 'Non',
'or' => 'ou',
'days' => [
'mon' => 'Lundi',
'tues' => 'Mardi',
'wed' => 'Mercredi',
'thurs' => 'Jeudi',
'fri' => 'Vendredi',
'sat' => 'Samedi',
'sun' => 'Dimanche',
],
];
-11
View File
@@ -1,11 +0,0 @@
<?php
return [
'totalhours' => 'Heures Totales',
'yourbalance' => 'Votre Solde',
'yourlastreport' => 'Votre dernier Rapport',
'noreportsyet' => 'Aucun Rapport',
'fileonenow' => 'Créez en un maintenant',
'weatherat' => 'Météo à :ICAO',
'recentreports' => 'Rapports Récents',
];
-5
View File
@@ -1,5 +0,0 @@
<?php
return [
'none' => 'Aucun téléchargement!',
];
-5
View File
@@ -1,5 +0,0 @@
<?php
return [
'buttontroubles' => 'Si vous avez des difficultés à cliquer sur le bouton ":actiontext", copiez et collez cette URL ci-dessous dans votre navigateur web:',
];
-16
View File
@@ -1,16 +0,0 @@
<?php
return [
401 => [
'title' => 'Accès Non Autorisé',
'message' => 'Embarrassant, vous n\'êtes pas autorisé à accéder à cette page ou à exécuter cette fonction. Cliquez <a href=":link">ici</a> pour revenir à la page d\'accueil.',
],
404 => [
'title' => 'Page Non Trouvée',
'message' => 'Embarrassant, la page demandée n\'existe pas. Cliquez <a href=":link">ici</a> pour revenir à la page accueil.',
],
503 => [
'title' => 'Erreur Interne',
'message' => 'Une Erreur s\'est Produite',
],
];
-9
View File
@@ -1,9 +0,0 @@
<?php
return [
'type' => [
'flight' => 'Vol',
'daily' => 'Quotidien',
'monthly' => 'Mensuel',
],
];
-42
View File
@@ -1,42 +0,0 @@
<?php
return [
'flightnumber' => 'Numéro de Vol',
'flighttime' => 'Temps de Vol',
'flighttype' => 'Type de Vol',
'flighthours' => 'Heures de Vol',
'code' => 'Code',
'callsign' => 'Callsign',
'route' => 'Route',
'mybid' => 'Mes réservations',
'search' => 'Rechercher',
'addremovebid' => 'Ajouter/Supprimer une Réservation',
'bidremoved' => 'Votre réservation a été supprimée.',
'bidadded' => 'Votre réservation a été ajoutée.',
'dep' => 'Dép',
'arr' => 'Arr',
'level' => 'Niveau',
'alternateairport' => 'Aéroport Alternatif',
'inbound' => 'Vols à l\'arrivée',
'outbound' => 'Vols au départ',
'none' => 'Auncun vols trouvé.',
'departuretime' => 'Heure de Départ',
'arrivaltime' => 'Heure d\'Arrivée',
'type' => [
'pass_scheduled' => 'Passager (Prévu)',
'pass_addtl' => 'Passager (Additionnel)',
'charter_pass_only' => 'Passager (Charter)',
'charter_special' => 'Passager (Charter Spécial)',
'cargo_scheduled' => 'Cargo (Prévu)',
'addtl_cargo_mail' => 'Cargo (Additionnel)',
'charter_cargo' => 'Cargo (Charter)',
'mail_service' => 'Service Postal',
'special_vip' => 'Vol VIP',
'ambulance' => 'Ambulance',
'training_flight' => 'Entrainement',
'military' => 'Militaire',
'positioning' => 'Repositionement',
'technical_test' => 'Test Technique',
'technical_stop' => 'Arrêt Technique',
],
];
-8
View File
@@ -1,8 +0,0 @@
<?php
return [
'welcome' => [
'title' => 'Bienvenue!',
'message' => 'Bienvenue chez :appname',
],
];
-245
View File
@@ -1,245 +0,0 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'phpVMS Installateur',
'next' => 'Etape suivante',
'back' => 'Etape Précédente',
'finish' => 'Installation',
'forms' => [
'errorTitle' => 'Les erreurs suivantes se sont produites:',
],
/*
*
* Home page translations.
*
*/
'welcome' => [
'templateTitle' => 'Bienvenue',
'title' => 'phpVMS Installateur',
'message' => 'Assistant installation.',
'next' => 'Vérifier les exigences',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'templateTitle' => 'Step 1 | Exigences du serveur',
'title' => 'Exigences du serveur',
'next' => 'Vérifier les permissions',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'templateTitle' => 'Step 2 | Permissions',
'title' => 'Permissions',
'next' => 'Configurer environnement',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'menu' => [
'templateTitle' => 'Step 3 | Paramétrage environnement',
'title' => 'Paramétrage environnement',
'desc' => 'Veuillez choisir comment vous voulez configurer le fichier <code>.env</code> application.',
'wizard-button' => 'Configuration assistant de formulaire',
'classic-button' => 'Éditeur de texte classique',
],
'wizard' => [
'templateTitle' => 'Step 3 | Paramètres environnement | Assistant guide',
'title' => 'Guide <code>.env</code> Assistant',
'tabs' => [
'environment' => 'Environnement',
'database' => 'Database',
'application' => 'Application',
],
'form' => [
'name_required' => 'Un nom environnement est requis.',
'app_name_label' => 'App Nom',
'app_name_placeholder' => 'App Nom',
'app_environment_label' => 'App Environnement',
'app_environment_label_local' => 'Local',
'app_environment_label_developement' => 'Développement',
'app_environment_label_qa' => 'Qa',
'app_environment_label_production' => 'Production',
'app_environment_label_other' => 'Autre',
'app_environment_placeholder_other' => 'Entrez votre environnement...',
'app_debug_label' => 'App Debug',
'app_debug_label_true' => 'True',
'app_debug_label_false' => 'False',
'app_log_level_label' => 'App Log Level',
'app_log_level_label_debug' => 'debug',
'app_log_level_label_info' => 'info',
'app_log_level_label_notice' => 'notice',
'app_log_level_label_warning' => 'warning',
'app_log_level_label_error' => 'error',
'app_log_level_label_critical' => 'critical',
'app_log_level_label_alert' => 'alert',
'app_log_level_label_emergency' => 'emergency',
'app_url_label' => 'App Url',
'app_url_placeholder' => 'App Url',
'db_connection_label' => 'Connexion à la base de données',
'db_connection_label_mysql' => 'mysql',
'db_connection_label_sqlite' => 'sqlite',
'db_connection_label_pgsql' => 'pgsql',
'db_connection_label_sqlsrv' => 'sqlsrv',
'db_host_label' => 'Database Host',
'db_host_placeholder' => 'Database Host',
'db_port_label' => 'Database Port',
'db_port_placeholder' => 'Database Port',
'db_name_label' => 'Database Name',
'db_name_placeholder' => 'Database Name',
'db_username_label' => 'Database User Name',
'db_username_placeholder' => 'Database User Name',
'db_password_label' => 'Database Password',
'db_password_placeholder' => 'Database Password',
'app_tabs' => [
'more_info' => 'More Info',
'broadcasting_title' => 'Broadcasting, Caching, Session, &amp; Queue',
'broadcasting_label' => 'Broadcast Driver',
'broadcasting_placeholder' => 'Broadcast Driver',
'cache_label' => 'Cache Driver',
'cache_placeholder' => 'Cache Driver',
'session_label' => 'Session Driver',
'session_placeholder' => 'Session Driver',
'queue_label' => 'Queue Driver',
'queue_placeholder' => 'Queue Driver',
'redis_label' => 'Redis Driver',
'redis_host' => 'Redis Host',
'redis_password' => 'Redis Password',
'redis_port' => 'Redis Port',
'mail_label' => 'Mail',
'mail_driver_label' => 'Mail Driver',
'mail_driver_placeholder' => 'Mail Driver',
'mail_host_label' => 'Mail Host',
'mail_host_placeholder' => 'Mail Host',
'mail_port_label' => 'Mail Port',
'mail_port_placeholder' => 'Mail Port',
'mail_username_label' => 'Mail Username',
'mail_username_placeholder' => 'Mail Username',
'mail_password_label' => 'Mail Password',
'mail_password_placeholder' => 'Mail Password',
'mail_encryption_label' => 'Mail Encryption',
'mail_encryption_placeholder' => 'Mail Encryption',
'pusher_label' => 'Pusher',
'pusher_app_id_label' => 'Pusher App Id',
'pusher_app_id_palceholder' => 'Pusher App Id',
'pusher_app_key_label' => 'Pusher App Key',
'pusher_app_key_palceholder' => 'Pusher App Key',
'pusher_app_secret_label' => 'Pusher App Secret',
'pusher_app_secret_palceholder' => 'Pusher App Secret',
],
'buttons' => [
'setup_database' => 'Configuration de la base de données',
'setup_application' => 'Configuration application',
'install' => 'Installation',
],
],
],
'classic' => [
'templateTitle' => 'Step 3 | Paramètres environnement | Éditeur classique',
'title' => 'Éditeur environnement classique',
'save' => 'Savegarde .env',
'back' => 'Utiliser assistant de formulaire',
'install' => 'Savegarder et Installer',
],
'success' => 'Les paramètres de votre fichier .env ont été enregistrés.',
'errors' => 'Impossible enregistrer le fichier .env, veuillez le créer manuellement.',
],
'install' => 'Installation',
/*
*
* Installed Log translations.
*
*/
'installed' => [
'success_log_message' => 'Laravel Installer a été installé avec succès sur ',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Installation terminée',
'templateTitle' => 'Installation terminée',
'finished' => 'Cette application a été installée avec succès.',
'migration' => 'Migration &amp; Sortie de la console amorçage:',
'console' => 'Sortie de la console application:',
'log' => 'Entrée du journal installation :',
'env' => 'Final .env File:',
'exit' => 'Cliquez ici pour sortir',
],
/*
*
* Update specific translations
*
*/
'updater' => [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Updater',
/*
*
* Welcome page translations for update feature.
*
*/
'welcome' => [
'title' => 'Bienvenue dans assistant de mise à jour',
'message' => 'Bienvenue dans assistant de mise à jour.',
],
/*
*
* Welcome page translations for update feature.
*
*/
'overview' => [
'title' => 'Vue ensemble',
'message' => 'Il y a 1 mise à jour.|Il y a :number de mises à jour.',
'install_updates' => 'Installer les mises à jour',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Terminé',
'finished' => 'La base de données application a été mise à jour avec succès.',
'exit' => 'Cliquez ici pour quitter',
],
'log' => [
'success_message' => 'Laravel Installer a été mis à jour avec succès sur ',
],
],
];
-18
View File
@@ -1,18 +0,0 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Précédent',
'next' => 'Suivant &raquo;',
];
-21
View File
@@ -1,21 +0,0 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Les mots de passe doivent comporter au moins six caractères et correspondre à la confirmation.',
'reset' => 'Votre mot de passe a été réinitialisé!',
'sent' => 'Nous vous avons envoyé par email votre lien de réinitialisation de mot de passe!',
'token' => 'Ce jeton de réinitialisation de mot de passe est invalide.',
'user' => 'Nous ne trouvons pas d\'utilisateurs avec cette adresse email.',
'confirm' => 'Confirmer votre mot de passe.',
];
-72
View File
@@ -1,72 +0,0 @@
<?php
return [
'newflightreport' => 'Nouveau Rapport de vol',
'editflightreport' => 'Editer le Rapport de vol',
'savepirep' => 'Sauvegarder le PIREP',
'submitpirep' => 'Envoyer le PIREP',
'fileflightreport' => 'Remplir un Nouveau Rapport',
'filenewpirep' => 'Remplir un Nouveau PIREP',
'newpirep' => 'Nouveau PIREP',
'pilotreport' => 'Rapport des Pilotes|Rapports des Pilotes',
'arrived' => 'Arrivé',
'source' => 'Source',
'flightlog' => 'Carnet de vol',
'filedroute' => 'Route Déposée',
'filedon' => 'Déposé le',
'fare' => 'Tarif|Tarifs',
'class' => 'Classe',
'count' => 'Comte',
'flighttime' => 'Temps de vol',
'flightlevel' => 'Niveau de vol',
'fieldsreadonly' => 'Une fois qu\'un PIREP est envoyé, certains champs passent en lecture seul.',
'flightinformations' => 'Informations du vol',
'flightident' => 'Numéro/Code/Etape du vol',
'block_fuel' => 'Carburant emporté',
'fuel_used' => 'Carburant utilisé',
'codeoptional' => 'Code (optionnel)',
'legoptional' => 'Etape (optionnel)',
'deparrinformations' => 'Information sur le Départ/l\'Arrivée',
'aircraftinformations' => 'Information sur l\'Avion',
'dateflown' => 'Date du vol',
'deletepirep' => 'Supprimer le PIREP',
'submitted' => 'Envoyé',
'source_types' => [
'manual' => 'Manuel',
'acars' => 'ACARS',
],
'state' => [
'accepted' => 'Accepté',
'pending' => 'En attente de validation',
'rejected' => 'Rejeté',
'in_progress' => 'En Cours',
'cancelled' => 'Annulé',
'deleted' => 'Supprimé',
'draft' => 'Brouillon',
'paused' => 'En Pause',
],
'status' => [
'initialized' => 'Initié',
'scheduled' => 'Planifé',
'boarding' => 'Embarquement',
'ready_start' => 'Prêt pour le démarrage',
'push_tow' => 'Repoussage/Remorquage',
'departed' => 'Parti',
'ready_deice' => 'Prêt pour le dégivrage',
'deicing' => 'Dégivrage en cours',
'ground_ret' => 'Retour au sol',
'taxi' => 'Roulage',
'takeoff' => 'Décolalge',
'initial_clb' => 'Montée initiale',
'enroute' => 'En Route',
'diverted' => 'Dérouté',
'approach' => 'Approche',
'final_appr' => 'Approche Finale',
'landing' => 'Atterrissage',
'landed' => 'Atterrit',
'arrived' => 'Arrivé',
'cancelled' => 'Annulé',
'emerg_decent' => 'Descente d\'Urgence',
'paused' => 'En pause',
],
];
-20
View File
@@ -1,20 +0,0 @@
<?php
return [
'avatarresize' => 'Cette avatar sera redimensionné en :width x :height pixels',
'newapikey' => 'Nouvelle clé d\'API',
'your-profile' => 'Mon Profil',
'your-awards' => 'Mes Distinctions',
'apikey' => 'Clé d\'API',
'apikey-show' => 'Afficher la clé',
'dontshare' => 'Ne pas partager!',
'changepassword' => 'Changer le mot de passe',
'newpassword' => 'Nouveau mot de passe',
'avatar' => 'Avatar',
'updateprofile' => 'Modifier le Profil',
'editprofile' => 'Editer le Profil',
'edityourprofile' => 'Editer mon Profil',
'transferhours' => 'Heures Transférées',
'opt-in' => 'Opt-In',
'opt-in-descrip' => 'Oui, incluez-moi dans les emails non administratifs.',
];
-5
View File
@@ -1,5 +0,0 @@
<?php
return [
'title' => 'Conditions Générales d\'Utilisations',
];
-13
View File
@@ -1,13 +0,0 @@
<?php
return [
'location' => 'Localisation',
'state' => [
'pending' => 'En attente',
'active' => 'Actif',
'rejected' => 'Rejeté',
'on_leave' => 'En vacances',
'suspended' => 'Suspendu',
'deleted' => 'Supprimé',
],
];
-119
View File
@@ -1,119 +0,0 @@
<?php
return [
/*
* Validation Language Lines
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The ":attribute" is required.',
'image' => 'The :attribute must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The :attribute must be an integer.',
'ip' => 'The :attribute must be a valid IP address.',
'json' => 'The :attribute must be a valid JSON string.',
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'not_in' => 'The selected :attribute is invalid.',
'numeric' => 'The :attribute must be a number.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The ":attribute" field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.',
/*
* Custom Validation Language Lines
*/
'custom' => [
'airline_id' => [
'required' => 'Une Compagnie est requise',
'exists' => 'Cette compagnie existe pas',
],
'aircraft_id' => [
'required' => 'Un Avion est requis',
'exists' => 'Cet Avion existe pas',
],
'arr_airport_id' => [
'required' => 'Un Aéroprt arrivée est requis',
],
'dpt_airport_id' => [
'required' => 'Un Aéroprt de départ est requis',
],
'flight_time' => [
'required' => 'Le temps de vol, en minutes, est requis',
'integer' => 'Le temps de vol, en minutes, est requis',
],
'planned_flight_time' => [
'required' => 'Le temps de vol, en minutes, est requis',
'integer' => 'Le temps de vol, en minutes, est requis',
],
'source_name' => [
'required' => 'La source de PIREP est requise',
],
'g-recaptcha-response' => [
'required' => 'Veuillez vérifier que vous êtes pas un robot.',
'captcha' => 'Erreur Captcha ! Essayez à nouveau plus tard ou contactez un administrateur du site.',
],
],
/*
* Custom Validation Attributes
*/
'attributes' => [],
];
-34
View File
@@ -1,34 +0,0 @@
<?php
return [
'latestnews' => [
'news' => 'Actualités',
'nonewsfound' => 'Aucune actualité trouvée',
],
'livemap' => [
'groundspeed' => 'Vitesse Sol',
'altitude' => 'Altitude',
'heading' => 'Cap',
'distance' => 'Distance',
'noflights' => 'Il n\'y a pas de vols.',
'gs' => 'GS',
],
'weather' => [
'nometar' => 'METAR/TAF n\'ont pas pu être récupérés',
'conditions' => 'Conditions',
'visibility' => 'Visibilité',
'temp' => 'Température',
'humidity' => 'Humidité',
'dewpoint' => 'Point de rosée',
'barometer' => 'Baromètre',
'clouds' => 'Nuages',
'wind' => 'Vent',
'remarks' => 'Remarques',
'guststo' => 'Rafales à',
'updated' => 'Mis à jour il y a ',
'hrago' => 'heure|heures',
'minago' => 'minute|minutes',
],
];
+5 -19
View File
@@ -2,26 +2,12 @@
@section('title', 'Users') @section('title', 'Users')
@section('actions') @section('actions')
<li> <li><a href="{{ route('admin.userfields.index') }}">
<a href="{{ route('admin.userfields.index') }}"></i>Profile Fields</a> <i class="ti-user"></i>Profile Fields</a>
</li> </li>
<li>
<a href="{{ route('admin.users.index') }}?state=0">@lang(UserState::label(UserState::PENDING))</a> <li><a href="{{ route('admin.users.index') }}?search=state:0">
</li> <i class="ti-user"></i>@lang(UserState::label(UserState::PENDING))</a>
<li>
<a href="{{ route('admin.users.index') }}?state=1">@lang(UserState::label(UserState::ACTIVE))</a>
</li>
<li>
<a href="{{ route('admin.users.index') }}?state=2">@lang(UserState::label(UserState::REJECTED))</a>
</li>
<li>
<a href="{{ route('admin.users.index') }}?state=3">@lang(UserState::label(UserState::ON_LEAVE))</a>
</li>
<li>
<a href="{{ route('admin.users.index') }}?state=4">@lang(UserState::label(UserState::SUSPENDED))</a>
</li>
<li>
<a href="{{ route('admin.users.index') }}?state=5">@lang(UserState::label(UserState::DELETED))</a>
</li> </li>
@endsection @endsection
@@ -10,6 +10,12 @@
{{ Form::label('email', 'Email:') }} {{ Form::label('email', 'Email:') }}
{{ Form::text('email', null, ['class' => 'form-control']) }} {{ Form::text('email', null, ['class' => 'form-control']) }}
&nbsp; &nbsp;
{{--{{ Form::label('dep_icao', 'Departure:') }}
{{ Form::select('dep_icao', $airports, null , ['class' => 'form-control']) }}
&nbsp;
{{ Form::label('arr_icao', 'Arrival:') }}
{{ Form::select('arr_icao', $airports, null , ['class' => 'form-control']) }}
&nbsp;--}}
{{ Form::submit('find', ['class' => 'btn btn-primary']) }} {{ Form::submit('find', ['class' => 'btn btn-primary']) }}
&nbsp; &nbsp;
<a href="{{ route('admin.users.index') }}">clear</a> <a href="{{ route('admin.users.index') }}">clear</a>
-14
View File
@@ -1,14 +0,0 @@
{
"symfony/flex": {
"version": "1.18",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "1.0",
"ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e"
},
"files": [
".env"
]
}
}
+8 -8
View File
@@ -14,12 +14,13 @@ use App\Models\Pirep;
use App\Models\Rank; use App\Models\Rank;
use App\Models\User; use App\Models\User;
use App\Notifications\Messages\PirepAccepted; use App\Notifications\Messages\PirepAccepted;
use App\Notifications\Messages\PirepFiled; use App\Notifications\Messages\PirepSubmitted;
use App\Repositories\SettingRepository; use App\Repositories\SettingRepository;
use App\Services\AircraftService; use App\Services\AircraftService;
use App\Services\BidService; use App\Services\BidService;
use App\Services\FlightService; use App\Services\FlightService;
use App\Services\PirepService; use App\Services\PirepService;
use App\Services\UserService;
use App\Support\Units\Fuel; use App\Support\Units\Fuel;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
@@ -155,7 +156,6 @@ class PIREPTest extends TestCase
*/ */
public function testUnitFields() public function testUnitFields()
{ {
/** @var Pirep $pirep */
$pirep = $this->createPirep(); $pirep = $this->createPirep();
$pirep->save(); $pirep->save();
@@ -251,13 +251,16 @@ class PIREPTest extends TestCase
{ {
/** @var User $user */ /** @var User $user */
$user = factory(User::class)->create([ $user = factory(User::class)->create([
'name' => 'testPirepNotifications user',
'flights' => 0, 'flights' => 0,
'flight_time' => 0, 'flight_time' => 0,
'rank_id' => 1, 'rank_id' => 1,
]); ]);
$admin = $this->createAdminUser(['name' => 'testPirepNotifications Admin']); $admin = factory(User::class)->create();
/** @var UserService $userSvc */
$userSvc = app(UserService::class);
$userSvc->addUserToRole($admin, 'admin');
$pirep = factory(Pirep::class)->create([ $pirep = factory(Pirep::class)->create([
'airline_id' => 1, 'airline_id' => 1,
@@ -268,8 +271,7 @@ class PIREPTest extends TestCase
$this->pirepSvc->submit($pirep); $this->pirepSvc->submit($pirep);
// Make sure a notification was sent out to the admin // Make sure a notification was sent out to the admin
Notification::assertSentTo([$admin], PirepFiled::class); Notification::assertSentTo([$admin], PirepSubmitted::class);
Notification::assertNotSentTo([$user], PirepFiled::class);
} }
/** /**
@@ -279,7 +281,6 @@ class PIREPTest extends TestCase
{ {
$this->updateSetting('pilots.count_transfer_hours', false); $this->updateSetting('pilots.count_transfer_hours', false);
/** @var User $user */
$user = factory(User::class)->create([ $user = factory(User::class)->create([
'flights' => 0, 'flights' => 0,
'flight_time' => 0, 'flight_time' => 0,
@@ -303,7 +304,6 @@ class PIREPTest extends TestCase
$this->pirepSvc->accept($pirep); $this->pirepSvc->accept($pirep);
} }
/** @var User $pilot */
$pilot = User::find($user->id); $pilot = User::find($user->id);
$last_pirep = Pirep::where('id', $pilot->last_pirep_id)->first(); $last_pirep = Pirep::where('id', $pilot->last_pirep_id)->first();
+16 -9
View File
@@ -2,10 +2,10 @@
namespace Tests; namespace Tests;
use App\Events\UserRegistered;
use App\Models\Enums\UserState; use App\Models\Enums\UserState;
use App\Models\User; use App\Models\User;
use App\Notifications\Messages\AdminUserRegistered; use Illuminate\Support\Facades\Event;
use App\Services\UserService;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
@@ -20,20 +20,27 @@ class RegistrationTest extends TestCase
*/ */
public function testRegistration() public function testRegistration()
{ {
$admin = $this->createAdminUser(['name' => 'testRegistration Admin']); Event::fake();
Notification::fake();
/** @var UserService $userSvc */ $userSvc = app('App\Services\UserService');
$userSvc = app(UserService::class);
$this->updateSetting('pilots.auto_accept', true); setting('pilots.auto_accept', true);
$attrs = factory(User::class)->make()->makeVisible(['api_key', 'name', 'email'])->toArray(); $attrs = factory(User::class)->make()->toArray();
$attrs['password'] = Hash::make('secret'); $attrs['password'] = Hash::make('secret');
$user = $userSvc->createUser($attrs); $user = $userSvc->createUser($attrs);
$this->assertEquals(UserState::ACTIVE, $user->state); $this->assertEquals(UserState::ACTIVE, $user->state);
Notification::assertSentTo([$admin], AdminUserRegistered::class); Event::assertDispatched(UserRegistered::class, function ($e) use ($user) {
Notification::assertNotSentTo([$user], AdminUserRegistered::class); return $e->user->id === $user->id
&& $e->user->state === $user->state;
});
/*Notification::assertSentTo(
[$user],
\App\Notifications\Messages\UserRegistered::class
);*/
} }
} }
+1 -2
View File
@@ -58,7 +58,7 @@ abstract class TestCase extends \Illuminate\Foundation\Testing\TestCase
); );
Artisan::call('database:create', ['--reset' => true]); Artisan::call('database:create', ['--reset' => true]);
Artisan::call('migrate', ['--env' => 'testing', '--force' => true]); Artisan::call('migrate:refresh', ['--env' => 'testing', '--force' => true]);
Notification::fake(); Notification::fake();
// $this->disableExceptionHandling(); // $this->disableExceptionHandling();
@@ -71,7 +71,6 @@ abstract class TestCase extends \Illuminate\Foundation\Testing\TestCase
protected function disableExceptionHandling() protected function disableExceptionHandling()
{ {
$this->app->instance(ExceptionHandler::class, new class() extends Handler { $this->app->instance(ExceptionHandler::class, new class() extends Handler {
/** @noinspection PhpMissingParentConstructorInspection */
public function __construct() public function __construct()
{ {
} }
-20
View File
@@ -9,7 +9,6 @@ use App\Models\Pirep;
use App\Models\Role; use App\Models\Role;
use App\Models\Subfleet; use App\Models\Subfleet;
use App\Models\User; use App\Models\User;
use App\Services\UserService;
use Exception; use Exception;
trait TestData trait TestData
@@ -33,25 +32,6 @@ trait TestData
], $attrs)); ], $attrs));
} }
/**
* Create an admin user
*
* @param array $attrs
*
* @return User
*/
public function createAdminUser(array $attrs = []): User
{
/** @var User $admin */
$admin = factory(User::class)->create($attrs);
/** @var UserService $userSvc */
$userSvc = app(UserService::class);
$userSvc->addUserToRole($admin, 'admin');
return $admin;
}
/** /**
* Create a new PIREP with a proper subfleet/rank/user and an * Create a new PIREP with a proper subfleet/rank/user and an
* aircraft that the user is allowed to fly * aircraft that the user is allowed to fly
+6 -6
View File
@@ -291,13 +291,13 @@ class UserTest extends TestCase
*/ */
public function testUserPilotIdAdded() public function testUserPilotIdAdded()
{ {
$new_user = factory(User::class)->make()->makeVisible(['api_key', 'name', 'email'])->toArray(); $new_user = factory(User::class)->make()->toArray();
$new_user['password'] = Hash::make('secret'); $new_user['password'] = Hash::make('secret');
$user = $this->userSvc->createUser($new_user); $user = $this->userSvc->createUser($new_user);
$this->assertEquals($user->id, $user->pilot_id); $this->assertEquals($user->id, $user->pilot_id);
// Add a second user // Add a second user
$new_user = factory(User::class)->make()->makeVisible(['api_key', 'name', 'email'])->toArray(); $new_user = factory(User::class)->make()->toArray();
$new_user['password'] = Hash::make('secret'); $new_user['password'] = Hash::make('secret');
$user2 = $this->userSvc->createUser($new_user); $user2 = $this->userSvc->createUser($new_user);
$this->assertEquals($user2->id, $user2->pilot_id); $this->assertEquals($user2->id, $user2->pilot_id);
@@ -313,11 +313,11 @@ class UserTest extends TestCase
public function testUserPilotDeleted() public function testUserPilotDeleted()
{ {
$new_user = factory(User::class)->make()->makeVisible(['api_key', 'name', 'email'])->toArray(); $new_user = factory(User::class)->make()->toArray();
$new_user['password'] = Hash::make('secret'); $new_user['password'] = Hash::make('secret');
$admin_user = $this->userSvc->createUser($new_user); $admin_user = $this->userSvc->createUser($new_user);
$new_user = factory(User::class)->make()->makeVisible(['api_key', 'name', 'email'])->toArray(); $new_user = factory(User::class)->make()->toArray();
$new_user['password'] = Hash::make('secret'); $new_user['password'] = Hash::make('secret');
$user = $this->userSvc->createUser($new_user); $user = $this->userSvc->createUser($new_user);
$this->assertEquals($user->id, $user->pilot_id); $this->assertEquals($user->id, $user->pilot_id);
@@ -335,11 +335,11 @@ class UserTest extends TestCase
public function testUserPilotDeletedWithPireps() public function testUserPilotDeletedWithPireps()
{ {
$new_user = factory(User::class)->make()->makeVisible(['api_key', 'name', 'email'])->toArray(); $new_user = factory(User::class)->make()->toArray();
$new_user['password'] = Hash::make('secret'); $new_user['password'] = Hash::make('secret');
$admin_user = $this->userSvc->createUser($new_user); $admin_user = $this->userSvc->createUser($new_user);
$new_user = factory(User::class)->make()->makeVisible(['api_key', 'name', 'email'])->toArray(); $new_user = factory(User::class)->make()->toArray();
$new_user['password'] = Hash::make('secret'); $new_user['password'] = Hash::make('secret');
$user = $this->userSvc->createUser($new_user); $user = $this->userSvc->createUser($new_user);
$this->assertEquals($user->id, $user->pilot_id); $this->assertEquals($user->id, $user->pilot_id);