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;
/**
* @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()]);
}
/**
* @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();
}
if (! $request->hasValidSignature()) {
abort(401);
}
- return $file->downloadFile();
+ return $file->getFinalVersion()->downloadFile();
}
+
}
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;
* @property string $directory
* @property string $title
* @property bool $is_free
+ * @property int $redirect_to_file
* @property Collection $accessLogs
* @property-read int $viewCount
*
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
--- /dev/null
+<?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');
+ });
+ }
+}