]> _ Git - psq.git/commitdiff
redirect file
authorLouis Jeckel <louis.jeckel@outlook.com>
Wed, 16 Dec 2020 11:03:32 +0000 (12:03 +0100)
committerLouis Jeckel <louis.jeckel@outlook.com>
Wed, 16 Dec 2020 11:03:32 +0000 (12:03 +0100)
app/Http/Controllers/FlowpaperController.php
app/PdfFile.php
database/migrations/2020_12_16_104056_add_redirect_to_pdf_files.php [new file with mode: 0644]

index bb9d29a7a31d2d3f75e9b617dc4d25a0f3203a4d..25d227e9134bc66bba46743114f870d90a46e161 100644 (file)
@@ -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();
     }
 
+
 }
index c45eb6ed6d54bd6f7dc0adc8dedadd3b1a25fb4a..71ac7c6ad1e7aa2402c2ae5348ccfe81b1578193 100644 (file)
@@ -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 (file)
index 0000000..bb98ea6
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddRedirectToPdfFiles extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('pdf_files', function (Blueprint $table) {
+            $table->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');
+        });
+    }
+}