From 63df490f31c2c0cddbff75c44c907e7ed01b628e Mon Sep 17 00:00:00 2001 From: soufiane Date: Wed, 7 Feb 2024 15:31:47 +0100 Subject: [PATCH] wait #6694 @3:00 --- .../FluidbookPublication/LinksOperation.php | 34 +++++++++++-------- .../linkeditor/js/linkeditor.accessControl.js | 16 +++------ resources/linkeditor/js/linkeditor.js | 4 +-- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php index f1fe37c11..b10790b90 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php @@ -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) diff --git a/resources/linkeditor/js/linkeditor.accessControl.js b/resources/linkeditor/js/linkeditor.accessControl.js index 0a6288550..c9560c0bc 100644 --- a/resources/linkeditor/js/linkeditor.accessControl.js +++ b/resources/linkeditor/js/linkeditor.accessControl.js @@ -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) }); diff --git a/resources/linkeditor/js/linkeditor.js b/resources/linkeditor/js/linkeditor.js index 4350fdc1f..2e6a95486 100644 --- a/resources/linkeditor/js/linkeditor.js +++ b/resources/linkeditor/js/linkeditor.js @@ -284,8 +284,8 @@ LinkEditor.prototype = { this.changePage(); }, - disabledKeyFilter: function () { - return keyfilter(false,true) + controlKeyFilter: function (e,disabled) { + return keyfilter(e,disabled) }, resetKeyModifiers: function () { -- 2.39.5