use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Route;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-use App\Events\DetectConnexion;
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
+use Prologue\Alerts\Facades\Alert;
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');
- //Route::match(['post'], $segment . '/{id}/edit/links', $controller . '@broadcast')->name('fluidbook_linkeditor_post');
+ 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');
Route::match(['post'], $segment . '/{id}/edit/links/import/merge', $controller . '@importLinksMerge');
$token = $request->token;
$userId = backpack_user()->id;
$unload = $request->unload;
+ $clear = $request->clear;
+ $key = null;
+ $notify = $clear ? "notify" : "";
- /*cache()->forget('queue_editor'.$fluidbookId);
- /*cache()->forget('connexion'.$fluidbookId);*/
+ //cache()->forget('queue_editor'.$fluidbookId);
/* Reset
*
*/
- if (!cache()->has('queue_editor' . $fluidbookId)) {
- $entries = [["token" => $token, "date" => now()]];
- cache(['queue_editor' . $fluidbookId => $entries]);
- } else {
- $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 onglets
+
+ 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) {
+ if (!is_array($queueEditor[array_key_first($queueEditor)])) {
+ cache()->forget('queue_editor' . $fluidbookId);
+ }
+
$connexion = array_filter($queueEditor, function ($n) use ($token) {
return $n["token"] === $token;
});
$key = key($connexion);
- if ((int)$unload === 1 && $key) {
- unset($queueEditor[$key]); // on supprime l'onglet de la liste au chargement ou à sa fermeture
- }
+ if(null === $unload) {
+ if ($key === null) {
+ $queueEditor[] = ["token" => $token, "date" => now(),"userid"=>$userId];
+ } else {
+ $queueEditor[$key]["token"] = $token;
+ $queueEditor[$key]["date"] = now();
+ $queueEditor[$key]["userid"] = $userId;
+ }
- if (!$key) {
- $queueEditor[] = ["token" => $token, "date" => now()];
+ // on supprime les connexions afk
+ $queueEditor = array_filter($queueEditor, function ($n) {
+ return strtotime($n["date"]) > strtotime(now()) - 5;
+ });
} else {
- $queueEditor[$key]["token"] = $token;
- $queueEditor[$key]["date"] = now();
+ unset($queueEditor[$key]);
}
-
- // on supprime les connexions afk
- $queueEditor = array_filter($queueEditor, function ($n) {
- return strtotime($n["date"]) > strtotime(now()) - 10;
- });
-
cache(['queue_editor' . $fluidbookId => $queueEditor]);
+ } else {
+ $entries = [["token" => $token, "date" => now(), "userid" => $userId]];
+ cache(['queue_editor' . $fluidbookId => $entries]);
}
- $connexionExist = cache()->get('connexion' . $fluidbookId);
$queueEditor = cache()->get('queue_editor' . $fluidbookId);
// réinitialiser la connexion courante quand on clique sur "déconnecter l'utilisateur"
- if ($request->clear) {
+ if ($clear == 1) {
$queueEditorCurrent = $queueEditor[$key];
unset($queueEditor[$key]);
$queueEditor = array_merge([$queueEditorCurrent], $queueEditor);
cache(['queue_editor' . $fluidbookId => $queueEditor]);
- cache(['connexion' . $fluidbookId => ['id' => $userId, 'token' => $token, 'f_id' => $fluidbookId]]);
- }
-
- /*cache()->forget('queue_editor'.$fluidbookId);*/
- /*cache()->forget('connexion'.$fluidbookId);*/
-
- if (cache()->has('queue_editor' . $fluidbookId)) {
- if (sizeof(cache()->get('queue_editor' . $fluidbookId)) === 1) {
- cache(['connexion' . $fluidbookId => ['id' => $userId, 'token' => $token, 'f_id' => $fluidbookId]]);
- return json_encode(["queueEditor" => $queueEditor, "status" => "available", $connexionExist]);
- }
}
- if ($connexionExist && $fluidbookId === $connexionExist['f_id']) {
- $user = User::withoutGlobalScopes()->find($connexionExist['id']);
+ 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 (current($queueEditor)["token"] !== $token) {
- return json_encode(["queueEditor" => $queueEditor, "token" => $token, "status" => "unavailable", "infos_connection" => array_merge(["user" => $user], $connexionExist)]);
+ if (current($queueEditor)["token"] === $token) {
+ return json_encode(["queueEditor" => $queueEditor, "status" => "available"]);
} else {
- return json_encode(["queueEditor" => $queueEditor, "status" => "available", $connexionExist]);
+ if($clear) $notify = "notify";
+ return json_encode(["notify"=>$notify,"queueEditor"=>$queueEditor,"status"=>"unavailable","infos_connection"=>array_merge(["user" => $user,'id'=>current($queueEditor)["userid"]])]);
}
- } else {
- cache(['connexion' . $fluidbookId => ['id' => $userId, 'token' => $token, 'f_id' => $fluidbookId]]);
- return json_encode(["queueEditor" => $queueEditor, "status" => "available", cache()->get('connexion' . $fluidbookId)]);
}
+ return json_encode(["status" => "available","queueEditor" => $queueEditor]);
}
protected function fixDriftedLinks($fluidbook_id)
--- /dev/null
+function LinkeditorAccessControl(linkeditor) {
+ this.linkeditor = linkeditor;
+ this.init();
+}
+
+LinkeditorAccessControl.prototype = {
+ init: function () {
+ this.interval = null
+ this.token = $("[data-token]").data("token")
+ const $this = this
+
+ $(document).on("click", "#connectTo", function(e) {
+ e.preventDefault()
+ clearTimeout($this.interval)
+ $this.intervalConnection("1");
+ })
+
+ $(window).on("unload",function(){
+ clearTimeout($this.interval)
+ sessionStorage.setItem('token', token);
+ localStorage.setItem('unload', '1');
+ })
+
+ this.interval = setTimeout(() => { $this.intervalConnection() }, 10 )
+ },
+
+ intervalConnection: function(clear = null) {
+ let unload = localStorage.getItem('unload')
+ let currentToken = sessionStorage.getItem('token')
+ let userID = $("#userID").data('id')
+ const $this = this
+
+ $.ajax({
+ method: "POST",
+ url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/edit/links',
+ data: {id: FLUIDBOOK_DATA.id, token: currentToken ? currentToken : $this.token, unload: unload, clear: clear}
+ }).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 = '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()
+
+ $("#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();
+ }
+ window.key.filter = function (event) {
+ let tagName = (event.target || event.srcElement).tagName;
+ if (tagName === 'TEXTAREA' && event.keyCode === 13) {
+ return false;
+ }
+ return true;
+ };
+ }
+ sessionStorage.removeItem('token');
+ localStorage.removeItem('unload');
+
+ setTimeout(() => {
+ $this.intervalConnection()
+ }, 2000)
+ });
+ },
+}
+
+export default LinkeditorAccessControl;