From 3f0b4e1a558145869c01cc24c1771de302d44af1 Mon Sep 17 00:00:00 2001 From: Louis Jeckel Date: Wed, 16 Dec 2020 12:03:32 +0100 Subject: [PATCH] redirect file --- app/Http/Controllers/FlowpaperController.php | 18 +++++++--- app/PdfFile.php | 17 ++++++++++ ...12_16_104056_add_redirect_to_pdf_files.php | 33 +++++++++++++++++++ 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 database/migrations/2020_12_16_104056_add_redirect_to_pdf_files.php diff --git a/app/Http/Controllers/FlowpaperController.php b/app/Http/Controllers/FlowpaperController.php index bb9d29a..25d227e 100644 --- a/app/Http/Controllers/FlowpaperController.php +++ b/app/Http/Controllers/FlowpaperController.php @@ -6,6 +6,7 @@ use App\AccessLog; use App\Flowpaper\Pdf2Json; use App\PdfFile; use Illuminate\Contracts\Filesystem\FileNotFoundException; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Storage; @@ -17,11 +18,15 @@ class FlowpaperController extends Controller /** * @param PdfFile $file * @param Request $request - * @return \Illuminate\Http\RedirectResponse|View + * @return RedirectResponse|View * @throws \Illuminate\Auth\Access\AuthorizationException */ public function view(PdfFile $file, Request $request) { + if($newFile = $file->redirectToFile) { + return redirect()->action('FlowpaperController@view', ['file' => $newFile->slug]); + } + if(! \Auth::check()) { return redirect()->route('login', ['redirect_to' => $request->getUri()]); } @@ -41,15 +46,19 @@ class FlowpaperController extends Controller /** * @param PdfFile $file * @param Request $request - * @return View + * @return View|RedirectResponse */ public function discover(PdfFile $file, Request $request) { + if($newFile = $file->redirectToFile) { + return redirect()->action('FlowpaperController@discover', ['file' => $newFile->slug]); + } + if (! $request->hasValidSignature()) { abort(401); } AccessLog::log($request, $file); - return $file->view(); + return $file->getFinalVersion()->view(); } @@ -78,7 +87,8 @@ class FlowpaperController extends Controller if (! $request->hasValidSignature()) { abort(401); } - return $file->downloadFile(); + return $file->getFinalVersion()->downloadFile(); } + } diff --git a/app/PdfFile.php b/app/PdfFile.php index c45eb6e..71ac7c6 100644 --- a/app/PdfFile.php +++ b/app/PdfFile.php @@ -15,6 +15,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations; use Illuminate\Http\File; use Illuminate\Http\Request; +use Laravel\Nova\Fields\HasOne; use Storage; use Illuminate\Support\Str; use KubAT\PhpSimple\HtmlDomParser; @@ -48,6 +49,7 @@ use Vaites\ApacheTika\Client as TikaClient; * @property string $directory * @property string $title * @property bool $is_free + * @property int $redirect_to_file * @property Collection $accessLogs * @property-read int $viewCount * @@ -211,6 +213,21 @@ class PdfFile extends TwillModel implements Sortable return $this->hasMany(AccessLog::class, 'file_id'); } + /** + * @return Relations\BelongsTo + */ + public function redirectToFile(): Relations\BelongsTo + { + return $this->belongsTo(__CLASS__, 'redirect_to_file'); + } + + /** + * @return PdfFile + */ + public function getFinalVersion() + { + return $this->redirectToFile ?? $this; + } /** * @return int diff --git a/database/migrations/2020_12_16_104056_add_redirect_to_pdf_files.php b/database/migrations/2020_12_16_104056_add_redirect_to_pdf_files.php new file mode 100644 index 0000000..bb98ea6 --- /dev/null +++ b/database/migrations/2020_12_16_104056_add_redirect_to_pdf_files.php @@ -0,0 +1,33 @@ +foreignId('redirect_to_file')->nullable(); + $table->foreign('redirect_to_file')->references('id')->on('pdf_files')->nullOnDelete(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('pdf_files', function (Blueprint $table) { + $table->dropColumn('redirect_to_file'); + }); + } +} -- 2.39.5