From 3dba586f83d8a4874185b861afa691338fb6c52a Mon Sep 17 00:00:00 2001 From: Nabeel Shahzad Date: Mon, 2 Apr 2018 18:37:41 -0500 Subject: [PATCH] Add downloads page --- app/Http/Controllers/Admin/FileController.php | 2 +- .../Frontend/DownloadController.php | 85 +++++++++++++++++++ .../Controllers/Frontend/FileController.php | 47 ---------- app/Routes/web.php | 9 +- .../layouts/default/airports/show.blade.php | 16 +--- .../layouts/default/downloads/index.blade.php | 23 +++++ .../layouts/default/downloads/table.blade.php | 15 ++++ resources/views/layouts/default/nav.blade.php | 18 ++-- 8 files changed, 142 insertions(+), 73 deletions(-) create mode 100644 app/Http/Controllers/Frontend/DownloadController.php delete mode 100644 app/Http/Controllers/Frontend/FileController.php create mode 100644 resources/views/layouts/default/downloads/index.blade.php create mode 100644 resources/views/layouts/default/downloads/table.blade.php diff --git a/app/Http/Controllers/Admin/FileController.php b/app/Http/Controllers/Admin/FileController.php index a64a3be9..4d5ad49b 100644 --- a/app/Http/Controllers/Admin/FileController.php +++ b/app/Http/Controllers/Admin/FileController.php @@ -54,7 +54,7 @@ class FileController extends Controller $file = $request->file('file'); $this->fileSvc->saveFile($file, 'files', [ 'name' => $attrs['filename'], - 'description' => $attrs['file_descriptoin'], + 'description' => $attrs['file_description'], 'ref_model' => $attrs['ref_model'], 'ref_model_id' => $attrs['ref_model_id'], ]); diff --git a/app/Http/Controllers/Frontend/DownloadController.php b/app/Http/Controllers/Frontend/DownloadController.php new file mode 100644 index 00000000..aa3056a1 --- /dev/null +++ b/app/Http/Controllers/Frontend/DownloadController.php @@ -0,0 +1,85 @@ +get(); + + /** + * Group all the files but compound the model with the ID, + * since we can have multiple files for every `ref_model` + */ + $grouped_files = $files->groupBy(function($item, $key) { + return $item['ref_model'].'_'.$item['ref_model_id']; + }); + + /** + * The $group here looks like: App\Models\Airport_KAUS + * Split it into the $class and $id, and then change the + * name of the group to the object instance "name" + */ + $regrouped_files = []; + foreach($grouped_files as $group => $files) { + [$class, $id] = explode('_', $group); + $klass = new $class(); + $obj = $klass->find($id); + + $category = explode('\\', $class); + $category = end($category); + + $group_name = $category.' - '.$obj->name; + $regrouped_files[$group_name] = $files; + } + + return view('downloads.index', [ + 'grouped_files' => $regrouped_files, + ]); + } + + /** + * Show the application dashboard. + */ + public function show($id) + { + /** + * @var File $file + */ + $file = File::find($id); + if (!$file) { + Flash::error('File doesn\'t exist'); + return redirect()->back(); + } + + // Allowed to download? If not, direct to login + if (!$file->public && !Auth::check()) { + return redirect(config('app.login_redirect')); + } + + ++$file->download_count; + $file->save(); + + if($file->disk === 'public') { + $storage = Storage::disk('public'); + return $storage->download($file->path, $file->filename); + } + + // TODO: Config for streamed response? + return redirect()->to($file->url); + } +} diff --git a/app/Http/Controllers/Frontend/FileController.php b/app/Http/Controllers/Frontend/FileController.php deleted file mode 100644 index fd85c170..00000000 --- a/app/Http/Controllers/Frontend/FileController.php +++ /dev/null @@ -1,47 +0,0 @@ -back(); - } - - // Allowed to download? If not, direct to login - if (!$file->public && !Auth::check()) { - return redirect(config('app.login_redirect')); - } - - ++$file->download_count; - $file->save(); - - if($file->disk === 'public') { - $storage = Storage::disk('public'); - return $storage->download($file->path, $file->filename); - } - - // TODO: Config for streamed response? - return redirect()->to($file->url); - } -} diff --git a/app/Routes/web.php b/app/Routes/web.php index 91f45a12..a371a25e 100755 --- a/app/Routes/web.php +++ b/app/Routes/web.php @@ -10,10 +10,10 @@ Route::group([ Route::get('r/{id}', 'PirepController@show')->name('pirep.show.public'); Route::get('p/{id}', 'ProfileController@show')->name('profile.show.public'); - Route::get('users', 'UserController@index')->name('users.show'); - Route::get('pilots', 'UserController@index')->name('users.show'); + Route::get('users', 'UserController@index')->name('users.index'); + Route::get('pilots', 'UserController@index')->name('pilots.index'); - Route::get('livemap', 'AcarsController@index')->name('livemap.public'); + Route::get('livemap', 'AcarsController@index')->name('livemap.index'); }); /** @@ -28,7 +28,8 @@ Route::group([ Route::get('airports/{id}', 'AirportController@show')->name('airports.show'); // Download a file - Route::get('files/{id}', 'FileController@show')->name('files.show'); + Route::get('downloads', 'DownloadController@index')->name('downloads.index'); + Route::get('downloads/{id}', 'DownloadController@show')->name('downloads.download'); Route::get('flights/bids', 'FlightController@bids')->name('flights.bids'); Route::get('flights/search', 'FlightController@search')->name('flights.search'); diff --git a/resources/views/layouts/default/airports/show.blade.php b/resources/views/layouts/default/airports/show.blade.php index bb093112..87a9a415 100644 --- a/resources/views/layouts/default/airports/show.blade.php +++ b/resources/views/layouts/default/airports/show.blade.php @@ -29,21 +29,7 @@ @if($airport->files && Auth::check())

Downloads

- + @include('files.table', ['files' => $airport->files])
@endif diff --git a/resources/views/layouts/default/downloads/index.blade.php b/resources/views/layouts/default/downloads/index.blade.php new file mode 100644 index 00000000..3b00a15d --- /dev/null +++ b/resources/views/layouts/default/downloads/index.blade.php @@ -0,0 +1,23 @@ +@extends('app') +@section('title', 'downloads') + +@section('content') + @include('flash::message') +
+
+

Downloads

+
+
+ @foreach($grouped_files as $group => $files) +
+
+

{{ $group }}

+
+ +
+ @include('downloads.table', ['files' => $files]) +
+
+ @endforeach +@endsection + diff --git a/resources/views/layouts/default/downloads/table.blade.php b/resources/views/layouts/default/downloads/table.blade.php new file mode 100644 index 00000000..45712013 --- /dev/null +++ b/resources/views/layouts/default/downloads/table.blade.php @@ -0,0 +1,15 @@ + diff --git a/resources/views/layouts/default/nav.blade.php b/resources/views/layouts/default/nav.blade.php index a57ed70f..0d6a8d19 100644 --- a/resources/views/layouts/default/nav.blade.php +++ b/resources/views/layouts/default/nav.blade.php @@ -1,7 +1,7 @@