From 3c70ead7f412231258996de5a6a3d71a6057656b Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 22 Feb 2023 10:28:26 +0100 Subject: [PATCH] wip #5524 @1 --- .docker/docker-compose.yml | 4 +- app/Fluidbook/Farm.php | 58 ++++++++++++++++++- .../FluidbookPublication/EditOperation.php | 8 ++- app/Models/FluidbookDocument.php | 12 ++-- app/Models/FluidbookPublication.php | 17 +++++- resources/linkeditor/js/linkeditor.loader.js | 2 +- .../link_editor.blade.php | 2 +- 7 files changed, 89 insertions(+), 14 deletions(-) diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index d69616acc..1ffddc330 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -16,6 +16,7 @@ services: - '/data/extranet/www/fluidbook/books/working/:/application/protected/fluidbookpublication/working/' - '/data/extranet/www/fluidbook/books/links/:/application/protected/fluidbookpublication/links/' - '/home/extranet/www/fluidbook/cache/unzip/:/application/storage/fluidbook/cache/unzip/' + - '/data/toolbox/protected/fluidbookpublication/cache/:/application/protected/fluidbookpublication/cache/' - '/home/extranet:/home/extranet' - '/data/extranet:/data/extranet' - '/mnt:/mnt' @@ -79,7 +80,8 @@ services: - '/mnt/sshfs/godzilla/data/fluidbook/docs/:/application/protected/fluidbookpublication/docs/' - '/data/extranet/www/fluidbook/books/working/:/application/protected/fluidbookpublication/working/' - '/data/extranet/www/fluidbook/books/links/:/application/protected/fluidbookpublication/links/' - - '/data/extranet/www/fluidbook/cache/unzip/:/application/storage/fluidbook/cache/unzip/' + - '/home/extranet/www/fluidbook/cache/unzip/:/application/storage/fluidbook/cache/unzip/' + - '/data/toolbox/protected/fluidbookpublication/cache/:/application/protected/fluidbookpublication/cache/' - '/home/extranet:/home/extranet' - '/data/extranet:/data/extranet' - '/mnt:/mnt' diff --git a/app/Fluidbook/Farm.php b/app/Fluidbook/Farm.php index b4f808502..ed73d0cc4 100644 --- a/app/Fluidbook/Farm.php +++ b/app/Fluidbook/Farm.php @@ -9,6 +9,8 @@ use hollodotme\FastCGI\SocketConnections\NetworkSocket; class Farm { + + protected static $_forceServer = false; protected static $_farmServers = [ ['name' => 'alphaville', 'host' => 'fluidbook-processfarm', 'port' => 9000, 'weight' => 24, 'region' => 'UE'], ['name' => 'brazil', 'host' => 'brazil.cubedesigners.com', 'weight' => 2, 'region' => 'US'], @@ -23,6 +25,11 @@ class Farm ['name' => 'kingkong', 'host' => 'kingkong.cubedesigners.com', 'weight' => 6, 'region' => 'US'], ]; + public static function forceServer($server) + { + self::$_forceServer = $server; + } + protected static function _pingCache() { return Files::mkdir(storage_path('fluidbookfarm')) . '/pings'; @@ -40,6 +47,14 @@ class Farm public static function pickOneServer() { + if (self::$_forceServer) { + foreach (self::$_farmServers as $farmServer) { + if ($farmServer['name'] === self::$_forceServer) { + return $farmServer; + } + } + } + $hat = []; $pingCache = self::_pingCache(); if (!file_exists($pingCache)) { @@ -58,6 +73,7 @@ class Farm shuffle($hat); $i = array_pop($hat); return self::$_farmServers[$i]; + } public static function getFCGIConnexion(array $farm, $timeout = 240): NetworkSocket @@ -75,12 +91,47 @@ class Farm } public static function getFile($page, $format, $resolution, $withText, $withGraphics, $version, $resolutionRatio, $mobileFirstRatio, $path, $force = false) + { + $params = ['toolbox' => 1, + 'page' => $page, + 'format' => $format, + 'resolution' => $resolution, + 'withText' => $withText, + 'withGraphics' => $withGraphics, + 'version' => $version, + 'force' => $force, + 'out' => $path, + 'resolutionRatio' => $resolutionRatio, + 'mobileRatio' => $mobileFirstRatio]; + return self::_getFile($params); + } + + + public static function getFileFromPDF($pdf, $page, $format, $resolution, $withText = true, $withGraphics = true, $version = 'html', $out = null, $force = false) + { + if (null === $out) { + $hash = Files::hashFileAttributes($pdf); + $out = Files::mkdir(protected_path('fluidbookpublication/cache/pdffiles/' . $hash)); + } + $params = ['toolbox' => 1, + 'pdf' => $pdf, + 'page' => $page, + 'format' => $format, + 'resolution' => $resolution, + 'withText' => $withText, + 'withGraphics' => $withGraphics, + 'version' => $version, + 'force' => $force, + 'out' => $out]; + + return self::_getFile($params); + } + + protected static function _getFile($params) { $start = microtime(true); $farmer = self::pickOneServer(); - $params = ['toolbox' => 1, 'page' => $page, 'format' => $format, 'resolution' => $resolution, 'withText' => $withText, 'withGraphics' => $withGraphics, 'version' => $version, 'force' => $force, 'out' => $path, 'resolutionRatio' => $resolutionRatio, 'mobileRatio' => $mobileFirstRatio]; - $output = trim(self::sendRequest($farmer, 'process.php', $params)); if (file_exists($output)) { @@ -90,13 +141,14 @@ class Farm } $time = round(microtime(true) - $start, 4); - $log = '[' . $farmer['name'] . ']' . "\t" . date('Y-m-d H:i:s') . "\t" . $time . "\t$page|$format|$resolution|$withText|$withGraphics|$version\t($res)\t>>" . $output . "\n"; + $log = '[' . $farmer['name'] . ']' . "\t" . date('Y-m-d H:i:s') . "\t" . $time . "\t" . implode('|', $params) . "\t($res)\t>>" . $output . "\n"; error_log($log); return $res; } + public static function ping($echo = true, $force = false) { $cache = self::_pingCache(); diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php index ace3aa60e..3b205c5e2 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Admin\Operations\FluidbookPublication; +use App\Fluidbook\Farm; use App\Fluidbook\Links; use App\Models\FluidbookPublication; use Cubist\Backpack\Http\Controllers\Base\XSendFileController; @@ -136,7 +137,12 @@ trait EditOperation } /** @var FluidbookPublication $fluibdook */ $fluibdook = FluidbookPublication::find($fluidbook_id); + $f = 'getFile'; switch ($type) { + case 'thumbspdf': + $withGraphics = $withText = true; + $f = 'getThumbFile'; + break; case 'raster': case 'vector': $withText = $withGraphics = true; @@ -151,7 +157,7 @@ trait EditOperation $withGraphics = false; break; } - $path = $fluibdook->getFile($page, $format, 150, $withText, $withGraphics); + $path = $fluibdook->$f($page, $format, 150, $withText, $withGraphics, 'html'); return XSendFileController::sendfile($path); } diff --git a/app/Models/FluidbookDocument.php b/app/Models/FluidbookDocument.php index a5a664b6b..388ad46d9 100644 --- a/app/Models/FluidbookDocument.php +++ b/app/Models/FluidbookDocument.php @@ -58,6 +58,12 @@ class FluidbookDocument extends ToolboxModel return sqrt($a4surface / $docSurface); } + public function getMobileFirstRatio() + { + $this->checkInfos(); + return 620 / $this->pdf_data['size'][0]; + } + public function getPageSize($page) { return $this->pdf_data['page'][$page]['size']; @@ -152,11 +158,7 @@ class FluidbookDocument extends ToolboxModel return $progress; } - public function getMobileFirstRatio() - { - $this->checkInfos(); - return 620 / $this->pdf_data['size'][0]; - } + public function checkInfos($force = false) { diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 6c64f472c..157baf6f8 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -8,6 +8,7 @@ use App\Fields\FluidbookChapters; use App\Fields\FluidbookComposition; use App\Fields\FluidbookLocale; use App\Fields\User; +use App\Fluidbook\Farm; use App\Fluidbook\Links; use App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation; @@ -253,8 +254,20 @@ class FluidbookPublication extends ToolboxSettingsModel $resolution .= '-' . $q; } $compo = $this->composition[$page]; - $res = self::_getDocument($compo[0])->getFile($compo[1], $format, $resolution, $withText, $withGraphics, $version, $force); - return $res; + return self::_getDocument($compo[0])->getFile($compo[1], $format, $resolution, $withText, $withGraphics, $version, $force); + } + + + public function getThumbFile($page, $format, $resolution = 'thumb', $withText = true, $withGraphics = true, $version = '', $force = false) + { + if ($this->pdfThumbnails) { + $thumbpdf = $this->getAssetDir() . $this->pdfThumbnails; + if (file_exists($thumbpdf)) { + return Farm::getFileFromPDF($thumbpdf, $page, $format, $resolution, $withText, $withGraphics, $version, null, $force); + } + } + return $this->getFile($page, $format, $resolution, $withText, $withGraphics, $version, $force); + } public function addWidgets() diff --git a/resources/linkeditor/js/linkeditor.loader.js b/resources/linkeditor/js/linkeditor.loader.js index d2612012b..b64cb9dcc 100644 --- a/resources/linkeditor/js/linkeditor.loader.js +++ b/resources/linkeditor/js/linkeditor.loader.js @@ -80,7 +80,7 @@ LinkeditorLoader.prototype = { c += ''; } }else if(this.pagesSource==='thumbnails'){ - c += ''; + c += ''; } } c += ''; diff --git a/resources/views/fluidbook_publication/link_editor.blade.php b/resources/views/fluidbook_publication/link_editor.blade.php index 355017bd3..583ae3ed0 100644 --- a/resources/views/fluidbook_publication/link_editor.blade.php +++ b/resources/views/fluidbook_publication/link_editor.blade.php @@ -198,7 +198,7 @@ @endif @endif
- @if($fluidbook->pdfThumbnails)toggleThumbnailsPDF + @if($fluidbook->pdfThumbnails) @endif -- 2.39.5