]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6169 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 17 Oct 2023 10:10:35 +0000 (12:10 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 17 Oct 2023 10:10:35 +0000 (12:10 +0200)
app/Http/Controllers/Admin/Operations/FluidbookPublication/CompositionOperation.php
app/Models/FluidbookPublication.php
resources/views/fields/fluidbook_composition.blade.php

index 6fb12a25cfea91a5449e638661891ae3019a59eb..fdd95b809fc68f15b494cd0971af8f564434c7de 100644 (file)
@@ -17,14 +17,13 @@ use Illuminate\Support\Facades\Session;
 
 trait CompositionOperation
 {
-
-
     protected function setupCompositionRoutes($segment, $routeName, $controller)
     {
         Route::match(['get'], $segment . '/docs/{doc_id}/thumb_{doc_page}.jpg', $controller . '@getThumb');
         Route::match(['post'], $segment . '/uploaddocument', $controller . '@upload');
         Route::match(['get'], $segment . '/uploadProgress/{uploadID}', $controller . '@uploadProgress');
         Route::match(['get'], $segment . '/docInfos/{doc_id}', $controller . '@docInfos');
+        Route::match(['get'], $segment . '/{fluidbook_id}/pdfarchive/{time}', $controller . '@pdfArchive');
         Route::match(['get'], $segment . '/{fluidbook_id}/{type}/{page}.{ext}', $controller . '@getPageAsset')
             ->whereIn('type', ['originalpdf', 'texts', 'index', 'layout']);
     }
@@ -58,6 +57,21 @@ trait CompositionOperation
         return response(Gzip::file_get_contents($path), 200, ['content-type' => $contentType]);
     }
 
+    protected function pdfArchive($fluidbook_id, $time = 'now')
+    {
+        if (!FluidbookPublication::hasPermission($fluidbook_id)) {
+            abort(401);
+        }
+        /** @var FluidbookPublication $fb */
+        $fb = FluidbookPublication::withoutGlobalScopes()->find($fluidbook_id);
+        $path = $fb->getPDFArchivesPath();
+        if ($time === 'now') {
+            $path .= 'original.pdf';
+        } else {
+            $path .= 'original.' . $time . '.pdf';
+        }
+        return XSendFileController::sendfile($path);
+    }
 
     protected function getThumb($doc_id, $doc_page)
     {
index 4d596993a3693cb05b4764051338a88a80e77c4e..0cf8773ace4271599a3b1f09e701f01bf2695400 100644 (file)
@@ -1050,4 +1050,27 @@ class FluidbookPublication extends ToolboxSettingsModel
         }
         return false;
     }
+
+    public function getPDFArchivesPath()
+    {
+        return Files::mkdir(protected_path('fluidbookpublication/pdf/' . $this->id));
+    }
+
+    public function getPDFArchivesList()
+    {
+        $dir = $this->getPDFArchivesPath();
+        $r = Files::getDirectoryIterator($dir);
+        $list = [];
+        foreach ($r as $item) {
+            if ($item->isLink() || $item->isDir() || $item->getFilename() === 'original.pdf') {
+                continue;
+            }
+            if (!preg_match('/original\.(\d+)\.pdf/', $item->getFilename(), $matches)) {
+                continue;
+            }
+            $list[] = $matches[1];
+        }
+        rsort($list);
+        return $list;
+    }
 }
index 88015880b38775343f45920d1a3774a765000e0c..c7b2648a58a5f78d8069ec6c6972470a254f82ca 100644 (file)
                 top: 0;
                 left: 0;
             }
+
+            #composition_history {
+                padding-left: 11px;
+            }
+
+            #composition_history ul {
+                list-style: none;
+                padding: 0;
+            }
+
+
         </style>
 
     @endpush
     if(!is_string($v)){
         $v=json_encode($v);
     }
+    $pdfArchives=$entry->getPDFArchivesList();
 @endphp
 @include('crud::fields.inc.wrapper_start')
 <div id="composition">
     <input
-        id="compositionField"
-        type="hidden"
-        name="{{ $field['name'] }}"
-        value="{{ $v }}"
-        data-doc-sizes="{{  json_encode($entry->getDocumentSizes()) }}"
-        @include('crud::fields.inc.attributes')
+            id="compositionField"
+            type="hidden"
+            name="{{ $field['name'] }}"
+            value="{{ $v }}"
+            data-doc-sizes="{{  json_encode($entry->getDocumentSizes()) }}"
+            @include('crud::fields.inc.attributes')
     >
     <div id="composition_uploader">
         <a class="btn btn-primary" href="#" data-toggle="tooltip" title="{{__('Charger un PDF')}}"
            id="compositionAddPDF"><i
-                class="la la-upload"></i> {{__('Charger un PDF')}}</a>
+                    class="la la-upload"></i> {{__('Charger un PDF')}}</a>
     </div>
     <div id="composition_pages"></div>
+    <div id="composition_history">
+        <h4>{{__('Versions antérieures du PDF source')}}</h4>
+        <ul>
+            <li><a href="{{backpack_url('fluidbook-publication/'.$entry->id.'/pdfarchive/now')}}"
+                   download="fluidbook_{{$entry->id}}.pdf">{{__('Version actuelle')}}</a>
+            </li>
+            @foreach($pdfArchives as $time)
+                <li><a href="{{backpack_url('fluidbook-publication/'.$entry->id.'/pdfarchive/'.$time)}}"
+                       download="fluidbook_{{$entry->id}}_{{$time}}.pdf">{{__('Version du :date',['date'=>date('Y-m-d H:i:s')])}}</a>
+                </li>
+            @endforeach
+        </ul>
+    </div>
 </div>
 @include('crud::fields.inc.wrapper_end')