]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6482 @7:00
authorsoufiane <soufiane@cubedesigners.com>
Fri, 15 Dec 2023 17:31:03 +0000 (18:31 +0100)
committersoufiane <soufiane@cubedesigners.com>
Fri, 15 Dec 2023 17:31:03 +0000 (18:31 +0100)
app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php
resources/linkeditor/js/linkeditor.js
resources/views/fluidbook_publication/link_editor.blade.php

index 5754cae231f63243b63448c33864cbc6ab10d5df..3ae1e41e75a72ef2f0b96f03df073391f2c2520f 100644 (file)
@@ -24,10 +24,12 @@ trait LinksOperation
 {
 
     protected $token;
+    protected $tabOpen = 0;
+
 
     protected function setupLinksRoutes($segment, $routeName, $controller)
     {
-        Route::match(['get'], $segment . '/{id}/edit/links', $controller . '@links')->name('fluidbook_linkeditor')->middleware('clearRouteCache');
+        Route::match(['get'], $segment . '/{id}/edit/links', $controller . '@links')->name('fluidbook_linkeditor');
         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');
@@ -302,21 +304,37 @@ trait LinksOperation
         $user = User::find($userId);
         $user = $user->firstname.' '.$user->lastname;
 
+
+        if(cache()->get('connexion_multiple'.$fluidbookId) !== null) {
+            if(cache()->has('connexion_multiple'.$fluidbookId) && intval($request->tabOpen) > 0) {
+                cache()->increment('connexion_multiple'.$fluidbookId, 1);
+            }elseif(cache()->has('connexion_multiple'.$fluidbookId) && intval($request->tabClosed) > 0) {
+                cache()->decrement('connexion_multiple'.$fluidbookId, 1);
+            }
+        }else {
+            cache(['connexion_multiple'.$fluidbookId => intval($request->tabOpen)]);
+        }
+
         // réinitialiser la connexion courante quand on clique sur "éjecter l'utilisateur"
         if($request->clear) {
             cache()->forget('connexion'.$fluidbookId);
         }
+
         $connexionExist = cache()->get('connexion'.$fluidbookId);
-        //dump($token);
-        //dump($connexionExist);
+        $connexionMultipleExist = cache()->get('connexion_multiple'.$fluidbookId);
+
         if($connexionExist && $fluidbookId === $connexionExist['f_id']) {
-            if($userId != $connexionExist['id'] || $token !== $connexionExist['token']) {
+            if($userId != $connexionExist['id'] || ($connexionMultipleExist > 1 && $token !== $connexionExist['token'])) {
                 return json_encode(["status"=>"unavailable","infos_connection"=>array_merge(["user" => $user],$connexionExist)]);
             } else {
                 return json_encode(["status"=>"available",$connexionExist]);
             }
         } else {
+            if($token === null) {
+                $token = Str::random(10);
+            }
             cache(['connexion'.$fluidbookId => ['id' => $userId, 'token' => $token,'f_id' => $fluidbookId] ]);
+            return json_encode(["status"=>"available",$connexionExist]);
         }
     }
 
index a2cdab0746d6252f6613d21612b6071b6f62aaab..fdfa18b2df121e759afd18aaa8d3d540691531b7 100644 (file)
@@ -574,88 +574,68 @@ 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() {
+    let userID = $("#userID").data('id')
+    let tabClosed = 0
+    let tabOpen = 1
 
-    }, 5000)*/
+    function intervalConnection(data = {}) {
+        tabClosed = localStorage.getItem("tabClosed")
+        $.ajax({
+            method: "POST",
+            url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/edit/links',
+            data: Object.keys(data).length > 0 ? data : {id: FLUIDBOOK_DATA.id, token: $("[data-token]").data("token"), tabClosed: tabClosed, tabOpen: tabOpen}
+        }).done(function (msg) {
+            console.log("msg",msg)
+            let response = JSON.parse(msg)
 
+            if (response.status === "unavailable") {
+                if ($("#popup-overlay").find('.popup').length === 0) {
+                    $("#popup-overlay").addClass("show")
 
-    let interval = null;
-    let userID = $("#userID").data("id");
-    function intervalConnection(data = {}) {
-        interval = setInterval(function () {
-            $.ajax({
-                method: "POST",
-                url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/edit/links',
-                data: data.length > 0 ? data : {id: FLUIDBOOK_DATA.id, token: $("[data-token]").data("token")}
-            }).done(function (msg) {
-                let response = JSON.parse(msg)
-
-                if (response.status === "unavailable") {
-                    if ($("#popup-overlay").find('.popup').length === 0) {
-                        $("#popup-overlay").addClass("show")
-
-                        let popupName = 'unavailable';
-                        if(response.infos_connection.id === userID) popupName = 'twin-connection';
-                        window.linkeditor.popup.open(popupName);
-
-                        // Bloquer les raccourcis clavier
-                        keyfilter(false,true)
-
-                        $("#username").text(response.infos_connection.user)
-                        $("#id").text(response.infos_connection.id)
-                    }
-                } else {
-                    if ($("#popup-overlay").find('.popup[data-popup="unavailable"]').length > 0) {
-                        $("#popup-overlay").removeClass("show")
-                        window.linkeditor.popup.close();
-                    }
-                    console.log('ok 2')
-                    window.key.filter = function (event) {
-                        let tagName = (event.target || event.srcElement).tagName;
-                        if (tagName === 'TEXTAREA' && event.keyCode === 13) {
-                            return false;
-                        }
-
-                        return true;
-                    };
+                    let popupName = 'unavailable';
+                    if(response.infos_connection.id === userID) popupName = 'unavailable-twin-connection';
+                    window.linkeditor.popup.open(popupName);
+
+                    // Bloquer les raccourcis clavier
+                    keyfilter(false,true)
+
+                    $("#username").text(response.infos_connection.user)
+                    $("#id").text(response.infos_connection.id)
                 }
-            });
-        }, 2000)
+            } else {
+                if ($("#popup-overlay").find('.popup[data-popup^="unavailable"]').length > 0) {
+                    $("#popup-overlay").removeClass("show")
+                    window.linkeditor.popup.close();
+                }
+                window.key.filter = function (event) {
+                    let tagName = (event.target || event.srcElement).tagName;
+                    if (tagName === 'TEXTAREA' && event.keyCode === 13) {
+                        return false;
+                    }
+                    return true;
+                };
+            }
+
+            tabClosed = 0
+            tabOpen = 0
+            localStorage.setItem("tabClosed","0")
+            setTimeout(function () { intervalConnection(); }, 1000)
+        });
     }
-    intervalConnection()
+    setTimeout(function () { intervalConnection() }, 1000)
 
     //
     $("body").on("click", "#connectTo", function(e) {
         e.preventDefault()
-        clearInterval(interval)
-        $.ajax({
-            method: "POST",
-            url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/edit/links',
-            data: {id: FLUIDBOOK_DATA.id, token: $("[data-token]").data("token"), clear: true }
-        }).done(function (msg) {
-            intervalConnection();
-        });
+        intervalConnection({id:FLUIDBOOK_DATA.id,token:$("[data-token]").data("token"),clear:true});
     })
 
     //
-    window.onbeforeunload = function (e) {
-        e.preventDefault()
-        e.returnValue = ''
-        let data = {id: FLUIDBOOK_DATA.id, token: $("[data-token]").data("token"), clear: true }
-        if(data.token !== null) {
-            intervalConnection(data);
-        }
-    };
+    $(window).on("unload",function(){
+        localStorage.setItem('tabClosed', "1")
+    })
+
 });
 
 (function (old) {
index e8ce2b0af4e4efe98544186d6143f11da6c3e717..bd3ef6c258c021166723d9f320bb2235db8efc49 100644 (file)
       'height'=>__('Appliquer la même hauteur à la sélection'),
       'both'=>__('Appliquer les mêmes dimensions à la sélection'),
     ];
+
+    if(cache()->has('connexion'.$id)) {
+        $connexionInfo = cache()->get('connexion'.$id);
+    }
 @endphp
 @extends('layouts.linkeditor')
 
 @section('content')
     @include('fluidbook_publication.link_editor_icons')
     <div id="token" data-token="{{$token}}"></div>
+    @isset($connexionInfo)
+        <div id="token-cache" data-token="{{$connexionInfo['token']}}"></div>
+    @endisset
     <div id="userID" data-id="{{backpack_user()->id}}"></div>
     <div id="popup-overlay">
         <div id="popup-holder">
             <p>{{__('Utilisateur : ')}} <span id="username"></span></p>
             <p>Identifiant: <span id="id"></span></p>
             <p class="button">
-                <button id="connectTo" type="submit">{{__('Ejecter l\'utilisateur')}}</button>
+                <button id="connectTo" type="submit">{{__('Déconnecter l\'utilisateur')}}</button>
             </p>
         </div>
 
-        <div class="popup" data-popup="twin-connection" style="max-width: 300px">
+        <div class="popup" data-popup="unavailable-twin-connection" style="max-width: 300px">
             <h2>{{__('Vous êtes déjà connecté sur ce fluidbook')}}</h2>
+            <p class="button">
+                <button id="connectTo" type="submit">{{__('Vous déconnecter des autres onglets')}}</button>
+            </p>
         </div>
     </div>