[Done] Static part of the permission chooser view [Todo] The dynamic part (js copied from groups/members)

This commit is contained in:
xdrm-brackets 2017-02-16 18:34:38 +01:00
parent 9d0295d869
commit af15692002
11 changed files with 361 additions and 56 deletions

View File

@ -237,8 +237,8 @@
/* MODIFIE UN groupe DONNEE
*
* @id_cluster<int> UID du groupe
* @class<int> Type de groupe
* @name<String> Nouveau nom
* @class<int> Type de groupe
* @name<String> Nouveau nom
*
* @return status<Boolean> Retourne si oui ou non tout s'est bien deroule
*
@ -366,7 +366,7 @@
}
/* RETOURNE LES PERMISSIONS POUR UN GROUPE DE MACHINE
/* RETOURNE LA LISTE DES PERMISSIONS EXISTANTES
*
* @id_cluster<int> UID du groupe machine en question
*

View File

@ -57,7 +57,10 @@
$this->body = \file_get_contents('php://input');
/* (2) Fetch content type */
$this->type = self::getContentType($this->headers['Content-Type']);
if( isset($this->headers['Content-Type']) )
$this->type = self::getContentType($this->headers['Content-Type']);
else
$this->type = self::getContentType();
/* [5] Parse BODY data -> POST
@ -78,7 +81,10 @@
/* [1] Checks argv
=========================================================*/
if( is_null($pContentType) )
$pContentType = $_SERVER['CONTENT_TYPE'];
if( isset($_SERVER['CONTENT_TYPE']) )
$pContentType = $_SERVER['CONTENT_TYPE'];
else
$pContentType = 'text/plain';
/* [2] Checks types

View File

@ -105,7 +105,7 @@
default: return 'inconnu'; break;
}
}else
return 'inconnu';
return $word;
}));

View File

@ -0,0 +1,159 @@
<?php
namespace viewer\view\group;
use \viewer\core\Viewer;
use \api\core\Request;
use \error\core\Err;
use \error\core\Error;
use \api\core\Authentification;
class permission_choice{
public static function render($params){
/* [1] On vérifie les param + fetch données du groupe
=========================================================*/
/* (1) On vérifie les paramètres */
if( !isset($params['id_target']) || !is_numeric($params['id_target']) || !isset($params['id_action']) || !is_numeric($params['id_action']) )
return Viewer::$htmlError;
/* (2) On récupère le groupe cible */
$checktypeRequest = new Request('clusterDefault/getById', [
'id_cluster' => $params['id_target'],
'class' => 1
]);
$checktypeResponse = $checktypeRequest->dispatch();
/* (3) Si on ne le trouve pas, on retourne une erreur */
if( $checktypeResponse->error->get() != Err::Success )
return Viewer::$htmlError;
/* (4) On récupère les données du groupe */
$currentCluster = $checktypeResponse->get('cluster');
/* [2] On récupère les données de l'action
=========================================================*/
/* (1) Rédige la requête */
$permlistRequest = new Request('clusterDefault/getPermissions', []);
$permlistResponse = $permlistRequest->dispatch();
/* (2) Manage error */
if( $permlistResponse->error->get() != Err::Success )
return Viewer::$htmlError;
/* (3) Get action name (non-translated) */
$action_name = null;
foreach($permlistResponse->get('permissions') as $perm)
if( $perm['id_permission'] == $params['id_action'] )
$action_name = $perm['name'];
/* (4) Manage error (not found) */
if( is_null($action_name) )
return Viewer::$htmlError;
/* [2] Init Twig
=========================================================*/
$loader = new \Twig_Loader_Filesystem(__BUILD__.'/viewer/view');
$twig = new \Twig_Environment($loader, []);
/* [3] Store variables
=========================================================*/
$variables = [
'p_permname' => $action_name,
'p_id_target' => $params['id_target'],
'p_id_permission' => $params['id_action'],
'p_name' => $currentCluster['name'],
'p_theme' => $_SESSION['WAREHOUSE']['theme']
];
/* [4] Store functions
=========================================================*/
$twig->addFunction(new \Twig_Function('f_userclusters', function($id_target, $id_action){
/* [1] On récupère les groupes utilisateurs
=========================================================*/
/* (1) On exécute la requête */
$getmembersRequest = new Request('clusterDefault/getAuthenticatedClusters', [
'id_target' => $id_target,
'id_action' => $id_action
]);
$getmembersResponse = $getmembersRequest->dispatch();
/* (2) Si erreur, on retourne rien par défaut */
if( $getmembersResponse->error->get() != Err::Success )
return [];
/* (3) On récupère la liste des UID uniquement */
$members_ids = [];
foreach($getmembersResponse->get('clusters') as $member)
$members_ids[] = $member['id_source'];
/* [2] On récupère les utilisateurs non membres
=========================================================*/
/* (2) On exécute la requête */
$getuclusterRequest = new Request('clusterDefault/getAll', [
'class' => 0
]);
$getuclustersResponse = $getuclusterRequest->dispatch();
/* (3) si erreur, on affiche l'explicitation */
if( $getuclustersResponse->error->get() != Err::Success )
return [];
/* (4) On récupère la liste des utilisateurs */
$uclusters = $getuclustersResponse->get('clusters');
/* (5) On ajoute s'ils sont dans le groupe ou non */
foreach($uclusters as $u=>$ucluster)
$uclusters[$u]['already'] = in_array($ucluster['id_user_cluster'], $members_ids);
return $uclusters;
}));
$twig->addFilter(new \Twig_Filter('translate', function($word, $lang){
$word = strtolower($word);
if( $lang === 'fr' ){
switch($word){
case 'start': return 'démarrer'; break;
case 'stop': return 'arrêter'; break;
case 'signal': return 'signaler'; break;
case 'lock': return 'bloquer'; break;
case 'unlock': return 'débloquer'; break;
default: return $word; break;
}
}else
return $word;
}));
/* [5] Build the whole stuff
=========================================================*/
return $twig->render('group/permission_choice.twig', [
'p_permname' => $variables['p_permname'],
'p_id_permission' => $variables['p_id_permission'],
'p_name' => $variables['p_name'],
'p_id_target' => $variables['p_id_target'],
'p_theme' => $variables['p_theme']
]);
}
}
?>

View File

@ -0,0 +1,27 @@
<span style='text-align:center; color: #666; text-decoration: underline; cursor: pointer;' id='permissions-change-group'>Modifier d'autres permissions</span>
<p></p>
<article class='check-table'>
<input type='hidden' id='permission-choice-idtarget' value='{{ p_id_cluster }}'>
<input type='hidden' id='permission-choice-idaction' value='{{ p_id_permission }}'>
<div>
<span><strong>Nom du groupe</strong></span>
<span><strong>permission <u>{{ p_permname | translate('fr') }}</u> sur <u>{{ p_name }}</u></strong></span>
</div>
{% for ucluster in f_userclusters(p_id_target, p_id_permission) %}
<div>
<span>{{ ucluster.name }}</span>
<span>
<input type='checkbox' value='{{ ucluster.id_user_cluster }}' data-name='member' id='checkbox_{{ ucluster.id_user_cluster }}' {% if ucluster.already %}checked{% endif %}>
<label for='checkbox_{{ ucluster.id_user_cluster }}'></label>
</span>
</div>
{% endfor %}
</article>

View File

@ -383,8 +383,7 @@
"description": "Liste de tous les groupes",
"permissions": ["warehouse", "admin"],
"parameters": {
"class": { "description": "Type de groupe.", "type": "id" },
"class": { "description": "Type de groupe.", "type": "id", "optional": true }
"class": { "description": "Type de groupe.", "type": "id" }
},
"output": {
"clusters": { "description": "Liste de tous les groupes.", "type": "array<array<mixed>>" }

View File

@ -85,7 +85,8 @@
// logout from admin
$R->get('logout/?', function(){
(new Request('authentificationDefault/admin', ['username' => '0', 'password' => '']))->dispatch();
$req = new Request('authentificationDefault/admin', ['username' => '0', 'password' => '']);
$res = $req->dispatch();
header('Location: /');
});

View File

@ -202,7 +202,21 @@
=========================================================*/
echo "<section data-sublink='permissions'>";
$clusterView = new Viewer('group.permission', []);
$clusterView->view();
/* (1) Si on a un ID_CLUSTER, on affiche la composition
---------------------------------------------------------*/
if( count($post) > 2 && preg_match('/^m\d+$/', $post[1]) && preg_match('/^a\d+$/', $post[2])){
$membersChoice = new Viewer('group.permission_choice', [
'id_target' => (int) substr($post[1], 1),
'id_action' => (int) substr($post[2], 1)
]);
$membersChoice->view();
}else{
$groupChoice = new Viewer('group.permission', []);
$groupChoice->view();
}
echo '</section>';

View File

@ -33,7 +33,8 @@ var section = {
permissions: {
text: '#CONTAINER > section[data-sublink="permissions"] ',
element: document.querySelector('#CONTAINER > section[data-sublink="permissions"]')
element: document.querySelector('#CONTAINER > section[data-sublink="permissions"]'),
searchbar: document.querySelector('#CONTAINER > section[data-sublink="permissions"] > .searchbar')
}
};
@ -74,7 +75,7 @@ if( section.view.element != null ){
// On envoie la requete
api.send(search, function(result){
if( result.ModuleError == 0 ){ // si aucune erreur
if( result.error == 0 ){ // si aucune erreur
// On enregistre tous les UID dans un tableau
var uid_list = [];
@ -144,7 +145,7 @@ if( section.view.element != null ){
api.send(request, function(response){
// {3} Si erreur, on ne fait rien //
if( response.ModuleError != 0 )
if( response.error != 0 )
return false;
// {4} Si tout s'est bien passé //
@ -219,7 +220,7 @@ if( section.create.element != null ){
};
api.send(request, function(answer){
if( answer.ModuleError == 0 ){ // Tout s'est bien deroule
if( answer.error == 0 ){ // Tout s'est bien deroule
console.log('Groupe cree!');
section.create.input.submit.anim('active', 1500);
@ -371,7 +372,7 @@ if( section.remove.element != null ){
/* (5) On envoie la requête */
api.send(getClusters, function(getClustersResponse){
if( getClustersResponse.ModuleError == 0 ){ // si pas d'erreur
if( getClustersResponse.error == 0 ){ // si pas d'erreur
// On notifie que la recherche est terminée
section.remove.input.search.submit.anim('active', 1000);
@ -415,7 +416,7 @@ if( section.remove.element != null ){
};
api.send(request, function(answer){
if( answer.ModuleError == 0 && answer.status == true ){ // Tout s'est bien deroule
if( answer.error == 0 && answer.status == true ){ // Tout s'est bien deroule
console.log('Groupe supprimee!');
section.remove.input.submit.anim('active', 1500);
@ -435,7 +436,7 @@ if( section.remove.element != null ){
};
api.send(getClusters, function(getClustersResponse){
if( getClustersResponse.ModuleError == 0 ){ // si pas d'erreur
if( getClustersResponse.error == 0 ){ // si pas d'erreur
searchindex_remove = 0;
found_remove = getClustersResponse.clusters;
section.remove.input.search.sum.innerHTML = found_remove.length;
@ -448,7 +449,7 @@ if( section.remove.element != null ){
}else // Erreur
console.error('ModuleError::'+answer.ModuleError);
console.error('ModuleError::'+answer.error);
});
}
@ -593,7 +594,7 @@ if( section.edit.element != null ){
/* (5) On envoie la requête */
api.send(getClusters, function(getClustersResponse){
if( getClustersResponse.ModuleError == 0 ){ // si pas d'erreur
if( getClustersResponse.error == 0 ){ // si pas d'erreur
// On notifie que la recherche est terminée
section.edit.input.search.submit.anim('active', 1000);
@ -640,7 +641,7 @@ if( section.edit.element != null ){
};
api.send(request, function(answer){
if( answer.ModuleError == 0 && answer.status == true ){ // Tout s'est bien deroule
if( answer.error == 0 && answer.status == true ){ // Tout s'est bien deroule
console.log('Groupe modifiee!');
section.edit.input.submit.anim('active', 1500);
@ -657,7 +658,7 @@ if( section.edit.element != null ){
// On récupère la user d'uid donné dans l'URL
api.send(request2, function(response){
// Si aucune erreur et un résultat
if( response.ModuleError == 0 ){
if( response.error == 0 ){
found_edit[searchindex_edit] = response.cluster; // On récupère le résultat
autofill_edit(); // On auto-remplit
}
@ -665,7 +666,7 @@ if( section.edit.element != null ){
}else // Erreur
console.error('ModuleError::'+answer.ModuleError);
console.error('ModuleError::'+answer.error);
});
}
@ -699,7 +700,7 @@ if( pageManager.vars.length >= 2 && /^(u|m)\d+$/.test(pageManager.vars[1]) ){
// On récupère la user d'uid donné dans l'URL
api.send(request, function(response){
// Si aucune erreur et un résultat
if( response.ModuleError == 0 ){
if( response.error == 0 ){
found_edit = [ response.cluster ]; // on récupère le résultat
searchindex_edit = 0; // on remet le compteur à 0
autofill_edit(); // on auto-remplit
@ -841,7 +842,7 @@ if( section.members.element != null && section.members.chooser.element == null )
// {2} On envoie la requête //
api.send(linkReq, function(linkRes){
if( linkRes.ModuleError != 0 )
if( linkRes.error != 0 )
console.error('Erreur d\'ajout de membre');
});
}
@ -860,7 +861,7 @@ if( section.members.element != null && section.members.chooser.element == null )
// {2} On envoie la requête //
api.send(unlinkReq, function(unlinkRes){
if( unlinkRes.ModuleError != 0 )
if( unlinkRes.error != 0 )
console.error('Erreur d\'ajout de membre');
});
}
@ -873,3 +874,101 @@ if( section.members.element != null && section.members.chooser.element == null )
}, false);
}
/* GESTION DES PERMISSIONS
*
*/
if( section.permissions.element != null ){
/* (1) On récupère toutes les actions de groupes */
section.permissions.group = {
rem: document.querySelectorAll(section.permissions.text + '.rem-permission[data-target][data-permission][data-source]'),
add: document.querySelectorAll(section.permissions.text + '.add-permission[data-target][data-permission]')
};
/* (2) Gestion de la recherche instantannee */
section.permissions.searchbar.addEventListener('keyup', function(e){
var search = {
path: 'clusterDefault/search',
keywords: section.permissions.searchbar.value,
class: 1
};
// On envoie la requete
api.send(search, function(result){
if( result.error == 0 ){ // si aucune erreur
// On enregistre tous les UID dans un tableau
var uid_list = [];
for( var i = 0 ; i < result.clusters.length ; i++ )
uid_list.push( result.clusters[i].id_machine_cluster );
// On recupere la liste des elements correspondants aux utilisateurs
var cluster_list = document.querySelectorAll(section.permissions.text + '> article.inline-box[id]');
// Pour chaque cluster
for( var i = 0 ; i < cluster_list.length ; i++ ){
// Si doit etre visible
if( uid_list.indexOf( parseInt(cluster_list[i].id) ) > -1 )
cluster_list[i].remClass('hidden');
// Si ne doit pas etre visible
else
cluster_list[i].addClass('hidden');
}
}
});
}, false);
var i;
/* (3) On gere la "suppression" d'une permission */
for( i = 0 ; i < section.permissions.group.rem.length ; i++ ){
section.permissions.group.rem[i].addEventListener('click', function(e){
// {1} On rédige la requête //
var request = {
path: 'clusterDefault/remPermission',
id_target: e.target.getData('target'),
id_source: e.target.getData('source'),
id_action: e.target.getData('permission')
};
// {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 );
});
}, false);
}
/* (4) On gere la "modification" des membres d'une permission d'un groupe */
for( i = 0 ; i < section.permissions.group.add.length ; i++ ){
section.permissions.group.add[i].addEventListener('click', function(e){
pageManager.vars = [ 'permissions', 'm'+e.target.getData('target'), 'a'+e.target.getData('permission') ];
pageManager.refresh();
}, false);
}
}

View File

@ -65,7 +65,7 @@ if( section.view.element != null ){
// On envoie la requete
api.send(search, function(result){
if( result.ModuleError == 0 ){ // si aucune erreur
if( result.error == 0 ){ // si aucune erreur
// On enregistre tous les UID dans un tableau
var uid_list = [];
@ -125,7 +125,7 @@ if( section.view.element != null ){
api.send(request, function(response){
// {3} Si erreur, on ne fait rien //
if( response.ModuleError != 0 )
if( response.error != 0 )
return false;
@ -178,7 +178,7 @@ if( section.create.element != null ){
/* (4) On lance la requête */
api.send(request, function(answer){
if( answer.ModuleError == 0 ){ // Tout s'est bien deroule
if( answer.error == 0 ){ // Tout s'est bien deroule
console.log('Machine cree!');
// On vide le champs
@ -313,7 +313,7 @@ if( section.remove.element != null ){
/* (5) On envoie la requête */
api.send(getMachines, function(getMachinesResponse){
if( getMachinesResponse.ModuleError == 0 ){ // si pas d'erreur
if( getMachinesResponse.error == 0 ){ // si pas d'erreur
// On notifie que la recherche est terminée
section.remove.input.search.submit.anim('active', 1000);
@ -354,7 +354,7 @@ if( section.remove.element != null ){
};
api.send(request, function(answer){
if( answer.ModuleError == 0 && answer.status == true ){ // Tout s'est bien deroule
if( answer.error == 0 && answer.status == true ){ // Tout s'est bien deroule
console.log('Machine supprimee!');
section.remove.input.submit.anim('active', 1500);
@ -374,7 +374,7 @@ if( section.remove.element != null ){
};
api.send(getMachines, function(getMachinesResponse){
if( getMachinesResponse.ModuleError == 0 ){ // si pas d'erreur
if( getMachinesResponse.error == 0 ){ // si pas d'erreur
searchindex_remove = 0;
found_remove = getMachinesResponse.machines;
section.remove.input.search.sum.innerHTML = found_remove.length;
@ -386,7 +386,7 @@ if( section.remove.element != null ){
}else // Erreur
console.error('ModuleError::'+answer.ModuleError);
console.error('ModuleError::'+answer.error);
});
}
@ -513,7 +513,7 @@ if( section.edit.element != null ){
/* (5) On envoie la requête */
api.send(getMachines, function(getMachinesResponse){
if( getMachinesResponse.ModuleError == 0 ){ // si pas d'erreur
if( getMachinesResponse.error == 0 ){ // si pas d'erreur
// On notifie que la recherche est terminée
section.edit.input.search.submit.anim('active', 1000);
@ -557,7 +557,7 @@ if( section.edit.element != null ){
};
api.send(request, function(answer){
if( answer.ModuleError == 0 && answer.status == true ){ // Tout s'est bien deroule
if( answer.error == 0 && answer.status == true ){ // Tout s'est bien deroule
console.log('Machine modifiee!');
section.edit.input.submit.anim('active', 1500);
@ -568,14 +568,14 @@ if( section.edit.element != null ){
// On récupère la machine d'uid donné dans l'URL
api.send({path:'machineDefault/getById', id_machine:request.id_machine}, function(response){
// Si aucune erreur et un résultat
if( response.ModuleError == 0 ){
if( response.error == 0 ){
found_edit[searchindex_edit] = response.machine; // On récupère le résultat
autofill_edit(); // On auto-remplit
}
});
}else // Erreur
console.error('ModuleError::'+answer.ModuleError);
console.error('ModuleError::'+answer.error);
});
}
@ -601,7 +601,7 @@ if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){
api.send({path:'machineDefault/getById', id_machine:pageManager.vars[1]}, function(response){
// si aucune erreur et un résultat
if( response.ModuleError == 0 ){
if( response.error == 0 ){
/* (1) On pré-remplis le formulaire de modification */
found_edit = [ response.machine ]; // on récupère le résultat
@ -659,7 +659,7 @@ if( section.groups.element != null ){
// On envoie la requete
api.send(search, function(result){
if( result.ModuleError == 0 ){ // si aucune erreur
if( result.error == 0 ){ // si aucune erreur
// On enregistre tous les UID dans un tableau
var uid_list = [];
@ -722,7 +722,7 @@ if( section.groups.element != null ){
api.send(request, function(response){
// {3} Si erreur, on ne fait rien //
if( response.ModuleError != 0 )
if( response.error != 0 )
return false;

View File

@ -70,10 +70,10 @@ if( section.view.element != null ){
// On envoie la requete
api.send(search, function(result){
if( result.ModuleError != 0 ) return;
if( result.error != 0 ) return;
console.log(result.users.length);
if( result.ModuleError == 0 ){ // si aucune erreur
if( result.error == 0 ){ // si aucune erreur
// On enregistre tous les UID dans un tableau
var uid_list = [];
@ -133,7 +133,7 @@ if( section.view.element != null ){
api.send(request, function(response){
// {3} Si erreur, on ne fait rien //
if( response.ModuleError != 0 )
if( response.error != 0 )
return false;
@ -201,7 +201,7 @@ if( section.create.element != null ){
};
api.send(request, function(answer){
if( answer.ModuleError == 0 ){ // Tout s'est bien deroule
if( answer.error == 0 ){ // Tout s'est bien deroule
console.log('Utilisateur cree!');
section.create.input.submit.anim('active', 1500);
@ -214,7 +214,7 @@ if( section.create.element != null ){
section.create.input.mail.value = '';
}else // Erreur
console.error('ModuleError::'+answer.ModuleError);
console.error('ModuleError::'+answer.error);
});
@ -344,7 +344,7 @@ if( section.remove.element != null ){
/* (5) On envoie la requête */
api.send(getUsers, function(getUsersResponse){
if( getUsersResponse.ModuleError == 0 ){ // si pas d'erreur
if( getUsersResponse.error == 0 ){ // si pas d'erreur
// On notifie que la recherche est terminée
section.remove.input.search.submit.anim('active', 1000);
@ -389,7 +389,7 @@ if( section.remove.element != null ){
};
api.send(request, function(answer){
if( answer.ModuleError == 0 && answer.status == true ){ // Tout s'est bien deroule
if( answer.error == 0 && answer.status == true ){ // Tout s'est bien deroule
console.log('Utilisateur supprime!');
section.remove.input.submit.anim('active', 1500);
@ -409,7 +409,7 @@ if( section.remove.element != null ){
};
api.send(getUsers, function(getUsersResponse){
if( getUsersResponse.ModuleError == 0 ){ // si pas d'erreur
if( getUsersResponse.error == 0 ){ // si pas d'erreur
searchindex_remove = 0;
found_remove = getUsersResponse.users;
section.remove.input.search.sum.innerHTML = found_remove.length;
@ -420,7 +420,7 @@ if( section.remove.element != null ){
}else // Erreur
console.error('ModuleError::'+answer.ModuleError);
console.error('ModuleError::'+answer.error);
});
}
@ -561,7 +561,7 @@ if( section.edit.element != null ){
/* (5) On envoie la requête */
api.send(getUsers, function(getUsersResponse){
if( getUsersResponse.ModuleError == 0 ){ // si pas d'erreur
if( getUsersResponse.error == 0 ){ // si pas d'erreur
// On notifie que la recherche est terminée
section.edit.input.search.submit.anim('active', 1000);
@ -608,7 +608,7 @@ if( section.edit.element != null ){
api.send(request, function(answer){
console.log( answer );
if( answer.ModuleError == 0 && answer.status == true ){ // Tout s'est bien deroule
if( answer.error == 0 && answer.status == true ){ // Tout s'est bien deroule
console.log('Utilisateur modifie!');
section.edit.input.submit.anim('active', 1500);
@ -618,7 +618,7 @@ if( section.edit.element != null ){
// 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
if( response.ModuleError == 0 ){
if( response.error == 0 ){
found_edit[searchindex_edit] = response.user; // On récupère le résultat
autofill_edit(); // On auto-remplit
}
@ -626,7 +626,7 @@ if( section.edit.element != null ){
}else // Erreur
console.error('ModuleError::'+answer.ModuleError);
console.error('ModuleError::'+answer.error);
});
}
@ -650,7 +650,7 @@ if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){
api.send({path:'userDefault/getById', id_user:pageManager.vars[1]}, function(response){
// si aucune erreur et un résultat
if( response.ModuleError == 0 ){
if( response.error == 0 ){
/* (1) On pré-remplis le formulaire de modification */
found_edit = [ response.user ]; // on récupère le résultat
@ -701,7 +701,7 @@ if( section.groups.element != null ){
// On envoie la requete
api.send(search, function(result){
if( result.ModuleError == 0 ){ // si aucune erreur
if( result.error == 0 ){ // si aucune erreur
// On enregistre tous les UID dans un tableau
var uid_list = [];
@ -764,7 +764,7 @@ if( section.groups.element != null ){
api.send(request, function(response){
// {3} Si erreur, on ne fait rien //
if( response.ModuleError != 0 )
if( response.error != 0 )
return false;