diff --git a/doc/db_knex_router.js.html b/doc/db_knex_router.js.html
index 23c54c2b8a12a8bbaabe791aff923a5b7cf3c9b9..ac5723faee992dfd495afad109d6e24588ed42e6 100644
--- a/doc/db_knex_router.js.html
+++ b/doc/db_knex_router.js.html
@@ -51,7 +51,7 @@ module.exports = require('knex')(config);</code></pre>
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/global.html b/doc/global.html
index 6064377098821f000260b39e0f8eb0a0391f77f3..78e9b0dc1349f07a72ed1a23f72c264c95d3cba7 100644
--- a/doc/global.html
+++ b/doc/global.html
@@ -651,7 +651,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line157">line 157</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line163">line 163</a>
     </li></ul></dd>
     
 
@@ -943,7 +943,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line121">line 121</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line127">line 127</a>
     </li></ul></dd>
     
 
@@ -1102,7 +1102,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line85">line 85</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line91">line 91</a>
     </li></ul></dd>
     
 
@@ -1261,7 +1261,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line97">line 97</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line103">line 103</a>
     </li></ul></dd>
     
 
@@ -1420,7 +1420,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line109">line 109</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line115">line 115</a>
     </li></ul></dd>
     
 
@@ -1625,7 +1625,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line260">line 260</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line266">line 266</a>
     </li></ul></dd>
     
 
@@ -1681,7 +1681,7 @@
     
 
     
-    <h4 class="name" id="rechercheLDAP"><span class="type-signature"></span>rechercheLDAP<span class="signature">(base, filter, filter_dic, attributes)</span><span class="type-signature"> &rarr; {Array.&lt;string>}</span></h4>
+    <h4 class="name" id="rechercheLDAP"><span class="type-signature"></span>rechercheLDAP<span class="signature">(base, filter, filter_dic, attributes)</span><span class="type-signature"> &rarr; {Object}</span></h4>
     
 
     
@@ -1880,7 +1880,7 @@
 
         
 <div class="param-desc">
-    <p>Résultats de la recherche</p>
+    <p>Résultats de la recherche ; soit une liste de valeurs d'attributs, soit une liste de dictionnaires si on veut plus d'un attribut (les clés du dictionnaire sont celles du LDAP)</p>
 </div>
 
 
@@ -1891,7 +1891,7 @@
     </dt>
     <dd>
         
-<span class="param-type">Array.&lt;string></span>
+<span class="param-type">Object</span>
 
 
     </dd>
@@ -2012,7 +2012,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line133">line 133</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line139">line 139</a>
     </li></ul></dd>
     
 
@@ -2447,7 +2447,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line196">line 196</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line202">line 202</a>
     </li></ul></dd>
     
 
@@ -2519,7 +2519,7 @@
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/index.html b/doc/index.html
index f363b33bd2249baa9fbc40eb4a7aa18078bd1ddf..3798742d02c37410c929233d6ceaffa939bd1959 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -941,7 +941,7 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/knexfile.js.html b/doc/knexfile.js.html
index 2d9141b61810967bd4323368e8001dddc430201b..ef1955a0a9f73e2aa80c426616327c448e80afd7 100644
--- a/doc/knexfile.js.html
+++ b/doc/knexfile.js.html
@@ -72,7 +72,7 @@ module.exports = {
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_admin_view_admin_router.js.html b/doc/src_admin_view_admin_router.js.html
index a5a2691b3e2d58775c0a351152e19adb796437e4..f87c527f98c3a177294b28cbd7e981e193f2127e 100644
--- a/doc/src_admin_view_admin_router.js.html
+++ b/doc/src_admin_view_admin_router.js.html
@@ -160,7 +160,7 @@ export default router;
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_graphql_schema.js.html b/doc/src_graphql_schema.js.html
index 074f99d4080d0854356ccb775a4fb6bbf5d4a2d9..30211a82e9ae57c90aa4591e02506faca71d2749 100644
--- a/doc/src_graphql_schema.js.html
+++ b/doc/src_graphql_schema.js.html
@@ -39,29 +39,37 @@ import { request } from 'https';
 const typeDefs = `
     type Query {
         allGroups: [Group]
-        group(id: ID) : [Group]
+        group(uid: ID) : Group
     }
 
     type Group {
-        name: String!
-        id: ID!
+        name: String
+        uid: ID
         website: String
-        updatedAt: String!
+        updatedAt: String
         description: String
-        school: String!
+        school: String
     }
 `;
 
 const getAllVisibleGroups = (user) => {
-    console.log("getAllVisibleGroups gets called");
-    // let group_ids = listGroups(user.id);
-    return knex.select().from('groups')/*.whereIn('id', group_ids)*/;
+
+    var group_ids =   listGroups(user.id).then(res => {
+        console.log(res.concat(['kes']));
+        return res.concat(['kes']);
+    });
+    var membered_groups = qb => qb.select().from('groups').whereIn('uid', ['faerix', 'data']);
+    return knex.with('membered_groups', membered_groups).distinct('groups.*').select().from('groups').innerJoin('membered_groups', 
+        function() {
+            this.on('groups.uid', '=', 'membered_groups.uid').orOn('groups.parentuid', '=', 'membered_groups.uid');
+        }
+    );
 };
     
-const getGroupIfVisible = (user, id) => {
-    console.log("getGroupIfVisible gets called");
-    return getAllVisibleGroups(user).where('id', id)/*.then(function(table) {
-        console.log(JSON.stringify(table,null,2))*/;
+const getGroupIfVisible = (user, uid) => {
+    return getAllVisibleGroups(user).where('groups.uid', uid).then(res => {
+        return res[0];
+    });
 };
 
 const resolvers = {
@@ -70,7 +78,7 @@ const resolvers = {
             return getAllVisibleGroups(context.user);
         },
         group: (obj, args, context) => {
-            return getGroupIfVisible(context.user, args.id);
+            return getGroupIfVisible(context.user, args.uid);
         }
     }
 };
@@ -96,7 +104,7 @@ export default schema;</code></pre>
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_index.js.html b/doc/src_index.js.html
index 5ba92747e9cb2d3c3d0cc063ce4e2f12ab83b2aa..4264146652db86bdc9acb82a36199c1564eadf2e 100644
--- a/doc/src_index.js.html
+++ b/doc/src_index.js.html
@@ -61,7 +61,7 @@ server.listen(port, () => {
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_ldap_ldap_auth.js.html b/doc/src_ldap_ldap_auth.js.html
index 192b0c5b5cdcb5b0025bc694193981f8903df960..860e8a8d87974d059365f0b826f83c08f8d45940 100644
--- a/doc/src_ldap_ldap_auth.js.html
+++ b/doc/src_ldap_ldap_auth.js.html
@@ -90,7 +90,7 @@ export default setupLdapAuth;
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_ldap_ldap_data.js.html b/doc/src_ldap_ldap_data.js.html
index c164c012660cb4636470e12eda635a745a6faf8b..93607e18a36f4e66a422ef677989a77177e4056e 100644
--- a/doc/src_ldap_ldap_data.js.html
+++ b/doc/src_ldap_ldap_data.js.html
@@ -63,7 +63,7 @@ var client = ldap.createClient({ url: config.ldap.server});
  * @arg {string} filter - Filtre logique de la recherche (format RFC2254)
  * @arg {Object} filter_dic - Dictionnaire qui associe les faux champs dans filter aux vraies valeurs pertinentes de la recherche
  * @arg {string[]} attributes - Liste des attributs qui figureront dans le résultat final
- * @return {string[]} Résultats de la recherche
+ * @return {Object} Résultats de la recherche ; soit une liste de valeurs d'attributs, soit une liste de dictionnaires si on veut plus d'un attribut (les clés du dictionnaire sont celles du LDAP) 
  */
 function rechercheLDAP(base, filter, filter_dic, attributes) {
     // Debug
@@ -88,9 +88,15 @@ function rechercheLDAP(base, filter, filter_dic, attributes) {
             } else {
                 // Dès que la recherche renvoit une entrée, on stocke les attributs qui nous intéresse
                 res.on('searchEntry', function(entry) {
-                    attributes.forEach((element) => {
-                        eval("vals.push(entry.object."+element+")");
-                    });
+                    // Cas un seul attribut où le résultat est une liste
+                    if (attributes.length == 1) { eval("vals.push(entry.object."+attributes[0]+")"); }
+                    // Cas plusieurs attributs donc résultat dictionnaire
+                    else {
+                        vals.push({});
+                        attributes.forEach((element) => {
+                            vals.slice(-1)[0][element]=eval("entry.object."+element+";");
+                        });
+                    }
                 });
                 // Si la recherche est finie on se déconnecte et on renvoit la liste
                 res.on('end', function(res) {
@@ -136,7 +142,7 @@ function listGroups2(uid) {
  */
 function listMembers(gid) {
     return new Promise(function(resolve, reject) {
-        resolve(rechercheLDAP(config.dn_groups, config.filter_id, { id: gid }, config.attributes_lm).then(res => res[0]));
+        resolve(rechercheLDAP(config.key_id+"="+gid+","+config.dn_groups, config.filter_id, { id: gid }, config.attributes_lm).then(res => res[0]));
     });
 }
 
@@ -148,7 +154,7 @@ function listMembers(gid) {
  */
 function listAdmins(gid) {
     return new Promise(function(resolve, reject) {
-        resolve(rechercheLDAP(config.key_al+"="+gid+","+config.dn_groups, config.filter_id, { id: gid }, config.attributes_al).then(res => res[0]));
+        resolve(rechercheLDAP(config.key_id+"="+gid+","+config.dn_groups, config.filter_id, { id: gid }, config.attributes_al).then(res => res[0]));
     });
 }
  
@@ -241,14 +247,14 @@ function TOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9="
         });
         // Debug
         //console.log(filter);
-        console.log(dic);
+        //console.log(dic);
 
         var candidatesList=[];
 
         // Interrogation LDAP et filtre de malade
         client.search(config.dn_users, { 
             scope: "sub",
-            attributes: config.search_attributes_tol,
+            attributes: config.attributes_all,
             filter: ldapEscape.filter(filter, dic)
         },
         function(err, res) {
@@ -258,10 +264,10 @@ function TOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9="
             } else {
                 // Toujours gestion différenciée début et fin
                 res.on('searchEntry', function(entry) {
-                    // De nouveau, iteration sur les valeurs recherchées et entrée dans la liste
-                    candidatesList.push([]);
+                    // De nouveau, iteration sur les valeurs recherchées et entrée dans la liste sous la forme d'un dictionnaire
+                    candidatesList.push({});
                     config.attributes_all.forEach((element) => {
-                        eval("candidatesList.slice(-1)[0].push(entry.object."+element+")");
+                        candidatesList.slice(-1)[0][element]=eval("entry.object."+element+";");
                     });
                 });
                 res.on('page', function(result, cb) {
@@ -286,7 +292,7 @@ function TOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9="
  * @return {boolean} `true` si la modification s'est bien déroulée, false sinon
  */
 function modifierLDAP(name, op, mod) {
-    // Debug
+    // Debug TBM
     //console.log(base);
     //console.log(operation);
     //console.log(modification);
@@ -305,15 +311,13 @@ function modifierLDAP(name, op, mod) {
     });
 }
 
-//TOL("","","","","","2016","","","ultimate","","","","").then(res => console.log(res));
-
 //modifierLDAP("uid=quentin.chevalier,ou=eleves,dc=frankiz,dc=net","replace", {"displayName": ["hawkspar"]}).then(res => console.log(res));
-rechercheLDAP("ou=eleves,dc=frankiz,dc=net","(displayName=${cn})",{ cn: "Sire hawkspar" }, ["uid"]).then(res => console.log(res));
+//rechercheLDAP("uid=quentin.chevalier,ou=eleves,dc=frankiz,dc=net","(displayName=${cn})",{ cn: "Sire hawkspar" }, ["jpegPhoto"]).then(res => console.log(res));
 
 /* Partage pour le reste du monde ; même remarque synthaxe que pour l'import
 export { listGroups, listMembers, TOL };*/
 
-/**/module.exports ={ listGroups, listMembers, TOL };
+/**/module.exports ={ listGroups, listMembers, listAdmins, rens, idTOL, TOL };
 </code></pre>
         </article>
     </section>
@@ -330,7 +334,7 @@ export { listGroups, listMembers, TOL };*/
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_server.js.html b/doc/src_server.js.html
index 2693daecb774082675311b94cdcfe398dda94810..d5b2f88a1ad2f6a4626ef6f0b2a71d18e07d8b5b 100644
--- a/doc/src_server.js.html
+++ b/doc/src_server.js.html
@@ -65,7 +65,8 @@ server.use('/graphql', bodyParser.json(), cors(),
         let uid;
 
         try {
-            uid = req.session.id;
+            uid = "anatole.romon";
+            //uid = req.session.id;
         } catch (err) {
             uid = "1";
         }
@@ -99,7 +100,7 @@ export default server;
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 15:55:14 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Mar 01 2018 17:00:05 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>