From: soufiane Date: Fri, 15 Dec 2023 17:31:03 +0000 (+0100) Subject: wip #6482 @7:00 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=cfbb5bfe3b77a6290d8e27ae89b451c4fa17ef3e;p=fluidbook-toolbox.git wip #6482 @7:00 --- diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php index 5754cae23..3ae1e41e7 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php @@ -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]); } } diff --git a/resources/linkeditor/js/linkeditor.js b/resources/linkeditor/js/linkeditor.js index a2cdab074..fdfa18b2d 100644 --- a/resources/linkeditor/js/linkeditor.js +++ b/resources/linkeditor/js/linkeditor.js @@ -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) { diff --git a/resources/views/fluidbook_publication/link_editor.blade.php b/resources/views/fluidbook_publication/link_editor.blade.php index e8ce2b0af..bd3ef6c25 100644 --- a/resources/views/fluidbook_publication/link_editor.blade.php +++ b/resources/views/fluidbook_publication/link_editor.blade.php @@ -127,12 +127,19 @@ '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')
+ @isset($connexionInfo) +
+ @endisset