]> _ Git - psq.git/commitdiff
wip #7605 @5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 11 Sep 2025 14:54:45 +0000 (16:54 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 11 Sep 2025 14:54:45 +0000 (16:54 +0200)
14 files changed:
.docker/images/php-fpm/Dockerfile
.docker/production/docker-compose.yml
app/Console/Commands/ConvertArchivesToFluidbook.php
app/Console/Commands/Migration.php
app/Console/Kernel.php
app/Flowpaper/Pdf2Json.php [deleted file]
app/Http/Controllers/FlowpaperController.php [deleted file]
app/Http/Controllers/FluidbookController.php [new file with mode: 0644]
app/Http/Controllers/XSendFileController.php [new file with mode: 0644]
app/PdfFile.php
composer.json
composer.lock
resources/views/flowpaper/view.blade.php [deleted file]
routes/web.php

index a525f99d7a9e2d9cce7ecbc8f2677f18e4c91fb8..a835b2e55bc065e8c6eae2e12bca2a669ec66a47 100644 (file)
@@ -13,6 +13,7 @@ ENV TERM=linux
 ENV DEBIAN_FRONTEND=noninteractive
 
 # Add Ondrej PHP repository
+RUN apt clean
 RUN apt update \
     && apt install -y --no-install-recommends ca-certificates gnupg bash curl \
     && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ondrej-php.list \
@@ -49,6 +50,7 @@ RUN apt -y --no-install-recommends install \
         php8.3-curl \
         php8.3-bcmath \
         php8.3-fpm \
+        php8.3-sodium \
         less nano wget nodejs
 
 RUN apt -y --no-install-recommends install nodejs sudo openssh-server rsyslog cron postfix mariadb-client zip unzip imagemagick
index 2c2b901a97e2be24332637ac1d0d4b920e49be4f..cfd66f171a96ec40cc23f3481a60b75d74dfcd8d 100644 (file)
@@ -90,7 +90,7 @@ services:
     depends_on:
       - mariadb
     volumes:
-      - "./www/.docker/config/adminer/php.ini:/etc/php/conf.d/99-adminer.ini"
+      - "./www/.docker/config/adminer/php.ini:/usr/local/etc/php/conf.d/99-adminer.ini"
     environment:
       ADMINER_DEFAULT_SERVER: presquot-mariadb
       VIRTUAL_HOST: adminer.dev.prescription-quotidien.com
index a5079fd748bfbc270a014df010557949c7959c89..c6fc491208483ad9ae73164ee7e46ddd252eaec0 100644 (file)
@@ -31,7 +31,8 @@ class ConvertArchivesToFluidbook extends Command
                 copy($filebin, $path);
             }
             if (!file_exists($path)) {
-                Cache::forever($cacheKey, false);
+                dd($path);
+                //Cache::forever($cacheKey, false);
                 continue;
             }
             $res = $client->createFluidbook(
@@ -47,11 +48,12 @@ class ConvertArchivesToFluidbook extends Command
                 Cache::forever($cacheKey, $res);
                 Artisan::call('psq:fluidbook:updateindex');
             }
-            return;
+            sleep(30);
         }
     }
 
-    public static function getCacheKey($reference){
+    public static function getCacheKey($reference)
+    {
         return "fluidbook_byref_$reference";
     }
 
index 8f231579a6722da67e6bc1fb72967fc82f87a415..60900b621dfda9b4d47f122d78a42fe63fb7acde 100644 (file)
@@ -35,7 +35,7 @@ class Migration extends Command
 
     public function handle()
     {
-        $ignore = [];
+        $ignore = ['settings', 'setting_translations'];
 
         $tmp = '/tmp/dump' . rand(100000, 999999) . '.sql';
 
@@ -44,7 +44,7 @@ class Migration extends Command
         $mysqldump->setArg('h', env('OLD_DB_HOST'));
         $mysqldump->setManualArg('-u' . env('OLD_DB_USERNAME') . ' -p' . env('OLD_DB_PASSWORD'));
         foreach ($ignore as $i) {
-            $mysqldump->setArg('ignore-table', $i);
+            $mysqldump->setArg('ignore-table', env('OLD_DB_DATABASE') . '.' . $i);
         }
         $mysqldump->setArg(null, env('OLD_DB_DATABASE'));
         $mysqldump->execute();
index 799f4209c28e05a9c17c50b2b334d094baa2b875..f8bfcabd6d35f46ac4da6eea3e9aca0a37ba3509 100644 (file)
@@ -26,11 +26,7 @@ class Kernel extends ConsoleKernel
     protected function schedule(Schedule $schedule)
     {
         $schedule->job(new CheckForTrialExpirationDates)->dailyAt('13:00');
-        $schedule->command('psq:fluidbook:archives')->everyThirtyMinutes();
-        $schedule->call(function(){
-            echo 'test ping !';
-            return 'test ping !';
-        })->everyMinute();
+        $schedule->command('psq:fluidbook:archives')->dailyAt('04:00');
     }
 
     /**
diff --git a/app/Flowpaper/Pdf2Json.php b/app/Flowpaper/Pdf2Json.php
deleted file mode 100644 (file)
index 9f597a6..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-
-namespace App\Flowpaper;
-
-
-
-
-class Pdf2Json
-{
-    /**
-     * Method:render page as json
-     * @param $pdfPath
-     * @param $jsonPath
-     * @return string
-     */
-       public static function convert($pdfPath, $jsonPath): ?string
-    {
-               $output=array();
-
-               try {
-
-                   $command = '"pdf2json" "{pdfPath}" -enc UTF-8 -compress "{jsonPath}"';
-            $command = str_replace(['{pdfPath}', '{jsonPath}'], [$pdfPath, $jsonPath], $command);
-
-                       $return_var = 0;
-
-                       exec($command,$output,$return_var);
-
-                       if($return_var === 0){
-                               return '[OK]';
-                       }
-
-                       return '[Error converting PDF to JSON, please check your directory permissions and configuration]';
-
-               } catch (\Exception $ex) {
-                       return '[' . $ex . ']';
-               }
-       }
-}
diff --git a/app/Http/Controllers/FlowpaperController.php b/app/Http/Controllers/FlowpaperController.php
deleted file mode 100644 (file)
index bab1922..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-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;
-use Illuminate\View\View;
-
-class FlowpaperController extends Controller
-{
-
-    /**
-     * @param PdfFile $file
-     * @param Request $request
-     * @return RedirectResponse|View
-     * @throws \Illuminate\Auth\Access\AuthorizationException
-     * Auth'd route
-     */
-    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()]);
-        }
-
-        if(! \Auth::user()->reg_complete) {
-            return redirect()->route('account.complete-reg');
-        }
-
-        $this->authorize('view', $file);
-
-
-        AccessLog::log($request, $file);
-        return $file->view();
-    }
-
-
-    /**
-     * @param PdfFile $file
-     * @param Request $request
-     * @return View|RedirectResponse
-     * Signed Route
-     */
-    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->getFinalVersion()->view();
-
-    }
-
-
-    /**
-     * @param PdfFile $file
-     * @param Request $request
-     * @return View
-     * Used for admin auth only
-     */
-    public function preview(PdfFile $file, Request $request)
-    {
-        if (! $request->hasValidSignature()) {
-            abort(401);
-        }
-        return $file->view();
-    }
-
-    /**
-     * @param PdfFile $file
-     * @param Request $request
-     * @return \Symfony\Component\HttpFoundation\StreamedResponse
-     */
-    public function download(PdfFile $file, Request $request)
-    {
-        if (! $request->hasValidSignature()) {
-            abort(401);
-        }
-        return $file->getFinalVersion()->downloadFile();
-    }
-
-
-}
diff --git a/app/Http/Controllers/FluidbookController.php b/app/Http/Controllers/FluidbookController.php
new file mode 100644 (file)
index 0000000..25b954c
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\AccessLog;
+use App\PdfFile;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\View\View;
+
+class FluidbookController extends Controller
+{
+
+
+
+    /**
+     * @param PdfFile $file
+     * @param Request $request
+     * @return RedirectResponse|View
+     * @throws \Illuminate\Auth\Access\AuthorizationException
+     * Auth'd route
+     */
+    public function view(PdfFile $file, Request $request)
+    {
+$file->getFluidbookPath();
+    }
+
+
+    /**
+     * @param PdfFile $file
+     * @param Request $request
+     * @return View|RedirectResponse
+     * Signed Route
+     */
+    public function discover(PdfFile $file, Request $request)
+    {
+        if ($newFile = $file->redirectToFile) {
+            return redirect()->action('FluidbookController@discover', ['file' => $newFile->slug]);
+        }
+
+        if (!$request->hasValidSignature()) {
+            abort(401);
+        }
+        AccessLog::log($request, $file);
+        return $file->getFinalVersion()->view();
+
+    }
+
+
+    /**
+     * @param PdfFile $file
+     * @param Request $request
+     * @return View
+     * Used for admin auth only
+     */
+    public function preview(PdfFile $file, Request $request)
+    {
+        if (!$request->hasValidSignature()) {
+            abort(401);
+        }
+        return $file->view();
+    }
+
+    /**
+     * @param PdfFile $file
+     * @param Request $request
+     * @return \Symfony\Component\HttpFoundation\StreamedResponse
+     */
+    public function download(PdfFile $file, Request $request)
+    {
+        if (!$request->hasValidSignature()) {
+            abort(401);
+        }
+        return $file->getFinalVersion()->downloadFile();
+    }
+
+
+}
diff --git a/app/Http/Controllers/XSendFileController.php b/app/Http/Controllers/XSendFileController.php
new file mode 100644 (file)
index 0000000..2cdc707
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Cubist\Util\Files\Files;
+use Illuminate\Routing\Controller;
+
+class XSendFileController extends Controller
+{
+    protected function xSendFile($path)
+    {
+        return self::sendfile($path);
+    }
+
+    public static function sendfile($path, $maxage = 86400, $headers = [])
+    {
+        $response = response(null);
+        $request = request();
+        if (!file_exists($path)) {
+            abort(404, 'File not found');
+        }
+        $mtime = filemtime($path);
+        $fsize = filesize($path);
+        $response->header('Content-Type', Files::_getMimeType($path))->header('Content-Length', $fsize)->header('Last-Modified', gmdate('D, d M Y H:i:s T', $mtime));
+        if ($maxage > 0) {
+            $etag = $mtime . '.' . $fsize;
+            $response->header('ETag', '"' . $etag . '"')->header('Cache-Control', 'max-age=' . $maxage);
+            $httpisnotmatch = $request->server('HTTP_IF_NONE_MATCH');
+            if (null !== $httpisnotmatch && $etag === $httpisnotmatch) {
+                return $response->setStatusCode(304);
+            }
+        } else {
+            $response->header('Cache-Control', 'no-store');
+        }
+        foreach ($headers as $key => $value) {
+            $response->header($key, $value);
+        }
+        $response->setContent(':/');
+        return $response->header('X-Sendfile', $path);
+    }
+
+    public static function sendfileNoCache($path)
+    {
+        return self::sendfile($path, 0);
+    }
+}
index d865db0d89dec9c1bbf773c532f42c6e437aa4ed..3e93fd92ba584e5ead467e95c3c20cfa9be2b493 100644 (file)
@@ -7,9 +7,11 @@ use A17\Twill\Models\Behaviors\HasSlug;
 use A17\Twill\Models\Behaviors\Sortable;
 use A17\Twill\Models\Model as TwillModel;
 use App\Flowpaper\Pdf2Json;
+use App\Http\Controllers\XSendFileController;
 use Aws\S3\S3Client;
 use Carbon\Carbon;
 use Fluidbook\ToolboxApiClient\Client;
+use Google\Service\Drive\Resource\Files;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Database\Eloquent\Model;
@@ -131,6 +133,17 @@ class PdfFile extends TwillModel implements Sortable
     }
 
 
+    public function getFluidbookPath($path = '')
+    {
+        $base = \Cubist\Util\Files\Files::mkdir(storage_path('fluidbook/' . $this->slug . '/'));
+        if (!$path) {
+            $path = 'index.html';
+        }
+        $pathname = $base . $path;
+        $res = XSendFileController::sendfile($pathname);
+        return $res;
+    }
+
     /**
      * @throws PdfToImage\Exceptions\PdfDoesNotExist
      * @throws \Exception
@@ -382,7 +395,7 @@ class PdfFile extends TwillModel implements Sortable
      */
     public function getUrl(): string
     {
-        return route('flowpaper.view', ['file' => $this->slug]);
+        return route('fluidbook.view', ['file' => $this->slug]);
     }
 
     /**
@@ -392,7 +405,7 @@ class PdfFile extends TwillModel implements Sortable
      */
     public function getUrlWithToken(User $user): string
     {
-        return $user->routeWithToken('flowpaper.view', ['file' => $this->slug]);
+        return $user->routeWithToken('fluidbook.view', ['file' => $this->slug]);
     }
 
     /**
@@ -403,7 +416,7 @@ class PdfFile extends TwillModel implements Sortable
     public function getSignedUrl(User $user): string
     {
         return \URL::temporarySignedRoute(
-            'flowpaper.discover',
+            'fluidbook.discover',
             now()->addDays(2),
             ['file' => $this->slug]
         );
@@ -591,7 +604,7 @@ class PdfFile extends TwillModel implements Sortable
      */
     public function view()
     {
-        return view('flowpaper.view', [
+        return view('fluidbook.view', [
             'pdfPath' => $this->binUrl,
             'jsonPath' => $this->jsonUrl,
             'title' => (string)$this,
index 91b78ac73e00b9c3058ace9e52c1fefd36b4a2b8..e5eb494b27a88387aa3f521675e0d92b7df8a3c2 100644 (file)
         "fluidbook/toolboxapiclient": "*",
         "fruitcake/laravel-cors": "^1.0",
         "gabrieliuga/laravel-nova-field-iframe": "^1.0",
-        "guzzlehttp/guzzle": "^7.9",
+        "guzzlehttp/guzzle": "^7.10",
         "html2text/html2text": "^4.3",
         "idf/nova-unlayer-field": "^0.2.1",
-        "itsgoingd/clockwork": "^5.2",
+        "itsgoingd/clockwork": "^5.3",
         "judev/php-htmltruncator": "^1.2",
         "kriswallsmith/buzz": "^1.2",
         "kub-at/php-simple-html-dom-parser": "^1.9",
         "laravel/cashier": "^12.17",
         "laravel/framework": "^8.83",
         "laravel/horizon": "^5.22",
-        "laravel/nova": "~3.0",
+        "laravel/nova": "~3.32",
         "laravel/scout": "^8.6",
-        "laravel/tinker": "^2.9",
+        "laravel/tinker": "^2.10",
         "league/glide": "^1.7",
         "league/glide-laravel": "^1.0",
         "league/html-to-markdown": "^4.10",
         "maatwebsite/laravel-nova-excel": "^1.2",
         "mailgun/mailgun-php": "^3.6",
-        "masterminds/html5": "^2.9",
+        "masterminds/html5": "^2.10",
         "numaxlab/nova-ckeditor5-classic": "^1.1",
         "nyholm/psr7": "^1.8",
         "php-http/guzzle7-adapter": "^1.1",
index d4d21b2f719069a6a14be6094afa83c2e443e3af..afa77bc24545575826ee42f6d34954001ae358d9 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "d45c969a16e08ea6fc9802e0b87f2e5d",
+    "content-hash": "2ff911a94282163338e5e60e6895c410",
     "packages": [
         {
             "name": "anaseqal/nova-import",
         },
         {
             "name": "aws/aws-sdk-php",
-            "version": "3.356.11",
+            "version": "3.337.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/aws/aws-sdk-php.git",
-                "reference": "9dcb228185d441cedd4e6fe76905f6a6cdf83a9c"
+                "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/9dcb228185d441cedd4e6fe76905f6a6cdf83a9c",
-                "reference": "9dcb228185d441cedd4e6fe76905f6a6cdf83a9c",
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/06dfc8f76423b49aaa181debd25bbdc724c346d6",
+                "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
                 "ext-pcre": "*",
                 "ext-simplexml": "*",
-                "guzzlehttp/guzzle": "^7.4.5",
-                "guzzlehttp/promises": "^2.0",
-                "guzzlehttp/psr7": "^2.4.5",
-                "mtdowling/jmespath.php": "^2.8.0",
-                "php": ">=8.1",
-                "psr/http-message": "^2.0"
+                "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
+                "guzzlehttp/promises": "^1.4.0 || ^2.0",
+                "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+                "mtdowling/jmespath.php": "^2.6",
+                "php": ">=7.2.5",
+                "psr/http-message": "^1.0 || ^2.0"
             },
             "require-dev": {
                 "andrewsville/php-token-reflection": "^1.4",
                 "aws/aws-php-sns-message-validator": "~1.0",
                 "behat/behat": "~3.0",
-                "composer/composer": "^2.7.8",
+                "composer/composer": "^1.10.22",
                 "dms/phpunit-arraysubset-asserts": "^0.4.0",
                 "doctrine/cache": "~1.4",
                 "ext-dom": "*",
                 "ext-openssl": "*",
                 "ext-pcntl": "*",
                 "ext-sockets": "*",
+                "nette/neon": "^2.3",
+                "paragonie/random_compat": ">= 2",
                 "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
-                "psr/cache": "^2.0 || ^3.0",
-                "psr/simple-cache": "^2.0 || ^3.0",
-                "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
-                "symfony/filesystem": "^v6.4.0 || ^v7.1.0",
-                "yoast/phpunit-polyfills": "^2.0"
+                "psr/cache": "^1.0 || ^2.0 || ^3.0",
+                "psr/simple-cache": "^1.0 || ^2.0 || ^3.0",
+                "sebastian/comparator": "^1.2.3 || ^4.0",
+                "yoast/phpunit-polyfills": "^1.0"
             },
             "suggest": {
                 "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
                 "sdk"
             ],
             "support": {
-                "forum": "https://github.com/aws/aws-sdk-php/discussions",
+                "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.356.11"
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.337.3"
             },
-            "time": "2025-09-04T18:06:33+00:00"
+            "time": "2025-01-21T19:10:05+00:00"
         },
         {
             "name": "biscolab/laravel-recaptcha",
         },
         {
             "name": "cakephp/chronos",
-            "version": "2.5.1",
+            "version": "2.4.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/cakephp/chronos.git",
-                "reference": "9e7372952e358c9b562460f6a1d08eafe1e1df64"
+                "reference": "b0321ab7658af9e7abcb3dd876f226e6f3dbb81f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/cakephp/chronos/zipball/9e7372952e358c9b562460f6a1d08eafe1e1df64",
-                "reference": "9e7372952e358c9b562460f6a1d08eafe1e1df64",
+                "url": "https://api.github.com/repos/cakephp/chronos/zipball/b0321ab7658af9e7abcb3dd876f226e6f3dbb81f",
+                "reference": "b0321ab7658af9e7abcb3dd876f226e6f3dbb81f",
                 "shasum": ""
             },
             "require": {
-                "php": ">=8.4"
+                "php": ">=7.2"
             },
             "require-dev": {
                 "cakephp/cakephp-codesniffer": "^4.5",
                 "issues": "https://github.com/cakephp/chronos/issues",
                 "source": "https://github.com/cakephp/chronos"
             },
-            "time": "2025-06-18T08:23:08+00:00"
+            "time": "2024-07-30T22:26:11+00:00"
         },
         {
             "name": "carbonphp/carbon-doctrine-types",
             "source": {
                 "type": "git",
                 "url": "git://git.cubedesigners.com/cubist_util.git",
-                "reference": "5707c953b156499432ada9197f7b4c7c6e6dd9ce"
+                "reference": "641778c38e73901198cb6684030d0816f93944d9"
             },
             "dist": {
                 "type": "tar",
-                "url": "https://composer.cubedesigners.com/dist/cubist/util/cubist-util-dev-master-ee0a7c.tar",
-                "reference": "5707c953b156499432ada9197f7b4c7c6e6dd9ce",
-                "shasum": "2c903a3859779eb8274250d090526bb5e96854f3"
+                "url": "https://composer.cubedesigners.com/dist/cubist/util/cubist-util-dev-master-8a5b6e.tar",
+                "reference": "641778c38e73901198cb6684030d0816f93944d9",
+                "shasum": "f0c7ef1ba41414170b93e120ebabe053ffaafbdd"
             },
             "require": {
                 "cubist/net": "dev-master",
                 "ext-libxml": "*",
                 "ext-mbstring": "*",
                 "ext-simplexml": "*",
-                "ext-sodium": "*",
                 "laravel/framework": "~5.8|^6.0|^7.0|^8.0|^9.0|^10.0",
                 "norkunas/youtube-dl-php": "^2.2",
                 "php": ">=7.2"
                 }
             ],
             "description": "Utilities class",
-            "time": "2025-08-28T08:53:02+00:00"
+            "time": "2025-09-11T14:31:34+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
         },
         {
             "name": "google/apiclient-services",
-            "version": "v0.410.0",
+            "version": "v0.411.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/googleapis/google-api-php-client-services.git",
-                "reference": "ef335e912305403aef8a6552cc2101c537b9ebdd"
+                "reference": "3d616fcefdb8e6c598b2d007d4155fe516b91abd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/ef335e912305403aef8a6552cc2101c537b9ebdd",
-                "reference": "ef335e912305403aef8a6552cc2101c537b9ebdd",
+                "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/3d616fcefdb8e6c598b2d007d4155fe516b91abd",
+                "reference": "3d616fcefdb8e6c598b2d007d4155fe516b91abd",
                 "shasum": ""
             },
             "require": {
             ],
             "support": {
                 "issues": "https://github.com/googleapis/google-api-php-client-services/issues",
-                "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.410.0"
+                "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.411.0"
             },
-            "time": "2025-08-26T16:51:06+00:00"
+            "time": "2025-09-05T20:24:02+00:00"
         },
         {
             "name": "google/auth",
         },
         {
             "name": "league/glide",
-            "version": "1.x-dev",
+            "version": "1.7.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/glide.git",
-                "reference": "1f4a11801a10c284953860069ff20415fe2605c7"
+                "reference": "8dba756ada0b8e525bf6f1f7d1bd83c1e99e124e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/glide/zipball/1f4a11801a10c284953860069ff20415fe2605c7",
-                "reference": "1f4a11801a10c284953860069ff20415fe2605c7",
+                "url": "https://api.github.com/repos/thephpleague/glide/zipball/8dba756ada0b8e525bf6f1f7d1bd83c1e99e124e",
+                "reference": "8dba756ada0b8e525bf6f1f7d1bd83c1e99e124e",
                 "shasum": ""
             },
             "require": {
                 "intervention/image": "^2.4",
                 "league/flysystem": "^1.0",
                 "php": "^7.2|^8.0",
-                "psr/http-message": "^1.0|^2.0"
+                "psr/http-message": "^1.0"
             },
             "require-dev": {
                 "mockery/mockery": "^1.3.3",
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/glide/issues",
-                "source": "https://github.com/thephpleague/glide/tree/1.x"
+                "source": "https://github.com/thephpleague/glide/tree/1.7.2"
             },
-            "time": "2023-08-24T08:37:04+00:00"
+            "time": "2023-02-14T06:26:04+00:00"
         },
         {
             "name": "league/glide-laravel",
         },
         {
             "name": "psq/psq-theme",
-            "version": "dev-master",
+            "version": "dev-main",
             "dist": {
                 "type": "path",
                 "url": "./nova-components/PsqTheme",
         },
         {
             "name": "psr/http-message",
-            "version": "2.0",
+            "version": "1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/http-message.git",
-                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+                "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
-                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+                "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
                 "shasum": ""
             },
             "require": {
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
             "authors": [
                 {
                     "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
             "description": "Common interface for HTTP messages",
                 "response"
             ],
             "support": {
-                "source": "https://github.com/php-fig/http-message/tree/2.0"
+                "source": "https://github.com/php-fig/http-message/tree/1.1"
             },
-            "time": "2023-04-04T09:54:51+00:00"
+            "time": "2023-04-04T09:50:52+00:00"
         },
         {
             "name": "psr/log",
         },
         {
             "name": "fzaninotto/faker",
-            "version": "v1.9.2",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/fzaninotto/Faker.git",
-                "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e"
+                "reference": "5ffe7db6c80f441f150fc88008d64e64af66634b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e",
-                "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e",
+                "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/5ffe7db6c80f441f150fc88008d64e64af66634b",
+                "reference": "5ffe7db6c80f441f150fc88008d64e64af66634b",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0"
             },
             "require-dev": {
                 "ext-intl": "*",
                 "phpunit/phpunit": "^4.8.35 || ^5.7",
                 "squizlabs/php_codesniffer": "^2.9.2"
             },
+            "default-branch": true,
             "type": "library",
             "extra": {
                 "branch-alias": {
             ],
             "support": {
                 "issues": "https://github.com/fzaninotto/Faker/issues",
-                "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2"
+                "source": "https://github.com/fzaninotto/Faker/tree/master"
             },
             "abandoned": true,
-            "time": "2020-12-11T09:56:16+00:00"
+            "time": "2020-12-11T09:59:14+00:00"
         },
         {
             "name": "hamcrest/hamcrest-php",
         },
         {
             "name": "phpunit/phpunit",
-            "version": "9.6.25",
+            "version": "9.6.26",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "049c011e01be805202d8eebedef49f769a8ec7b7"
+                "reference": "a0139ea157533454f611038326f3020b3051f129"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/049c011e01be805202d8eebedef49f769a8ec7b7",
-                "reference": "049c011e01be805202d8eebedef49f769a8ec7b7",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a0139ea157533454f611038326f3020b3051f129",
+                "reference": "a0139ea157533454f611038326f3020b3051f129",
                 "shasum": ""
             },
             "require": {
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.25"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.26"
             },
             "funding": [
                 {
                     "type": "tidelift"
                 }
             ],
-            "time": "2025-08-20T14:38:31+00:00"
+            "time": "2025-09-11T06:17:45+00:00"
         },
         {
             "name": "sebastian/cli-parser",
diff --git a/resources/views/flowpaper/view.blade.php b/resources/views/flowpaper/view.blade.php
deleted file mode 100644 (file)
index a4e698f..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<!doctype html>
-<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="initial-scale=1,user-scalable=no,maximum-scale=1,width=device-width" />
-
-
-    <!-- CSRF Token -->
-    <meta name="csrf-token" content="{{ csrf_token() }}">
-
-    <title>{{ $title }}</title>
-{{--    <script--}}
-{{--      src="{!! asset('js/sentry.min.js') !!}"--}}
-{{--      integrity="sha384-A1qzcXXJWl+bzYr+r8AdFzSaLbdcbYRFmG37MEDKr4EYjtraUyoZ6UiMw31jHcV9"--}}
-{{--      crossorigin="anonymous"--}}
-{{--      ></script>--}}
-
-
-
-    <script type="text/javascript" src="{{asset('js/flowpaper/jquery.min.js')}}" defer></script>
-    <script type="text/javascript" src="{{asset('js/flowpaper/jquery.extensions.min.js')}}" defer></script>
-    <!--[if gte IE 10 | !IE ]><!-->
-    <script type="text/javascript" src="{{asset('js/flowpaper/three.min.js')}}" defer></script>
-    <!--<![endif]-->
-    <script type="text/javascript" src="{{asset('js/flowpaper/flowpaper.js')}}" defer></script>
-    <script type="text/javascript" src="{{asset('js/flowpaper/flowpaper_handlers.js')}}" defer></script>
-
-
-    <script type="text/javascript" defer>
-
-
-        @auth
-        let user_id = '{{\Auth::user()->id}}';
-        @endauth
-
-        window.onload = function () {
-            let url = '{!! $pdfPath !!}';
-            url = url.replace(/&amp;/g, '&');
-
-            let json = '{!! $jsonPath !!}';
-            json = json.replace(/&amp;/g, '&');
-
-
-            // $.get(url)
-            //     .then(function(d) {
-
-                    $('#documentViewer').FlowPaperViewer(
-                        {
-                            config: {
-
-                                PDFFile: url,
-                                Scale: 0.8,
-                                ZoomTransition: 'easeOut',
-                                ZoomTime: 0.5,
-                                ZoomInterval: 0.05,
-                                FitPageOnLoad: true,
-                                FitWidthOnLoad: false,
-                                FullScreenAsMaxWindow: false,
-                                ProgressiveLoading: false,
-                                MinZoomSize: 0.2,
-                                MaxZoomSize: 5,
-                                SearchMatchAll: true,
-                                InitViewMode: '',
-                                EnableWebGL: true,
-                                RenderingOrder: 'html5,html5',
-
-                                ViewModeToolsVisible: true,
-                                ZoomToolsVisible: true,
-                                NavToolsVisible: true,
-                                CursorToolsVisible: true,
-                                SearchToolsVisible: true,
-                                UIConfig: "{{asset('xml/UI_Zine.xml')}}",
-                                localeDirectory: "/locale/",
-                                TrackingNumber : 'UA-177866246-1',
-                                BrandingLogo : "{{App\Helpers\Asset::public('logo.png')}}",
-                                BrandingUrl : 'https://prescription-quotidien.com',
-
-                                // DocSizeQueryService        : 'services/swfsize.php?doc=' + startDocument,
-                                JSONFile: json,
-
-                                JSONDataType: 'json',
-                                key: "{{config('flowpaper.key')}}",
-
-                                WMode: 'transparent',
-                                localeChain: 'fr_FR'
-
-                            }
-                        }
-                    )
-        }
-
-
-    </script>
-
-    <style type="text/css" media="screen">
-        html, body     { height:100%; }
-        body { margin:0; padding:0; overflow:auto; }
-    </style>
-
-    <link rel="stylesheet" href="{{asset('css/flowpaper.css')}}">
-
-</head>
-<body>
-
-
-<div id="documentViewer" class="flowpaper_viewer" style="position: absolute; width: 100%; height: 100%; background: rgb(68, 68, 68); overflow: hidden;"></div>
-
-
-
-</body>
-</html>
index 02d47db4dff06a7969e222e82a69730b0e7002de..a1fd4ef3ce2f5f9dad2b748ec16067daa2756c3e 100644 (file)
@@ -15,27 +15,25 @@ use Illuminate\Support\Facades\Route;
 */
 
 
-
 Auth::routes(['verify' => true]);
 
 Route::get('/images/{path}', 'ImageController@show')->where('path', '.*');
 
 
 /** ADMIN ROUTES */
-Route::domain(env('ADMIN_DOMAIN_NAME'))->middleware('auth:twill_users')->group(function() {
-
+Route::domain(env('ADMIN_DOMAIN_NAME'))->middleware('auth:twill_users')->group(function () {
 
 
 });
 
 
 /** Client routes */
-Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
+Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function () {
     /** Home */
     Route::get('/', 'HomeController@index')->name('home');
 
     /** Account */
-    Route::prefix('compte')->middleware(['login.token:false', 'auth'])->group(function() {
+    Route::prefix('compte')->middleware(['login.token:false', 'auth'])->group(function () {
         Route::get('valider', 'AccountController@completeRegistration')->name('account.complete-reg');
         Route::get('/', 'AccountController@index')->name('account.index');
         Route::post('/', 'AccountController@update')->name('account.update');
@@ -57,11 +55,11 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
     Route::get('compte/{user}/demander-pdf', 'AccountController@askPdf')->name('account.ask-pdf');
 
     /** Stripe Payment */
-    Route::prefix('pay')->group(function() {
-       Route::post('payment-intents', 'StripeController@paymentIntents')->middleware('auth')->name('payment-intent');
-       Route::post('user/{user}/payment-intents', 'StripeController@paymentIntentsSigned')->name('payment-intent.signed');
-       Route::get('public-key', 'StripeController@publicKey');
-       Route::get('{payment}', 'PaymentController@show')->name('payment.show');
+    Route::prefix('pay')->group(function () {
+        Route::post('payment-intents', 'StripeController@paymentIntents')->middleware('auth')->name('payment-intent');
+        Route::post('user/{user}/payment-intents', 'StripeController@paymentIntentsSigned')->name('payment-intent.signed');
+        Route::get('public-key', 'StripeController@publicKey');
+        Route::get('{payment}', 'PaymentController@show')->name('payment.show');
 
 
     });
@@ -69,26 +67,25 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
 
     Route::get('unsubscribe/{user}', 'AccountController@unsubscribe')->name('unsubscribe');
 
-    /** Flowpaper viewer */
+    /** Fluidbook viewer */
     Route::middleware(['login.token', 'authed.verified'])
-        ->get('/view/{file:slug}', 'FlowpaperController@view')
-        ->name('flowpaper.view');
+        ->get('/view/{file:slug}', 'FluidbookController@view')
+        ->name('fluidbook.view');
 
     Route::get('edition/{file:slug}', 'FileController@show');
 
     /** For discover users */
-    Route::get('discover/{file:slug}', 'FlowpaperController@discover')->name('flowpaper.discover');
+    Route::get('discover/{file:slug}', 'FluidbookController@discover')->name('fluidbook.discover');
     /** For admin preview */
-    Route::get('preview/{file:slug}', 'FlowpaperController@preview')->name('flowpaper.preview');
+    Route::get('preview/{file:slug}', 'FluidbookController@preview')->name('fluidbook.preview');
     /** Download file */
-    Route::get('download/{file:slug}', 'FlowpaperController@download')->name('pdf.download');
-
+    Route::get('download/{file:slug}', 'FluidbookController@download')->name('pdf.download');
 
 
     Route::get('archives', 'ArchiveController@index')->name('archives.index');
     Route::get('search', 'FileController@search')->name('archives');
 
-    Route::prefix('campagnes-et-communication')->group(function() {
+    Route::prefix('campagnes-et-communication')->group(function () {
         Route::get('/', 'AdCampaignController@index')->name('com-campaign.index');
         Route::get('archives', 'AdCampaignController@search')->name('com-campaign.search');
         Route::get('{slug}', 'AdCampaignController@show')->name('com-campaign.show');
@@ -105,7 +102,7 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
     Route::get('demande-d-abonnement', 'ContactController@requestSubscriptionForm')->name('contact.subscribe');
     Route::post('demande-d-abonnement', 'ContactController@storeSubscriptionForm')->name('contact.subscribe.store');
 
-    Route::prefix('actus-labos')->group(function() {
+    Route::prefix('actus-labos')->group(function () {
         Route::get('', 'ActuLabosController@index')->name('actus-labos.index');
         Route::get('{slug}', 'ActuLabosController@show')->name('actus-labos.show');
     });
@@ -113,7 +110,7 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
     Route::get('article/{slug}', 'SocialArticleController@show')->name('social-article.show');
     Route::get('article-psq/{slug}', 'PrintableArticleController@show')->name('printable-article.show');
 
-    Route::prefix('sondages')->group(function() {
+    Route::prefix('sondages')->group(function () {
         Route::get('{slug}', 'PollController@show')->name('poll.show');
         Route::post('{slug}', 'PollController@submit')->name('poll.submit');
     });
@@ -126,7 +123,6 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
     });
 
 
-
     Route::get('agenda-et-humeurs', 'EnPlusController@index')->name('humeur-agenda.index');
     Route::get('humeurs', 'HumeurController@index')->name('humeur.index');
     Route::get('humeurs/{slug}', 'HumeurController@show')->name('humeur.show');
@@ -145,13 +141,13 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() {
 });
 
 /** Public routes + NGROK routes */
-Route::pattern('client_domains', '('.implode('|', [
+Route::pattern('client_domains', '(' . implode('|', [
         env('CLIENT_DOMAIN_NAME'),
         env('NGROK_DOMAIN_NAME'),
-    ]).')'
+    ]) . ')'
 );
 
-Route::domain('{client_domains}')->group(function() {
+Route::domain('{client_domains}')->group(function () {
     /** Webhooks */
     Route::prefix('webhooks')->middleware('json.response')->group(function () {
         Route::post('mailgun-event', 'WebhookController@mailgunEvent');
@@ -160,10 +156,10 @@ Route::domain('{client_domains}')->group(function() {
     });
 });
 
-Route::get('mentions-legales', function() {
-   return view('mentions.index');
+Route::get('mentions-legales', function () {
+    return view('mentions.index');
 })->name("mentions.index");
 
-if(config('app.env') === 'local') {
+if (config('app.env') === 'local') {
     Route::get('debug', 'DebugController@test');
 }