Commit 0065a652f65a8e6bc545a7af8a4ca6f984065539

Authored by Etienne Pallier
1 parent 2306e275
Exists in master and in 1 other branch dev

Vue Stats de connexion améliorée

- à trier anti-chrono
- supprimer menu haut gauche (new stats, list users, new user...)
- supprimer actions view/edit/delete

v5.2.12-3.7.9
CHANGELOG
... ... @@ -354,9 +354,11 @@ Commencer à implémenter le nouveau workflow v5 :
354 354  
355 355 *) TESTS !!!!
356 356  
  357 + *) Trop de mails envoyés !!
  358 +
357 359 *) Validation multiple ne marche plus
358 360  
359   - *) Mail "[LabInvent] Ajout de matériel(s)" => c'est quoi ?
  361 + *) Mail "[LabInvent] Ajout de matériel(s)" => c'est quoi ? ==> voir message de log associé
360 362 (quelle diff avec "[LabInvent] Ajout d'un matériel" ??)
361 363  
362 364 *) Les tests doivent se faire avec la config par défaut (et non pas celle spécifique du labo)
... ... @@ -364,8 +366,7 @@ Commencer à implémenter le nouveau workflow v5 :
364 366 *) Ajouter test Commande (avec devis joint !)
365 367  
366 368 *) Stats de connexion
367   - - à trier anti-chrono
368   - - supprimer menu haut gauche (new stats, list users, new user...) ???
  369 + - le tri des autres colonnes ne marche plus
369 370  
370 371 *)
371 372 TBO ou ARCHIVED (= validated) : ne pas autoriser edit ou delete des docs attachés
... ... @@ -422,6 +423,13 @@ Commencer à implémenter le nouveau workflow v5 :
422 423 ======= CHANGES =======
423 424  
424 425 -------
  426 +16/09/2021 v5.2.12-3.7.9
  427 + - (e) Stats de connexion
  428 + - à trier anti-chrono
  429 + - supprimer menu haut gauche (new stats, list users, new user...) ???
  430 + - supprimer actions view/edit/delete
  431 +
  432 +-------
425 433 16/09/2021 v5.2.11-3.7.9
426 434 - Bugfix bug sur 1ère connexion d'un nouvel utilisateur
427 435 - Cache Ldap (table users) forcé pour éviter ce bug
... ...
README.md
... ... @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes :
53 53 --------------------------------------------------------------------------------------------
54 54  
55 55 Date: 16/09/2021
56   -Version: v5.2.11-3.7.9
  56 +Version: v5.2.12-3.7.9
57 57  
58 58  
59 59  
... ...
src/Controller/AppController.php
... ... @@ -264,85 +264,6 @@ class AppController extends Controller
264 264 ];
265 265 */
266 266  
267   -
268   -
269   -
270   -
271   - // (OLD AVIRER) EP 08/2017
272   - // protected $easyACL = array(
273   - const OLD_easyACL = array(
274   -
275   - /**
276   - * Default ACL for ALL (logged) users
277   - *
278   - * Les actions non mentionnées sont accessibles à tous (par défaut),
279   - * exemple 'find', 'index'...
280   - * Ces default ACL peuvent être surchargées pour un profil précis
281   - * (par exemple pour 'USER' qui est plus restreint)
282   - */
283   - // 'ALL' => array (
284   - 'DEFAULT' => array(
285   - // 'action' => 'condition for execution' (= 'Y', 'N', or '<condition>'),
286   - // with <condition> like "'field name' == 'value'"
287   - // !!! Used for test, DO NOT REMOVE : !!!
288   - 'action_CAS4_Y' => 'Y',
289   - 'action_CAS4_N' => 'N'
290   - // YOUR RULES :
291   - // CRUD actions :
292   - // 'edit' => 'N', // update
293   - // 'delete' => 'N',
294   - ),
295   -
296   - // Ajoute des ACL plus spécifiques (ci-dessus) pour le profil USER qui est plus restreint
297   - // Les actions absentes ne sont pas surchargées (elles sont exécutées selon les conditions définies pour 'ALL')
298   - 'USER' => array(
299   - // !!! Used for test, DO NOT REMOVE : !!!
300   - 'action_CAS3_Y' => 'Y',
301   - 'action_CAS3_N' => 'N',
302   - // YOUR RULES :
303   - // CRUD actions
304   - 'add' => 'Y', // C
305   - 'index' => 'Y', // R all
306   - 'view' => 'Y', // R one
307   - // 'edit' => 'N', // U
308   - 'edit' => 'is_creator', // is_creator = (nom_createur == CURRENT_USER_NAME)
309   - 'delete' => 'N', // D
310   - // OTHER actions
311   - 'find' => 'Y' // create
312   - /*
313   - * ceci n'a aucun sens car l'action sur le modèle "Pages" s'appelle toujours "display" (et non pas tools, infos, ou printers...)
314   - * 'tools' => 'N',
315   - * 'infos' => 'N',
316   - * 'printers' => 'N',
317   - */
318   - ),
319   -
320   - // Surcharge des ACL par défaut (ci-dessus) pour le profil RESPONSABLE qui est plus restreint
321   - // Les actions absentes ne sont pas surchargées (elles sont exécutées selon les conditions définies pour 'ALL')
322   - 'RESPONSABLE' => array(),
323   -
324   - // Surcharge des ACL par défaut (ci-dessus) pour le profil ADMIN
325   - 'ADMIN' => array(
326   - // 'add' => 'Y', // create
327   - 'edit' => 'Y' // update
328   - // 'delete' => 'Y', // update
329   - ),
330   -
331   - /*
332   - // Surcharge des ACL par défaut (ci-dessus) pour le profil ADMINPLUS
333   - 'ADMINPLUS' => array(
334   - // 'edit' => 'Y', // update
335   - ),
336   - */
337   -
338   - // Surcharge des ACL par défaut (ci-dessus) pour le profil SUPERADMIN
339   - 'SUPERADMIN' => array(
340   - // 'add' => 'Y', // create
341   - // 'edit' => 'Y', // update
342   - 'delete' => 'Y'
343   - )
344   - );
345   - // $easyACL
346 267  
347 268 // Valeurs par défaut pour TOUS les controleurs
348 269 //const actionNounAndPastVerbs = [
... ...
src/Controller/StatsController.php
... ... @@ -22,7 +22,7 @@ class StatsController extends AppController
22 22 $this->paginate = [
23 23 'contain' => ['Users']
24 24 ];
25   - $stats = $this->paginate($this->Stats);
  25 + $stats = $this->paginate($this->Stats)->sortBy('last_login_time');
26 26  
27 27 $this->set(compact('stats'));
28 28 }
... ...
src/Controller/UsersController.php
... ... @@ -12,6 +12,7 @@ use Cake\ORM\Entity;
12 12 const SessionTimeoutON = false;
13 13 //const SessionTimeoutON = true;
14 14  
  15 +// DEBUG temporaire, uniquement pour ce fichier (module level)
15 16 //const DEBUG=true;
16 17 const DEBUG=false;
17 18  
... ... @@ -208,7 +209,10 @@ class UsersController extends AppController {
208 209 $user['userpassword'] = $pass;
209 210 //debug($user);
210 211 }
211   - /* Voici ce que contient $user en mode fakeldap :
  212 + /* Voici ce que contient $user :
  213 +
  214 + - en mode fakeldap :
  215 +
212 216 [
213 217 'sn' => [
214 218 (int) 0 => 'Pallier'
... ... @@ -226,6 +230,59 @@ class UsersController extends AppController {
226 230 (int) 0 => 'mot-de-passe-crypté'
227 231 ]
228 232 ]
  233 +
  234 + - en mode vrai ldap (IRAP) :
  235 +
  236 + [
  237 + 'cn' => [
  238 + 'count' => (int) 1,
  239 + (int) 0 => 'Teddy Bai'
  240 + ],
  241 + (int) 0 => 'cn',
  242 + 'mail' => [
  243 + 'count' => (int) 1,
  244 + (int) 0 => 'no_mail'
  245 + ],
  246 + (int) 1 => 'mail',
  247 + ...
  248 + 'uid' => [
  249 + 'count' => (int) 1,
  250 + (int) 0 => 'tbai'
  251 + ],
  252 + (int) 7 => 'uid',
  253 + 'sn' => [
  254 + 'count' => (int) 1,
  255 + (int) 0 => 'Bai'
  256 + ],
  257 + (int) 8 => 'sn',
  258 + 'givenname' => [
  259 + 'count' => (int) 1,
  260 + (int) 0 => 'Teddy'
  261 + ],
  262 + (int) 9 => 'givenname',
  263 + 'arrivaldate' => [
  264 + 'count' => (int) 1,
  265 + (int) 0 => '02/11/2020'
  266 + ],
  267 + (int) 13 => 'arrivaldate',
  268 + 'birthday' => [
  269 + 'count' => (int) 1,
  270 + (int) 0 => '29/05/1991'
  271 + ],
  272 + (int) 14 => 'birthday',
  273 + 'title' => [
  274 + 'count' => (int) 1,
  275 + (int) 0 => 'M'
  276 + ],
  277 + (int) 19 => 'title',
  278 + 'site' => [
  279 + 'count' => (int) 1,
  280 + (int) 0 => 'Roche'
  281 + ],
  282 + (int) 20 => 'site',
  283 + ...
  284 + 'dn' => 'uid=tbai,ou=users,dc=irap,dc=omp,dc=eu'
  285 + ]
229 286 */
230 287  
231 288 ///if (SessionTimeoutON)
... ... @@ -360,9 +417,82 @@ class UsersController extends AppController {
360 417 //debug($all_users);
361 418 for ($i = 0; $i < 2; $i++) debug($all_users[$i]);
362 419 throw new \ErrorException("Pas de user trouvé dans la table users pour 'username'=$user_login");
363   - }
  420 + /*
  421 +
  422 + Voici ce qui est affiché pour $all_users :
  423 +
  424 + object(App\Model\Entity\User) {
  425 + 'id' => (int) 1,
  426 + 'created' => null,
  427 + 'modified' => object(Cake\I18n\FrozenTime) {
  428 +
  429 + 'time' => '2019-06-06T14:48:42+02:00',
  430 + 'timezone' => 'Europe/Paris',
  431 + 'fixedNowTime' => false
  432 + },
  433 + 'nom' => 'Hillembrand Cedric',
  434 + 'username' => 'chillembrand',
  435 + 'email' => 'Cedric.Hillembrand@...',
  436 + 'role' => 'Super Administrateur',
  437 + 'groupes_metier_id' => (int) 3,
  438 + 'is_resp_groupes_metier' => false,
  439 + 'password' => null,
  440 + 'groupes_thematique_id' => null,
  441 + 'is_resp_groupes_thematique' => false,
  442 + 'sur_categorie_id' => null,
  443 + '[new]' => false,
  444 + '[accessible]' => [
  445 + '*' => true,
  446 + 'id' => false
  447 + ],
  448 + '[dirty]' => [],
  449 + '[original]' => [],
  450 + '[virtual]' => [],
  451 + '[hasErrors]' => false,
  452 + '[errors]' => [],
  453 + '[invalid]' => [],
  454 + '[repository]' => 'Users'
  455 +
  456 + }
  457 +
  458 + object(App\Model\Entity\User) {
  459 +
  460 + 'id' => (int) 5,
  461 + 'created' => null,
  462 + 'modified' => object(Cake\I18n\FrozenTime) {
  463 + 'time' => '2019-06-06T14:48:43+02:00',
  464 + 'timezone' => 'Europe/Paris',
  465 + 'fixedNowTime' => false
  466 + },
  467 + 'nom' => 'Pallier Etienne',
  468 + 'username' => 'epallier',
  469 + 'email' => 'Etienne.Pallier@...',
  470 + 'role' => 'Super Administrateur',
  471 + 'groupes_metier_id' => (int) 3,
  472 + 'is_resp_groupes_metier' => false,
  473 + 'password' => null,
  474 + 'groupes_thematique_id' => null,
  475 + 'is_resp_groupes_thematique' => false,
  476 + 'sur_categorie_id' => null,
  477 + '[new]' => false,
  478 + '[accessible]' => [
  479 + '*' => true,
  480 + 'id' => false
  481 + ],
  482 + '[dirty]' => [],
  483 + '[original]' => [],
  484 + '[virtual]' => [],
  485 + '[hasErrors]' => false,
  486 + '[errors]' => [],
  487 + '[invalid]' => [],
  488 + '[repository]' => 'Users'
  489 + }
  490 + */
  491 +
  492 + } // $user is null
  493 +
364 494 return $user;
365   - }
  495 + } // _getCurrentUserEntityFromSession()
366 496  
367 497  
368 498 /*
... ...
src/Model/Table/LdapConnectionsTable.php
... ... @@ -16,7 +16,7 @@ const LDAP_CACHE_ALWAYS_ON = true;
16 16 // - NON => le CACHE LDAP (table users) n'est utilisé QUE si l'option ldap_cached est activée dans la config
17 17 //const LDAP_CACHE_ALWAYS_ON = false;
18 18  
19   -// DEBUG temporaire, uniquement pour ce fichier (module)
  19 +// DEBUG temporaire, uniquement pour ce fichier (module level)
20 20 //const DEBUG = true;
21 21 const DEBUG = false;
22 22  
... ...
src/Template/Stats/index.ctp
... ... @@ -53,6 +53,7 @@ echo &quot;&lt;br&gt;&quot;;echo &quot;&lt;br&gt;&quot;;
53 53  
54 54  
55 55 ?>
  56 +<!--
56 57 <nav class="large-3 medium-4 columns" id="actions-sidebar">
57 58 <ul class="side-nav">
58 59 <li class="heading"><?= __('Actions') ?></li>
... ... @@ -61,6 +62,7 @@ echo &quot;&lt;br&gt;&quot;;echo &quot;&lt;br&gt;&quot;;
61 62 <li><?= $this->Html->link(__('New User'), ['controller' => 'Users', 'action' => 'add']) ?></li>
62 63 </ul>
63 64 </nav>
  65 +-->
64 66 <div class="stats index large-9 medium-8 columns content">
65 67 <h3><?= __('Stats') ?></h3>
66 68 <table cellpadding="0" cellspacing="0">
... ... @@ -74,7 +76,9 @@ echo &quot;&lt;br&gt;&quot;;echo &quot;&lt;br&gt;&quot;;
74 76 <th scope="col"><?= $this->Paginator->sort('connex_dur_tot', "Temps connexion cumulé (mn)") ?></th>
75 77 <th scope="col"><?= $this->Paginator->sort('connex_nb', "Nb connexions") ?></th>
76 78 <th scope="col"><?= "Durée connexion moyenne (sur année)" ?></th>
  79 + <!--
77 80 <th scope="col" class="actions"><?= __('Actions') ?></th>
  81 + -->
78 82 </tr>
79 83 </thead>
80 84 <tbody>
... ... @@ -113,11 +117,13 @@ echo &quot;&lt;br&gt;&quot;;echo &quot;&lt;br&gt;&quot;;
113 117 ?>
114 118 <td><?="$h h $m mn $s sec"?></td>
115 119  
  120 + <!--
116 121 <td class="actions">
117 122 <?= $this->Html->link(__('View'), ['action' => 'view', $stat->year,$stat->user_id]) ?>
118 123 <?= $this->Html->link(__('Edit'), ['action' => 'edit', $stat->year,$stat->user_id]) ?>
119 124 <?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $stat->year,$stat->user_id], ['confirm' => __('Are you sure you want to delete # {0}?', $stat->year)]) ?>
120 125 </td>
  126 + -->
121 127 </tr>
122 128 <?php endforeach; ?>
123 129 </tbody>
... ...