$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;
}
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];
$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]);
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)
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) {
intervalConnection: function(clear = null) {
let unload = localStorage.getItem('unload')
let currentToken = sessionStorage.getItem('token')
- let userID = $("#userID").data('id')
const $this = this
$.ajax({
$("#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)
$("#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)
});