Skip to content

Commit

Permalink
Merge pull request vatsimnetwork#158 from vatsimnetwork/move-datalink…
Browse files Browse the repository at this point in the history
…-authorities-to-db

Relevant code changes for DB Dl authorities
  • Loading branch information
lieselwd authored Oct 23, 2024
2 parents d96feab + dd313ff commit 77e46ec
Show file tree
Hide file tree
Showing 11 changed files with 181 additions and 34 deletions.
23 changes: 12 additions & 11 deletions app/Http/Controllers/ClxMessagesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use App\Events\ClxIssuedEvent;
use App\Http\Requests\ClxMessageRequest;
use App\Models\ClxMessage;
use App\Models\DatalinkAuthority;
use App\Models\RclMessage;
use App\Models\Track;
use App\Services\CpdlcService;
Expand Down Expand Up @@ -99,9 +100,9 @@ public function showRclMessage(RclMessage $rclMessage)

return view('controllers.clx.rcl-messages.show', [
'message' => $rclMessage,
'dlAuthorities' => DatalinkAuthorities::cases(),
'dlAuthorities' => DatalinkAuthority::whereSystem(false)->get(),
'tracks' => $rclMessage->is_concorde ? Track::concorde()->get() : Track::active()->get(),
'activeDlAuthority' => $this->dataService->getActiveControllerAuthority(Auth::user()) ?? DatalinkAuthorities::NAT,
'activeDlAuthority' => $this->dataService->getActiveControllerAuthority(Auth::user()) ?? DatalinkAuthority::whereId('NAT')->first(),
'_pageTitle' => $rclMessage->callsign,
]);
}
Expand Down Expand Up @@ -160,7 +161,7 @@ public function transmit(RclMessage $rclMessage, ClxMessageRequest $request)
'entry_time_restriction' => $entryRequirement ?? null,
'raw_entry_time_restriction' => $request->get('entry_time_requirement'),
'free_text' => $isReclearance ? '** RECLEARANCE '.now()->format('Hi').' ** '.$request->get('free_text') : $request->get('free_text'),
'datalink_authority' => DatalinkAuthorities::from($request->get('datalink_authority')),
'datalink_authority_id' => DatalinkAuthority::whereId($request->get('datalink_authority'))->first()->id,
'is_concorde' => $rclMessage->is_concorde,
]);

Expand All @@ -179,7 +180,7 @@ public function transmit(RclMessage $rclMessage, ClxMessageRequest $request)
* Create datalink messages
*/
$array = [
'CLX '.now()->format('Hi dmy').' '.$clxMessage->datalink_authority->name.' CLRNCE '.$clxMessage->id,
'CLX '.now()->format('Hi dmy').' '.$clxMessage->datalinkAuthority->id.' CLRNCE '.$clxMessage->id,
$rclMessage->callsign.' CLRD TO '.$rclMessage->destination.' VIA '.$clxMessage->entry_fix,
$clxMessage->track ? 'NAT '.$clxMessage->track->identifier : 'RANDOM ROUTE',
$clxMessage->track ? $clxMessage->track->last_routeing : $clxMessage->random_routeing,
Expand Down Expand Up @@ -213,9 +214,9 @@ public function transmit(RclMessage $rclMessage, ClxMessageRequest $request)
$clxMessage->datalink_message = $array;
$msg = '';
if ($clxMessage->track) {
$msg = "{$clxMessage->datalink_authority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, track {$clxMessage->track->identifier}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
$msg = "{$clxMessage->datalinkAuthority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, track {$clxMessage->track->identifier}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
} else {
$msg = "{$clxMessage->datalink_authority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, random routeing {$clxMessage->random_routeing}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
$msg = "{$clxMessage->datalinkAuthority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, random routeing {$clxMessage->random_routeing}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
}
// Only show crossing restriction if entry time =/= the restriction due to the bodge
if ($clxMessage->entry_time_restriction && ($clxMessage->raw_entry_time_restriction != $rclMessage->entry_time)) {
Expand Down Expand Up @@ -259,7 +260,7 @@ public function transmit(RclMessage $rclMessage, ClxMessageRequest $request)
->causedBy($clxMessage->vatsimAccount)
->performedOn($rclMessage)
->withProperties(['datalink' => $clxMessage->data_link_message])
->log('CLX Message Transmitted By '.$clxMessage->datalink_authority->name);
->log('CLX Message Transmitted By '.$clxMessage->datalinkAuthority->id);

flashAlert(type: 'success', title: null, message: 'Clearance transmitted.', toast: true, timer: true);

Expand All @@ -280,7 +281,7 @@ public function deleteRclMessage(Request $request, RclMessage $rclMessage)

public function revertToVoice(Request $request, RclMessage $rclMessage)
{
$datalinkAuthority = $this->dataService->getActiveControllerAuthority ?? DatalinkAuthorities::NAT;
$datalinkAuthority = $this->dataService->getActiveControllerAuthority ?? DatalinkAuthority::whereId('NAT')->first();
$this->cpdlcService->sendMessage(
author: $datalinkAuthority,
recipient: $rclMessage->callsign,
Expand All @@ -296,7 +297,7 @@ public function revertToVoice(Request $request, RclMessage $rclMessage)

public function moveToProcessed(Request $request, RclMessage $rclMessage)
{
$datalinkAuthority = $this->dataService->getActiveControllerAuthority ?? DatalinkAuthorities::NAT;
$datalinkAuthority = $this->dataService->getActiveControllerAuthority ?? DatalinkAuthority::whereId('NAT')->first();
$this->cpdlcService->sendMessage(
author: $datalinkAuthority,
recipient: $rclMessage->callsign,
Expand Down Expand Up @@ -349,7 +350,7 @@ public function moveToProcessed(Request $request, RclMessage $rclMessage)
->causedBy($clxMessage->vatsimAccount)
->performedOn($rclMessage)
->withProperties(['datalink' => $clxMessage->data_link_message])
->log('CLX Message Transmitted By '.$clxMessage->datalink_authority->name);
->log('CLX Message Transmitted By '.$clxMessage->datalinkAuthority->name);

flashAlert(type: 'success', title: null, message: 'Clearance moved.', toast: true, timer: true);

Expand All @@ -361,7 +362,7 @@ public function create()
return view('controllers.clx.rcl-messages.create', [
'dlAuthorities' => DatalinkAuthorities::cases(),
'tracks' => Track::where('active', true)->orWhere('concorde', true)->get(),
'activeDlAuthority' => $this->dataService->getActiveControllerAuthority(Auth::user()) ?? DatalinkAuthorities::NAT,
'activeDlAuthority' => $this->dataService->getActiveControllerAuthority(Auth::user()) ?? DatalinkAuthority::whereId('NAT')->first(),
'_pageTitle' => 'Create Manual Clearance',
]);
}
Expand Down
13 changes: 8 additions & 5 deletions app/Http/Livewire/Controllers/CreateManualClx.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use App\Enums\RclResponsesEnum;
use App\Events\ClxIssuedEvent;
use App\Models\ClxMessage;
use App\Models\DatalinkAuthority;
use App\Models\RclMessage;
use App\Models\Track;
use App\Models\VatsimAccount;
Expand Down Expand Up @@ -36,6 +37,8 @@ class CreateManualClx extends Component

public function mount()
{
$dataService = new VatsimDataService();
$this->activeDlAuthority = $dataService->getActiveControllerAuthority(Auth::user()) ?? DatalinkAuthority::whereId('NAT')->first();
$this->tmi = current_tmi();
}
public function render()
Expand Down Expand Up @@ -164,7 +167,7 @@ public function submit()
'entry_time_restriction' => null, //TODO implement
'raw_entry_time_restriction' => $rclMessage->entry_time,
'free_text' => '** RCL/CLX MANUALLY ENTERED BY ATC **',
'datalink_authority' => $this->activeDlAuthority,
'datalink_authority_id' => $this->activeDlAuthority->id,
'is_concorde' => $rclMessage->is_concorde,
]);
if ($rclMessage->trac) {
Expand All @@ -176,7 +179,7 @@ public function submit()
}

$array = [
'CLX '.now()->format('Hi dmy').' '.$clxMessage->datalink_authority->name.' CLRNCE '.$clxMessage->id,
'CLX '.now()->format('Hi dmy').' '.$clxMessage->datalinkAuthority->id.' CLRNCE '.$clxMessage->id,
$rclMessage->callsign.' CLRD TO '.$rclMessage->destination.' VIA '.$clxMessage->entry_fix,
$clxMessage->track ? 'NAT '.$clxMessage->track->identifier : 'RANDOM ROUTE',
$clxMessage->track ? $clxMessage->track->last_routeing : $clxMessage->random_routeing,
Expand Down Expand Up @@ -210,9 +213,9 @@ public function submit()
$clxMessage->datalink_message = $array;
$msg = '';
if ($clxMessage->track) {
$msg = "{$clxMessage->datalink_authority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, track {$clxMessage->track->identifier}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
$msg = "{$clxMessage->datalinkAuthority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, track {$clxMessage->track->identifier}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
} else {
$msg = "{$clxMessage->datalink_authority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, random routeing {$clxMessage->random_routeing}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
$msg = "{$clxMessage->datalinkAuthority->name} clears {$rclMessage->callsign} to {$rclMessage->destination} via {$clxMessage->entry_fix}, random routeing {$clxMessage->random_routeing}. From {$clxMessage->entry_fix} maintain Flight Level {$clxMessage->flight_level}, Mach {$clxMessage->mach}.";
}
// Only show crossing restriction if entry time =/= the restriction due to the bodge
if ($clxMessage->entry_time_restriction && ($clxMessage->raw_entry_time_restriction != $rclMessage->entry_time)) {
Expand Down Expand Up @@ -256,7 +259,7 @@ public function submit()
->causedBy($clxMessage->vatsimAccount)
->performedOn($rclMessage)
->withProperties(['datalink' => $clxMessage->data_link_message])
->log('CLX Message Transmitted By '.$clxMessage->datalink_authority->name);
->log('CLX Message Transmitted By '.$clxMessage->datalinkAuthority->name);

flashAlert(type: 'success', title: null, message: 'Clearance transmitted.', toast: true, timer: true);

Expand Down
24 changes: 20 additions & 4 deletions app/Models/ClxMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@
* @property string|null $cancellation_reason
* @method static Builder|ClxMessage whereCancellationReason($value)
* @method static Builder|ClxMessage whereCancelled($value)
* @property string $datalink_authority_id
* @property string|null $entry_time_restriction_interval_callsign
* @property int|null $entry_time_restriction_interval_minutes
* @property-read \App\Models\DatalinkAuthority $datalinkAuthority
* @method static Builder|ClxMessage whereDatalinkAuthorityId($value)
* @method static Builder|ClxMessage whereEntryTimeRestrictionIntervalCallsign($value)
* @method static Builder|ClxMessage whereEntryTimeRestrictionIntervalMinutes($value)
* @mixin \Eloquent
*/
class ClxMessage extends Model
Expand All @@ -92,7 +99,7 @@ public function prunable(): Builder
* @var array
*/
protected $fillable = [
'vatsim_account_id', 'rcl_message_id', 'flight_level', 'mach', 'track_id', 'random_routeing', 'entry_fix', 'entry_time_restriction', 'free_text', 'datalink_authority', 'simple_datalink_message', 'datalink_message', 'upper_flight_level', 'raw_entry_time_restriction', 'overwritten_by_clx_message_id', 'overwritten', 'is_concorde', 'cancelled', 'cancellation_reason'
'vatsim_account_id', 'rcl_message_id', 'flight_level', 'mach', 'track_id', 'random_routeing', 'entry_fix', 'entry_time_restriction', 'free_text', 'datalink_authority_id', 'simple_datalink_message', 'datalink_message', 'upper_flight_level', 'raw_entry_time_restriction', 'overwritten_by_clx_message_id', 'overwritten', 'is_concorde', 'cancelled', 'cancellation_reason'
];

/**
Expand All @@ -111,7 +118,6 @@ public function getActivitylogOptions(): LogOptions
* @var string[]
*/
protected $casts = [
'datalink_authority' => DatalinkAuthorities::class,
'datalink_message' => 'array',
'cancellation_reason' => ClxCancellationReasons::class,
];
Expand All @@ -126,6 +132,16 @@ public function rclMessage(): BelongsTo
return $this->belongsTo(RclMessage::class);
}

/**
* Returns the authority that issued the message.
*
* @return BelongsTo
*/
public function datalinkAuthority(): BelongsTo
{
return $this->belongsTo(DatalinkAuthority::class);
}

/**
* Returns the track the CLX was for.
*
Expand Down Expand Up @@ -184,8 +200,8 @@ public function toMessageHistoryFormat(): array
'simple_datalink_message' => $this->simple_datalink_message,
'datalink_message' => $this->datalink_message,
'datalink_authority' => [
'id' => $this->datalink_authority->name,
'description' => $this->datalink_authority->description(),
'id' => $this->datalinkAuthority->id,
'description' => $this->datalinkAuthority->name,
],
'cancelled' => $this->cancelled,
'cancellation_reason' => $this->cancellation_reason?->text(),
Expand Down
20 changes: 14 additions & 6 deletions app/Models/CpdlcMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Prunable;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

/**
* App\Models\CpdlcMessage
Expand Down Expand Up @@ -33,6 +34,9 @@
* @property string|null $caption
* @method static Builder|CpdlcMessage whereCaption($value)
* @method static Builder|CpdlcMessage whereMessage($value)
* @property string $datalink_authority_id
* @property-read \App\Models\DatalinkAuthority $datalinkAuthority
* @method static Builder|CpdlcMessage whereDatalinkAuthorityId($value)
* @mixin \Eloquent
*/
class CpdlcMessage extends Model
Expand All @@ -50,25 +54,29 @@ public function prunable(): Builder
}

protected $fillable = [
'pilot_id', 'pilot_callsign', 'datalink_authority', 'message', 'caption',
'pilot_id', 'pilot_callsign', 'datalink_authority_id', 'message', 'caption',
];

protected $casts = [
'datalink_authority' => DatalinkAuthorities::class,
];
// protected $casts = [
// ];

public function pilot()
{
return $this->belongsTo(VatsimAccount::class, 'pilot_id');
}

public function datalinkAuthority(): BelongsTo
{
return $this->belongsTo(DatalinkAuthority::class);
}

public function toMessageHistoryFormat(): array
{
return [
'id' => $this->id,
'datalink_authority' => [
'id' => $this->datalink_authority->name,
'description' => $this->datalink_authority->description(),
'id' => $this->datalinkAuthority->id,
'description' => $this->datalinkAuthority->name,
],
'message' => $this->message,
'caption' => $this->caption,
Expand Down
49 changes: 49 additions & 0 deletions app/Models/DatalinkAuthority.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

/**
* App\Models\DatalinkAuthority
*
* @property string $id
* @property string $name
* @property string $prefix
* @property bool $auto_acknowledge_participant
* @property bool $valid_rcl_target
* @property bool $system
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority query()
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority whereAutoAcknowledgeParticipant($value)
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority wherePrefix($value)
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority whereSystem($value)
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|DatalinkAuthority whereValidRclTarget($value)
* @mixin \Eloquent
*/
class DatalinkAuthority extends Model
{
protected $fillable = [
'id',
'name',
'prefix',
'auto_acknowledge_participant',
'valid_rcl_target',
'system',
];

protected $casts = [
'auto_acknowledge_participant' => 'boolean',
'valid_rcl_target' => 'boolean',
'system' => 'boolean',
];

protected $keyType = 'string';
}
4 changes: 4 additions & 0 deletions app/Models/RclMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@
* @property string|null $acknowledged_at
* @method static Builder|RclMessage whereAcknowledgedAt($value)
* @method static Builder|RclMessage whereIsAcknowledged($value)
* @property string $target_datalink_authority
* @method static Builder|RclMessage acknowledged()
* @method static Builder|RclMessage notAcknowledged()
* @method static Builder|RclMessage whereTargetDatalinkAuthority($value)
* @mixin \Eloquent
*/
class RclMessage extends Model
Expand Down
5 changes: 3 additions & 2 deletions app/Services/CpdlcService.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use App\Enums\DatalinkAuthorities;
use App\Models\CpdlcMessage;
use App\Models\DatalinkAuthority;
use App\Models\VatsimAccount;

class CpdlcService
Expand All @@ -15,10 +16,10 @@ class CpdlcService
* @param string $message
* @return CpdlcMessage
*/
public function sendMessage(DatalinkAuthorities $author, string $recipient, VatsimAccount $recipientAccount, string $message, ?string $caption): CpdlcMessage
public function sendMessage(DatalinkAuthority $author, string $recipient, VatsimAccount $recipientAccount, string $message, ?string $caption): CpdlcMessage
{
return CpdlcMessage::create([
'datalink_authority' => $author,
'datalink_authority_id' => $author->id,
'pilot_id' => $recipientAccount->id,
'pilot_callsign' => $recipient,
'message' => $message,
Expand Down
9 changes: 4 additions & 5 deletions app/Services/VatsimDataService.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Enums\AccessLevelEnum;
use App\Enums\DatalinkAuthorities;
use App\Enums\DomesticAuthorities;
use App\Models\DatalinkAuthority;
use App\Models\VatsimAccount;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
Expand Down Expand Up @@ -128,12 +129,10 @@ public function getActiveControllerAuthority(VatsimAccount $vatsimAccount)

$callsignPrefix = strtok($this->getActiveControllerData($vatsimAccount)->callsign, '_');

foreach (DatalinkAuthorities::cases() as $authority) {
if ($callsignPrefix == $authority->value) {
return $authority;
}
$authority = DatalinkAuthority::wherePrefix($callsignPrefix)->first();
if ($authority) {
return $authority;
}

return null;
}

Expand Down
Loading

0 comments on commit 77e46ec

Please sign in to comment.