From fe5b208b1798889f4d19273a477e1174461f3dc7 Mon Sep 17 00:00:00 2001
From: Henri-Damien LAURENT <hdlaurent@afi-sa.fr>
Date: Tue, 19 Jul 2022 15:15:31 +0200
Subject: [PATCH] hotline#160253 : Users : Change in NeverLogged search

---
 VERSIONS_HOTLINE/160253                       |  1 +
 .../Class/User/SearchCriteria/NeverLogged.php |  9 ++--
 .../admin/controllers/UsersControllerTest.php | 41 ++++++++++++++++++-
 3 files changed, 47 insertions(+), 4 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/160253

diff --git a/VERSIONS_HOTLINE/160253 b/VERSIONS_HOTLINE/160253
new file mode 100644
index 00000000000..a83539839eb
--- /dev/null
+++ b/VERSIONS_HOTLINE/160253
@@ -0,0 +1 @@
+ - correctif #160253 : Utilisateurs: Les utilisateurs ayant des dates positionnées à 0000-00-00 sont aussi des utilisateurs qui n'ont jamais été connectés
\ No newline at end of file
diff --git a/library/Class/User/SearchCriteria/NeverLogged.php b/library/Class/User/SearchCriteria/NeverLogged.php
index 404072ffcd8..2d6bba571bf 100644
--- a/library/Class/User/SearchCriteria/NeverLogged.php
+++ b/library/Class/User/SearchCriteria/NeverLogged.php
@@ -21,6 +21,9 @@
 
 
 class Class_User_SearchCriteria_NeverLogged extends Class_SearchCriteria_Abstract {
+  const
+    EMPTY_DATE= "0000-00-00 00:00:00";
+
   protected
     $_name = 'never_logged';
 
@@ -40,14 +43,14 @@ class Class_User_SearchCriteria_NeverLogged extends Class_SearchCriteria_Abstrac
     if (!$this->_value)
       return true;
 
-    return $model->getLastLogin() == null;
+    return (!$model->getLastLogin())
+      || $model->getLastLogin() == static::EMPTY_DATE;
   }
 
 
   public function acceptSearchVisitor($visitor) {
     if (!$this->_value)
       return;
-
-    $visitor->addWhereParam('last_login is null');
+    $visitor->addWhereParam('last_login is null or last_login="'.static::EMPTY_DATE.'"');
   }
 }
diff --git a/tests/application/modules/admin/controllers/UsersControllerTest.php b/tests/application/modules/admin/controllers/UsersControllerTest.php
index 4fa25af4181..f91a6ab70eb 100644
--- a/tests/application/modules/admin/controllers/UsersControllerTest.php
+++ b/tests/application/modules/admin/controllers/UsersControllerTest.php
@@ -1602,7 +1602,6 @@ abstract class UsersControllerDoubleTestCase extends Admin_AbstractControllerTes
                     'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
                     'id_site' => 1,
                     'idabon' => '49',
-                    'last_login' => 0,
                     'ordreabon' => 2,
                     'last_login' => '2020-10-04']);
 
@@ -2470,4 +2469,44 @@ class Admin_UsersControllerEditModoBibTest extends Admin_AbstractControllerTestC
   public function formIdSIteOptionsShouldNotContainsWonderVille() {
     $this->assertXPathCount('//form//select[@id="id_site"]/option',2);
   }
+}
+
+
+
+
+class UsersControllerSearchNeverLoggedTest extends AbstractControllerTestCase {
+  protected $_users_model;
+
+  public function setUp() {
+    parent::setUp();
+    $this->fixture(Class_Bib::class,
+                   ['id' => 1,
+                    'libelle' => 'Majolieville'
+                   ]);
+
+    $this->fixture(Class_Users::class,
+                   ['id' => 2,
+                    'login' => 'Ret',
+                    'password' => 'urn',
+                    'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
+                    'id_site' => 1,
+                    'idabon' => '49',
+                    'last_login' => '0000-00-00 00:00:00',
+                    'ordreabon' => 1]);
+
+    $this->OnLoaderOfModel(Class_Users::class);
+    $this->postDispatch('/admin/users',['search_never_logged'=>1]);
+  }
+
+
+  /** @test */
+  public function queryOnUsersShouldSearchOnLastLoginNullOrLastLoginEmptyDate() {
+    $this->assertEquals([
+                       'order' => 'nom asc',
+                       'where' => '(last_login is null or last_login="0000-00-00 00:00:00") AND (role_level <= 6)',
+                       'limitPage' => [1, 20]
+                       ],
+                        Class_Users::getFirstAttributeForMethodCallAt('findAllBy',1)
+    );
+  }
 }
\ No newline at end of file
-- 
GitLab