From a0a81d9702a258cc5e6b4cd8e3874ea8ada614f7 Mon Sep 17 00:00:00 2001
From: Laurent Laffont <llaffont@afi-sa.fr>
Date: Tue, 30 Jun 2020 10:40:46 +0200
Subject: [PATCH] hotline #113526 Dynix : library mails now configurable

---
 cosmogramme/VERSIONS_HOTLINE/113526           |  1 +
 cosmogramme/php/fonctions/objets_saisie.php   |  7 +++++-
 library/Class/WebService/SIGB/Abstract.php    | 13 ++++++++++-
 library/Class/WebService/SIGB/Dynix.php       |  6 +++--
 .../Class/WebService/SIGB/Dynix/Service.php   | 23 +++++++------------
 library/Class/WebService/SIGB/Koha.php        | 15 ++----------
 tests/library/Class/CommSigbTest.php          | 11 +++++++--
 .../Class/WebService/SIGB/DynixTest.php       |  9 +++++---
 8 files changed, 48 insertions(+), 37 deletions(-)
 create mode 100644 cosmogramme/VERSIONS_HOTLINE/113526

diff --git a/cosmogramme/VERSIONS_HOTLINE/113526 b/cosmogramme/VERSIONS_HOTLINE/113526
new file mode 100644
index 00000000000..53f6b66a5d8
--- /dev/null
+++ b/cosmogramme/VERSIONS_HOTLINE/113526
@@ -0,0 +1 @@
+ - ticket #113526 : SIGB Dynix : Cosmogramme : rend disponible la configuration des mails à envoyer aux différentes bibliothèques lors de la réservation d'un documente disponible
\ No newline at end of file
diff --git a/cosmogramme/php/fonctions/objets_saisie.php b/cosmogramme/php/fonctions/objets_saisie.php
index 5a9f4724fd7..9f87adcdc0e 100644
--- a/cosmogramme/php/fonctions/objets_saisie.php
+++ b/cosmogramme/php/fonctions/objets_saisie.php
@@ -157,7 +157,12 @@ function getBlocsParams($id_bib, $type, $valeurs) {
       $champs_params[0] = ['url_serveur', 'catalogue_web', 'reserver_retrait_bib_abonne'];
 
     if ($clef == Class_IntBib::COM_DYNIX)
-      $champs_params[0] = ['url_serveur', 'client_id'];
+      $champs_params[0] = ['url_serveur',
+                           'client_id',
+                           ['mails_bib' => function($id, $valeur)
+                             {
+                               return getTextArea($id, $valeur, 60, 20);
+                             }]];
 
     if ($clef == Class_IntBib::COM_Z3950)
       $champs_params[0] = ['url_serveur', 'login', 'password', 'nom_base'];
diff --git a/library/Class/WebService/SIGB/Abstract.php b/library/Class/WebService/SIGB/Abstract.php
index f762489f3a6..0e541c7630a 100644
--- a/library/Class/WebService/SIGB/Abstract.php
+++ b/library/Class/WebService/SIGB/Abstract.php
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
  * along with BOKEH; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 class Class_WebService_SIGB_Abstract {
   protected static $service;
@@ -40,5 +40,16 @@ class Class_WebService_SIGB_Abstract {
   public static function reset() {
     static::$service = null;
   }
+
+
+  public static function decodeMapping($str_codif) {
+    $codifs = [];
+    $lines = array_filter(explode("\n", trim($str_codif)));
+    foreach($lines as $line) {
+      $code_libelle = explode(':', $line);
+      $codifs[trim($code_libelle[0])] = trim($code_libelle[1]);
+    }
+    return $codifs;
+  }
 }
 ?>
\ No newline at end of file
diff --git a/library/Class/WebService/SIGB/Dynix.php b/library/Class/WebService/SIGB/Dynix.php
index dd79e7d4a4c..26de2af5e92 100644
--- a/library/Class/WebService/SIGB/Dynix.php
+++ b/library/Class/WebService/SIGB/Dynix.php
@@ -16,11 +16,13 @@
  *
  * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
  * along with BOKEH; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 class Class_WebService_SIGB_Dynix extends Class_WebService_SIGB_Abstract {
   public static function getService($params){
-    return parent::getService($params)->setClientId($params['client_id']);
+    return parent::getService($params)
+      ->setClientId($params['client_id'])
+      ->setMailsBib(static::decodeMapping($params['mails_bib']));
   }
 }
 
diff --git a/library/Class/WebService/SIGB/Dynix/Service.php b/library/Class/WebService/SIGB/Dynix/Service.php
index 53d23751845..097d92232c9 100644
--- a/library/Class/WebService/SIGB/Dynix/Service.php
+++ b/library/Class/WebService/SIGB/Dynix/Service.php
@@ -20,21 +20,8 @@
  */
 class Class_Webservice_SIGB_Dynix_Service extends Class_WebService_SIGB_AbstractRESTService {
   protected $_client_id;
-  protected $_mail_bib = [
-      'ALFAX1'=>'bibliotheque.alfortville.annexe@agglo-plainecentrale94.fr',
-      'ALFMEDA'=>'malfortville@agglo-plainecentrale94.fr',
-      'CRETBLE'=>'biblibleuets@agglo-plainecentrale94.fr',
-      'CRETMES'=>'bibliotheque.creteil.biblimesly@agglo-plainecentrale94.fr',
-      'CRETBUS'=>'bibliotheque.creteil.bibliobus@agglo-plainecentrale94.fr',
-      'CRETMEC'=>'bibliotheque.creteil.meches@agglo-plainecentrale94.fr',
-      'CRETDOY'=>'mediatheque.creteil.abbaye@agglo-plainecentrale94.fr',
-      'ENMDAD'=>'',
-      'CRETHAB'=>'medialudo.creteil@gpsea.fr',
-      'CRETMAC'=>'mediabus@gpsea.fr',
-      'CRETMUL'=>'',
-      'CRETRES'=>'bibliotheque.creteil.servicesinternes@agglo-plainecentrale94.fr',
-      'CRETVIL'=>'mediatheque.creteil.village@agglo-plainecentrale94.fr',
-      'LB'=>'bibliotheque.limeilbrevannes@agglo-plainecentrale94.fr'];
+  protected $_mail_bib = [];
+
 
   /**
    * @param string $server_root
@@ -47,6 +34,12 @@ class Class_Webservice_SIGB_Dynix_Service extends Class_WebService_SIGB_Abstract
   }
 
 
+  public function setMailsBib($mails_bib) {
+    $this->_mail_bib = $mails_bib;
+    return $this;
+  }
+
+
   public function setClientId($client_id) {
     $this->_client_id = $client_id;
     return $this;
diff --git a/library/Class/WebService/SIGB/Koha.php b/library/Class/WebService/SIGB/Koha.php
index ec4d2f1d6cd..9f6891a1b38 100644
--- a/library/Class/WebService/SIGB/Koha.php
+++ b/library/Class/WebService/SIGB/Koha.php
@@ -50,8 +50,8 @@ class Class_WebService_SIGB_Koha {
       $service = $service_class::getService($params);
 
       $service
-        ->setCodificationDisponibilites(static::decodeMapping($params['Codification_disponibilites']))
-        ->setWithdrawnMapping(static::decodeMapping($params['withdrawn_mapping']))
+        ->setCodificationDisponibilites(Class_WebService_SIGB_Abstract::decodeMapping($params['Codification_disponibilites']))
+        ->setWithdrawnMapping(Class_WebService_SIGB_Abstract::decodeMapping($params['withdrawn_mapping']))
         ->setGroupedHoldsITypes(array_filter(explode("\n", $params['grouped_holds_itypes'])))
         ->setBundledHoldsMinimalDuration($params['bundled_holds_minimal_duration'])
         ->setBundledHoldsMaximalDuration($params['bundled_holds_maximal_duration']);;
@@ -63,17 +63,6 @@ class Class_WebService_SIGB_Koha {
   }
 
 
-  public static function decodeMapping($str_codif) {
-    $codifs = [];
-    $lines = array_filter(explode("\n", trim($str_codif)));
-    foreach($lines as $line) {
-      $code_libelle = explode(':', $line);
-      $codifs[trim($code_libelle[0])] = trim($code_libelle[1]);
-    }
-    return $codifs;
-  }
-
-
   public static function setService($params, $service) {
     static::$services[static::makeKey($params)] = $service;
   }
diff --git a/tests/library/Class/CommSigbTest.php b/tests/library/Class/CommSigbTest.php
index 768d967b289..ce8baae82a2 100644
--- a/tests/library/Class/CommSigbTest.php
+++ b/tests/library/Class/CommSigbTest.php
@@ -674,7 +674,8 @@ class CommSigbDynixTest extends CommSigbTestCase {
 
     $this->bib_pc94 = Class_IntBib::newInstanceWithId(5)
       ->setCommParams(["url_serveur" => 'http://www.dynix.fr:8080/capcvm/',
-                       'client_id' => 'SymWS'])
+                       'client_id' => 'SymWS',
+                       'mails_bib' => 'ALFA:alfa@here.fr'])
       ->setCommSigb(11);
 
     Class_WebService_SIGB_Dynix::setService($this->createMockForService('Dynix'));
@@ -683,6 +684,11 @@ class CommSigbDynixTest extends CommSigbTestCase {
       ->expects($this->any())
       ->method('setClientId')
       ->will($this->returnValue($this->mock_service));
+
+    $this->mock_service
+      ->expects($this->any())
+      ->method('setMailsBib')
+      ->will($this->returnValue($this->mock_service));
   }
 
 
@@ -691,7 +697,8 @@ class CommSigbDynixTest extends CommSigbTestCase {
     $this->assertEquals(["url_serveur" => 'http://www.dynix.fr:8080/capcvm/',
                          "type" => Class_IntBib::COM_DYNIX,
                          'client_id' => 'SymWS',
-                         'id_bib' => 5],
+                         'id_bib' => 5,
+                         'mails_bib' => 'ALFA:alfa@here.fr'],
                         $this->bib_pc94->getModeComm(5));
   }
 }
diff --git a/tests/library/Class/WebService/SIGB/DynixTest.php b/tests/library/Class/WebService/SIGB/DynixTest.php
index 333b1eccab2..881d6393ae1 100644
--- a/tests/library/Class/WebService/SIGB/DynixTest.php
+++ b/tests/library/Class/WebService/SIGB/DynixTest.php
@@ -27,7 +27,8 @@ class DynixGetServiceTest extends ModelTestCase {
   public function setUp() {
     Class_WebService_SIGB_Dynix::reset();
     $this->_service = Class_WebService_SIGB_Dynix::getService(['url_serveur' => 'http://www.infocom94.fr:8080/capcvm/',
-                                                               'client_id' => 'myid']);
+                                                               'client_id' => 'myid',
+                                                               'mails_bib' => "CRETBUS:mediatheque.creteil.bibliobus@gpsea.fr\nALFMEDA:malfortville@agglo-plainecentrale94.fr"]);
   }
 
 
@@ -58,7 +59,8 @@ abstract class DynixTestCase extends ModelTestCase {
     Class_WebService_SIGB_Dynix::setService(null);
     $this->_service = Class_WebService_SIGB_Dynix
       ::getService(['url_serveur' => 'http://www.infocom94.fr:8080/capcvm/',
-                    'client_id' => 'SymWS'])
+                    'client_id' => 'SymWS',
+                    'mails_bib' => "CRETBUS:mediatheque.creteil.bibliobus@gpsea.fr\nALFMEDA:malfortville@agglo-plainecentrale94.fr"])
       ->setWebClient($this->_mock_web_client);
 
 
@@ -638,7 +640,8 @@ class DynixAuthenticateManuLarcinetTest extends DynixTestCase {
                    ['id' => 94,
                     'comm_sigb' => Class_IntBib::COM_DYNIX,
                     'comm_params' => ['url_serveur' => 'http://www.infocom94.fr:8080/capcvm/',
-                                      'client_id' => 'SymWS']]);
+                                      'client_id' => 'SymWS',
+                                      'mails_bib' => '']]);
 
     ZendAfi_Auth::getInstance()->authenticateLoginPassword('0917036', 'secret');
   }
-- 
GitLab