]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6482 @20:00
authorsoufiane <soufiane@cubedesigners.com>
Mon, 11 Dec 2023 15:17:23 +0000 (16:17 +0100)
committersoufiane <soufiane@cubedesigners.com>
Mon, 11 Dec 2023 15:17:23 +0000 (16:17 +0100)
app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php
app/Http/Kernel.php
app/Http/Middleware/ClearRouteCache.php [new file with mode: 0644]
resources/linkeditor/js/linkeditor.js
resources/linkeditor/style/inc/_popup.sass
resources/views/fluidbook_publication/link_editor.blade.php

index e83e2975d54042b210b6a39c21af9dde78a65e69..86d95461f1e7a2b0823b11a76633807495b2a4c6 100644 (file)
@@ -10,15 +10,24 @@ use App\Models\FluidbookPublication;
 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');
@@ -273,14 +282,40 @@ trait LinksOperation
         });
     }
 
-    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)
     {
index 354ded894d03767487c97164f4300906c087790b..ed35b7771cad8a07f2bab0cf31d323b8e8826e79 100644 (file)
@@ -67,6 +67,7 @@ class Kernel extends HttpKernel
         'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
+        'clearRouteCache' => \App\Http\Middleware\ClearRouteCache::class,
     ];
 
     /**
diff --git a/app/Http/Middleware/ClearRouteCache.php b/app/Http/Middleware/ClearRouteCache.php
new file mode 100644 (file)
index 0000000..3dda2aa
--- /dev/null
@@ -0,0 +1,26 @@
+<?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;
+    }
+}
index 7ebf4d89c4e5090f242698b3d946bf20d8caeb30..be2d72fcfb51fb6ea9a804323cbf230f1cf0664c 100644 (file)
@@ -7,6 +7,8 @@ import 'noty/lib/themes/mint.css';
 
 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';
@@ -85,7 +87,6 @@ function LinkEditor() {
 
     this.dimensionProperties = ['left', 'top', 'width', 'height'];
 
-
     this.init();
 }
 
@@ -566,6 +567,35 @@ LinkEditor.prototype = {
 
 $(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)
 });
 
 
@@ -588,4 +618,3 @@ $(function () {
         return old.apply(this, arguments);
     };
 })($.fn.attr);
-
index 118eeac49ccad74837908a0e63674bd1e4287669..2dd32b77d5710e5ec0ba20c504c26a215a72c6bf 100644 (file)
@@ -13,7 +13,8 @@
     height: 100%
     z-index: 10000000
 
-    &.show
+    &.show,
+    &.unavailable
         opacity: 1
         pointer-events: auto
 
index 4d01bcc3d2d75791e9480c769dfb485f3567a592..26fe9988ea797a91ab67b860fc85d5856cb542e4 100644 (file)
       '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"