2016-02-14 19:37:41 +00:00
// On referencie toutes les sections
var section = {
view : {
text : '#CONTAINER > section[data-sublink="view"] ' ,
2016-07-08 17:33:58 +00:00
element : document . querySelector ( '#CONTAINER > section[data-sublink="view"]' ) ,
2017-07-29 17:15:00 +00:00
search : {
bar : document . querySelector ( '#CONTAINER > section[data-sublink="view"] > .searchbar' ) ,
func : null ,
time : null
}
2016-02-14 19:37:41 +00:00
} ,
create : {
text : '#CONTAINER > section[data-sublink="create"] ' ,
element : document . querySelector ( '#CONTAINER > section[data-sublink="create"]' )
2016-02-15 14:43:47 +00:00
} ,
remove : {
text : '#CONTAINER > section[data-sublink="remove"] ' ,
element : document . querySelector ( '#CONTAINER > section[data-sublink="remove"]' )
} ,
edit : {
text : '#CONTAINER > section[data-sublink="edit"] ' ,
element : document . querySelector ( '#CONTAINER > section[data-sublink="edit"]' )
2016-07-20 23:13:48 +00:00
} ,
groups : {
text : '#CONTAINER > section[data-sublink="groups"] ' ,
element : document . querySelector ( '#CONTAINER > section[data-sublink="groups"]' ) ,
2017-07-29 17:15:00 +00:00
search : {
bar : document . querySelector ( '#CONTAINER > section[data-sublink="groups"] > .searchbar' ) ,
func : null ,
time : null
}
2016-02-14 19:37:41 +00:00
}
} ;
2016-02-15 14:43:47 +00:00
/ * [ 1 ] v i e w - > A F F I C H A G E D E S U T I L I S A T E U R S
=== === === === === === === === === === === === === === === === === === === * /
2016-02-14 21:50:07 +00:00
if ( section . view . element != null ) {
2016-07-12 13:16:07 +00:00
/* (0) On gère le zoom sur un utilisateur via URL */
if ( pageManager . vars . length > 1 && ! isNaN ( pageManager . vars [ 1 ] ) ) {
document . location = '#' + pageManager . vars [ 1 ] ;
2016-07-23 22:35:56 +00:00
if ( document . getElementById ( pageManager . vars [ 1 ] ) != null )
document . getElementById ( pageManager . vars [ 1 ] ) . addClass ( 'selected' ) ;
2016-07-12 15:40:40 +00:00
}
2016-07-12 13:16:07 +00:00
2016-02-16 19:27:57 +00:00
/* (1) On recupere tous les liens */
2016-02-14 21:50:07 +00:00
section . view . link = {
edit : document . querySelectorAll ( section . view . text + '.link_edit[data-user]' ) ,
remove : document . querySelectorAll ( section . view . text + '.link_remove[data-user]' )
} ;
2016-07-08 17:33:58 +00:00
/* (2) On récupère toutes les actions de groupes */
section . view . group = {
rem : document . querySelectorAll ( section . view . text + '.rem-group[data-user][data-group]' ) ,
add : document . querySelectorAll ( section . view . text + '.add-group[data-user]' )
} ;
2016-02-16 19:27:57 +00:00
2016-07-08 17:33:58 +00:00
/* (3) Gestion de la recherche instantannee */
2017-07-29 17:15:00 +00:00
section . view . search . func = function ( ) {
2016-02-16 19:27:57 +00:00
var search = {
path : 'userDefault/search' ,
2017-07-29 17:15:00 +00:00
keywords : section . view . search . bar . value
2016-02-16 19:27:57 +00:00
} ;
// On envoie la requete
api . send ( search , function ( result ) {
2017-02-16 17:34:38 +00:00
if ( result . error != 0 ) return ;
2016-07-03 12:20:42 +00:00
2016-02-16 21:10:36 +00:00
console . log ( result . users . length ) ;
2017-02-16 17:34:38 +00:00
if ( result . error == 0 ) { // si aucune erreur
2016-07-03 12:20:42 +00:00
2016-02-16 19:27:57 +00:00
// On enregistre tous les UID dans un tableau
var uid _list = [ ] ;
for ( var i = 0 ; i < result . users . length ; i ++ )
uid _list . push ( result . users [ i ] . id _user ) ;
2017-07-29 17:15:00 +00:00
2016-02-16 19:27:57 +00:00
// On recupere la liste des elements correspondants aux utilisateurs
var user _list = document . querySelectorAll ( section . view . text + '> article.inline-box[id]' ) ;
2016-02-16 21:10:36 +00:00
// Pour chaque utilisateur
2016-02-16 19:27:57 +00:00
for ( var i = 0 ; i < user _list . length ; i ++ ) {
// Si doit etre visible
if ( uid _list . indexOf ( user _list [ i ] . id ) > - 1 )
user _list [ i ] . remClass ( 'hidden' ) ;
// Si ne doit pas etre visible
else
user _list [ i ] . addClass ( 'hidden' ) ;
}
}
} ) ;
2017-07-29 17:15:00 +00:00
}
section . view . search . bar . addEventListener ( 'keyup' , function ( e ) {
if ( section . view . search . time != null )
clearTimeout ( section . view . search . time ) ;
section . view . search . time = setTimeout ( section . view . search . func , 500 ) ;
2016-02-16 19:27:57 +00:00
} , false ) ;
2016-07-08 17:33:58 +00:00
/* (4) On gere la "redirection" vers la modification */
2016-02-14 21:50:07 +00:00
for ( var i = 0 ; i < section . view . link . edit . length ; i ++ ) {
section . view . link . edit [ i ] . addEventListener ( 'click' , function ( e ) {
2017-01-08 18:14:22 +00:00
pageManager . vars = [ 'edit' , e . target . getData ( 'user' ) ] ;
pageManager . refresh ( ) ;
2016-02-14 21:50:07 +00:00
} , false ) ;
}
2016-07-08 17:33:58 +00:00
/* (5) On gere la "redirection" vers la suppression */
2016-02-14 21:50:07 +00:00
for ( var i = 0 ; i < section . view . link . remove . length ; i ++ ) {
section . view . link . remove [ i ] . addEventListener ( 'click' , function ( e ) {
2017-01-08 18:14:22 +00:00
pageManager . vars = [ 'remove' , e . target . getData ( 'user' ) ] ;
pageManager . refresh ( ) ;
2016-02-14 21:50:07 +00:00
} , false ) ;
}
2016-07-08 17:33:58 +00:00
/* (6) On gere la "suppression" d'un groupe */
2017-02-18 15:53:35 +00:00
section . view . group . remfunc = function ( e ) {
// {1} On rédige la requête //
var request = {
path : 'userDefault/unlink' ,
id _user : e . target . getData ( 'user' ) ,
id _cluster : e . target . getData ( 'group' )
} ;
// {2} On envoie la requête //
api . send ( request , function ( response ) {
// {3} Si erreur, on ne fait rien //
if ( response . error != 0 )
return false ;
// {4} Si tout s'est bien passé //
e . target . parentNode . parentNode . removeChild ( e . target . parentNode ) ;
} ) ;
} ;
2017-07-29 17:15:00 +00:00
2017-02-18 15:53:35 +00:00
for ( var i = 0 ; i < section . view . group . rem . length ; i ++ )
section . view . group . rem [ i ] . addEventListener ( 'click' , section . view . group . remfunc , false ) ;
/* (6) On gere la "modification" (ajout) des groupes */
for ( var i = 0 ; i < section . view . group . add . length ; i ++ ) {
section . view . group . add [ i ] . addEventListener ( 'mouseup' , function ( e ) {
/* (1) Check if already opened */
var opened = e . target . innerHTML != '+' ;
/* (2) Hide all dropdowns */
for ( j = 0 ; j < section . view . group . add . length ; j ++ )
section . view . group . add [ j ] . innerHTML = '+' ;
/* (3) Try to show dropdown if not already */
if ( ! opened ) {
/* (1) Get the group id/type */
if ( ! /^\d+$/ . test ( e . target . getData ( 'user' ) ) )
return ;
var user _id = parseInt ( e . target . getData ( 'user' ) ) ;
/* (2) Get already members ids */
var brothers = e . target . parentNode . children [ 1 ] . children ;
var already = [ ] ; // will contain already ids
for ( j = 0 ; j < brothers . length ; j ++ )
already += parseInt ( brothers [ j ] . children [ 0 ] . getData ( 'group' ) ) ;
2016-07-08 17:33:58 +00:00
2017-02-18 15:53:35 +00:00
/* (3) Call list of members */
api . send ( { path : 'clusterDefault/getAll' , class : 0 } , function ( response ) {
2016-07-08 17:33:58 +00:00
2017-02-18 15:53:35 +00:00
// Manage error
if ( response . error != 0 ) {
console . warn ( 'error loading list of members' ) ;
return ;
}
2017-07-29 17:15:00 +00:00
2016-07-08 17:33:58 +00:00
2017-02-18 15:53:35 +00:00
// remove already members
var members = response . clusters ;
2016-07-08 17:33:58 +00:00
2017-02-18 15:53:35 +00:00
/* (4) Build dropdown content without already members */
dropdown = "<div class='dropdown'>" ;
for ( j = 0 ; j < members . length ; j ++ ) {
if ( already . indexOf ( members [ j ] . id _user _cluster ) > - 1 )
continue ;
dropdown += "<span data-groupid='" + members [ j ] . id _user _cluster + "'>" + members [ j ] . name + "</span>" ;
}
dropdown += "</div>" ;
e . target . innerHTML = '+' + dropdown ;
/* (5) Attach events to dropdown elements */
var dropdownElements = e . target . children [ 0 ] . children ;
for ( j = 0 ; j < dropdownElements . length ; j ++ )
dropdownElements [ j ] . addEventListener ( 'mousedown' , function ( e2 ) {
// {1} Get member id/username //
var groupid = e2 . target . getData ( 'groupid' ) ;
var groupname = e2 . target . innerHTML ;
// manage error
if ( groupid === false )
return ;
// {2} Request : add member to group //
var request = {
path : 'userDefault/link' ,
id _user : user _id ,
id _cluster : groupid
} ;
2017-07-29 17:15:00 +00:00
2017-02-18 15:53:35 +00:00
// {3} Call link //
api . send ( request , function ( response2 ) {
2017-07-29 17:15:00 +00:00
2017-02-18 15:53:35 +00:00
// manage error
if ( response2 . error != 0 ) {
console . warn ( 'cannot link user to group' ) ;
return ;
}
// Remove dropdown (in order to be reloaded with new members);
e . target . innerHTML = '+' ;
// {4} Update display //
var newMemberRemoveIcon = document . createElement ( 'span' ) ;
newMemberRemoveIcon . setAttribute ( 'class' , 'rem-group' ) ;
newMemberRemoveIcon . setAttribute ( 'data-group' , groupid ) ;
newMemberRemoveIcon . setAttribute ( 'data-user' , e . target . getData ( 'user' ) ) ;
2017-07-29 17:15:00 +00:00
2017-02-18 15:53:35 +00:00
newMemberRemoveIcon . addEventListener ( 'click' , section . view . group . remfunc , false ) ;
var newMember = document . createElement ( 'span' ) ;
newMember . appendChild ( document . createTextNode ( groupname ) ) ;
newMember . appendChild ( newMemberRemoveIcon ) ;
e . target . parentNode . children [ 1 ] . appendChild ( newMember ) ;
} ) ;
} , false ) ;
} ) ;
}
2016-07-08 17:33:58 +00:00
} , false ) ;
}
2016-07-12 15:40:40 +00:00
} ;
2016-02-14 21:50:07 +00:00
2016-02-14 19:37:41 +00:00
2016-02-15 14:43:47 +00:00
/ * [ 2 ] c r e a t e - > C r e a t i o n d ' u t i l i s a t e u r
=== === === === === === === === === === === === === === === === === === === * /
2016-02-14 19:37:41 +00:00
if ( section . create . element != null ) {
// On recupere tous les champs
section . create . input = {
code : document . querySelector ( section . create . text + '#create_code' ) ,
username : document . querySelector ( section . create . text + '#create_username' ) ,
firstname : document . querySelector ( section . create . text + '#create_firstname' ) ,
2016-02-14 20:22:07 +00:00
lastname : document . querySelector ( section . create . text + '#create_lastname' ) ,
2016-02-14 19:37:41 +00:00
mail : document . querySelector ( section . create . text + '#create_mail' ) ,
submit : document . querySelector ( section . create . text + '#create_submit' )
2017-09-03 17:26:59 +00:00
} ;
// On recupere tous les messages d'erreur
section . create . errmsg = {
code : document . querySelector ( section . create . text + '.error-msg.create_code' ) ,
username : document . querySelector ( section . create . text + '.error-msg.create_username' ) ,
firstname : document . querySelector ( section . create . text + '.error-msg.create_firstname' ) ,
lastname : document . querySelector ( section . create . text + '.error-msg.create_lastname' ) ,
mail : document . querySelector ( section . create . text + '.error-msg.create_mail' )
} ;
2016-02-14 19:37:41 +00:00
// On initialise le gestionnaire des saisies
var createChecker = new inputChecker ( ) ;
/* (1) Gestion du code RFID */
createChecker . append ( section . create . input . code , format _code , '01-AB-CD-23' ) ;
section . create . input . code . addEventListener ( 'keyup' , function ( e ) {
e . target . value = e . target . value . toUpperCase ( ) ;
if ( ! createChecker . check ( e . target ) )
createChecker . correct ( e . target , false ) ;
} , false ) ;
2016-02-14 20:22:07 +00:00
/* (n) Gestion de l'envoi du formulaire */
section . create . input . submit . addEventListener ( 'click' , function ( e ) {
// On annule l'envoi de base (PHP)
e . preventDefault ( ) ;
2017-09-18 16:32:39 +00:00
// On vide les messages erreurs
2017-09-03 17:26:59 +00:00
section . create . errmsg . code . innerHTML =
section . create . errmsg . username . innerHTML =
section . create . errmsg . firstname . innerHTML =
section . create . errmsg . lastname . innerHTML =
section . create . errmsg . mail . innerHTML = '' ;
2016-02-14 20:22:07 +00:00
var request = {
path : 'userDefault/create' , // On veut creer un utilisateur
2016-07-03 13:03:31 +00:00
code : section . create . input . code . value ,
username : section . create . input . username . value ,
firstname : section . create . input . firstname . value ,
lastname : section . create . input . lastname . value ,
2016-07-20 18:05:32 +00:00
mail : section . create . input . mail . value
2016-02-14 20:22:07 +00:00
} ;
api . send ( request , function ( answer ) {
2017-02-16 17:34:38 +00:00
if ( answer . error == 0 ) { // Tout s'est bien deroule
2016-02-14 20:58:49 +00:00
console . log ( 'Utilisateur cree!' ) ;
2016-02-18 09:54:26 +00:00
2016-02-18 09:55:10 +00:00
section . create . input . submit . anim ( 'active' , 1500 ) ;
2016-07-21 09:04:18 +00:00
2016-07-23 22:03:02 +00:00
// on vide les champs
section . create . input . code . value = '' ;
section . create . input . username . value = '' ;
section . create . input . firstname . value = '' ;
section . create . input . lastname . value = '' ;
section . create . input . mail . value = '' ;
2016-07-21 10:23:18 +00:00
2017-09-03 17:26:59 +00:00
} else { // Erreur
2017-02-16 17:34:38 +00:00
console . error ( 'ModuleError::' + answer . error ) ;
2017-09-18 16:32:39 +00:00
// if missing or incorrect param
if ( answer . error == 16 || answer . error == 17 ) {
if ( section . create . errmsg [ answer . ErrorArguments [ 0 ] ] != null )
section . create . errmsg [ answer . ErrorArguments [ 0 ] ] . innerHTML = 'Le champ est manquant ou incorrect !' ;
}
2017-09-03 17:26:59 +00:00
}
2016-02-14 20:58:49 +00:00
2016-02-14 20:22:07 +00:00
} ) ;
} , false ) ;
2016-02-15 14:43:47 +00:00
}
/ * [ 3 ] r e m o v e - > S u p p r e s s i o n d ' u t i l i s a t e u r
=== === === === === === === === === === === === === === === === === === === * /
2017-01-09 11:20:45 +00:00
var lastkeywords _remove = '' ;
var found _remove = [ ] ;
var searchindex _remove = 0 ;
2016-02-15 14:43:47 +00:00
if ( section . remove . element != null ) {
2016-02-17 10:31:46 +00:00
/* (1) Definition des champs */
2016-02-15 14:43:47 +00:00
section . remove . input = {
2016-02-17 10:31:46 +00:00
search : {
2016-02-17 11:09:23 +00:00
view : document . querySelector ( section . remove . text + '.remove_search_view' ) ,
num : document . querySelector ( section . remove . text + '.remove_search_num' ) ,
sum : document . querySelector ( section . remove . text + '.remove_search_sum' ) ,
2016-02-17 10:31:46 +00:00
keyword : document . querySelector ( section . remove . text + '#remove_search_keyword' ) ,
id : document . querySelector ( section . remove . text + '#remove_search_id' ) ,
submit : document . querySelector ( section . remove . text + '#remove_search_submit' )
} ,
2016-02-15 14:43:47 +00:00
code : document . querySelector ( section . remove . text + '#remove_code' ) ,
username : document . querySelector ( section . remove . text + '#remove_username' ) ,
2016-02-15 22:07:20 +00:00
2016-02-15 14:43:47 +00:00
submit : document . querySelector ( section . remove . text + '#remove_submit' )
} ;
2016-07-13 15:05:53 +00:00
/ * ( 2 ) G e s t i o n d e l ' a u t o - r e m p l i s s a g e p a r l i e n
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - * /
function autofill _remove ( ) {
/* (0) Valeurs par défaut */
2016-02-17 10:31:46 +00:00
var user _data = {
id _user : '' ,
username : '' ,
2016-07-13 15:05:53 +00:00
code : '' ,
2016-02-17 10:31:46 +00:00
disable _input : true
} ;
2016-02-15 14:43:47 +00:00
2016-07-13 15:05:53 +00:00
// {1} Si aucun résultat //
if ( found _remove [ searchindex _remove ] == null ) {
2016-02-15 14:43:47 +00:00
2016-02-18 10:13:45 +00:00
2016-07-13 15:05:53 +00:00
// Mise a jour des indices des resultats
section . remove . input . search . num . innerHTML = 0 ;
searchindex _remove = 0 ;
2016-02-18 10:13:45 +00:00
2016-02-16 21:59:01 +00:00
2016-07-13 15:05:53 +00:00
// {2} Si au moins 1 résultat //
} else {
2016-02-17 11:09:23 +00:00
2016-07-13 15:05:53 +00:00
// On recupere les données de la user selectionnee
user _data = {
id _user : found _remove [ searchindex _remove ] [ 'id_user' ] ,
username : found _remove [ searchindex _remove ] [ 'username' ] ,
code : found _remove [ searchindex _remove ] [ 'code' ] ,
disable _input : false
} ;
// Mise a jour des indices des resultats
2016-02-17 11:09:23 +00:00
section . remove . input . search . num . innerHTML = searchindex _remove + 1 ;
2016-02-16 21:59:01 +00:00
2016-07-13 15:05:53 +00:00
}
// {3} On auto-remplit le formulaire //
// On enregistre l'UID de la user
section . remove . input . search . id . value = user _data . id _user ;
// Auto-remplissage du formulaire
section . remove . input . username . value = user _data . username ;
section . remove . input . code . value = user _data . code ;
// On gere le caractere "inactif" du submit
section . remove . input . submit . disabled = user _data . disable _input ;
}
2016-02-15 22:07:20 +00:00
2016-07-13 15:05:53 +00:00
/ * ( 3 ) G e s t i o n d e l a r e c h e r c h e
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - * /
2016-02-17 10:31:46 +00:00
section . remove . input . search . submit . addEventListener ( 'click' , function ( e ) {
2016-02-15 22:07:20 +00:00
// On annule l'envoi de base (PHP)
e . preventDefault ( ) ;
2016-07-13 15:05:53 +00:00
/* (1) Si le champ n'est pas vide */
2016-02-17 10:31:46 +00:00
if ( section . remove . input . search . keyword . value != '' ) {
2016-07-13 15:05:53 +00:00
/* (2) Si même mots-clés, on passe au prochain résultat */
if ( section . remove . input . search . keyword . value == lastkeywords _remove ) {
2016-02-18 10:17:59 +00:00
2016-07-13 15:05:53 +00:00
// on affiche le prochain (decalage cyclique)
searchindex _remove = ( searchindex _remove + 1 ) % found _remove . length ;
// On met à jour l'auto-remplissage
autofill _remove ( ) ;
/* (3) Nouveaux mots-clés, on lance la recherche */
} else {
/* (4) Redaction de la requete */
var getUsers = {
path : 'userDefault/search' ,
keywords : section . remove . input . search . keyword . value
} ;
/* (5) On envoie la requête */
api . send ( getUsers , function ( getUsersResponse ) {
2017-02-16 17:34:38 +00:00
if ( getUsersResponse . error == 0 ) { // si pas d'erreur
2016-07-13 15:05:53 +00:00
// On notifie que la recherche est terminée
section . remove . input . search . submit . anim ( 'active' , 1000 ) ;
/* (6) On met à jour les données des users, et le compteur */
2016-02-17 11:09:23 +00:00
searchindex _remove = 0 ;
2016-07-13 15:05:53 +00:00
found _remove = getUsersResponse . users ;
section . remove . input . search . sum . innerHTML = found _remove . length ;
2016-02-17 10:31:46 +00:00
2016-07-13 15:05:53 +00:00
// On met à jour l'auto-remplissage
autofill _remove ( ) ;
}
2016-02-17 11:09:23 +00:00
2017-09-18 16:32:39 +00:00
2016-07-13 15:05:53 +00:00
// On met à jour la dernière recherche
lastkeywords _remove = getUsers . keywords ;
} ) ;
2016-02-17 11:09:23 +00:00
2016-07-13 15:05:53 +00:00
}
2016-02-15 22:07:20 +00:00
2016-02-17 10:31:46 +00:00
}
2016-02-15 22:07:20 +00:00
2016-02-17 10:31:46 +00:00
} , false ) ;
2016-07-03 12:20:42 +00:00
2016-02-15 22:07:20 +00:00
2016-02-17 10:31:46 +00:00
/* (n) Gestion de l'envoi du formulaire */
section . remove . input . submit . addEventListener ( 'click' , function ( e ) {
// On annule l'envoi de base (PHP)
e . preventDefault ( ) ;
2016-02-15 22:07:20 +00:00
2017-11-11 11:56:46 +00:00
// Si l'id n'est pas defini -> abort
if ( section . remove . input . search . id . value == '' )
return ;
/* (1) Create popup */
var PopupManager = new Popup ( ) ;
var confirm _content = {
title : "Suppression d'utilisateur" ,
content : "L'utilisateur <b>" + section . remove . input . username . value + "</b> sera définitivement supprimé de la plateforme. Cette opération ne peut être annulée." ,
type : "invalid" ,
action : "Supprimer"
} ;
/* (2) Ask for confirmation */
PopupManager . ask ( confirm _content , function ( is _confirmed ) {
// {2.1} If cancelled -> abort //
if ( ! is _confirmed )
return ;
2016-02-15 22:07:20 +00:00
2016-02-17 10:31:46 +00:00
/* (2) On supprime l'utilisateur */
var request = {
path : 'userDefault/delete' , // On veut supprimer cet utilisateur
2016-07-03 13:03:31 +00:00
id _user : section . remove . input . search . id . value
2016-02-17 10:31:46 +00:00
} ;
api . send ( request , function ( answer ) {
2017-02-16 17:34:38 +00:00
if ( answer . error == 0 && answer . status == true ) { // Tout s'est bien deroule
2016-02-17 10:31:46 +00:00
console . log ( 'Utilisateur supprime!' ) ;
2016-02-18 09:55:10 +00:00
section . remove . input . submit . anim ( 'active' , 1500 ) ;
2016-07-20 18:05:32 +00:00
2016-07-23 22:03:02 +00:00
/ * ( 1 ) O n a c t u a l i s e l a r e c h e r c h e
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - * /
2016-07-23 22:35:56 +00:00
if ( section . remove . input . search . keyword . value . length == 0 ) { // Si aucun champ de recherche, on efface juste l'entrée
// On supprime toutes les valeurs
found _remove = [ ] ;
searchindex _remove = 0 ;
} else {
var getUsers = {
path : 'userDefault/search' ,
keywords : section . remove . input . search . keyword . value
} ;
api . send ( getUsers , function ( getUsersResponse ) {
2017-02-16 17:34:38 +00:00
if ( getUsersResponse . error == 0 ) { // si pas d'erreur
2016-07-23 22:35:56 +00:00
searchindex _remove = 0 ;
found _remove = getUsersResponse . users ;
section . remove . input . search . sum . innerHTML = found _remove . length ;
}
} ) ;
}
autofill _remove ( ) ;
2016-07-23 22:03:02 +00:00
2017-09-18 16:32:39 +00:00
} else // Erreur
2017-02-16 17:34:38 +00:00
console . error ( 'ModuleError::' + answer . error ) ;
2017-09-18 16:32:39 +00:00
2016-02-17 10:31:46 +00:00
} ) ;
2017-11-11 11:56:46 +00:00
} ) ;
2016-02-15 22:07:20 +00:00
} , false ) ;
2016-02-15 14:43:47 +00:00
}
/ * [ 4 ] e d i t - > M o d i f i c a t i o n d ' u t i l i s a t e u r
=== === === === === === === === === === === === === === === === === === === * /
2017-01-09 11:20:45 +00:00
var lastkeywords _edit = '' ;
var found _edit = [ ] ;
var searchindex _edit = 0 ;
2016-02-15 14:43:47 +00:00
if ( section . edit . element != null ) {
// Definition des champs
section . edit . input = {
2016-02-16 13:25:06 +00:00
search : {
2016-02-17 11:09:23 +00:00
view : document . querySelector ( section . edit . text + '.edit_search_view' ) ,
2016-07-12 13:16:07 +00:00
num : document . querySelector ( section . edit . text + '.edit_search_num' ) ,
sum : document . querySelector ( section . edit . text + '.edit_search_sum' ) ,
2016-02-17 11:09:23 +00:00
2016-02-16 13:25:06 +00:00
keyword : document . querySelector ( section . edit . text + '#edit_search_keyword' ) ,
id : document . querySelector ( section . edit . text + '#edit_search_id' ) ,
submit : document . querySelector ( section . edit . text + '#edit_search_submit' )
} ,
2016-02-15 14:43:47 +00:00
code : document . querySelector ( section . edit . text + '#edit_code' ) ,
username : document . querySelector ( section . edit . text + '#edit_username' ) ,
firstname : document . querySelector ( section . edit . text + '#edit_firstname' ) ,
lastname : document . querySelector ( section . edit . text + '#edit_lastname' ) ,
mail : document . querySelector ( section . edit . text + '#edit_mail' ) ,
submit : document . querySelector ( section . edit . text + '#edit_submit' )
} ;
2017-09-18 16:32:39 +00:00
// On recupere tous les messages d'erreur
section . edit . errmsg = {
code : document . querySelector ( section . edit . text + '.error-msg.edit_code' ) ,
username : document . querySelector ( section . edit . text + '.error-msg.edit_username' ) ,
firstname : document . querySelector ( section . edit . text + '.error-msg.edit_firstname' ) ,
lastname : document . querySelector ( section . edit . text + '.error-msg.edit_lastname' ) ,
mail : document . querySelector ( section . edit . text + '.error-msg.edit_mail' )
} ;
2017-02-20 10:59:44 +00:00
/* (1) Gestion du code RFID */
createChecker . append ( section . edit . input . code , format _code , '01-AB-CD-23' ) ;
section . edit . input . code . addEventListener ( 'keyup' , function ( e ) {
e . target . value = e . target . value . toUpperCase ( ) ;
if ( ! createChecker . check ( e . target ) )
createChecker . correct ( e . target , false ) ;
} , false ) ;
2016-07-13 15:05:53 +00:00
/ * ( 2 ) G e s t i o n d e l ' a u t o - r e m p l i s s a g e p a r l i e n
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - * /
function autofill _edit ( ) {
/* (0) Valeurs par défaut */
2016-02-16 21:59:01 +00:00
var user _data = {
id _user : '' ,
code : '' ,
username : '' ,
firstname : '' ,
lastname : '' ,
mail : '' ,
disable _input : true
} ;
2016-02-15 14:43:47 +00:00
2016-07-13 15:05:53 +00:00
// {1} Si aucun résultat //
if ( found _edit [ searchindex _edit ] == null ) {
2016-02-16 21:59:01 +00:00
2016-02-16 13:25:06 +00:00
2016-07-13 15:05:53 +00:00
// Mise a jour des indices des resultats
section . edit . input . search . num . innerHTML = 0 ;
searchindex _edit = 0 ;
2016-02-16 21:59:01 +00:00
2016-02-16 13:25:06 +00:00
2016-07-13 15:05:53 +00:00
// {2} Si au moins 1 résultat //
} else {
2016-02-16 21:59:01 +00:00
2016-07-13 15:05:53 +00:00
// On recupere les données de la user selectionnee
user _data = {
id _user : found _edit [ searchindex _edit ] [ 'id_user' ] ,
code : found _edit [ searchindex _edit ] [ 'code' ] ,
username : found _edit [ searchindex _edit ] [ 'username' ] ,
firstname : found _edit [ searchindex _edit ] [ 'firstname' ] ,
lastname : found _edit [ searchindex _edit ] [ 'lastname' ] ,
mail : found _edit [ searchindex _edit ] [ 'mail' ] ,
disable _input : false
} ;
2016-02-16 21:59:01 +00:00
2016-07-13 15:05:53 +00:00
// Mise a jour des indices des resultats
section . edit . input . search . num . innerHTML = searchindex _edit + 1 ;
2016-02-16 21:59:01 +00:00
2016-07-13 15:05:53 +00:00
}
// {3} On auto-remplit le formulaire //
// On enregistre l'UID de la user
section . edit . input . search . id . value = user _data . id _user ;
// Auto-remplissage du formulaire
section . edit . input . code . value = user _data . code ;
section . edit . input . username . value = user _data . username ;
section . edit . input . firstname . value = user _data . firstname ;
section . edit . input . lastname . value = user _data . lastname ;
section . edit . input . mail . value = user _data . mail ;
2016-02-16 13:25:06 +00:00
2016-07-13 15:05:53 +00:00
// On gere le caractere "inactif" du submit
section . edit . input . submit . disabled = user _data . disable _input ;
2016-02-16 13:25:06 +00:00
2016-07-13 15:05:53 +00:00
}
/ * ( 3 ) G e s t i o n d e l a r e c h e r c h e
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - * /
2016-02-16 13:25:06 +00:00
section . edit . input . search . submit . addEventListener ( 'click' , function ( e ) {
// On annule l'envoi de base (PHP)
e . preventDefault ( ) ;
2016-07-13 15:05:53 +00:00
/* (1) Si le champ n'est pas vide */
2016-02-16 13:25:06 +00:00
if ( section . edit . input . search . keyword . value != '' ) {
2016-07-13 15:05:53 +00:00
/* (2) Si même mots-clés, on passe au prochain résultat */
if ( section . edit . input . search . keyword . value == lastkeywords _edit ) {
// on affiche le prochain (decalage cyclique)
searchindex _edit = ( searchindex _edit + 1 ) % found _edit . length ;
// On met à jour l'auto-remplissage
autofill _edit ( ) ;
2016-02-18 10:17:59 +00:00
2016-07-13 15:05:53 +00:00
/* (3) Nouveaux mots-clés, on lance la recherche */
} else {
/* (4) Redaction de la requete */
var getUsers = {
path : 'userDefault/search' ,
keywords : section . edit . input . search . keyword . value
} ;
/* (5) On envoie la requête */
api . send ( getUsers , function ( getUsersResponse ) {
2017-02-16 17:34:38 +00:00
if ( getUsersResponse . error == 0 ) { // si pas d'erreur
2016-07-13 15:05:53 +00:00
// On notifie que la recherche est terminée
section . edit . input . search . submit . anim ( 'active' , 1000 ) ;
/* (6) On met à jour les données des users, et le compteur */
2016-02-17 11:09:23 +00:00
searchindex _edit = 0 ;
2016-07-13 15:05:53 +00:00
found _edit = getUsersResponse . users ;
section . edit . input . search . sum . innerHTML = found _edit . length ;
2016-02-16 13:25:06 +00:00
2016-07-13 15:05:53 +00:00
// On met à jour l'auto-remplissage
autofill _edit ( ) ;
}
2016-02-17 11:09:23 +00:00
2016-07-13 15:05:53 +00:00
// On met à jour la dernière recherche
lastkeywords _edit = getUsers . keywords ;
} ) ;
2016-02-17 11:09:23 +00:00
2016-07-13 15:05:53 +00:00
}
2016-02-16 13:25:06 +00:00
}
} , false ) ;
2016-07-03 12:20:42 +00:00
2016-02-15 14:43:47 +00:00
2016-02-16 08:35:37 +00:00
/* (n) Gestion de l'envoi du formulaire */
section . edit . input . submit . addEventListener ( 'click' , function ( e ) {
// On annule l'envoi de base (PHP)
e . preventDefault ( ) ;
2017-09-18 16:32:39 +00:00
// On vide les messages erreurs
section . edit . errmsg . code . innerHTML =
section . edit . errmsg . username . innerHTML =
section . edit . errmsg . firstname . innerHTML =
section . edit . errmsg . lastname . innerHTML =
section . edit . errmsg . mail . innerHTML = '' ;
2016-02-16 13:51:19 +00:00
// Si l'id est defini
if ( section . edit . input . search . id . value != '' ) {
var request = {
path : 'userDefault/edit' , // On veut creer un utilisateur
2016-07-12 13:16:07 +00:00
id _user : parseInt ( section . edit . input . search . id . value ) ,
2016-07-03 13:03:31 +00:00
code : section . edit . input . code . value ,
username : section . edit . input . username . value ,
firstname : section . edit . input . firstname . value ,
lastname : section . edit . input . lastname . value ,
2016-07-20 18:05:32 +00:00
mail : section . edit . input . mail . value
2016-02-16 13:51:19 +00:00
} ;
2016-02-16 08:35:37 +00:00
2016-02-16 13:51:19 +00:00
api . send ( request , function ( answer ) {
2016-02-16 18:59:55 +00:00
console . log ( answer ) ;
2017-02-16 17:34:38 +00:00
if ( answer . error == 0 && answer . status == true ) { // Tout s'est bien deroule
2016-02-16 13:51:19 +00:00
console . log ( 'Utilisateur modifie!' ) ;
2016-02-16 21:59:01 +00:00
2016-02-18 09:55:10 +00:00
section . edit . input . submit . anim ( 'active' , 1500 ) ;
2016-02-18 09:54:26 +00:00
2016-07-23 22:03:02 +00:00
/ * ( 1 ) O n m e t à j o u r l e s d o n n é e s u t i l i s a t e u r
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - * /
// On récupère la user d'uid donné dans l'URL
api . send ( { path : 'userDefault/getById' , id _user : request . id _user } , function ( response ) {
// Si aucune erreur et un résultat
2017-02-16 17:34:38 +00:00
if ( response . error == 0 ) {
2016-07-23 22:03:02 +00:00
found _edit [ searchindex _edit ] = response . user ; // On récupère le résultat
autofill _edit ( ) ; // On auto-remplit
}
} ) ;
2016-02-16 21:59:01 +00:00
2017-09-18 16:32:39 +00:00
} else { // Erreur
2017-02-16 17:34:38 +00:00
console . error ( 'ModuleError::' + answer . error ) ;
2017-09-18 16:32:39 +00:00
// if missing or incorrect param
if ( answer . error == 16 || answer . error == 17 ) {
if ( section . edit . errmsg [ answer . ErrorArguments [ 0 ] ] != null )
section . edit . errmsg [ answer . ErrorArguments [ 0 ] ] . innerHTML = 'Le champ est manquant ou incorrect !' ;
}
}
2016-02-16 13:51:19 +00:00
} ) ;
2016-02-16 08:35:37 +00:00
2016-02-16 13:51:19 +00:00
}
2016-02-16 08:35:37 +00:00
} , false ) ;
2016-07-03 12:20:42 +00:00
}
2016-07-20 23:13:48 +00:00
2017-01-09 11:20:45 +00:00
/ * [ 5 ] c h a r g e m e n t d e l ' u t i l i s a t e u r c o u r a n t ( d e p u i s u r l )
=== === === === === === === === === === === === === === === === === === === * /
// gestion automatique au chargement de la page si id_user dans url "/users/.+/:id_user:"
if ( pageManager . vars . length >= 2 && ! isNaN ( pageManager . vars [ 1 ] ) ) {
// on récupère la user d'uid donné dans l'url
api . send ( { path : 'userDefault/getById' , id _user : pageManager . vars [ 1 ] } , function ( response ) {
// si aucune erreur et un résultat
2017-02-16 17:34:38 +00:00
if ( response . error == 0 ) {
2017-01-09 11:20:45 +00:00
/* (1) On pré-remplis le formulaire de modification */
found _edit = [ response . user ] ; // on récupère le résultat
searchindex _edit = 0 ; // on remet le compteur à 0
autofill _edit ( ) ; // on auto-remplit
/* (2) On pré-remplis le formulaire de suppression */
found _remove = [ response . user ] ; // on récupère le résultat
searchindex _remove = 0 ; // on remet le compteur à 0
autofill _remove ( ) ; // on auto-remplit
}
} ) ;
}
2016-07-20 23:13:48 +00:00
2017-01-09 11:20:45 +00:00
/ * [ 6 ] g r o u p s - > G r o u p e s d ' u t i l i s a t e u r s
2016-07-20 23:13:48 +00:00
=== === === === === === === === === === === === === === === === === === === * /
if ( section . groups . element != null ) {
/* (1) On recupere tous les liens vers des sous-sections */
section . groups . link = {
2016-07-20 23:19:19 +00:00
remove : document . querySelectorAll ( section . groups . text + '.link_remove[data-cluster]' ) ,
edit : document . querySelectorAll ( section . groups . text + '.link_edit[data-cluster]' )
2016-07-20 23:13:48 +00:00
} ;
/* (2) On récupère toutes les actions de groupes */
section . groups . group = {
rem : document . querySelectorAll ( section . groups . text + '.rem-member[data-cluster][data-member]' ) ,
add : document . querySelectorAll ( section . groups . text + '.add-member[data-cluster]' )
} ;
/* (3) Gestion de la recherche instantannee */
2017-07-29 17:15:00 +00:00
section . groups . search . func = function ( ) {
2016-07-20 23:13:48 +00:00
var search = {
path : 'clusterDefault/search' ,
2017-07-29 17:15:00 +00:00
keywords : section . groups . search . bar . value ,
2016-07-20 23:13:48 +00:00
class : 0
} ;
// On envoie la requete
api . send ( search , function ( result ) {
2017-02-16 17:34:38 +00:00
if ( result . error == 0 ) { // si aucune erreur
2016-07-20 23:13:48 +00:00
// On enregistre tous les UID dans un tableau
var uid _list = [ ] ;
for ( var i = 0 ; i < result . clusters . length ; i ++ )
2016-07-20 23:19:19 +00:00
uid _list . push ( result . clusters [ i ] . id _user _cluster ) ;
2016-07-20 23:13:48 +00:00
// On recupere la liste des elements correspondants aux utilisateurs
var cluster _list = document . querySelectorAll ( section . groups . text + '> article.inline-box[id]' ) ;
// Pour chaque cluster
for ( var i = 0 ; i < cluster _list . length ; i ++ ) {
// Si doit etre visible
2016-07-23 15:34:24 +00:00
if ( uid _list . indexOf ( parseInt ( cluster _list [ i ] . id ) ) > - 1 )
2016-07-20 23:13:48 +00:00
cluster _list [ i ] . remClass ( 'hidden' ) ;
// Si ne doit pas etre visible
else
cluster _list [ i ] . addClass ( 'hidden' ) ;
}
}
} ) ;
2017-07-29 17:15:00 +00:00
} ;
section . groups . search . bar . addEventListener ( 'keyup' , function ( e ) {
if ( section . groups . search . time != null )
clearTimeout ( section . groups . search . time ) ;
section . groups . search . time = setTimeout ( section . groups . search . func , 500 ) ;
2016-07-20 23:13:48 +00:00
} , false ) ;
var i ;
/* (4) On gere la "redirection" vers la modification */
2016-07-20 23:19:19 +00:00
for ( i = 0 ; i < section . groups . link . edit . length ; i ++ ) {
section . groups . link . edit [ i ] . addEventListener ( 'click' , function ( e ) {
2017-01-09 13:49:00 +00:00
pageManager . vars = [ 'edit' , 'u' + e . target . getData ( 'cluster' ) ] ;
2016-07-20 23:19:19 +00:00
navMenu ( 'groups' , true ) ;
} , false ) ;
}
2016-07-20 23:13:48 +00:00
/* (5) On gere la "redirection" vers la suppression */
for ( i = 0 ; i < section . groups . link . remove . length ; i ++ ) {
section . groups . link . remove [ i ] . addEventListener ( 'click' , function ( e ) {
2017-01-09 13:49:00 +00:00
pageManager . vars = [ 'remove' , 'u' + e . target . getData ( 'cluster' ) ] ;
2016-07-20 23:19:19 +00:00
navMenu ( 'groups' , true ) ;
2016-07-20 23:13:48 +00:00
} , false ) ;
}
/* (6) On gere la "suppression" d'un groupe */
2017-02-18 14:08:13 +00:00
section . groups . group . remfunc = function ( e ) {
// {1} On rédige la requête //
var request = {
path : 'userDefault/unlink' ,
id _cluster : e . target . getData ( 'cluster' ) ,
id _user : e . target . getData ( 'member' )
} ;
2016-07-20 23:13:48 +00:00
2017-02-18 14:08:13 +00:00
// {2} On envoie la requête //
api . send ( request , function ( response ) {
2016-07-20 23:13:48 +00:00
2017-02-18 14:08:13 +00:00
// {3} Si erreur, on ne fait rien //
if ( response . error != 0 )
return false ;
// {4} Si tout s'est bien passé //
e . target . parentNode . parentNode . removeChild ( e . target . parentNode ) ;
} ) ;
} ;
for ( i = 0 ; i < section . groups . group . rem . length ; i ++ )
section . groups . group . rem [ i ] . addEventListener ( 'click' , section . groups . group . remfunc , false ) ;
2016-07-20 23:13:48 +00:00
/* (7) On gere la "modification" des membres d'un groupe */
for ( i = 0 ; i < section . groups . group . add . length ; i ++ ) {
2017-02-18 14:08:13 +00:00
section . groups . group . add [ i ] . addEventListener ( 'mouseup' , function ( e ) {
/* (1) Check if already opened */
var opened = e . target . innerHTML != '+' ;
/* (2) Hide all dropdowns */
for ( j = 0 ; j < section . groups . group . add . length ; j ++ )
section . groups . group . add [ j ] . innerHTML = '+' ;
/* (3) Try to show dropdown if not already */
if ( ! opened ) {
/* (1) Get the group id/type */
if ( ! /^\d+$/ . test ( e . target . getData ( 'cluster' ) ) )
return ;
var cluster _id = parseInt ( e . target . getData ( 'cluster' ) ) ;
/* (2) Get already members ids */
var brothers = e . target . parentNode . children [ 1 ] . children ;
var already = [ ] ; // will contain already ids
for ( j = 0 ; j < brothers . length ; j ++ )
already += parseInt ( brothers [ j ] . children [ 0 ] . getData ( 'member' ) ) ;
/* (3) Call list of members */
api . send ( { path : 'userDefault/getAll' } , function ( response ) {
// Manage error
if ( response . error != 0 ) {
console . warn ( 'error loading list of members' ) ;
return ;
}
2017-07-29 17:15:00 +00:00
2017-02-18 14:08:13 +00:00
// remove already members
var members = response . users ;
/* (4) Build dropdown content without already members */
dropdown = "<div class='dropdown'>" ;
for ( j = 0 ; j < members . length ; j ++ ) {
if ( already . indexOf ( members [ j ] . id _user ) > - 1 )
continue ;
dropdown += "<span data-memberid='" + members [ j ] . id _user + "'>" + members [ j ] . username + "</span>" ;
}
dropdown += "</div>" ;
e . target . innerHTML = '+' + dropdown ;
/* (5) Attach events to dropdown elements */
var dropdownElements = e . target . children [ 0 ] . children ;
for ( j = 0 ; j < dropdownElements . length ; j ++ )
dropdownElements [ j ] . addEventListener ( 'mousedown' , function ( e2 ) {
// {1} Get member id/username //
var memberid = e2 . target . getData ( 'memberid' ) ;
var username = e2 . target . innerHTML ;
// manage error
if ( memberid === false )
return ;
// {2} Request : add member to group //
var request = {
path : 'userDefault/link' ,
id _cluster : cluster _id ,
id _user : memberid
} ;
2017-07-29 17:15:00 +00:00
2017-02-18 14:08:13 +00:00
// {3} Call link //
api . send ( request , function ( response2 ) {
2017-07-29 17:15:00 +00:00
2017-02-18 14:08:13 +00:00
// manage error
if ( response2 . error != 0 ) {
console . warn ( 'cannot link user to group' ) ;
return ;
}
// Remove dropdown (in order to be reloaded with new members);
e . target . innerHTML = '+' ;
// {4} Update display //
var newMemberRemoveIcon = document . createElement ( 'span' ) ;
newMemberRemoveIcon . setAttribute ( 'class' , 'rem-member' ) ;
newMemberRemoveIcon . setAttribute ( 'data-member' , memberid ) ;
newMemberRemoveIcon . setAttribute ( 'data-cluster' , e . target . getData ( 'cluster' ) ) ;
2017-07-29 17:15:00 +00:00
2017-02-18 14:08:13 +00:00
newMemberRemoveIcon . addEventListener ( 'click' , section . groups . group . remfunc , false ) ;
var newMember = document . createElement ( 'span' ) ;
newMember . appendChild ( document . createTextNode ( username ) ) ;
newMember . appendChild ( newMemberRemoveIcon ) ;
e . target . parentNode . children [ 1 ] . appendChild ( newMember ) ;
} ) ;
} , false ) ;
} ) ;
}
2016-07-20 23:13:48 +00:00
} , false ) ;
}
}