+++ /dev/null
-<?php
-
-namespace App\Console\Commands;
-
-use App\Jobs\GenerateSecondPagePreview;
-use Illuminate\Console\Command;
-use App\Models\FluidbookPublication;
-
-class DebugDeliveryJob extends Command
-{
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'app:debug-delivery-job';
-
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = 'Command description';
-
- /**
- * Execute the console command.
- */
- public function handle()
- {
- //
- $f = FluidbookPublication::find(30116);
- GenerateSecondPagePreview::dispatchSync($f);
- }
-}
--- /dev/null
+<?php
+
+namespace App\Console\Commands;
+
+use App\Jobs\GenerateDeliveryThumbnailsPreview;
+use Illuminate\Console\Command;
+use App\Models\FluidbookPublication;
+use Illuminate\Support\Facades\Bus;
+
+class FluidbookGeneratePreview extends Command
+{
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'fluidbook:preview-generate {id} {sync?}';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Generate preview of Fluidbook to desktop, mobile and mobile-first';
+
+ /**
+ * Execute the console command.
+ */
+ public function handle()
+ {
+ //
+ $f = FluidbookPublication::find($this->argument('id'));
+ $mobilefirstFluidbookId = $f->mobilefirstFluidbookId;
+ $fm = null;
+
+ $fn = 'dispatch';
+ if($this->argument('sync'))
+ $fn = 'dispatchSync';
+
+ if($mobilefirstFluidbookId) {
+ $fm = FluidbookPublication::find($mobilefirstFluidbookId);
+ }
+
+ if($fm) {
+ GenerateDeliveryThumbnailsPreview::$fn($fm,320, 600, 'mobile');
+ }
+
+ GenerateDeliveryThumbnailsPreview::$fn($f,1920, 1080);
+ GenerateDeliveryThumbnailsPreview::$fn($f,320, 600, 'mobile');
+ }
+}
protected function setupDownloadRoutes($segment, $routeName, $controller)
{
Route::match(['get'], $segment . '/{id}/delivery', $controller . '@delivery');
+ Route::match(['get'], $segment . '/{id}/delivery/{type}', $controller . '@deliveryThumb')->name('deliveryThumb');
Route::match(['get'], $segment . '/{id}/package/{action}/{version}', $controller . '@package');
Route::match(['get'], $segment . '/{id}/package/{action}/scorm/{scormversion}', $controller . '@packageScorm');
Route::match(['get'], $segment . '/{id}_{hash}/download/{file}', $controller . '@download')->withoutMiddleware([CheckIfAdmin::class]);;
return view('fluidbook_publication.delivery', ['fluidbook' => FluidbookPublication::where('id', $id)->first()]);
}
+ protected function deliveryThumb($id,$type)
+ {
+ $typeAvailable = ['desktop', 'mobile'];
+ if (!FluidbookPublication::hasPermission($id, 'read')) {
+ abort(401);
+ }
+ if (!$type || !in_array($type, $typeAvailable)) {
+ abort(404);
+ }
+
+ $relayPath = '/fluidbookpublication/delivery/';
+ $relayPath = protected_path($relayPath);
+ $relayPath .= $id;
+ $relayPath .= $type === "desktop" ? '' : '-mobile';
+ $relayPath .= '.jpg';
+ return XSendFileController::sendfile($relayPath);
+ }
+
protected function download($id, $hash, $file)
{
$e = explode('-', $file);
--- /dev/null
+<?php
+
+namespace App\Jobs;
+
+use App\Models\FluidbookPublication;
+use Cubist\Util\CommandLine;
+use Cubist\Util\Files\Files;
+
+class GenerateDeliveryThumbnailsPreview extends Base
+{
+ public $publication;
+ public $width;
+ public $height;
+ public $v;
+
+ public function __construct(FluidbookPublication $publication, $width, $height, $v = '')
+ {
+ $this->publication = $publication;
+ $this->width = $width;
+ $this->height = $height;
+ $this->v = $v;
+ }
+
+ /**
+ * Execute the job.
+ */
+ public function handle()
+ {
+ $cl = new CommandLine('node');
+ $cl->setArg(null, resource_path('fluidbooktheme/theme_preview/secondpage_preview.js'));
+ $cl->setArg('width', $this->width);
+ $cl->setArg('height', $this->height);
+ $cl->setArg('delay', 2);
+ $cl->setArg('scale', 1);
+ $cl->setArg('dest', self::getPreviewPath($this->publication->id, $this->v));
+ $cl->setArg('page', 2);
+ $url = $this->publication->getPreviewURL();
+ $cl->setArg('url', $url);
+ $cl->execute();
+ }
+
+ public static function getPreviewPath($fluidbookId, $variant = '')
+ {
+ $res = Files::mkdir(protected_path('fluidbookpublication/delivery')) . '/' . $fluidbookId;
+ if ($variant) {
+ $res .= '-' . $variant;
+ }
+ $res .= '.jpg';
+ return $res;
+ }
+}
+++ /dev/null
-<?php
-
-namespace App\Jobs;
-
-use App\Models\FluidbookPublication;
-use Cubist\Util\CommandLine;
-
-class GenerateSecondPagePreview extends Base
-{
- public $publication;
-
- public function __construct(FluidbookPublication $publication)
- {
- $this->publication = $publication;
- }
-
- /**
- * Execute the job.
- */
- public function handle()
- {
- $cl = new CommandLine('node');
- $cl->setArg(null, resource_path('fluidbooktheme/theme_preview/secondpage_preview.js'));
- $cl->setArg('width', 1920);
- $cl->setArg('height', 1080);
- $cl->setArg('delay', 2);
- $cl->setArg('scale', 1);
- $cl->setArg('dest', self::getPreviewPath($this->publication->id));
- $cl->setArg('page', 2);
- $url = $this->publication->getPreviewURL();
- $cl->setArg('url', $url);
-
- $cl2 = new CommandLine('node');
- $cl2->setArg(null, resource_path('fluidbooktheme/theme_preview/secondpage_preview.js'));
- $cl2->setArg('width', 320);
- $cl2->setArg('height', 600);
- $cl2->setArg('delay', 2);
- $cl2->setArg('scale', 1);
- $cl2->setArg('dest', self::getPreviewPath($this->publication->id), "mobile");
- $cl2->setArg('page', 2);
- $url = $this->publication->getPreviewURL();
- $cl2->setArg('url', $url);
-
-
- $cl->execute();
- $cl2->execute();
-
-
- $cl->dd();
- }
-
- public static function getPreviewPath($fluidbookId, $variant = '')
- {
- $res = storage_path('delivery') . '/' . $fluidbookId;
- if ($variant) {
- $res .= '-' . $variant;
- }
- $res .= '.jpg';
- return $res;
- }
-}
use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\SocialImageOperation;
use App\Http\Controllers\Admin\Operations\FluidbookPublication\StatsOperation;
use App\Jobs\FluidbookImagesPreprocess;
+use App\Jobs\GenerateDeliveryThumbnailsPreview;
use App\Jobs\GenerateSecondPagePreview;
use App\Models\Base\ToolboxSettingsModel;
use App\Models\Traits\CheckHash;
$this->setComposedAttributes();
$this->checkHash();
- dispatch(new GenerateSecondPagePreview($this))->onQueue('theme');
+ $this->generateThumbnailsPreview(true);
if ($this->_compositionUpdated) {
FluidbookImagesPreprocess::dispatch($this->id);
}
}
- public function getPreviewURL()
+ public function getPreviewURL($params = [])
{
- return route('fluidbook_preview', ['version' => 'online', 'id' => $this->id, 'hash' => $this->hash]);
+ return route('fluidbook_preview', ['version' => 'online', 'id' => $this->id, 'hash' => $this->hash, ...$params]);
}
public function getTranslations()
$l10n['default'] = $this->getDefaultTranslations($l10n);
return $l10n;
}
+
+ public function generateThumbnailsPreview($sync = false) {
+ $mobilefirstFluidbookId = $this->mobilefirstFluidbookId;
+ $fm = null;
+
+ $fn = 'dispatch';
+ if($sync)
+ $fn = 'dispatchSync';
+
+ if($mobilefirstFluidbookId) {
+ $fm = self::find($mobilefirstFluidbookId);
+ }
+
+ if($fm) {
+ GenerateDeliveryThumbnailsPreview::$fn($fm,320, 683, 'mobile');
+ }
+
+ GenerateDeliveryThumbnailsPreview::$fn($this,1920, 1201);
+ GenerateDeliveryThumbnailsPreview::$fn($this,320, 683, 'mobile');
+ }
}
align-items: center;
flex-direction: column;
}
+.delivery-glimpses .preview-desktop {
+ width: 100%;
+ max-width: 454px;
+}
+.delivery-glimpses .preview-mobile {
+ width: 100%;
+ max-width: 133px;
+}
.delivery-glimpses .btn {
margin-top: 8px;
}
-{"version":3,"sources":["delivery.less"],"names":[],"mappings":"AAAA;AAAK;EACD,uBAAA;;AAGJ;EACI,qBAAA;;AAGJ,OAAQ;EACJ,iBAAA;;AAGJ;EACI,aAAA;;AACA,OAAC;EACG,4BAA4B,uBAA5B;;AAIR;EACI,QAAA;;AAGJ;EACI,gBAAA;;AAIA,SAAC;EACG,mBAAA;;AADJ,SAAC,OAEG,GAAE,IAAI;EACF,cAAc,kBAAd;;AAHR,SAAC,OAKG,GAAE;EACE,YAAA;EACA,oBAAA;;AAPR,SAAC,OASG;EACI,OAAO,WAAP;;AAGR,SAAC;EACG,mBAAA;;AADJ,SAAC,SAEG;EACI,yCAAA;EACA,aAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;;AARR,SAAC,SAUG;EACI,eAAA;;AAXR,SAAC,SAaG;EACI,kBAAA;;AAGR,SAAC;EACG,gBAAA;EACA,WAAA;EACA,iBAAA;EACA,gBAAA;EACA,SAAA;EACA,wBAAA;EACA,aAAA;;AACA,SARH,aAQI;EACG,cAAA;;AATR,SAAC,aAWG;EACI,aAAA;EACA,kBAAkB,WAAlB;EACA,kBAAA;EACA,mBAAA;EACA,kBAAA;;AAGR,SAAC;EACG,yCAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;;AACA,SALH,QAKI;EACG,yBAAA;;AADJ,SALH,QAKI,iBAEG;EACI,2BAAA;;AAHR,SALH,QAKI,iBAKG;EACI,4BAAA;;AAXZ,SAAC,QAcG;EACI,WAAA;EACA,WAAA;EACA,aAAA;EACA,kBAAA;EACA,QAAA;;AAnBR,SAAC,QAqBG;EACI,kBAAA;EACA,eAAA;EACA,cAAA;;AAIR,SAAC;EACG,aAAA;EACA,gBAAA;EACA,kBAAA;;AAHJ,SAAC,aAIG;EACI,WAAA;EACA,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,SAAA;EACA,QAAA;EACA,WAAW,qBAAX;;AAIR,SAAC,aACG;EACI,WAAA;EACA,SAAA;;AAKZ;EACI,SAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,qBAAA;EACA,kBAAA;;AAGJ;EACI,aAAa,eAAe,6BAA5B;EACA,aAAa,cAAe,2BAA5B;EACA,YAAY,eAAe,6BAA3B;EACA,WAAW,YAAe,uBAA1B;EACA,WAAW,cAAe,2BAA1B;EACA,WAAW,YAAe,uBAA1B;EACA,YAAY,YAAe,uBAA3B;EACA,aAAa,YAAe,uBAA5B;EACA,aAAa,YAAe,uBAA5B;EACA,aAAa,eAAe,6BAA5B;;EAGA,iBAAiB,eAAe,8BAAhC;EACA,gBAAgB,cAAe,gCAA/B;EACA,cAAc,eAAe,4BAA7B;EACA,aAAa,YAAe,6BAA5B;EACA,aAAa,cAAe,2BAA5B;EACA,cAAc,YAAe,yBAA7B;EACA,gBAAgB,YAAe,yBAA/B;EACA,iBAAiB,YAAe,yBAAhC;;EAGA,eAAe,YAAe,gCAA9B","file":"delivery.css"}
\ No newline at end of file
+{"version":3,"sources":["delivery.less"],"names":[],"mappings":"AAAA;AAAK;EACD,uBAAA;;AAGJ;EACI,qBAAA;;AAGJ,OAAQ;EACJ,iBAAA;;AAGJ;EACI,aAAA;;AACA,OAAC;EACG,4BAA4B,uBAA5B;;AAIR;EACI,QAAA;;AAGJ;EACI,gBAAA;;AAIA,SAAC;EACG,mBAAA;;AADJ,SAAC,OAEG,GAAE,IAAI;EACF,cAAc,kBAAd;;AAHR,SAAC,OAKG,GAAE;EACE,YAAA;EACA,oBAAA;;AAPR,SAAC,OASG;EACI,OAAO,WAAP;;AAGR,SAAC;EACG,mBAAA;;AADJ,SAAC,SAEG;EACI,yCAAA;EACA,aAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;;AARR,SAAC,SAUG;EACI,WAAA;EACA,gBAAA;;AAZR,SAAC,SAcG;EACI,WAAA;EACA,gBAAA;;AAhBR,SAAC,SAkBG;EACI,eAAA;;AAnBR,SAAC,SAqBG;EACI,kBAAA;;AAGR,SAAC;EACG,gBAAA;EACA,WAAA;EACA,iBAAA;EACA,gBAAA;EACA,SAAA;EACA,wBAAA;EACA,aAAA;;AACA,SARH,aAQI;EACG,cAAA;;AATR,SAAC,aAWG;EACI,aAAA;EACA,kBAAkB,WAAlB;EACA,kBAAA;EACA,mBAAA;EACA,kBAAA;;AAGR,SAAC;EACG,yCAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;;AACA,SALH,QAKI;EACG,yBAAA;;AADJ,SALH,QAKI,iBAEG;EACI,2BAAA;;AAHR,SALH,QAKI,iBAKG;EACI,4BAAA;;AAXZ,SAAC,QAcG;EACI,WAAA;EACA,WAAA;EACA,aAAA;EACA,kBAAA;EACA,QAAA;;AAnBR,SAAC,QAqBG;EACI,kBAAA;EACA,eAAA;EACA,cAAA;;AAIR,SAAC;EACG,aAAA;EACA,gBAAA;EACA,kBAAA;;AAHJ,SAAC,aAIG;EACI,WAAA;EACA,YAAA;EACA,kBAAA;EACA,mBAAA;EACA,SAAA;EACA,QAAA;EACA,WAAW,qBAAX;;AAIR,SAAC,aACG;EACI,WAAA;EACA,SAAA;;AAKZ;EACI,SAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA,qBAAA;EACA,kBAAA;;AAGJ;EACI,aAAa,eAAe,6BAA5B;EACA,aAAa,cAAe,2BAA5B;EACA,YAAY,eAAe,6BAA3B;EACA,WAAW,YAAe,uBAA1B;EACA,WAAW,cAAe,2BAA1B;EACA,WAAW,YAAe,uBAA1B;EACA,YAAY,YAAe,uBAA3B;EACA,aAAa,YAAe,uBAA5B;EACA,aAAa,YAAe,uBAA5B;EACA,aAAa,eAAe,6BAA5B;;EAGA,iBAAiB,eAAe,8BAAhC;EACA,gBAAgB,cAAe,gCAA/B;EACA,cAAc,eAAe,4BAA7B;EACA,aAAa,YAAe,6BAA5B;EACA,aAAa,cAAe,2BAA5B;EACA,cAAc,YAAe,yBAA7B;EACA,gBAAgB,YAAe,yBAA/B;EACA,iBAAiB,YAAe,yBAAhC;;EAGA,eAAe,YAAe,gCAA9B","file":"delivery.css"}
\ No newline at end of file
align-items: center;
flex-direction: column;
}
+ .preview-desktop {
+ width: 100%;
+ max-width: 454px;
+ }
+ .preview-mobile {
+ width: 100%;
+ max-width: 133px;
+ }
.btn {
margin-top: 8px;
}
});
const page = await browser.newPage();
+ await page.setDefaultNavigationTimeout(0);
await page.setViewport({
width: options.width / options.scale, height: options.height / options.scale, deviceScaleFactor: options.scale,
});
@extends(backpack_view('blank'))
@php
-dd(storage_path('delivery') . '/');
$breadcrumbs = [
trans('backpack::crud.admin') => url(config('backpack.base.route_prefix'), 'dashboard'),
trans('backpack::base.my_account') => false,
$statusText = $fluidbook->status ? 'prĂȘt' : 'en cours de production';
$qrCodeMobile = QrCode::size(311)->color(27, 42, 78)->generate($fluidbook->getPreviewURL());
+
+ $fluidbookDesktopPreview = route('deliveryThumb', ['id' => $fluidbook->id, 'type' => 'desktop']);
+ $fluidbookMobilePreview = route('deliveryThumb', ['id' => $fluidbook->id, 'type' => 'mobile']);
+
$fluidbookMobileFirstId = $fluidbook->mobilefirstFluidbookId;
if($fluidbookMobileFirstId){
$previewMobileFirstUrl = App\Models\FluidbookPublication::find($fluidbookMobileFirstId)->getPreviewURL();
$qrCodeMobileFirst = QrCode::size(311)->color(27, 42, 78)->generate($previewMobileFirstUrl);
+ $fluidbookMobileFirstPreview = route('deliveryThumb', ['id' => $fluidbookMobileFirstId, 'type' => 'mobile']);
}
$totalPages = $fluidbook->getPagesNumber();
<div class="preview col-md-6">
<p>Version Desktop</p>
<div class="block">
+ <img class="preview-desktop" src="{{ $fluidbookDesktopPreview }}" />
<a href="{{ $fluidbook->getPreviewURL() }}" target="_blank" class="btn btn-primary">Voir</a>
</div>
</div>
<div class="preview col-md-3">
<p>Version Mobile</p>
<div class="block">
+ <img class="preview-mobile" src="{{ $fluidbookMobilePreview }}" />
<a href="#" data-featherlight="#scanBoxMobile" class="btn btn-primary">Voir</a>
</div>
@include('fluidbook_publication.qrcode_popup', ['id' => 'scanBoxMobile', 'text' => 'Mobile', 'qrcode' => $qrCodeMobile])
<div class="preview col-md-3">
<p>Version Mobile-first</p>
<div class="block">
+ <img class="preview-mobile" src="{{ $fluidbookMobileFirstPreview }}" />
<a href="#" data-featherlight="#scanBoxMobileFirst" class="btn btn-primary">Voir</a>
</div>
@include('fluidbook_publication.qrcode_popup', ['id' => 'scanBoxMobileFirst', 'text' => 'Mobile-first', 'qrcode' => $qrCodeMobileFirst])
@echo off
cls
-C:\tools\cygwin\bin\ssh.exe -t root@dev.toolbox.fluidbook.com 'docker exec -it -u toolbox fluidbook-toolbox-dev /application/scripts/restartworkers.sh'
+ssh -t root@dev.toolbox.fluidbook.com 'docker exec -it -u toolbox fluidbook-toolbox-dev /application/scripts/restartworkers.sh'
exit
exit
exit