Commit 323feb7bf264523098edf2eee200bedad651d638

Authored by Etienne Pallier
1 parent 03760d20
Exists in master and in 1 other branch dev

Nouvelle simplification de la logique des stats

=> (on utilise AppController.afterFilter() au lieu de
config/bootstrap.php et src/Routing/Filter/SessionTimeoutFilter.php)
=> par contre, ça gère pas bien le logout, mais c'est pas grave car
c'est rattrappé par le login suivant (qui fait memes stats que logout)

v4.106.7-3.7.9
CHANGES.txt
... ... @@ -134,6 +134,12 @@ Outre ces changements, voici d'autres changements importants :
134 134 ======= CHANGES =======
135 135  
136 136 -------
  137 +26/10/2020 v4.106.7-3.7.9
  138 + - (i) Nouvelle simplification de la logique des stats
  139 + => (on utilise AppController.afterFilter() au lieu de config/bootstrap.php et src/Routing/Filter/SessionTimeoutFilter.php)
  140 + => par contre, ça gère pas bien le logout, mais c'est pas grave car c'est rattrappé par le login suivant (qui fait memes stats que logout)
  141 +
  142 +-------
137 143 24/10/2020 v4.106.6-3.7.9
138 144 - (i) Grosse refactorisation et simplification de la logique des stats (UsersController => StatsTable)
139 145  
... ...
README.md
... ... @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes :
42 42  
43 43 --------------------------------------------------------------------------------------------
44 44  
45   -Date: 24/10/2020
46   -Version: 4.106.6-3.7.9
  45 +Date: 26/10/2020
  46 +Version: 4.106.7-3.7.9
47 47  
48 48  
49 49 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes)
... ...
config/bootstrap.php
... ... @@ -281,6 +281,11 @@ Type::build('datetime')
281 281 //Plugin::load('BootstrapUI');
282 282 Plugin::load('BootstrapUI', ['autoload' => true]);
283 283  
  284 +// Activer Stats via src/Routing/Filter/SessionTimeoutFilter.php
  285 +$SessionTimeoutON = false;
  286 +//$SessionTimeoutON = true;
  287 +
284 288 // (EP20201022) Pour gérer le timeout auto
  289 +if ($SessionTimeoutON)
285 290 DispatcherFactory::add('SessionTimeout');
286 291  
... ...
src/Controller/AppController.php
... ... @@ -2750,6 +2750,22 @@ class AppController extends Controller
2750 2750 // si l'user n'est pas loggé, on ne va pas plus loin
2751 2751 if ( ! isset($_SESSION['Auth']['User']) ) return true;
2752 2752  
  2753 + // STATS
  2754 + // - LOGIN
  2755 + //debug($this->a);
  2756 + if ($this->a == 'login') {
  2757 + $this->statsUpdateForCurrentUserWhen(null, 'sur login');
  2758 + }
  2759 + // - LOGOUT (marche pas, why ?...)
  2760 + elseif ($this->a == 'logout') {
  2761 + //debug("logout");
  2762 + $this->statsUpdateForCurrentUserWhen(null,'sur logout');
  2763 + //exit;
  2764 + }
  2765 + // - Toute autre action
  2766 + else
  2767 + (new UsersController())->statsUpdateForCurrentUserWhen(null, 'durant la session');
  2768 +
2753 2769 // pb avec QrCode : pas de $this->e, donc on évite
2754 2770 ////if ($this instanceof QrCodesController) return true;
2755 2771  
... ...
src/Controller/UsersController.php
... ... @@ -8,13 +8,17 @@ use Cake\I18n\FrozenDate;
8 8 use Cake\I18n\FrozenTime;
9 9 use Cake\ORM\Entity;
10 10  
  11 +// Activer Stats via src/Routing/Filter/SessionTimeoutFilter.php
  12 +const SessionTimeoutON = false;
  13 +//const SessionTimeoutON = true;
  14 +
11 15 /**
12 16 * Users Controller
13 17 *
14 18 * @property \App\Model\Table\UsersTable $Users
15 19 */
16   -class UsersController extends AppController
17   -{
  20 +class UsersController extends AppController {
  21 +
18 22  
19 23  
20 24 /*
... ... @@ -208,6 +212,7 @@ class UsersController extends AppController
208 212 ]
209 213 */
210 214  
  215 + if (SessionTimeoutON)
211 216 $this->statsUpdateForCurrentUserWhen(null, 'sur login');
212 217 //$this->statsUpdateForCurrentUserOnLogin();
213 218 //exit;
... ... @@ -224,6 +229,7 @@ class UsersController extends AppController
224 229 public function logout() {
225 230 //debug("LOGOUT !");
226 231 //debug($this->u);
  232 + if (SessionTimeoutON)
227 233 $this->statsUpdateForCurrentUserWhen(null,'sur logout');
228 234 //$this->statsUpdateForCurrentUserOnLogout();
229 235 //$this->Flash->success('You are now logged out.');
... ... @@ -277,6 +283,7 @@ class UsersController extends AppController
277 283 * au moment de l'événement $event_name
278 284 */
279 285 public function statsUpdateForCurrentUserWhen($session_user=null, $event_name) {
  286 + //debug("ici");
280 287 $user_id = ($event_name=='sur logout') ? $this->u->id : $this->_getCurrentUserEntityFromSession($session_user)->id;
281 288 //debug($user);
282 289 $this->Users->Stats->updateForUserWhen($user_id, $event_name);
... ...
src/Model/Table/StatsTable.php
... ... @@ -194,18 +194,25 @@ class StatsTable extends Table
194 194 $current_user_stat->connex_nb++;
195 195 }
196 196  
  197 + else { // Pendant la session OU BIEN au logout
  198 + $last_login_time = $current_user_stat->last_login_time;
  199 + // - on calcule le temps de connexion
  200 + $connex_duration = $now->diff($last_login_time);
  201 + $connex_duration = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s;
  202 + $current_user_stat->last_connex_dur = $connex_duration;
197 203 /*
198 204 * - PENDANT la session (à chaque action) ( == 'durant la session')
199 205 *
200   - * => on met à jour son temps de connexion
  206 + * => on met à jour son temps de connexion last_connex_dur
201 207 *
202 208 */
203   - elseif ($event_name == 'durant la session') {
  209 + if ($event_name == 'durant la session') {
204 210 // On met à jour le temps de connexion
205   - $connex_duration = $now->diff($current_user_stat->last_login_time);
  211 + ///$connex_duration = $now->diff($last_login_time);
206 212 //debug($connex_duration);
207 213 //exit;
208   - $current_user_stat->last_connex_dur = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s;
  214 + ///$current_user_stat->last_connex_dur = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s;
  215 + ///$current_user_stat->last_connex_dur = $connex_duration;
209 216 //debug($current_user_stat->last_connex_dur);
210 217 }
211 218  
... ... @@ -217,13 +224,9 @@ class StatsTable extends Table
217 224 *
218 225 */
219 226 else {
220   - $last_login_time = $current_user_stat->last_login_time;
221 227 // 1) On met à jour le champ last_logout_time
222 228 $current_user_stat->last_logout_time = $now;
223 229 // 2) On met à jour le temps de connexion total (cumulé)
224   - // - on calcule le temps de connexion
225   - $connex_duration = $now->diff($last_login_time);
226   - $connex_duration = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s;
227 230 //debug($last_login_time);
228 231 //debug($last_logout_time);
229 232 //debug($connex_dur_totation);
... ... @@ -233,6 +236,7 @@ class StatsTable extends Table
233 236 $current_user_stat->connex_dur_tot += $connex_duration;
234 237 //debug($current_user_stat->connex_dur_tot);
235 238 }
  239 + } // Pendant la session OU BIEN au logout
236 240  
237 241 // 3) On sauvegarde en table
238 242 $this->saveStat($current_user_stat, $event_name);
... ...