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']);
}
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)
{
}
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;
+ }
}
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')