268 lines
11 KiB
PHP
268 lines
11 KiB
PHP
<?php
|
|
// Cette page présente toutes les connexions en cours de toutes les salles.
|
|
// Elle recharge simplement dans un <div> la page reload_salles.php à intervalle donné par la variable $delay du fichier de configuration
|
|
//
|
|
|
|
header ('Content-Type: text/html; charset=utf-8');
|
|
include_once('libhome.php');
|
|
include_once('winlog_admin_conf.php');
|
|
include_once('connexions.php');
|
|
$delayMs = $delay * 1000;
|
|
$username = phpCAS::getUser();
|
|
|
|
function ListeSalles() {
|
|
$salles = Salles();
|
|
global $salles_invisibles;
|
|
$liste = "<div id=\"liste_salles\">\n";
|
|
foreach ($salles as $sal) {
|
|
if (!in_array($sal, $salles_invisibles)) {
|
|
$liste = $liste."<a href=\"#$sal\" id=\"h-$sal\" class=\"lien_salle\">$sal</a> <span id=\"hj-$sal\" class=\"jours\"> </span>\n";
|
|
}
|
|
}
|
|
$liste = $liste;
|
|
return $liste;
|
|
}
|
|
|
|
function InfoWinlog() {
|
|
global $delay;
|
|
$nb = NbConnexions();
|
|
$debut = date("d/m/Y", strtotime(PremiereConnexion()));
|
|
$info = "nb connexions stockées : ".$nb."\n";
|
|
$info = $info."initiées le : ".$debut."\n";
|
|
$info = $info."rafraichissement données : ".$delay." s\n";
|
|
return $info;
|
|
}
|
|
|
|
?>
|
|
<!DOCTYPE HTML>
|
|
<html lang="fr">
|
|
<head>
|
|
<title>Winlog : Connexions en cours dans les salles</title>
|
|
<meta charset="utf-8">
|
|
<link rel="stylesheet" media="screen" type="text/css" title="default" href="default.css">
|
|
</head>
|
|
<body>
|
|
<?php
|
|
// Si le compte est autorisé à voir les salles, on affiche le div
|
|
if (in_array($username, $autorises)) {
|
|
// header
|
|
$liste_salles = ListeSalles();
|
|
$infobulle = InfoWinlog();
|
|
echo("<div id=\"menu_salles\">\n");
|
|
echo("<span title=\"$infobulle\"><b>Connexions Windows en cours par salle</b></span>");
|
|
echo("<span class=\"right\"><span id=\"g-deroule\" class=\"toggler_general toggler\">[+]</span><span id=\"g-enroule\" class=\"toggler_general toggler\">[-]</span></span><br/>\n");
|
|
echo($liste_salles);
|
|
echo("<br/><a href=\"recup_salles.php\" class=\"right\"><i>rechargement</i></a>\n</div>\n");
|
|
echo('</div>'."\n");
|
|
// salles et connexions
|
|
echo('<div id="loaddiv">'."\n");
|
|
include('reload_salles.php');
|
|
echo('</div>');
|
|
// footer
|
|
$texte = '<br/><br/><a href="recup_salles.php"><i>rechargement des comptes, machines et salles</i></a>';
|
|
}
|
|
else
|
|
{
|
|
// sinon on affiche un message
|
|
$texte = "Vous n'avez pas l'autorisation d'afficher cette page";
|
|
}
|
|
echo($texte);
|
|
?>
|
|
<script>
|
|
|
|
// fonction de permutation enroulé/déroulé de la liste de connexions d'une salle
|
|
// el : element html toggler
|
|
// enrouleurs : tableau de stockage des états des togglers
|
|
// bascule : true => on demande la permutation de l'état enroulé/déroulé
|
|
// force : null ou boolean. Si boolean, c'est la valeur a affecter de force (true = deroule, false = enroule)
|
|
var toggle = function(el, enrouleurs, bascule, force) {
|
|
var htmlDeroule = "[-] ";
|
|
var htmlEnroule = "[+] ";
|
|
var classDeroule = "deroule";
|
|
var classEnroule = "enroule";
|
|
var listeId = (el.id).replace('b-', 'c-');
|
|
var liste = document.getElementById(listeId);
|
|
// si la valeur forcée "force" n'est pas transmise, on permute ou on garde les valeurs existantes deroule/enroule
|
|
// selon la valeur de bascule :bascule == true => on permute, sinon on rétablit les valeurs stockées
|
|
if (force == null || force == undefined) {
|
|
if (enrouleurs[el.id]) { // si initialement déroulé
|
|
if (bascule) {
|
|
liste.className = classEnroule;
|
|
el.innerHTML = htmlEnroule;
|
|
enrouleurs[el.id] = false
|
|
} else {
|
|
liste.className = classDeroule;
|
|
el.innerHTML = htmlDeroule;
|
|
enrouleurs[el.id] = true;
|
|
}
|
|
}
|
|
else // si initialement enroulé
|
|
{
|
|
if (bascule) {
|
|
liste.className = classDeroule;
|
|
el.innerHTML = htmlDeroule;
|
|
enrouleurs[el.id] = true;
|
|
} else {
|
|
liste.className = classEnroule;
|
|
el.innerHTML = htmlEnroule;
|
|
enrouleurs[el.id] = false;
|
|
}
|
|
}
|
|
}
|
|
// sinon on affecte la valeur forcée
|
|
else {
|
|
enrouleurs[el.id] = force;
|
|
if (force) {
|
|
liste.className = classDeroule;
|
|
el.innerHTML = htmlDeroule;
|
|
} else {
|
|
liste.className = classEnroule;
|
|
el.innerHTML = htmlEnroule;
|
|
}
|
|
}
|
|
};
|
|
|
|
// fonction de mise à jour des bouton enrouleurs/dérouleurs
|
|
var enroule = function(enrouleurs, bascule, force) {
|
|
for (var e in enrouleurs) {
|
|
var el = document.getElementById(e);
|
|
toggle(el, enrouleurs, bascule, force);
|
|
}
|
|
};
|
|
|
|
// fonction de bascule vers un état enroulé/déroulé
|
|
var bascule = function(el, enrouleurs) {
|
|
if (!el.classList.contains("toggler")) { return; } // ne traite que les éléments toogler
|
|
if (el.classList.contains("toggler_general")) { // si toggler général, on force la mise à jour de tous les togglers
|
|
var force = (el.id == 'g-deroule') ? true : false;
|
|
enroule(enrouleurs, false, force);
|
|
}
|
|
else
|
|
{
|
|
toggle(el, enrouleurs, true); // si toggler individuel, on bascule sa valeur
|
|
}
|
|
};
|
|
|
|
// fonction d'affichage d'erreur dans la console
|
|
var erreurXHR = function(url) {
|
|
console.log("erreur chargement" + url + " : " + xhr.statusText);
|
|
};
|
|
|
|
// Met à jour les indicateurs de jours des salles du menu header à partir des valeurs de la liste des salles/connexions
|
|
var jourListeSalle = function(div) {
|
|
var salles = div.getElementsByClassName('jours');
|
|
var liste = {};
|
|
for (var i = 0; i < salles.length; i++) {
|
|
var id = (salles[i].id).replace('j-', 'hj-');
|
|
var classJ = salles[i].className;
|
|
var el = document.getElementById(id);
|
|
el.className = classJ;
|
|
}
|
|
}
|
|
|
|
// flash : clignotement des lignes correspondant au dataset "rejected" du <div> blacklist
|
|
var flash = function() {
|
|
var div_blacklist = document.getElementById("blacklist"); // récupération du div blacklist
|
|
var ips = JSON.parse(div_blacklist.dataset.rejected); // récupération du dataset de ce div
|
|
var rgbaString = "rgba(255, 140, 0, x)";
|
|
var alpha = 0;
|
|
var bright = false;
|
|
var finished = false;
|
|
|
|
var stylesToFade = []; // tableau des styles des éléments à modifier
|
|
for (var i = 0; i < ips.length; i++) {
|
|
// recuperation des <tr> ip et des elements salles du header
|
|
var ip = ips[i]["ip"].replace(/\./g, '-'); // remplacement des '.' par des '-'
|
|
var tr_ip = document.getElementById(ip); // récupération de la ligne de la connexion par son IP
|
|
tr_ip.style.backgroundColor = rgbaString.replace("x", alpha);
|
|
stylesToFade.push(tr_ip.style);
|
|
if (ips[i]["salle"]) { // récupération de la salle si elle est présente
|
|
var salleH = 'h-' + ips[i]["salle"];
|
|
var el_salleH = document.getElementById(salleH); // élément salle dans le menu header
|
|
var salleL = 'l-' + ips[i]["salle"];
|
|
var el_salleL = document.getElementById(salleL); // élément salle dans la liste
|
|
el_salleH.style.backgroundColor = rgbaString.replace("x", alpha);
|
|
el_salleL.style.backgroundColor = rgbaString.replace("x", alpha);
|
|
stylesToFade.push(el_salleH.style, el_salleL.style);
|
|
}
|
|
}
|
|
|
|
var fade = function() {
|
|
for (var s = 0; s < stylesToFade.length; s++) {
|
|
var style = stylesToFade[s];
|
|
style.backgroundColor = rgbaString.replace("x", alpha);
|
|
}
|
|
// tant que alpha n'a pas atteint 1, il incrémente
|
|
if (!bright) {
|
|
alpha += 0.05;
|
|
if (alpha > 1) {
|
|
bright = true;
|
|
}
|
|
}
|
|
else
|
|
// dès que alpha a atteint 1 (bright), il décremente jusqu'à 0
|
|
if (bright) {
|
|
alpha -= 0.02;
|
|
if (alpha < 0) {
|
|
finished = true;
|
|
}
|
|
}
|
|
// tant que alpha n'a pas fait 0-1-0, on rappelle la fonction toutes les 17 ms (environ 60 fps)
|
|
if (!finished) {
|
|
window.setTimeout(fade, 17);
|
|
}
|
|
}
|
|
|
|
fade();
|
|
}
|
|
|
|
// emission requête XHR et récupération du résultat dans div
|
|
var reload = function(url, div, enrouleurs) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open("GET", url);
|
|
xhr.onload = function(e) {
|
|
if (xhr.readyState === 4) {
|
|
if (xhr.status === 200) {
|
|
div.innerHTML = xhr.responseText;
|
|
flash();
|
|
enroule(enrouleurs);
|
|
|
|
} else {
|
|
erreurXHR(url);
|
|
}
|
|
}
|
|
};
|
|
xhr.onerror = function(e) {
|
|
erreurXHR(url);
|
|
};
|
|
|
|
xhr.send(null); // initie la requête xhr
|
|
};
|
|
|
|
// init
|
|
var url = 'reload_salles.php';
|
|
var init = function() {
|
|
var div = document.getElementById('loaddiv');
|
|
if (div) {
|
|
jourListeSalle(div);
|
|
var enrouleurs = {}; // tableau associatif des enrouleurs pour garder l'état de chaque liste sur reload
|
|
var elems = div.getElementsByClassName("toggler");
|
|
// initialisation des enrouleurs (true = déroulé, par défaut)
|
|
for (var i = 0; i < elems.length; i++) {
|
|
enrouleurs[elems[i].id] = <?php echo(json_encode($deroule)); ?>;
|
|
}
|
|
|
|
document.addEventListener("click", function(e) { bascule(e.target, enrouleurs); }, false);
|
|
|
|
window.setInterval(function() {
|
|
reload(url, div, enrouleurs);
|
|
}, <?php echo($delayMs); ?>);
|
|
reload(url, div, enrouleurs);
|
|
enroule(enrouleurs, false); // remise à jour de l'état de tous les togglers de la page
|
|
}
|
|
};
|
|
window.onload = init;
|
|
</script>
|
|
</body>
|
|
</html>
|