diff --git a/app/Http/Controllers/API/OperationController.php b/app/Http/Controllers/API/OperationController.php deleted file mode 100644 index 815bff5e..00000000 --- a/app/Http/Controllers/API/OperationController.php +++ /dev/null @@ -1,144 +0,0 @@ -operation = $operation; - $this->operation_mission = $operation_mission; - - return $this; - } - - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - $list = $this->operation->all()->map(function($item) { - $item->items = $item->missions->map(function($item) { - $item->mission = $item->mission; - return $item; - }); - - return $item; - }); - - return response()->json($list); - } - - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - // - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request) - { - // Get latest operation date - $latest = $this->operation->orderBy('starts_at', 'desc')->first(); - - if ($latest) { - $op = $this->operation->create(['starts_at' => $latest->starts_at->addWeek()]); - $op->items = []; - return response()->json($op); - } else { - $op = $this->operation->create([ - 'starts_at' => Carbon::now() - ->endOfWeek() - ->subDay() - ->hour(config('operation.hour')) - ->minute(config('operation.minute')) - ->second(0) - ]); - - $op->items = []; - - return response()->json($op); - } - } - - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show($id) - { - // - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function edit($id) - { - // - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(Request $request, $id) - { - // - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy($id) - { - $this->operation->destroy($id); - } -} diff --git a/app/Http/Controllers/API/OperationMissionController.php b/app/Http/Controllers/API/OperationMissionController.php deleted file mode 100644 index b1719a06..00000000 --- a/app/Http/Controllers/API/OperationMissionController.php +++ /dev/null @@ -1,115 +0,0 @@ -operation = $operation; - $this->operation_mission = $operation_mission; - - return $this; - } - - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ - public function index() - { - // - } - - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - // - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request) - { - // - } - - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show($id) - { - // - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function edit($id) - { - // - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(Request $request, $id) - { - // - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy($id) - { - $this->operation_mission->destroy($id); - } -} diff --git a/app/Http/Controllers/HubController.php b/app/Http/Controllers/HubController.php deleted file mode 100644 index 050531ba..00000000 --- a/app/Http/Controllers/HubController.php +++ /dev/null @@ -1,18 +0,0 @@ -user()->can('manage-public-media')) { - $gallery = Gallery::find(1); - $gallery->addMedia($request->file('file'))->toMediaCollection('images'); - } - } - - /** - * Remove the specified resource from storage. - * - * @return \Illuminate\Http\Response - */ - public function destroy($gallery_id, $media_id) - { - Gallery::find($gallery_id)->deleteMedia($media_id); - } - - /** - * Deletes the given gallery media item by form input. - * - * @return void - */ - public function deletePhoto(Request $request) - { - self::destroy($request->gallery_id, $request->media_id); - } -} diff --git a/app/Http/Controllers/Missions/BriefingController.php b/app/Http/Controllers/Missions/BriefingController.php new file mode 100644 index 00000000..d40559a0 --- /dev/null +++ b/app/Http/Controllers/Missions/BriefingController.php @@ -0,0 +1,36 @@ +isMine() && !auth()->user()->can('manage-missions')) { + abort(403, 'You are not authorised to edit this mission'); + return; + } + + $mission->lockBriefing($faction, $request->locked); + } +} diff --git a/app/Http/Controllers/Missions/CommentController.php b/app/Http/Controllers/Missions/CommentController.php index be13784b..91363db4 100644 --- a/app/Http/Controllers/Missions/CommentController.php +++ b/app/Http/Controllers/Missions/CommentController.php @@ -15,15 +15,9 @@ class CommentController extends Controller * * @return \Illuminate\Http\Response */ - public function index(Request $request) + public function index(Request $request, Mission $mission) { - if (!$request->exists('mission_id')) { - abort(403, 'You must pass the mission ID in the URL arguments'); - return; - } - - $comments = Mission::find($request->mission_id)->comments; - + $comments = $mission->comments; return view('missions.comments.list', compact('comments')); } @@ -33,7 +27,7 @@ public function index(Request $request) * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(Request $request, Mission $mission) { if (strlen(trim($request->text)) == 0) { abort(403, 'No comment text provided'); @@ -43,14 +37,13 @@ public function store(Request $request) if ($request->id == -1) { // Create a new comment $comment = new MissionComment(); - $comment->mission_id = $request->mission_id; + $comment->mission_id = $mission->id; $comment->user_id = auth()->user()->id; $comment->text = $request->text; $comment->published = $request->published; $comment->save(); if ($comment->published) { - $mission = Mission::findOrFail($request->mission_id); static::discordNotify($comment); $comment->update([ @@ -69,7 +62,6 @@ public function store(Request $request) $comment->save(); if ($shouldNotify) { - $mission = Mission::findOrFail($request->mission_id); static::discordNotify($comment); $comment->update([ @@ -92,7 +84,7 @@ public function store(Request $request) * @param int $id * @return \Illuminate\Http\Response */ - public function edit(MissionComment $comment) + public function edit(Request $request, MissionComment $comment) { return json_encode([ 'text' => $comment->text @@ -105,12 +97,12 @@ public function edit(MissionComment $comment) * @param int $id * @return \Illuminate\Http\Response */ - public function destroy(MissionComment $comment) + public function destroy(Request $request, MissionComment $comment) { $comment->delete(); } - public static function discordNotify(MissionComment $comment) + private static function discordNotify(MissionComment $comment) { $url = "{$comment->mission->url()}/aar#comment-{$comment->id}"; $message = "**{$comment->user->username}** commented on **{$comment->mission->display_name}**"; diff --git a/app/Http/Controllers/Missions/MediaController.php b/app/Http/Controllers/Missions/MediaController.php index 5e431626..b5c7d6d6 100644 --- a/app/Http/Controllers/Missions/MediaController.php +++ b/app/Http/Controllers/Missions/MediaController.php @@ -11,6 +11,12 @@ class MediaController extends Controller { + public function index(Request $request) + { + $missions = Mission::all(); + return view('media.index', compact('missions')); + } + /** * Uploads the given media to the given mission. * diff --git a/app/Http/Controllers/Missions/MissionController.php b/app/Http/Controllers/Missions/MissionController.php index 3d22ce92..b64c6a79 100644 --- a/app/Http/Controllers/Missions/MissionController.php +++ b/app/Http/Controllers/Missions/MissionController.php @@ -208,39 +208,8 @@ public function destroy(Mission $mission) return redirect('/hub/missions'); } - /** - * Shows the given mission's briefing. - * - * @return \Illuminate\Http\Response - */ - public function briefing(Request $request) - { - $mission = Mission::find($request->mission_id); - $faction = $request->faction; - return view('missions.briefing', compact('mission', 'faction')); - } - - /** - * Locks/unlocks the given briefing faction for the given mission. - * - * @return void - */ - public function setBriefingLock(Request $request) - { - $mission = Mission::find($request->mission_id); - - if (!$mission->isMine() && !auth()->user()->can('manage-missions')) { - abort(403, 'You are not authorised to edit this mission'); - return; - } - - $mission->lockBriefing($request->faction, $request->locked); - } - - public function orbat(Request $request) + public function orbat(Request $request, Mission $mission, string $faction) { - $mission = Mission::find($request->mission_id); - $faction = $request->faction; return view('missions.orbat', compact('mission', 'faction')); } diff --git a/app/Http/Controllers/Missions/NoteController.php b/app/Http/Controllers/Missions/NoteController.php index 77f7d433..9d63b101 100644 --- a/app/Http/Controllers/Missions/NoteController.php +++ b/app/Http/Controllers/Missions/NoteController.php @@ -56,16 +56,6 @@ public function index(Request $request, Mission $mission) } } - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - // - } - /** * Store a newly created resource in storage. * @@ -79,7 +69,6 @@ public function store(Request $request, Mission $mission) return; } - $a = $request->id; if ($request->id == -1) { // Create a new note $note = new MissionNote; @@ -102,49 +91,13 @@ public function store(Request $request, Mission $mission) return view('missions.notes.item', compact('note')); } - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show($id) - { - // - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function edit(Mission $mission, MissionNote $note) - { - return json_encode([ - 'text' => $note->text - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(Request $request, Mission $mission) - { - // - } - /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ - public function destroy(Mission $mission, MissionNote $note) + public function destroy(MissionNote $note) { if (!$note->isMine()) { return; diff --git a/app/Http/Controllers/Missions/OperationController.php b/app/Http/Controllers/Operations/OperationController.php similarity index 60% rename from app/Http/Controllers/Missions/OperationController.php rename to app/Http/Controllers/Operations/OperationController.php index e76c0a12..35788864 100644 --- a/app/Http/Controllers/Missions/OperationController.php +++ b/app/Http/Controllers/Operations/OperationController.php @@ -1,6 +1,6 @@ id == -1) return; - OperationMission::destroy($request->id); - } - - /** - * Creates an operation item for the given mission and operation. - * - * @return integer - */ - public function addMission(Request $request) - { - $operation = Operation::findOrFail($request->operation_id); - - $exists = OperationMission::where('operation_id', $operation->id) - ->where('play_order', $request->play_order) - ->first(); - - if ($exists) return; - - $item = OperationMission::create([ - 'operation_id' => $operation->id, - 'mission_id' => $request->mission_id, - 'play_order' => $request->play_order - ]); - - return $item->id; - } - /** * Creates an operation header. * Returns the operation item view. * * @return any */ - public function create(Request $request, Operation $operation) + public function store(Request $request, Operation $operation) { // Get latest operation date $latest = $operation->orderBy('starts_at', 'desc')->first(); @@ -97,6 +62,6 @@ public function create(Request $request, Operation $operation) */ public function destroy(Request $request, Operation $operation) { - $operation->destroy($request->operation_id); + $operation->delete(); } } diff --git a/app/Http/Controllers/Operations/OperationMissionController.php b/app/Http/Controllers/Operations/OperationMissionController.php new file mode 100644 index 00000000..80ceeb6d --- /dev/null +++ b/app/Http/Controllers/Operations/OperationMissionController.php @@ -0,0 +1,44 @@ +id) + ->where('play_order', $request->play_order) + ->first(); + + if ($exists) return; + + $item = OperationMission::create([ + 'operation_id' => $operation->id, + 'mission_id' => $request->mission_id, + 'play_order' => $request->play_order + ]); + + return $item->id; + } + + /** + * Deletes the given operation item. + * + * @return void + */ + public function destroy(Request $request) + { + if ($request->id == -1) return; + OperationMission::destroy($request->id); + } +} diff --git a/app/Http/Controllers/PublicJoinController.php b/app/Http/Controllers/PublicJoinController.php index 1e117c1f..4319ffa9 100644 --- a/app/Http/Controllers/PublicJoinController.php +++ b/app/Http/Controllers/PublicJoinController.php @@ -12,35 +12,14 @@ class PublicJoinController extends Controller { - /** - * Constructor method for PublicJoinController. - * - * @return type - */ - public function __construct() - { - // TODO Middleware - } - /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() - { - return $this->create(); - } - - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() { $sources = JoinSource::all(); - return view('join.public.form', compact('sources')); } @@ -76,18 +55,7 @@ public function store(Request $request) Mail::to($jr->email)->send(new JoinRequestAcknowledged); - return redirect('/join/acknowledged?email=' . $jr->email); - } - - /** - * Shows the acknowledged view. - * - * @return view - */ - public function acknowledged(Request $request) - { - $email = $request->email; - + $email = $jr->email; return view('join.public.confirmation', compact('email')); } } diff --git a/app/Http/Controllers/Users/SettingsController.php b/app/Http/Controllers/Users/SettingsController.php index 192b36e7..b180005e 100644 --- a/app/Http/Controllers/Users/SettingsController.php +++ b/app/Http/Controllers/Users/SettingsController.php @@ -16,23 +16,9 @@ class SettingsController extends Controller */ public function index(Request $request) { - if ($request->exists('panel')) { - return view('user.settings.' . $request->panel); - } - return view('user.settings.index'); } - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - // - } - /** * Store a newly created resource in storage. * @@ -48,51 +34,6 @@ public function store(Request $request) } } - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show($id) - { - // - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function edit($id) - { - // - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(Request $request, $id) - { - // - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy($id) - { - // - } - public function avatarSync() { $user = auth()->user(); diff --git a/app/Http/Controllers/Users/UserController.php b/app/Http/Controllers/Users/UserController.php index 9e2ed5d2..2c139f88 100644 --- a/app/Http/Controllers/Users/UserController.php +++ b/app/Http/Controllers/Users/UserController.php @@ -20,70 +20,4 @@ public function index() return view('user.admin.index', compact('users')); } - - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ - public function create() - { - // - } - - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request) - { - // - } - - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function show(User $user) - { - // - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function edit($id) - { - // - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ - public function update(Request $request, User $user) - { - // - } - - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function destroy($id) - { - // - } } diff --git a/resources/views/guides/index.blade.php b/resources/views/guides/index.blade.php deleted file mode 100644 index 6b3d11fb..00000000 --- a/resources/views/guides/index.blade.php +++ /dev/null @@ -1,43 +0,0 @@ -@extends('layout') - -@section('title') - Guides -@endsection - -@section('head') - -@endsection - -@section('subnav') - Account -@endsection - -@section('controls') -@endsection - -@section('content') -
- -
-@endsection diff --git a/resources/views/missions/briefing.blade.php b/resources/views/missions/briefing.blade.php index 49e586a5..8efa9f22 100644 --- a/resources/views/missions/briefing.blade.php +++ b/resources/views/missions/briefing.blade.php @@ -3,17 +3,13 @@ $(document).ready(function(e) { $('#lock-briefing').click(function(event) { var caller = $(this); - var id = caller.data('id'); - var faction = caller.data('faction'); var locked = caller.data('locked'); $.ajax({ - type: 'POST', - url: '{{ url('/hub/missions/briefing/update') }}', + type: 'PUT', + url: '{{ url("/hub/missions") }}/' + caller.data('id') + '/briefing/' + caller.data('faction') + '/lock', data: { - 'mission_id': id, - 'faction': faction, - 'locked': locked + 'locked': locked, }, success: function(data) { caller.data('locked', (locked == 1) ? 0 : 1); diff --git a/resources/views/missions/operations.blade.php b/resources/views/missions/operations.blade.php index ba567a9e..fe78f3f8 100644 --- a/resources/views/missions/operations.blade.php +++ b/resources/views/missions/operations.blade.php @@ -19,8 +19,8 @@ if (isAssigned) { $.ajax({ - type: 'POST', - url: '{{ url('/hub/missions/operations/remove-mission') }}', + type: 'DELETE', + url: "{{ url('/hub/operations/1/missions') }}", data: {'id': caller.data('item') || -1}, success: function(data) { caller.html('Assign Mission'); @@ -53,10 +53,9 @@ if (slot != null) { $.ajax({ type: 'POST', - url: '{{ url('/hub/missions/operations/add-mission') }}', + url: "{{ url('/hub/operations') }}/" + operation_id + '/missions', data: { 'mission_id': mission_id, - 'operation_id': operation_id, 'play_order': order }, success: function(data) { @@ -74,7 +73,7 @@ $('#create-operation-form').submit(function(event) { $.ajax({ type: 'POST', - url: '{{ url('/hub/missions/operations/create-operation') }}', + url: "{{ url('/hub/operations') }}", data: $('#create-operation-form').serialize(), success: function(data) { $('.operation-rows').prepend(data); @@ -88,9 +87,9 @@ var caller = $(this); $.ajax({ - type: 'POST', - url: '{{ url('/hub/missions/operations/delete-operation') }}', - data: {operation_id: caller.data('id')}, + type: 'DELETE', + url: "{{ url('/hub/operations') }}/" + caller.data('id'), + success: function(data) { caller.parents('.operation-item').remove(); } diff --git a/resources/views/missions/show.blade.php b/resources/views/missions/show.blade.php index f037d709..c83d438c 100644 --- a/resources/views/missions/show.blade.php +++ b/resources/views/missions/show.blade.php @@ -46,10 +46,10 @@ $.ajax({ type: 'GET', - url: "{{ url('/hub/missions/'.$mission->id) }}/" + caller.data('panel'), + url: '{{ url("/hub/missions/{$mission->id}") }}/' + caller.data('panel'), + success: function(data) { $('.mission-nav .subnav .subnav-link').removeClass('active'); - 'hub/missions/{{ $mission->id }}/' + caller.data('panel'); caller.addClass('active'); $('.mission-inner').html(data); } diff --git a/resources/views/missions/show/aar.blade.php b/resources/views/missions/show/aar.blade.php index 7c7a0f45..e6f4e052 100644 --- a/resources/views/missions/show/aar.blade.php +++ b/resources/views/missions/show/aar.blade.php @@ -8,14 +8,13 @@
-@endsection - @section('content')
@include('user.settings.account') diff --git a/routes/web.php b/routes/web.php index b7203de5..e5532267 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,44 +2,35 @@ use Laravel\Socialite\Facades\Socialite; -//--- Home Route::get('/', 'PageController@index'); +Route::get('/media', 'Missions\MediaController@index'); +Route::get('/roster', 'PageController@roster'); Route::get('/arma3sync', function () { return redirect('https://docs.google.com/document/d/1i-LzCJE0l_7PtOj8WU717mmmzX1U2KaaNGEnj0KzkIw/view'); }); -//--- Shared Missions -Route::get('/share/{mission}', 'ShareController@show'); -Route::get('/share/{mission}/{panel}', 'SharePanelController@show'); -Route::get('/share/{mission}/briefing/{faction}', 'ShareBriefingController@show'); - -//--- Authentication -Route::get('/auth/redirect', 'Auth\DiscordController@redirect'); -Route::get('/auth/callback', 'Auth\DiscordController@callback'); - -//--- Public Applications -Route::get('/join/acknowledged', 'PublicJoinController@acknowledged'); -Route::resource('join', 'PublicJoinController', [ - 'only' => ['index', 'store', 'create'] -]); +Route::get('/join', 'PublicJoinController@index'); +Route::post('/join', 'PublicJoinController@store'); -//--- Media -Route::resource('media', 'MediaController'); -Route::post('/media/delete', 'MediaController@deletePhoto'); +Route::prefix('share')->group(function () { + Route::get('/{mission}', 'ShareController@show'); + Route::get('/{mission}/{panel}', 'SharePanelController@show'); + Route::get('/{mission}/briefing/{faction}', 'ShareBriefingController@show'); +}); -//--- Roster -Route::get('/roster', 'PageController@roster'); +Route::prefix('auth')->group(function () { + Route::get('/redirect', 'Auth\DiscordController@redirect'); + Route::get('/callback', 'Auth\DiscordController@callback'); +}); Route::group(['middleware' => 'can:view-applications'], function () { - // Route::get('/hub/applications/transfer', 'JoinController@transferOldRecords'); Route::get('/hub/applications/api/items', 'Join\JoinController@items'); Route::get('/hub/applications/show/{jr}', 'Join\JoinController@show'); Route::post('/hub/applications/api/send-email', 'Join\JoinController@email'); Route::get('/hub/applications/api/email-submissions', 'Join\JoinController@emailSubmissions'); - // Statuses Route::post('/hub/applications/api/status', 'Join\JoinStatusController@store'); Route::put('/hub/applications/api/{jr}/status', 'Join\JoinStatusController@update'); Route::get('/hub/applications/api/{jr}/status', 'Join\JoinStatusController@show'); @@ -53,76 +44,64 @@ Route::resource('/hub/applications/api/emails', 'Join\EmailTemplateController'); }); -Route::group(['middleware' => 'can:manage-operations'], function () { - Route::get('/hub/operations', 'Missions\OperationController@index'); - Route::resource('/api/operations', 'API\OperationController'); - Route::resource('/api/operations/missions', 'API\OperationMissionController'); -}); - -//--- Missions Route::group(['middleware' => 'can:access-hub'], function () { - // Mission Media - Route::post('/hub/missions/media/add-photo', 'Missions\MediaController@uploadPhoto'); - Route::post('/hub/missions/media/delete-photo', 'Missions\MediaController@deletePhoto'); - Route::post('/hub/missions/media/add-video', 'Missions\MediaController@addVideo'); - Route::post('/hub/missions/media/delete-video', 'Missions\MediaController@removeVideo'); - - // Mission Operations - Route::post('/hub/missions/operations/remove-mission', 'Missions\OperationController@removeMission'); - Route::post('/hub/missions/operations/add-mission', 'Missions\OperationController@addMission'); - Route::post('/hub/missions/operations/create-operation', 'Missions\OperationController@create'); - Route::post('/hub/missions/operations/delete-operation', 'Missions\OperationController@destroy'); - - // Mission Comments - Route::resource('/hub/missions/comments', 'Missions\CommentController', [ - 'except' => ['create', 'show', 'update'] - ]); - - // Mission Briefings - Route::post('/hub/missions/briefing', 'Missions\MissionController@briefing'); - Route::post('/hub/missions/briefing/update', 'Missions\MissionController@setBriefingLock'); - - // Mission ORBAT - Route::post('/hub/missions/orbat', 'Missions\MissionController@orbat'); - - // Missions - Route::get('/hub/missions/{mission}/delete', 'Missions\MissionController@destroy'); - Route::post('/hub/missions/{mission}/update', 'Missions\MissionController@update'); - Route::post('/hub/missions/{mission}/set-verification', 'Missions\MissionController@updateVerification'); + Route::view('/hub', 'missions.index'); + + Route::prefix('hub/operations')->middleware('can:manage-operations')->group(function () { + Route::get('/', 'Operations\OperationController@index'); + Route::post('/', 'Operations\OperationController@store'); + Route::delete('/{operation}', 'Operations\OperationController@destroy'); + + Route::post('/{operation}/missions', 'Operations\OperationMissionController@store'); + Route::delete('/{operation}/missions', 'Operations\OperationMissionController@destroy'); + }); - // Download - Route::get('/hub/missions/{mission}/download', 'Missions\MissionController@download'); + Route::prefix('hub/missions')->group(function() { + Route::get('/', 'Missions\MissionController@index'); + Route::post('/', 'Missions\MissionController@store'); + Route::get('/{mission}', 'Missions\MissionController@show'); - // Notes - Route::resource('/hub/missions/{mission}/notes', 'Missions\NoteController'); + Route::get('/{mission}/download', 'Missions\MissionController@download'); + Route::get('/{mission}/orbat/{faction}', 'Missions\MissionController@orbat'); - // Panels - Route::get('/hub/missions/{mission}/{panel}', 'Missions\MissionController@panel'); + Route::get('/{mission}/comments', 'Missions\CommentController@index'); + Route::post('/{mission}/comments', 'Missions\CommentController@store'); + Route::delete('/comments/{comment}', 'Missions\CommentController@destroy'); + Route::get('/comments/{comment}/edit', 'Missions\CommentController@edit'); - Route::resource('/hub/missions', 'Missions\MissionController', [ - 'except' => ['create', 'edit'] - ]); + Route::get('/{mission}/notes', 'Missions\NoteController@index'); + Route::post('/{mission}/notes', 'Missions\NoteController@store'); + Route::delete('/notes/{note}', 'Missions\NoteController@destroy'); - Route::get('/hub/settings/avatar-sync', 'Users\SettingsController@avatarSync'); - Route::resource('/hub/settings', 'Users\SettingsController'); + Route::get('/{mission}/briefing/{faction}', 'Missions\BriefingController@index'); + Route::put('/{mission}/briefing/{faction}/lock', 'Missions\BriefingController@setLock'); + }); - Route::get('/hub/guides', function () { - return view('guides.index'); + Route::group(['middleware' => 'can:view-users'], function () { + Route::get('/hub/users', 'Users\UserController@index'); }); - // Hub Index - Route::resource('/hub', 'HubController', [ - 'only' => ['index'] - ]); + Route::prefix('hub/settings')->group(function() { + Route::get('/', 'Users\SettingsController@index'); + Route::post('/', 'Users\SettingsController@store'); + Route::get('/avatar-sync', 'Users\SettingsController@avatarSync'); + }); Route::get('/tokens/create', function (Request $request) { auth()->user()->tokens()->delete(); $token = auth()->user()->createToken('api_token'); - + return ['token' => $token->plainTextToken]; }); -}); -Route::group(['middleware' => 'can:view-users'], function () { - Route::resource('/hub/users', 'Users\UserController'); + // TODO: Rework these endpoints + Route::post('/hub/missions/media/add-photo', 'Missions\MediaController@uploadPhoto'); + Route::post('/hub/missions/media/delete-photo', 'Missions\MediaController@deletePhoto'); + Route::post('/hub/missions/media/add-video', 'Missions\MediaController@addVideo'); + Route::post('/hub/missions/media/delete-video', 'Missions\MediaController@removeVideo'); + + Route::get('/hub/missions/{mission}/delete', 'Missions\MissionController@destroy'); + Route::post('/hub/missions/{mission}/update', 'Missions\MissionController@update'); + Route::post('/hub/missions/{mission}/set-verification', 'Missions\MissionController@updateVerification'); + Route::get('/hub/missions/{mission}/{panel}', 'Missions\MissionController@panel'); });