From ddc51bd9561690dbec52b2cebdeb3cd482b8c3fc Mon Sep 17 00:00:00 2001
From: efalcy <efalcy@afi-sa.fr>
Date: Wed, 26 Oct 2016 17:45:52 +0200
Subject: [PATCH] hotline #47906 : refacto cosmogramme import abonne

---
 cosmogramme/php/classes/classe_abonne.php     | 15 +++--------
 library/Class/Users.php                       | 27 +++++++++++++++++++
 library/ZendAfi/Auth/Adapter/CommSigb.php     | 15 ++---------
 .../ZendAfi/Auth/Adapter/AuthCommSigbTest.php |  2 +-
 4 files changed, 33 insertions(+), 26 deletions(-)

diff --git a/cosmogramme/php/classes/classe_abonne.php b/cosmogramme/php/classes/classe_abonne.php
index bbd292c9ee5..4ed646651f6 100644
--- a/cosmogramme/php/classes/classe_abonne.php
+++ b/cosmogramme/php/classes/classe_abonne.php
@@ -157,18 +157,9 @@ class abonne
 
 
 	protected function findMatchingUserInDB($data) {
-		if (isset($data['ID_SIGB'])
-				&& ($data['ID_SIGB'])
-				&& ($user = Class_Users::findFirstBy(['id_sigb' => $data['ID_SIGB']])))
-			return $user;
-
-		$params_existing_user = ['login'=>$data["LOGIN"],
-														 'id_site'=>$data['ID_SITE']];
-
-		if (isset($data['ORDREABON']))
-			$params_existing_user['ordreabon'] = $data['ORDREABON'];
-
-		return Class_Users::findFirstBy($params_existing_user);
+    $user = Class_Users::newInstance($data);
+    $bib = Class_IntBib::find($data['ID_SITE']);
+    return Class_Users::findMatchingPatron($user,$bib);
 	}
 
 
diff --git a/library/Class/Users.php b/library/Class/Users.php
index f947c7eb02d..a17aa1ec544 100644
--- a/library/Class/Users.php
+++ b/library/Class/Users.php
@@ -42,6 +42,33 @@ class UsersLoader extends Storm_Model_Loader {
 
   }
 
+  public function findMatchingPatron($patron,$bib) {
+    if (!$bib || !$patron)
+      return null;
+
+    if ($patron->getOrdreabon() &&
+        $user = Class_Users::findFirstBy(['login' => $patron->getLogin(),
+                                          'ordreabon' => $patron->getOrdreabon(),
+                                          'id_site' => $bib->getIdBib()]))
+      return $user;
+
+    if ($user = Class_Users::findFirstBy(['login' => $patron->getLogin(),
+                                          'id_sigb' => $patron->getIdSigb(),
+                                          'id_site' => $bib->getIdBib()]))
+      return $user;
+
+    if ($user = Class_Users::findFirstBy(['login' => $patron->getLogin(),
+                                          'id_site' => $bib->getIdBib()]))
+      return $user;
+
+    if ($patron->getIdSigb() &&
+        $user = Class_Users::findFirstBy(['id_site' => $bib->getIdBib(),
+                                          'id_sigb' => $patron->getIdSigb()]))
+      return $user;
+
+    return null;
+
+  }
 
   public function findAllLike($search, $by_right = null, $limit = 500) {
     $sql_template = 'select bib_admin_users.* from bib_admin_users ';
diff --git a/library/ZendAfi/Auth/Adapter/CommSigb.php b/library/ZendAfi/Auth/Adapter/CommSigb.php
index d3d36114c9a..d05f5ee0c1e 100644
--- a/library/ZendAfi/Auth/Adapter/CommSigb.php
+++ b/library/ZendAfi/Auth/Adapter/CommSigb.php
@@ -75,18 +75,8 @@ class ZendAfi_Auth_Adapter_CommSigb implements Zend_Auth_Adapter_Interface {
 
     if (!$this->_bib)
       return $new_user;
-
-    if ($user = Class_Users::findFirstBy(['login' => $user_from_sigb->getLogin(),
-                                          'id_sigb' => $user_from_sigb->getIdSigb(),
-                                          'id_site' => $this->_bib->getIdBib()]))
-      return $user;
-
-    if ($user = Class_Users::findFirstBy(['login' => $user_from_sigb->getLogin(),
-                                          'id_site' => $this->_bib->getIdBib()]))
-      return $user;
-
-    if ($user = Class_Users::findFirstBy(['id_site' => $this->_bib->getIdBib(),
-                                          'id_sigb' => $user_from_sigb->getIdSigb()]))
+    xdebug_break();
+    if ($user = Class_Users::findMatchingPatron($user_from_sigb, $this->_bib))
       return $user;
 
     return $new_user;
@@ -132,7 +122,6 @@ class ZendAfi_Auth_Adapter_CommSigb implements Zend_Auth_Adapter_Interface {
 
   public function authResult($user) {
     $result = new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $this->_identity);
-
     if(!$user)
       return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND, $this->_identity);
 
diff --git a/tests/library/ZendAfi/Auth/Adapter/AuthCommSigbTest.php b/tests/library/ZendAfi/Auth/Adapter/AuthCommSigbTest.php
index 561c2cf116b..b498932b0eb 100644
--- a/tests/library/ZendAfi/Auth/Adapter/AuthCommSigbTest.php
+++ b/tests/library/ZendAfi/Auth/Adapter/AuthCommSigbTest.php
@@ -315,7 +315,7 @@ class AuthCommSigbSuccessfullAuthenticationWithExistingFamilleUserTest extends A
 
   /** @test */
   public function zorkGirlShouldBeAbonneSIGB() {
-    $this->assertTrue($this->_zork_girl->isAbonne());
+    $this->assertTrue(Class_Users::find(85)->isAbonne());
   }
 
 }
-- 
GitLab