if ($new == 'visits_counter' && $v == 20) {
$v = 0;
}
+ if ($new == 'status') {
+ $v++;
+ }
if ($c->getField($new) instanceof Datetime) {
$date = new \DateTime();
$date->setTimestamp($v);
--- /dev/null
+<?php
+
+namespace App\Fields;
+
+use Cubist\Backpack\CubistBackpackServiceProvider;
+use Cubist\Backpack\Magic\Fields\SelectFromArray;
+
+class FluidbookStatus extends SelectFromArray
+{
+
+ protected $_columnType = 'fluidbook_status';
+ protected $_columnViewNamespace = 'columns';
+
+
+ public function getOptions()
+ {
+ return [0 => __('Brouillon'), 1 => __('Prêt'), 2 => __('Téléchargé'), 3 => __('Facturé')];
+ }
+}
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;
}
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;
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'));
}
}
--- /dev/null
+<?php
+
+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;
+
+trait LinksOperation
+{
+
+ protected function setupLinksRoutes($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']);
+ }
+
+ 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, [], []);
+ }
+}
use \Cubist\Backpack\Http\Controllers\Operations\ReviseOperation;
use \Cubedesigners\UserDatabase\Operations\LoginasOperation;
use \Cubedesigners\UserDatabase\Operations\CreateFromCompany;
+ use \Cubedesigners\UserDatabase\Operations\FilesOperation;
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;
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;
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'];
{
parent::setFields();
-
$this->addField('hash', Hidden::class);
$this->addField('cid', Hidden::class);
$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,
]
);
$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' => '<i class="las la-chart-area" title="' . __('Compteur de visites du lien de préview') . '"></i>', '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]);
if ($this->id < WorkshopMigration::WS3_BOOK_ID) {
return false;
}
- if ($this->status >= 0) {
+ if ($this->status >= 1) {
return false;
}
return true;
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;
$(function () {
+ var sep = '---------';
$.contextMenu({
selector: '[data-context-actions]', trigger: 'left', build: function ($trigger, e) {
var route = $($trigger).data('context-route');
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};
}
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;
}
return {
callback: function (key, options) {
-
var ok = function () {
var target = actions[key].target;
var url = actions[key].url;
--- /dev/null
+{{-- select_from_array column --}}
+@php
+ $values = data_get($entry, $column['name']);
+ $v=$column['options'][$values];
+@endphp
+
+@can('fluidbook-publication:admin')
+ <span data-{{$entry->getOption('name')}}-{{$column['name']}}="{{$values}}">
+ <a href="#"
+ data-toggle="tooltip"
+ data-context-disabled-action="{{$values}}"
+ data-context-actions="{{json_encode($column['options'])}}"
+ data-context-route="{{$crud->route}}/$id/changestatus/$action"
+ data-context-id="{{$entry->getKey()}}"
+ title="{{__('Changer le status')}}"
+ >{{$v}}</a>
+</span>
+@endcan
+@cannot('fluidbook-publication:admin')
+ {{$v}}
+@endcannot
{{-- __('!! Demandes de devis fluidbook') --}}
@if($entry->status==0)
- <a class="btn btn-sm btn-link assignto" href="#" data-toggle="tooltip"
- data-context-actions="{{json_encode(['me'=>__('Je vais traiter la demander'),'94'=>__('Confier à :reseller',['reseller'=>'Kadreo'])])}}"
+ <a class="btn btn-sm btn-link assignto" href="#"
+ data-toggle="tooltip"
+ data-context-actions="{{json_encode(['me'=>__('Je vais traiter la demander')/*,'94'=>__('Confier à :reseller',['reseller'=>'Kadreo'])*/])}}"
data-context-route="{{$crud->route}}/$id/assign/$action"
data-context-id="{{$entry->getKey()}}"
data-context-confirm="{{json_encode(