101 lines
3.3 KiB
PHP
101 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use App\Models\UserFlight;
|
|
use App\Http\Resources\UserFlightResource;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Inertia\Inertia;
|
|
|
|
class FlightProfileController extends Controller
|
|
{
|
|
public function index(){
|
|
if (auth()->check()) {
|
|
$user = auth()->user();
|
|
$defaultPage = $user->resolved_settings['default_login_page'];
|
|
|
|
$route = match ($defaultPage) {
|
|
'feed_first' => $user->following()->count() > 0 ? 'feed' : 'profile.view',
|
|
'feed' => 'feed',
|
|
'profile' => 'profile.view',
|
|
'dashboard' => 'dashboard',
|
|
};
|
|
|
|
$args = $route == 'profile.view' ? $user->name : null;
|
|
|
|
return redirect()->route($route, $args);
|
|
}
|
|
return redirect()->route('login');
|
|
}
|
|
|
|
public static function getUserFlightApiURL(User $user){
|
|
return '/data/user/'.$user->name.'/flights';
|
|
}
|
|
|
|
public function profileData(User $user, string $view, ?int $selectedFlightId = null) : array {
|
|
return [
|
|
'user' => $user,
|
|
'canEdit' => (auth()->check() && auth()->id() === $user->id) || (auth()->check() && auth()->user()->hasRole('admin')),
|
|
'initialView' => $view,
|
|
'selectedFlightId' => $selectedFlightId,
|
|
'flight_api_url' => self::getUserFlightApiURL($user),
|
|
'isFollowing' => auth()->check() && auth()->user()->isFollowing($user),
|
|
'flightCount' => $user->departedFlights()->count(),
|
|
];
|
|
}
|
|
|
|
public function departureBoard(User $user, ?UserFlight $flight = null){
|
|
$profileData = $this->profileData($user, 'board', $flight?->id);
|
|
return Inertia::render('UserProfile', $profileData);
|
|
}
|
|
|
|
public function map(User $user){
|
|
$profileData = $this->profileData($user, 'map');
|
|
return Inertia::render('UserProfile', $profileData);
|
|
}
|
|
|
|
public function boardingPasses(User $user){
|
|
$profileData = $this->profileData($user, 'passes');
|
|
return Inertia::render('UserProfile', $profileData);
|
|
}
|
|
|
|
public function view(User $user)
|
|
{
|
|
$loggedInUser = auth()->user();
|
|
|
|
$isPrivate = $user->resolved_settings['private_profile'];
|
|
|
|
if ($isPrivate && $user->id !== $loggedInUser?->id) {
|
|
if (!$loggedInUser || !$loggedInUser->isFollowing($user)) {
|
|
abort(404);
|
|
}
|
|
}
|
|
|
|
$defaultView = $loggedInUser ? $loggedInUser->resolved_settings['default_profile_view'] : 'map';
|
|
|
|
return match($defaultView) {
|
|
'boarding-passes' => $this->boardingPasses($user),
|
|
'map' => $this->map($user),
|
|
'departure-board' => $this->departureBoard($user),
|
|
'achievements' => redirect()->route('profile.achievements', $user->name),
|
|
};
|
|
|
|
}
|
|
|
|
public function flight(User $user, UserFlight $userFlight)
|
|
{
|
|
if($userFlight->user_id !== $user->id){
|
|
abort(404);
|
|
}
|
|
|
|
return Inertia::render('UserFlight', [
|
|
'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),
|
|
]);
|
|
}
|
|
}
|