diff --git a/app/Http/Controllers/Api/AircraftApiController.php b/app/Http/Controllers/Api/AircraftApiController.php
new file mode 100644
index 0000000..8c487a2
--- /dev/null
+++ b/app/Http/Controllers/Api/AircraftApiController.php
@@ -0,0 +1,15 @@
+imageIfExists($path);
+ }
+
+}
diff --git a/app/Http/Controllers/Api/AirlineApiController.php b/app/Http/Controllers/Api/AirlineApiController.php
index c48c0f2..338a522 100644
--- a/app/Http/Controllers/Api/AirlineApiController.php
+++ b/app/Http/Controllers/Api/AirlineApiController.php
@@ -49,21 +49,8 @@ class AirlineApiController extends ApiController
public function getLivery(string $airlineInternalName, string $aircraftDesignator){
$path = "images/liveries/{$airlineInternalName}_{$aircraftDesignator}.png";
- $cacheLimit = 60 * 60 * 72;
- if(!Storage::disk('local')->exists($path)){
- return response()->json(['error' => 'Livery not found'], 404);
- }
-
- $fullPath = Storage::disk('local')->path($path);
- $lastModified = filemtime($fullPath);
-
- return response()->file($fullPath, [
- 'Content-Type' => 'image/png',
- 'Cache-Control' => 'public, max-age='.$cacheLimit, // 24 hours
- 'Last-Modified' => gmdate('D, d M Y H:i:s', $lastModified) . ' GMT',
- 'ETag' => md5($path . $lastModified),
- ]);
+ return $this->imageIfExists($path);
}
function parseAirlineData(Airline $airline){
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 8677cd5..ce49da9 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -2,7 +2,23 @@
namespace App\Http\Controllers;
+use Illuminate\Support\Facades\Storage;
+
abstract class Controller
{
- //
+ public function imageIfExists(string $path, $cacheLimit = 60 * 60 * 72){
+ if(!Storage::disk('local')->exists($path)){
+ return response()->json(['error' => 'Image not found'], 404);
+ }
+
+ $fullPath = Storage::disk('local')->path($path);
+ $lastModified = filemtime($fullPath);
+
+ return response()->file($fullPath, [
+ 'Content-Type' => 'image/png',
+ 'Cache-Control' => 'public, max-age='.$cacheLimit, // 24 hours
+ 'Last-Modified' => gmdate('D, d M Y H:i:s', $lastModified) . ' GMT',
+ 'ETag' => md5($path . $lastModified),
+ ]);
+ }
}
diff --git a/app/Http/Controllers/FlightController.php b/app/Http/Controllers/FlightController.php
index 67d28b9..285859f 100644
--- a/app/Http/Controllers/FlightController.php
+++ b/app/Http/Controllers/FlightController.php
@@ -275,7 +275,7 @@ class FlightController extends Controller
return redirect()->route('profile.departure-board', [Auth::user()->name, $flight->id]);
}
- public function delete(UserFlight $flight)
+ public function delete(UserFlight $flight, ?string $referrer = 'departure-board')
{
$this->authorize('delete', $flight);
@@ -296,7 +296,7 @@ class FlightController extends Controller
]);
$flight->delete();
- return redirect()->route('profile.departure-board', [Auth::user()->name]);
+ return redirect()->route('profile.'.$referrer, [Auth::user()->name]);
}
public function staticData() : array {
diff --git a/app/Http/Controllers/FlightProfileController.php b/app/Http/Controllers/FlightProfileController.php
index 8579adf..6fb80cf 100644
--- a/app/Http/Controllers/FlightProfileController.php
+++ b/app/Http/Controllers/FlightProfileController.php
@@ -52,10 +52,10 @@ class FlightProfileController extends Controller
abort(404);
}
-
return Inertia::render('UserFlight', [
- 'flightCount' => $user->flights()->count(),
+ 'flightCount' => $user->departedFlights()->count(),
'flight' => $userFlight->snapshot($userFlight->id),
+ 'canEdit' => auth()->check() && auth()->id() === $user->id,
'user' => $user,
'isFollowing' => auth()->check() && auth()->user()->isFollowing($user),
]);
diff --git a/app/Models/UserFlight.php b/app/Models/UserFlight.php
index 31ee29c..72dfe68 100644
--- a/app/Models/UserFlight.php
+++ b/app/Models/UserFlight.php
@@ -227,17 +227,32 @@ class UserFlight extends Model
return Attribute::make(
get: function () {
- if(!$this->airline || !$this->aircraft){
+ $apiUrl = config('app.logo_api_url');
+
+ if (!$this->aircraft) {
return null;
}
- $path = "images/liveries/{$this->airline->internal_name}_{$this->aircraft->designator}.png";
- if(!Storage::disk('local')->exists($path)){
+ if ($this->airline){
+ $path = "images/liveries/{$this->airline->internal_name}_{$this->aircraft->designator}.png";
+ if (Storage::disk('local')->exists($path)) {
+ $finalPath = $apiUrl."/airline/{$this->airline->internal_name}/livery/{$this->aircraft->designator}";
+ }
+ }
+
+ if(empty($finalPath)){
+ $path = "images/livery_templates/{$this->aircraft->designator}.png";
+ if (Storage::disk('local')->exists($path)) {
+ $finalPath = $apiUrl."/aircraft/{$this->aircraft->designator}/livery";
+ }
+ }
+
+ if(empty($finalPath)){
return null;
}
- return config('app.logo_api_url')."/airline/{$this->airline->internal_name}/livery/{$this->aircraft->designator}";
+ return $finalPath;
}
);
}
diff --git a/resources/js/Components/FlightsGoneBy/BoardingPass.vue b/resources/js/Components/FlightsGoneBy/BoardingPass.vue
index c98c925..25eac4b 100644
--- a/resources/js/Components/FlightsGoneBy/BoardingPass.vue
+++ b/resources/js/Components/FlightsGoneBy/BoardingPass.vue
@@ -1,13 +1,16 @@
+
+
+