diff --git a/CHANGES.txt b/CHANGES.txt index b29e289..41597be 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -134,6 +134,12 @@ Outre ces changements, voici d'autres changements importants : ======= CHANGES ======= ------- +26/10/2020 v4.106.7-3.7.9 + - (i) 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) + +------- 24/10/2020 v4.106.6-3.7.9 - (i) Grosse refactorisation et simplification de la logique des stats (UsersController => StatsTable) diff --git a/README.md b/README.md index 4ecc494..27ac078 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- -Date: 24/10/2020 -Version: 4.106.6-3.7.9 +Date: 26/10/2020 +Version: 4.106.7-3.7.9 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) diff --git a/config/bootstrap.php b/config/bootstrap.php index 12f7947..e48e327 100755 --- a/config/bootstrap.php +++ b/config/bootstrap.php @@ -281,6 +281,11 @@ Type::build('datetime') //Plugin::load('BootstrapUI'); Plugin::load('BootstrapUI', ['autoload' => true]); +// Activer Stats via src/Routing/Filter/SessionTimeoutFilter.php +$SessionTimeoutON = false; +//$SessionTimeoutON = true; + // (EP20201022) Pour gérer le timeout auto +if ($SessionTimeoutON) DispatcherFactory::add('SessionTimeout'); diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 68d9e18..4956ade 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -2750,6 +2750,22 @@ class AppController extends Controller // si l'user n'est pas loggé, on ne va pas plus loin if ( ! isset($_SESSION['Auth']['User']) ) return true; + // STATS + // - LOGIN + //debug($this->a); + if ($this->a == 'login') { + $this->statsUpdateForCurrentUserWhen(null, 'sur login'); + } + // - LOGOUT (marche pas, why ?...) + elseif ($this->a == 'logout') { + //debug("logout"); + $this->statsUpdateForCurrentUserWhen(null,'sur logout'); + //exit; + } + // - Toute autre action + else + (new UsersController())->statsUpdateForCurrentUserWhen(null, 'durant la session'); + // pb avec QrCode : pas de $this->e, donc on évite ////if ($this instanceof QrCodesController) return true; diff --git a/src/Controller/UsersController.php b/src/Controller/UsersController.php index 2d89f94..045aff7 100755 --- a/src/Controller/UsersController.php +++ b/src/Controller/UsersController.php @@ -8,13 +8,17 @@ use Cake\I18n\FrozenDate; use Cake\I18n\FrozenTime; use Cake\ORM\Entity; +// Activer Stats via src/Routing/Filter/SessionTimeoutFilter.php +const SessionTimeoutON = false; +//const SessionTimeoutON = true; + /** * Users Controller * * @property \App\Model\Table\UsersTable $Users */ -class UsersController extends AppController -{ +class UsersController extends AppController { + /* @@ -208,6 +212,7 @@ class UsersController extends AppController ] */ + if (SessionTimeoutON) $this->statsUpdateForCurrentUserWhen(null, 'sur login'); //$this->statsUpdateForCurrentUserOnLogin(); //exit; @@ -224,6 +229,7 @@ class UsersController extends AppController public function logout() { //debug("LOGOUT !"); //debug($this->u); + if (SessionTimeoutON) $this->statsUpdateForCurrentUserWhen(null,'sur logout'); //$this->statsUpdateForCurrentUserOnLogout(); //$this->Flash->success('You are now logged out.'); @@ -277,6 +283,7 @@ class UsersController extends AppController * au moment de l'événement $event_name */ public function statsUpdateForCurrentUserWhen($session_user=null, $event_name) { + //debug("ici"); $user_id = ($event_name=='sur logout') ? $this->u->id : $this->_getCurrentUserEntityFromSession($session_user)->id; //debug($user); $this->Users->Stats->updateForUserWhen($user_id, $event_name); diff --git a/src/Model/Table/StatsTable.php b/src/Model/Table/StatsTable.php index 0dc46c6..5fd4b80 100644 --- a/src/Model/Table/StatsTable.php +++ b/src/Model/Table/StatsTable.php @@ -194,18 +194,25 @@ class StatsTable extends Table $current_user_stat->connex_nb++; } + else { // Pendant la session OU BIEN au logout + $last_login_time = $current_user_stat->last_login_time; + // - on calcule le temps de connexion + $connex_duration = $now->diff($last_login_time); + $connex_duration = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s; + $current_user_stat->last_connex_dur = $connex_duration; /* * - PENDANT la session (à chaque action) ( == 'durant la session') * - * => on met à jour son temps de connexion + * => on met à jour son temps de connexion last_connex_dur * */ - elseif ($event_name == 'durant la session') { + if ($event_name == 'durant la session') { // On met à jour le temps de connexion - $connex_duration = $now->diff($current_user_stat->last_login_time); + ///$connex_duration = $now->diff($last_login_time); //debug($connex_duration); //exit; - $current_user_stat->last_connex_dur = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s; + ///$current_user_stat->last_connex_dur = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s; + ///$current_user_stat->last_connex_dur = $connex_duration; //debug($current_user_stat->last_connex_dur); } @@ -217,13 +224,9 @@ class StatsTable extends Table * */ else { - $last_login_time = $current_user_stat->last_login_time; // 1) On met à jour le champ last_logout_time $current_user_stat->last_logout_time = $now; // 2) On met à jour le temps de connexion total (cumulé) - // - on calcule le temps de connexion - $connex_duration = $now->diff($last_login_time); - $connex_duration = $connex_duration->h*3600 + $connex_duration->i*60 + $connex_duration->s; //debug($last_login_time); //debug($last_logout_time); //debug($connex_dur_totation); @@ -233,6 +236,7 @@ class StatsTable extends Table $current_user_stat->connex_dur_tot += $connex_duration; //debug($current_user_stat->connex_dur_tot); } + } // Pendant la session OU BIEN au logout // 3) On sauvegarde en table $this->saveStat($current_user_stat, $event_name); -- libgit2 0.21.2