use Cubist\Backpack\Http\Controllers\Base\XSendFileController;
use Cubist\Util\Files\Files;
use Illuminate\Http\UploadedFile;
+use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Route;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
+use App\Events\DetectConnexion;
+use Illuminate\Support\Facades\Broadcast;
+use Illuminate\Support\Str;
+use Illuminate\Http\Request;
+
trait LinksOperation
{
+ protected $token;
+
protected function setupLinksRoutes($segment, $routeName, $controller)
{
- Route::match(['get'], $segment . '/{id}/edit/links', $controller . '@links')->name('fluidbook_linkeditor');;
+ Route::match(['get'], $segment . '/{id}/edit/links', $controller . '@links')->name('fluidbook_linkeditor')->middleware('clearRouteCache');
+ Route::match(['post'], $segment . '/{id}/edit/links', $controller . '@broadcast')->name('fluidbook_linkeditor_post');
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');
});
}
- public function links($id)
+ public function links($id, Request $request)
{
if (!FluidbookPublication::hasPermission($id)) {
abort(401);
}
- return view('fluidbook_publication.link_editor', ['id' => $id, 'fluidbook' => FluidbookPublication::find($id)]);
+
+ $token = Str::random(10);
+ cache(['token' => $token]);
+
+ return view('fluidbook_publication.link_editor', ['id' => $id, 'fluidbook' => FluidbookPublication::find($id), 'access' => ""]);
}
+ public function broadcast(Request $request)
+ {
+ $fluidbookId = $request->id;
+ $userId = backpack_user()->id;
+ $token = cache()->get('token');
+
+ //$key = $userId.'_'.$fluidbookId;
+ //Cache::forget('connexion');
+
+ //cache()->forget('connexion');
+ $connexionExist = cache()->get('connexion');
+
+ if($connexionExist && $fluidbookId === $connexionExist['f_id']) {
+ if($userId != $connexionExist['id'] || $token !== $connexionExist['token']) {
+ return "unavailable";
+ } else {
+ return $connexionExist;
+ }
+ } else {
+ cache(['connexion' => ['token' => $token, 'id' => $userId, 'f_id' => $fluidbookId] ]);
+ }
+ }
protected function fixDriftedLinks($fluidbook_id)
{
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
+ 'clearRouteCache' => \App\Http\Middleware\ClearRouteCache::class,
];
/**
--- /dev/null
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Http\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Illuminate\Support\Facades\Cache;
+
+class ClearRouteCache
+{
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
+ */
+ public function handle(Request $request, Closure $next): Response
+ {
+ $response = $next($request);
+
+ // Supprimez le cache associé à la route
+ Cache::forget('token');
+
+ return $response;
+ }
+}
import GrahamScan from "@lucio/graham-scan";
+import Echo from "laravel-echo"
+
import LinkeditorLinks from './linkeditor.links';
import LinkeditorLoader from './linkeditor.loader';
import LinkeditorResize from './linkeditor.resize';
this.dimensionProperties = ['left', 'top', 'width', 'height'];
-
this.init();
}
$(function () {
window.linkeditor = new LinkEditor();
+ /*window.Pusher = require('pusher-js');
+ window.Echo = new Echo({
+ broadcaster: 'pusher',
+ key: 'rdc11ef11d94aa',
+ wsHost: 'dev.toolbox.fluidbook.com',
+ cluster: 'mt1',
+ forceTLS: false,
+ disableStats: true,
+ });*/
+
+ /*setInterval(function() {
+
+ }, 5000)*/
+
+
+ setInterval(function() {
+ $.ajax({
+ method: "POST",
+ url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/edit/links',
+ data: {id: FLUIDBOOK_DATA.id}
+ }).done(function (msg) {
+ console.log(msg)
+ if(msg === "unavailable") {
+ if($("#popup-overlay").find('.popup').length === 0) {
+ window.linkeditor.popup.open('unavailable');
+ }
+ }
+ });
+ }, 5000)
});
return old.apply(this, arguments);
};
})($.fn.attr);
-
height: 100%
z-index: 10000000
- &.show
+ &.show,
+ &.unavailable
opacity: 1
pointer-events: auto
'both'=>__('Appliquer les mêmes dimensions à la sélection'),
];
-
+ dump($access);
@endphp
@extends('layouts.linkeditor')
@section('content')
@include('fluidbook_publication.link_editor_icons')
- <div id="popup-overlay">
+ <div id="popup-overlay" class="{{ $access === "unavailable" }}">
<div id="popup-holder">
-
</div>
</div>
<div id="popup-templates">
</p>
</form>
</div>
+
+ <div class="popup" data-popup="unavailable" style="max-width: 300px">
+ <h2>{{__('Fluidbook en cours d\'utilisation')}}</h2>
+ <!--<p>{{__('Utilisateur : ')}}</p>-->
+ <!--<p class="button">
+ <button type="submit">{{__('Ejecter l\'utilisateur')}}</button>
+ </p>-->
+ </div>
</div>
+
<div draggable="false" id="linkeditor">
<div style="display: none" id="panels-setups">
<a href="#" id="linkeditor-icon-layers" data-panel="layers" data-icon="layers"