]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6694 @3:00
authorsoufiane <soufiane@cubedesigners.com>
Wed, 7 Feb 2024 14:31:47 +0000 (15:31 +0100)
committersoufiane <soufiane@cubedesigners.com>
Wed, 7 Feb 2024 14:31:47 +0000 (15:31 +0100)
app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php
resources/linkeditor/js/linkeditor.accessControl.js
resources/linkeditor/js/linkeditor.js

index f1fe37c11d1e9022c219de4a821f808a88bd6af4..b10790b90e5cb61fcbf166ddb8a6972fa97ef921 100644 (file)
@@ -306,15 +306,10 @@ trait LinksOperation
         $unload = $request->unload;
         $clear = $request->clear;
         $key = null;
-        $notify = $clear ? "notify" : "";
 
-        //cache()->forget('queue_editor'.$fluidbookId);
-
-        /* Reset
-         *
-        */
-        $queueEditor = cache()->get('queue_editor' . $fluidbookId); // on récupère la liste des onglets
+        $queueEditor = cache()->get('queue_editor' . $fluidbookId); // on récupère la liste des connexions
 
+        // on extrait seulement les connexions qui datent de pas moins de 5secondes
         if(!empty($queueEditor) || sizeof($queueEditor) > 0) {
             $queueEditor = array_filter($queueEditor, function ($n) {
                 return strtotime($n["date"]) > strtotime(now()) - 5;
@@ -322,15 +317,22 @@ trait LinksOperation
         }
 
         if(!empty($queueEditor) || sizeof($queueEditor) > 0) {
+            // on supprime les connexions si la liste (tableau) est mal formatée
+            // en effet parfois la liste n'est pas un tableau multidimensionnel ce qui créé un bug
+            // un code à supprimer sur le long terme
             if (!is_array($queueEditor[array_key_first($queueEditor)])) {
                 cache()->forget('queue_editor' . $fluidbookId);
             }
 
+            // on récupère la connexion courante via le token qui est envoyé
             $connexion = array_filter($queueEditor, function ($n) use ($token) {
                 return $n["token"] === $token;
             });
             $key = key($connexion);
 
+            // si la connexion existe déjà, on remplace la date ainsi que le token pour là garder active
+            // sinon on ajoute la nouvelle connexion à la liste
+            // si la page est rechargée ou fermée la connexion est supprimée
             if(null === $unload) {
                 if ($key === null) {
                     $queueEditor[] = ["token" => $token, "date" => now(),"userid"=>$userId];
@@ -340,22 +342,25 @@ trait LinksOperation
                     $queueEditor[$key]["userid"] = $userId;
                 }
 
-                // on supprime les connexions afk
                 $queueEditor = array_filter($queueEditor, function ($n) {
                     return strtotime($n["date"]) > strtotime(now()) - 5;
                 });
             } else {
                 unset($queueEditor[$key]);
             }
+
+            // on met à jour le cache avec la nouvelle liste
             cache(['queue_editor' . $fluidbookId => $queueEditor]);
         } else {
+            // on initialise le cache avec la première connexion
             $entries = [["token" => $token, "date" => now(), "userid" => $userId]];
             cache(['queue_editor' . $fluidbookId => $entries]);
         }
 
         $queueEditor = cache()->get('queue_editor' . $fluidbookId);
 
-        // réinitialiser la connexion courante quand on clique sur "déconnecter l'utilisateur"
+        // la connexion courante est la première sur la liste
+        // au clique du bouton 'déconnecter' on déplace la connexion qui se connecte au début de la liste
         if ($clear == 1) {
             $queueEditorCurrent = $queueEditor[$key];
             unset($queueEditor[$key]);
@@ -363,19 +368,20 @@ trait LinksOperation
             cache(['queue_editor' . $fluidbookId => $queueEditor]);
         }
 
+        // si une connexion est déjà présente pour un fluidbook on rend indisponible
+        // la connexion entrante avec le status "unavailable"
         if (cache()->has('queue_editor' . $fluidbookId) && !empty($queueEditor)) {
             $user = User::withoutGlobalScopes()->find(current($queueEditor)["userid"]);
             $user = $user->firstname . ' ' . $user->lastname;
-            if(sizeof($queueEditor) === 1) return json_encode(["queueEditor" => $queueEditor, "status" => "available"]);
+            if(sizeof($queueEditor) === 1) return json_encode(["status" => "available"]);
 
             if (current($queueEditor)["token"] === $token) {
-                return json_encode(["queueEditor" => $queueEditor, "status" => "available"]);
+                return json_encode(["status" => "available"]);
             } else {
-                if($clear) $notify = "notify";
-                return json_encode(["notify"=>$notify,"queueEditor"=>$queueEditor,"status"=>"unavailable","infos_connection"=>array_merge(["user" => $user,'id'=>current($queueEditor)["userid"]])]);
+                return json_encode(["status"=>"unavailable","infos_connection"=>array_merge(["user" => $user,'id'=>current($queueEditor)["userid"]])]);
             }
         }
-        return json_encode(["status" => "available","queueEditor" => $queueEditor]);
+        return json_encode(["status" => "available"]);
     }
 
     protected function fixDriftedLinks($fluidbook_id)
index 0a6288550141e73b8bf2e408641d3bb7aee8fa29..c9560c0bc1fc17ee9e8e5230941c747605011b4e 100644 (file)
@@ -7,6 +7,7 @@ LinkeditorAccessControl.prototype = {
     init: function () {
         this.interval = null
         this.token = $("[data-token]").data("token")
+        this.userID = $("#userID").data('id')
         const $this = this
 
         $(document).on("click", "#connectTo", function(e) {
@@ -27,7 +28,6 @@ LinkeditorAccessControl.prototype = {
     intervalConnection: function(clear = null) {
         let unload = localStorage.getItem('unload')
         let currentToken = sessionStorage.getItem('token')
-        let userID = $("#userID").data('id')
         const $this = this
 
         $.ajax({
@@ -41,14 +41,14 @@ LinkeditorAccessControl.prototype = {
                     $("#popup-overlay").addClass("show")
 
                     let popupName = 'unavailable';
-                    if(response.infos_connection.id === userID) popupName = 'unavailable-twin-connection';
+                    if(response.infos_connection.id === $this.userID) popupName = 'unavailable-twin-connection';
                     $this.linkeditor.popup.open(popupName);
 
                     $this.linkeditor.save.saveIfUnsavedChanges("Sauvegarde après avoir été déconnecté par un autre utilisateur", false, function () {
                     });
 
                     // Bloquer les raccourcis clavier
-                    $this.linkeditor.disabledKeyFilter()
+                    $this.linkeditor.controlKeyFilter(false,true)
 
                     $("#username").text(response.infos_connection.user)
                     $("#id").text(response.infos_connection.id)
@@ -58,18 +58,12 @@ LinkeditorAccessControl.prototype = {
                     $("#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;
-                };
+                window.key.filter = $this.linkeditor.controlKeyFilter(event,false)
             }
             sessionStorage.removeItem('token');
             localStorage.removeItem('unload');
 
-            setTimeout(() => {
+            $this.interval = setTimeout(() => {
                 $this.intervalConnection()
             }, 2000)
         });
index 4350fdc1f0f61a65427f04af7ef789f79ecf4e97..2e6a9548610d3ff642a05a0466f5ffb70e450ed7 100644 (file)
@@ -284,8 +284,8 @@ LinkEditor.prototype = {
         this.changePage();
     },
 
-    disabledKeyFilter: function () {
-        return keyfilter(false,true)
+    controlKeyFilter: function (e,disabled) {
+        return keyfilter(e,disabled)
     },
 
     resetKeyModifiers: function () {