From 8a6ab2531c285eb533dabebd790f7cb004d052c1 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Tue, 12 Jul 2022 17:50:30 +0200 Subject: [PATCH] wip #4209 @0.5 --- app/Console/Commands/WorkshopMigration.php | 43 +++++++++++++++---- .../CompositionOperation.php | 8 ++++ app/Models/FluidbookDocument.php | 31 +++++++++++++ .../fields/fluidbook_composition.blade.php | 29 ++++++++++--- 4 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 app/Models/FluidbookDocument.php diff --git a/app/Console/Commands/WorkshopMigration.php b/app/Console/Commands/WorkshopMigration.php index 66a3b3b4f..de4040bab 100644 --- a/app/Console/Commands/WorkshopMigration.php +++ b/app/Console/Commands/WorkshopMigration.php @@ -4,6 +4,7 @@ namespace App\Console\Commands; use App\Models\AuthUser; +use App\Models\FluidbookDocument; use App\Models\FluidbookPublication; use App\Models\FluidbookQuote; use App\Models\FluidbookTheme; @@ -12,6 +13,7 @@ use Cubist\Backpack\Magic\Fields\Color; use Cubist\Backpack\Magic\Fields\Date; use Cubist\Backpack\Magic\Fields\Datetime; use Cubist\Backpack\Magic\Fields\Files; +use Cubist\Util\ObjectUtil; use Cubist\Util\PHP; use Illuminate\Support\Facades\DB; @@ -32,7 +34,8 @@ class WorkshopMigration extends CubistCommand $actions = [ //'Backup current database' => 'backup', 'Migrate magic models' => 'migrate', - 'Import publications' => 'importPublications', + 'Import documents' => 'importDocuments', + //'Import publications' => 'importPublications', 'Clean caches' => 'cleanCache' ]; @@ -68,15 +71,37 @@ class WorkshopMigration extends CubistCommand $this->executeProcessQuiet('/usr/bin/php8.0 artisan optimize:clear'); } - - protected function _unserialize($str) + protected function importDocuments() { - $class = 'stdClass'; - $str = preg_replace('/^O:\d+:"[^"]++"/', 'O:' . strlen($class) . ':"' . $class . '"', $str); - $str = str_replace("s:8:\"\0*\0datas\"", 's:5:"datas"', $str); - return unserialize($str); + PHP::neverStop(); + FluidbookDocument::truncate(); + + foreach (DB::table($this->_oldDB . '.documents')->orderBy('document_id', 'desc')->get() as $e) { + $this->line('Import ' . $e->document_id); + $c = new FluidbookDocument(); + $c->setIncrementing(false); + $c->id = $e->document_id; + $date = new \DateTime(); + $date->setTimestamp($e->date); + $c->created_at = $c->updated_at = $date; + $c->file = $e->file; + $c->owner = $e->proprietaire; + $c->pages = $e->pages; + $c->pdf_data = $this->_unserializeAndJSON($e->generalInfos); + $c->file_data = $this->_unserializeAndJSON($e->localInfos); + $c->bookmarks = str_replace('"titre":', '"title":', $this->_unserializeAndJSON($e->bookmarks, '[]')); + $c->saveWithoutFlushingCache(); + } } + protected function _unserializeAndJSON($s, $default = '[]') + { + $r = ObjectUtil::safeUnserialize($s); + if (!$r) { + return $default; + } + return json_encode($r); + } protected function importPublications() { @@ -111,7 +136,7 @@ class WorkshopMigration extends CubistCommand // } FluidbookPublication::truncate(); - foreach (DB::table($this->_oldDB . '.books')->orderBy('book_id', 'desc')->get() as $e) { + foreach (DB::table($this->_oldDB . '.books')->orderBy('book_id', 'asc')->get() as $e) { $this->line('Import ' . $e->book_id); $oldRoot = $this->_oldRoot . 'books/working/' . $e->book_id . '/'; $c = new FluidbookPublication(); @@ -163,7 +188,7 @@ class WorkshopMigration extends CubistCommand $c->setAttribute('composition', $composition); try { - $c->save(); + $c->saveWithoutFlushingCache(); } catch (\Exception $e) { dd($e); } diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/CompositionOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/CompositionOperation.php index cfce1a77a..595849b9a 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/CompositionOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/CompositionOperation.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Admin\Operations\FluidbookPublication; +use Cubist\Util\Files\Files; use Illuminate\Support\Facades\Route; trait CompositionOperation @@ -9,12 +10,19 @@ trait CompositionOperation protected function setupCompositionRoutes($segment, $routeName, $controller) { Route::match(['get'], $segment . '/{id}/composition', $controller . '@getComposition'); + Route::match(['get'], $segment . '/docs/{doc_id}/thumb_{doc_page}.jpg', $controller . '@getThumb'); } protected function setupCompositionDefaults() { } + protected function getThumb($doc_id, $doc_page) + { + $path = '/mnt/sshfs/godzilla/data/fluidbook/docs/' . $doc_id . '/p' . $doc_page . '.jpg'; + return response(null)->header('Content-Type', Files::_getMimeType($path))->header('X-Sendfile', $path); + } + protected function getComposition() { $res = []; diff --git a/app/Models/FluidbookDocument.php b/app/Models/FluidbookDocument.php new file mode 100644 index 000000000..a1bd83a06 --- /dev/null +++ b/app/Models/FluidbookDocument.php @@ -0,0 +1,31 @@ + 'fluidbook-document', + 'singular' => 'document', + 'plural' => 'documents']; + protected static $_permissionBase = 'fluidbook-document'; + + public function setFields() + { + parent::setFields(); + + $this->addField('file', Text::class); + $this->addField('pages', Integer::class); + $this->addOwnerField(); + $this->addField('bookmarks', Textarea::class); + $this->addField('pdf_data', Textarea::class); + $this->addField('file_data', Textarea::class); + } +} diff --git a/resources/views/fields/fluidbook_composition.blade.php b/resources/views/fields/fluidbook_composition.blade.php index 97c2cce42..be3104764 100644 --- a/resources/views/fields/fluidbook_composition.blade.php +++ b/resources/views/fields/fluidbook_composition.blade.php @@ -3,16 +3,20 @@ @push('crud_fields_scripts') @endpush @@ -22,3 +26,14 @@ @endpush @endif +
+ +
+
+
-- 2.39.5