From: Vincent Vanwaelscappel Date: Mon, 13 Mar 2023 15:23:54 +0000 (+0100) Subject: wip #5802 @5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=3ed274cbd7d5e14614b778e2d0f0b39dd65c2785;p=fluidbook-toolbox.git wip #5802 @5 --- diff --git a/app/Console/Commands/WorkshopMigration.php b/app/Console/Commands/WorkshopMigration.php index 13d16d345..6ace5fa13 100644 --- a/app/Console/Commands/WorkshopMigration.php +++ b/app/Console/Commands/WorkshopMigration.php @@ -229,6 +229,9 @@ class WorkshopMigration extends CubistCommand if ($new == 'visits_counter' && $v == 20) { $v = 0; } + if ($new == 'status') { + $v++; + } if ($c->getField($new) instanceof Datetime) { $date = new \DateTime(); $date->setTimestamp($v); diff --git a/app/Fields/FluidbookStatus.php b/app/Fields/FluidbookStatus.php new file mode 100644 index 000000000..f2398f077 --- /dev/null +++ b/app/Fields/FluidbookStatus.php @@ -0,0 +1,19 @@ + __('Brouillon'), 1 => __('Prêt'), 2 => __('Téléchargé'), 3 => __('Facturé')]; + } +} diff --git a/app/Http/Controllers/Admin/FileCrudController.php b/app/Http/Controllers/Admin/FileCrudController.php index e7f5e9cf7..480ee12d2 100644 --- a/app/Http/Controllers/Admin/FileCrudController.php +++ b/app/Http/Controllers/Admin/FileCrudController.php @@ -4,26 +4,23 @@ namespace App\Http\Controllers\Admin; class FileCrudController extends \Cubist\Backpack\Magic\Controllers\CubistMagicController { - use \Cubist\Backpack\Magic\Operations\CreateOperation; - use \Cubist\Backpack\Http\Controllers\Operations\CloneEditOperation; - use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; - use \Cubist\Backpack\Http\Controllers\Operations\BulkPublishOperation; - use \Backpack\CRUD\app\Http\Controllers\Operations\CloneOperation; - use \Backpack\CRUD\app\Http\Controllers\Operations\BulkCloneOperation; - use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; + use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\BulkDeleteOperation; use \Cubist\Backpack\Http\Controllers\Operations\ReviseOperation; + use \App\Http\Controllers\Admin\Operations\Files\DownloadOperation; + use \App\Http\Controllers\Admin\Operations\Files\UploadOperation; + use \App\Http\Controllers\Admin\Operations\Files\UserListOperation; /* - __('file') - __('files') + __('fichier') + __('fichiers') */ protected $_modelNamespace = 'App\Models\File'; protected $_routeURL = 'file'; - protected $_singular = 'file'; - protected $_plural = 'files'; + protected $_singular = 'fichier'; + protected $_plural = 'fichiers'; protected $_oneInstance= false; } diff --git a/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php b/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php index 0520381fb..d43b9e5b4 100644 --- a/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php +++ b/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php @@ -8,12 +8,13 @@ class FluidbookPublicationCrudController extends \Cubist\Backpack\Magic\Controll use \Cubist\Backpack\Http\Controllers\Operations\ReviseOperation; use \Cubist\Backpack\Magic\Operations\CreateOperation; use \App\Http\Controllers\Admin\Operations\FluidbookPublication\PreviewOperation; - use \App\Http\Controllers\Admin\Operations\FluidbookPublication\EditOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\LinksOperation; use \App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperation; use \App\Http\Controllers\Admin\Operations\FluidbookPublication\StatsOperation; use \App\Http\Controllers\Admin\Operations\FluidbookPublication\DownloadOperation; - use \Backpack\CRUD\app\Http\Controllers\Operations\CloneOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\CloneOperation; use \App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\EditOperation; diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php index 14fb68516..b54acc20f 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php @@ -2,288 +2,34 @@ namespace App\Http\Controllers\Admin\Operations\FluidbookPublication; -// __('!!Paramètres des fluidbooks') - -use App\Fluidbook\Farm; -use App\Fluidbook\Links; use App\Models\FluidbookPublication; -use Cubist\Backpack\Http\Controllers\Base\XSendFileController; -use Cubist\Util\Files\Files; -use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Route; -use PhpOffice\PhpSpreadsheet\Writer\Xlsx; +use Prologue\Alerts\Facades\Alert; trait EditOperation { - protected function setupEditRoutes($segment, $routeName, $controller) { - Route::match(['get'], $segment . '/{id}/edit/links', $controller . '@links'); - Route::match(['get'], $segment . '/{id}/edit/links/versions', $controller . '@getLinkVersions'); - Route::match(['get'], $segment . '/{id}/edit/links/versions/export/{version}', $controller . '@exportLinks'); - Route::match(['post'], $segment . '/{id}/edit/links/import/merge', $controller . '@importLinksMerge'); - Route::match(['post'], $segment . '/{id}/edit/links/import/replace', $controller . '@importLinks'); - Route::match(['post'], $segment . '/{id}/edit/links/move', $controller . '@moveLinks'); - Route::match(['get'], $segment . '/{id}/edit/links/versions/restore/{version}', $controller . '@restoreLinks'); - Route::match(['get'], $segment . '/{id}/edit/links/fixdriftedlinks', $controller . '@fixDriftedLinks'); - Route::match(['get'], $segment . '/{id}/edit/links/assets/{file}', $controller . '@getLinkAsset'); - - Route::put($segment . '/{id}/save/links', $controller . '@saveLinks'); - Route::get($segment . '/{id}/edit/{type}_{page}.{format}', $controller . '@getLinkPage') - // ->whereIn('type', ['raster', 'images', 'texts', 'vector']) - ->whereNumber('page'); - //->whereIn('format', ['jpg', 'png', 'avif', 'webp', 'svg']); - } - - protected function getLinkAsset($fluidbook_id, $file) - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); - } - /** @var FluidbookPublication $fb */ - $fb = FluidbookPublication::find($fluidbook_id); - return XSendFileController::sendfileNoCache($fb->asset_path($file)); - } - - protected function saveLinks($fluidbook_id) - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); - } - - Links::saveLinksInFile($fluidbook_id, - backpack_user()->id, - request('message'), - json_decode(request('links', '[]'), true), - json_decode(request('rulers', '[]'), true), - ); - $fb = FluidbookPublication::find($fluidbook_id); - - return response()->json(['assets' => $fb->getLinksAssetsDimensions(), 'versions' => Links::getLinksVersions($fluidbook_id)]); - } - - protected function moveLinks($fluidbook_id) - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); - } - - $offset = request('number'); - $from = request('start'); - $internal = request('offset_internal_links', '0'); - - /** @var FluidbookPublication $fb */ - $fb = FluidbookPublication::find($fluidbook_id); - if ($internal) { - $numerotation = explode(',', $fb->page_numbers); - } - $width = $fb->getPageWidth(); - $isOnePage = $fb->isOnePage(); - - Links::getLinksAndRulers($fluidbook_id, $links, $rulers); - - $rlinks = array(); - foreach ($links as $k => $link) { - if (!$isOnePage && $link['page'] % 2 == 0 && $link['left'] > $width) { - $link['page']++; - $link['left'] -= $width; - } - - if ($link['page'] >= $from) { - $link['page'] += $offset; - } - if ($internal && $link['type'] == 5) { - if ($link['numerotation'] == 'physical') { - if ($link['to'] >= $from) { - $link['to'] += $offset; - } - } else { - $ph = array_search($link['to'], $numerotation) + 1; - if ($ph >= $from) { - $ph += $offset; - $vi = $numerotation[($ph - 1)]; - $link['to'] = $vi; - } - } - } - $rlinks[$k] = $link; - } - - $rrulers = array(); - foreach ($rulers as $k => $ruler) { - if (!$isOnePage && $ruler['type'] == 'x' && $ruler['page'] % 2 == 0 && $ruler['pos'] > $width) { - $ruler['page']++; - $ruler['pos'] -= $width; - } - - if ($ruler['page'] > $from) { - $ruler['page'] += $offset; - } - - if (!$isOnePage && $ruler['page'] % 2 == 1 && $ruler['type'] == 'x') { - $ruler['page']--; - $ruler['pos'] += $width; - } - - $rrulers[$k] = $ruler; - } - - Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __('Décalage de :nb pages à partir de la page :page', ['nb' => $offset, 'page' => $from]), $rlinks, $rrulers); - return response()->json(['success' => 'ok']); - } - - protected function getLinkPage($fluidbook_id, $type, $page, $format = 'jpg') - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); - } - /** @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; - break; - case 'images': - $withText = false; - $withGraphics = true; - break; - case 'texts': - default: - $withText = true; - $withGraphics = false; - break; - } - $path = $fluibdook->$f($page, $format, 150, $withText, $withGraphics, 'html'); - return XSendFileController::sendfile($path); - } - - protected function getLinkVersions($fluidbook_id) - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); - } - $links = Links::getLinksVersions($fluidbook_id); - return response()->json($links); - } - - protected function exportLinks($fluidbook_id, $version) - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); - } - Links::getLinksAndRulers($fluidbook_id, $links, $rulers, $version); - $xlsx = Links::linksToExcel($links, $rulers); - $tmpfile = Files::tempnam() . '.xlsx'; - $writer = new Xlsx($xlsx); - $writer->save($tmpfile); - return response()->file($tmpfile)->deleteFileAfterSend(); - } - - protected function restoreLinks($fluidbook_id, $version) - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); - } - - Links::getLinksAndRulers($fluidbook_id, $links, $rulers, $version); - Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __('Restaurer la sauvegarde des liens :date', ['date' => date('Y-m-d H:i:s', $version)]), $links, $rulers, [], []); - return response()->json(['success' => 'ok']); + Route::match(['get'], $segment . '/{id}/changestatus/{status}', $controller . '@changeStatus'); } - protected function importLinks($fluidbook_id) + protected function changeStatus($fluidbook_id, $newStatus) { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { + if (!can('fluidbook-publication:admin')) { abort(401); } - /** @var UploadedFile $uploadedFile */ - $uploadedFile = request()->file('file'); - - Links::getLinksAndRulersFromExcelFile($uploadedFile->getPathname(), $links, $rulers); - Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Remplacer les liens à partir du fichier :file", ['file' => $uploadedFile->getClientOriginalName()]), $links, $rulers, [], []); - return response()->json(['success' => 'ok']); - } - - protected function importLinksMerge($fluidbook_id) - { if (!FluidbookPublication::hasPermission($fluidbook_id)) { abort(401); } - - /** @var UploadedFile $uploadedFile */ - $uploadedFile = request()->file('file'); - - Links::getLinksAndRulers($fluidbook_id, $merged_links, $merged_rulers); - Links::getLinksAndRulersFromExcelFile($uploadedFile->getPathname(), $links, $rulers); - $existing_uids = []; - foreach ($merged_links as $merged_link) { - $existing_uids[$merged_link['uid']] = true; - } - - foreach ($links as $link) { - if (isset($existing_uids[$link['uid']])) { - $link['uid'] = Links::generateUID(); - $existing_uids[$link['uid']] = true; - } - $merged_links[] = $link; - } - - $merged_rulers = array_merge($merged_rulers, $rulers); - - Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Ajouter les liens à partir du fichier :file", ['file' => $uploadedFile->getClientOriginalName()]) . ' ', $merged_links, $merged_rulers, [], []); - return response()->json(['success' => 'ok']); - } - - protected function setupEditDefaults() - { - $this->crud->addButton('line', 'edit', 'view', 'crud::buttons.fluidbook_publication.edit', 'end'); - $this->crud->operation(['list', 'show'], function () { - $this->crud->removeButton('update'); - }); - } - - public function links($id) - { - if (!FluidbookPublication::hasPermission($id)) { - abort(401); - } - return view('fluidbook_publication.link_editor', ['id' => $id, 'fluidbook' => FluidbookPublication::find($id)]); - } - - - protected function fixDriftedLinks($fluidbook_id) - { - if (!FluidbookPublication::hasPermission($fluidbook_id)) { - abort(401); + $fluidbook = FluidbookPublication::find($fluidbook_id); + if (!$fluidbook) { + abort(404); } - /** @var FluidbookPublication $book */ - $book = FluidbookPublication::find($fluidbook_id); - $w = $book->getPageWidth(); - $w2 = $w * 2; - Links::getLinksAndRulers($fluidbook_id, $links, $rulers); - foreach ($links as $i => $link) { - $change = false; - while (true) { - if ($link['page'] % 2 === 0) { - $diff = $link['left'] - $w2; - } else { - $diff = $link['left'] - $w; - } - if ($diff < 0) { - break; - } - $change = true; - $link['left'] -= $w; - } - if ($change) { - $links[$i] = $link; - } + if ($fluidbook->status != $newStatus) { + $fluidbook->status = $newStatus; + $fluidbook->save(); } - Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Corriger la dérive des liens"), $links, $rulers, [], []); + Alert::add('success', __('Status de la publication modifié'))->flash(); + return redirect(backpack_url('fluidbook-publication')); } } diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php new file mode 100644 index 000000000..fb44df5fe --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php @@ -0,0 +1,289 @@ +whereIn('type', ['raster', 'images', 'texts', 'vector']) + ->whereNumber('page'); + //->whereIn('format', ['jpg', 'png', 'avif', 'webp', 'svg']); + } + + protected function getLinkAsset($fluidbook_id, $file) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + /** @var FluidbookPublication $fb */ + $fb = FluidbookPublication::find($fluidbook_id); + return XSendFileController::sendfileNoCache($fb->asset_path($file)); + } + + protected function saveLinks($fluidbook_id) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + + Links::saveLinksInFile($fluidbook_id, + backpack_user()->id, + request('message'), + json_decode(request('links', '[]'), true), + json_decode(request('rulers', '[]'), true), + ); + $fb = FluidbookPublication::find($fluidbook_id); + + return response()->json(['assets' => $fb->getLinksAssetsDimensions(), 'versions' => Links::getLinksVersions($fluidbook_id)]); + } + + protected function moveLinks($fluidbook_id) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + + $offset = request('number'); + $from = request('start'); + $internal = request('offset_internal_links', '0'); + + /** @var FluidbookPublication $fb */ + $fb = FluidbookPublication::find($fluidbook_id); + if ($internal) { + $numerotation = explode(',', $fb->page_numbers); + } + $width = $fb->getPageWidth(); + $isOnePage = $fb->isOnePage(); + + Links::getLinksAndRulers($fluidbook_id, $links, $rulers); + + $rlinks = array(); + foreach ($links as $k => $link) { + if (!$isOnePage && $link['page'] % 2 == 0 && $link['left'] > $width) { + $link['page']++; + $link['left'] -= $width; + } + + if ($link['page'] >= $from) { + $link['page'] += $offset; + } + if ($internal && $link['type'] == 5) { + if ($link['numerotation'] == 'physical') { + if ($link['to'] >= $from) { + $link['to'] += $offset; + } + } else { + $ph = array_search($link['to'], $numerotation) + 1; + if ($ph >= $from) { + $ph += $offset; + $vi = $numerotation[($ph - 1)]; + $link['to'] = $vi; + } + } + } + $rlinks[$k] = $link; + } + + $rrulers = array(); + foreach ($rulers as $k => $ruler) { + if (!$isOnePage && $ruler['type'] == 'x' && $ruler['page'] % 2 == 0 && $ruler['pos'] > $width) { + $ruler['page']++; + $ruler['pos'] -= $width; + } + + if ($ruler['page'] > $from) { + $ruler['page'] += $offset; + } + + if (!$isOnePage && $ruler['page'] % 2 == 1 && $ruler['type'] == 'x') { + $ruler['page']--; + $ruler['pos'] += $width; + } + + $rrulers[$k] = $ruler; + } + + Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __('Décalage de :nb pages à partir de la page :page', ['nb' => $offset, 'page' => $from]), $rlinks, $rrulers); + return response()->json(['success' => 'ok']); + } + + protected function getLinkPage($fluidbook_id, $type, $page, $format = 'jpg') + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + /** @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; + break; + case 'images': + $withText = false; + $withGraphics = true; + break; + case 'texts': + default: + $withText = true; + $withGraphics = false; + break; + } + $path = $fluibdook->$f($page, $format, 150, $withText, $withGraphics, 'html'); + return XSendFileController::sendfile($path); + } + + protected function getLinkVersions($fluidbook_id) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + $links = Links::getLinksVersions($fluidbook_id); + return response()->json($links); + } + + protected function exportLinks($fluidbook_id, $version) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + Links::getLinksAndRulers($fluidbook_id, $links, $rulers, $version); + $xlsx = Links::linksToExcel($links, $rulers); + $tmpfile = Files::tempnam() . '.xlsx'; + $writer = new Xlsx($xlsx); + $writer->save($tmpfile); + return response()->file($tmpfile)->deleteFileAfterSend(); + } + + protected function restoreLinks($fluidbook_id, $version) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + + Links::getLinksAndRulers($fluidbook_id, $links, $rulers, $version); + Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __('Restaurer la sauvegarde des liens :date', ['date' => date('Y-m-d H:i:s', $version)]), $links, $rulers, [], []); + return response()->json(['success' => 'ok']); + } + + protected function importLinks($fluidbook_id) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + /** @var UploadedFile $uploadedFile */ + $uploadedFile = request()->file('file'); + + Links::getLinksAndRulersFromExcelFile($uploadedFile->getPathname(), $links, $rulers); + Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Remplacer les liens à partir du fichier :file", ['file' => $uploadedFile->getClientOriginalName()]), $links, $rulers, [], []); + return response()->json(['success' => 'ok']); + } + + protected function importLinksMerge($fluidbook_id) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + + /** @var UploadedFile $uploadedFile */ + $uploadedFile = request()->file('file'); + + Links::getLinksAndRulers($fluidbook_id, $merged_links, $merged_rulers); + Links::getLinksAndRulersFromExcelFile($uploadedFile->getPathname(), $links, $rulers); + $existing_uids = []; + foreach ($merged_links as $merged_link) { + $existing_uids[$merged_link['uid']] = true; + } + + foreach ($links as $link) { + if (isset($existing_uids[$link['uid']])) { + $link['uid'] = Links::generateUID(); + $existing_uids[$link['uid']] = true; + } + $merged_links[] = $link; + } + + $merged_rulers = array_merge($merged_rulers, $rulers); + + Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Ajouter les liens à partir du fichier :file", ['file' => $uploadedFile->getClientOriginalName()]) . ' ', $merged_links, $merged_rulers, [], []); + return response()->json(['success' => 'ok']); + } + + protected function setupLinksDefaults() + { + $this->crud->addButton('line', 'edit', 'view', 'crud::buttons.fluidbook_publication.edit', 'end'); + $this->crud->operation(['list', 'show'], function () { + $this->crud->removeButton('update'); + }); + } + + public function links($id) + { + if (!FluidbookPublication::hasPermission($id)) { + abort(401); + } + return view('fluidbook_publication.link_editor', ['id' => $id, 'fluidbook' => FluidbookPublication::find($id)]); + } + + + protected function fixDriftedLinks($fluidbook_id) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + /** @var FluidbookPublication $book */ + $book = FluidbookPublication::find($fluidbook_id); + $w = $book->getPageWidth(); + $w2 = $w * 2; + Links::getLinksAndRulers($fluidbook_id, $links, $rulers); + foreach ($links as $i => $link) { + $change = false; + while (true) { + if ($link['page'] % 2 === 0) { + $diff = $link['left'] - $w2; + } else { + $diff = $link['left'] - $w; + } + if ($diff < 0) { + break; + } + $change = true; + $link['left'] -= $w; + } + if ($change) { + $links[$i] = $link; + } + } + Links::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Corriger la dérive des liens"), $links, $rulers, [], []); + } +} diff --git a/app/Http/Controllers/Admin/UsersCrudController.php b/app/Http/Controllers/Admin/UsersCrudController.php index c32f5f1a1..49a9adb3c 100644 --- a/app/Http/Controllers/Admin/UsersCrudController.php +++ b/app/Http/Controllers/Admin/UsersCrudController.php @@ -10,6 +10,7 @@ class UsersCrudController extends \Cubist\Backpack\Magic\Controllers\CubistMagic use \Cubist\Backpack\Http\Controllers\Operations\ReviseOperation; use \Cubedesigners\UserDatabase\Operations\LoginasOperation; use \Cubedesigners\UserDatabase\Operations\CreateFromCompany; + use \Cubedesigners\UserDatabase\Operations\FilesOperation; diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index a365cc948..7e235082b 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -7,6 +7,7 @@ use App\Console\Commands\WorkshopMigration; use App\Fields\FluidbookChapters; use App\Fields\FluidbookComposition; use App\Fields\FluidbookLocale; +use App\Fields\FluidbookStatus; use App\Fields\User; use App\Fluidbook\Farm; use App\Fluidbook\Links; @@ -15,6 +16,7 @@ use App\Http\Controllers\Admin\Operations\FluidbookPublication\CompositionOperat use App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\DownloadOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\EditOperation; +use App\Http\Controllers\Admin\Operations\FluidbookPublication\LinksOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\PreviewOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\StatsOperation; use App\Jobs\FluidbookImagesPreprocess; @@ -53,7 +55,7 @@ class FluidbookPublication extends ToolboxSettingsModel protected static $_docs = []; - protected $_operations = [CreateOperation::class, PreviewOperation::class, EditOperation::class, CompositionOperation::class, StatsOperation::class, DownloadOperation::class, CloneOperation::class, DeletefbOperation::class]; + protected $_operations = [CreateOperation::class, PreviewOperation::class, LinksOperation::class, CompositionOperation::class, StatsOperation::class, DownloadOperation::class, CloneOperation::class, DeletefbOperation::class, EditOperation::class]; protected $casts = ['composition' => 'array']; @@ -69,7 +71,6 @@ class FluidbookPublication extends ToolboxSettingsModel { parent::setFields(); - $this->addField('hash', Hidden::class); $this->addField('cid', Hidden::class); @@ -123,15 +124,12 @@ class FluidbookPublication extends ToolboxSettingsModel $this->addOwnerField(['column_attribute' => 'allTreeInfos']); $this->addField('region', SelectFromArray::class, __('Région d\'hébergement des données'), ['options' => ['UE' => __('Union européenne'), 'US' => 'USA'], 'default' => 'UE', 'allows_null' => false, 'databaseDefault' => 'UE']); - - $this->addField('status', SelectFromArray::class, 'Status', [ - 'options' => - [-1 => __('Brouillon'), 0 => __('Prêt'), 1 => __('Téléchargé'), 2 => __('Facturé')], + $this->addField('status', FluidbookStatus::class, __('Status'), [ 'column' => true, 'filter' => true, 'non_default_tracking' => false, 'allows_null' => false, - 'default' => -1, + 'default' => 0, 'searchLogic' => false, ] ); @@ -156,8 +154,6 @@ class FluidbookPublication extends ToolboxSettingsModel $this->setSettingsFields(); $this->addField('section_infos', FormBigSection::class, __('Administration')); - - $this->addField('visits_counter', Integer::class, 'Compteur de visites', ['read_only' => true, 'default' => 0, 'column' => true, 'column_label' => '', 'searchLogic' => false]); $this->addField(self::CREATED_AT, Datetime::class, __('Crée'), ['column' => true, 'column_type' => 'datetime', 'column_format' => 'YYYY-MM-DD', 'filter' => true, 'read_only' => true, 'searchLogic' => false]); @@ -536,7 +532,7 @@ class FluidbookPublication extends ToolboxSettingsModel if ($this->id < WorkshopMigration::WS3_BOOK_ID) { return false; } - if ($this->status >= 0) { + if ($this->status >= 1) { return false; } return true; @@ -552,7 +548,7 @@ class FluidbookPublication extends ToolboxSettingsModel if (backpack_user()) { $new->owner = backpack_user()->id; } - $new->status = -1; + $new->status = 0; $new->title = __('Copie de :title', ['title' => $new->title]); $new->visits_counter = 0; return $new; diff --git a/public/packages/fluidbook/toolbox/js/contextdownload.js b/public/packages/fluidbook/toolbox/js/contextdownload.js index f4500d442..e6f05e192 100644 --- a/public/packages/fluidbook/toolbox/js/contextdownload.js +++ b/public/packages/fluidbook/toolbox/js/contextdownload.js @@ -1,4 +1,5 @@ $(function () { + var sep = '---------'; $.contextMenu({ selector: '[data-context-actions]', trigger: 'left', build: function ($trigger, e) { var route = $($trigger).data('context-route'); @@ -6,10 +7,11 @@ $(function () { var rawActions = $($trigger).data('context-actions'); var items = {}; var confirm = $($trigger).data('context-confirm'); + var disabledOption = $($trigger).data('context-disabled-action'); var actions = {}; $.each(rawActions, function (key, action) { - if (action != '---------') { + if (action != sep) { if (typeof action === 'string') { action = {'label': action}; } @@ -20,14 +22,15 @@ $(function () { if (action.target === undefined) { action.target = '_self'; } + action.disabled =(key == disabledOption); action.isHtmlName = true; } actions[key] = action; }); $.each(actions, function (key, action) { - if (action !== '---------') { - items[key] = {name: action.label, isHtmlName: true}; + if (action !== sep) { + items[key] = {name: action.label, isHtmlName: action.isHtmlName, disabled: action.disabled,}; } else { items[key] = action; } @@ -39,7 +42,6 @@ $(function () { return { callback: function (key, options) { - var ok = function () { var target = actions[key].target; var url = actions[key].url; diff --git a/resources/views/columns/fluidbook_status.blade.php b/resources/views/columns/fluidbook_status.blade.php new file mode 100644 index 000000000..c8fb53f9a --- /dev/null +++ b/resources/views/columns/fluidbook_status.blade.php @@ -0,0 +1,21 @@ +{{-- select_from_array column --}} +@php + $values = data_get($entry, $column['name']); + $v=$column['options'][$values]; +@endphp + +@can('fluidbook-publication:admin') + getOption('name')}}-{{$column['name']}}="{{$values}}"> + {{$v}} + +@endcan +@cannot('fluidbook-publication:admin') + {{$v}} +@endcannot diff --git a/resources/views/vendor/backpack/crud/buttons/fluidbook_quote/assign.blade.php b/resources/views/vendor/backpack/crud/buttons/fluidbook_quote/assign.blade.php index 4322fa236..8d76d7fd4 100644 --- a/resources/views/vendor/backpack/crud/buttons/fluidbook_quote/assign.blade.php +++ b/resources/views/vendor/backpack/crud/buttons/fluidbook_quote/assign.blade.php @@ -1,7 +1,8 @@ {{-- __('!! Demandes de devis fluidbook') --}} @if($entry->status==0) -