Commit 0065a652f65a8e6bc545a7af8a4ca6f984065539
1 parent
2306e275
Exists in
master
and in
1 other branch
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
Showing
7 changed files
with
153 additions
and
88 deletions
Show diff stats
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
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 "<br>";echo "<br>"; |
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 "<br>";echo "<br>"; |
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 "<br>";echo "<br>"; |
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 "<br>";echo "<br>"; |
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> | ... | ... |