From 468b1d59722c54ebb20b6879f841ad295946e297 Mon Sep 17 00:00:00 2001
From: Arthur Suzuki <arthur.suzuki@biblibre.com>
Date: Mon, 30 Nov 2020 16:58:40 +0100
Subject: [PATCH] hotline#121189 : display series link over collection link

---
 VERSIONS_HOTLINE/121189                       |  1 +
 library/Class/Codification.php                |  8 ++-
 .../ZendAfi/View/Helper/Notice/SeriesLink.php |  5 +-
 .../controllers/RechercheControllerTest.php   | 60 ++++++++++++++-----
 tests/fixtures/bernard_genin_2.uni            |  1 +
 5 files changed, 57 insertions(+), 18 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/121189
 create mode 100644 tests/fixtures/bernard_genin_2.uni

diff --git a/VERSIONS_HOTLINE/121189 b/VERSIONS_HOTLINE/121189
new file mode 100644
index 00000000000..b9006bc7812
--- /dev/null
+++ b/VERSIONS_HOTLINE/121189
@@ -0,0 +1 @@
+ - ticket #121189 : Le lien vers les séries est rétabli. En l'absence de titre de séries ou de périodique, le lien pointe vers une recherche de la collection.
\ No newline at end of file
diff --git a/library/Class/Codification.php b/library/Class/Codification.php
index f9b115b53d8..0cd77e2d9f8 100644
--- a/library/Class/Codification.php
+++ b/library/Class/Codification.php
@@ -279,10 +279,14 @@ class Class_Codification {
     if ($notice->isPeriodique() || $notice->isPeriodiqueTitle())
       return $me->_('Voir tous les numéros') . $chapeau;
 
+
+    if ($chapeau && $notice->hasSerie())
+      return $me->_('Voir tous les tomes') . $chapeau;
+
     if ($main_collection = $notice->getCollections(true))
-      return $me->_('Voir tous les volumes de la collection "%s"', $main_collection) ;
+      return $me->_('Voir tous les volumes de la collection "%s"', $main_collection);
 
-    return $me->_('Voir tous les tomes') . $chapeau;
+    return '';
   }
 
 
diff --git a/library/ZendAfi/View/Helper/Notice/SeriesLink.php b/library/ZendAfi/View/Helper/Notice/SeriesLink.php
index 46468013dad..77b67b7dec2 100644
--- a/library/ZendAfi/View/Helper/Notice/SeriesLink.php
+++ b/library/ZendAfi/View/Helper/Notice/SeriesLink.php
@@ -42,7 +42,7 @@ class ZendAfi_View_Helper_Notice_SeriesLink extends ZendAfi_View_Helper_BaseHelp
 
 
   protected function _renderSearchLinkForSerie($notice) {
-    if (!$notice->hasSerie() && !$notice->isPeriodiqueTitle())
+    if (!$notice->hasSerie() && !$notice->isPeriodiqueTitle() && !$notice->getCollections())
       return '';
 
     $criteres = new Class_CriteresRecherche();
@@ -64,6 +64,9 @@ class ZendAfi_View_Helper_Notice_SeriesLink extends ZendAfi_View_Helper_BaseHelp
         . '-'
         . Class_TypeDoc::PERIODIQUE;
 
+    if ($chapeau = $record->getClefChapeau())
+      return $chapeau . '-' . $record->getTypeDoc();
+
     if ($main_collection = $record->getCollections(true))
       return Class_Indexation::getInstance()->codeAlphaTitre($main_collection);
 
diff --git a/tests/application/modules/opac/controllers/RechercheControllerTest.php b/tests/application/modules/opac/controllers/RechercheControllerTest.php
index 2e1285a145b..fc66fed5782 100644
--- a/tests/application/modules/opac/controllers/RechercheControllerTest.php
+++ b/tests/application/modules/opac/controllers/RechercheControllerTest.php
@@ -304,19 +304,12 @@ class RechercheControllerPagerTest extends RechercheControllerNoticeTestCase {
 
 
 
-class RechercheControllerViewNoticeCollectionWithPreferencesTest extends RechercheControllerNoticeTestCase {
+abstract class RechercheControllerViewNoticeCollectionWithPreferencesTest extends RechercheControllerNoticeTestCase {
   protected $_web_analytics_client;
 
   public function setUp() {
     parent::setUp();
 
-    $this->notice
-      ->setClefChapeau('ABCDEF')
-      ->setTomeAlpha('v234')
-      ->set_subfield('225', 'a', 'Gallimard Poche')
-      ->assertSave();
-
-
     $preferences = [
                     'barre_nav' => 'Document',
                     'entete' =>"ABCDWFGIKLMNOPRSTtYZ8v9",
@@ -342,15 +335,30 @@ class RechercheControllerViewNoticeCollectionWithPreferencesTest extends Recherc
     Class_Profil::getCurrentProfil()
       ->setBarreNavOn(true)
       ->setCfgModules(['recherche' => ['viewnotice1' => $preferences]]);
+  }
+}
+
+
+
+
+class RechercheControllerViewNoticeCollectionWithSerie extends RechercheControllerViewNoticeCollectionWithPreferencesTest {
+  public function setUp() {
+    parent::setUp();
+
+    $this->notice
+      ->setClefChapeau('ABCDEF')
+      ->setTomeAlpha('v234')
+      ->set_subfield('225', 'a', 'Gallimard Poche')
+      ->assertSave();
 
     $this->dispatch('recherche/viewnotice/id/345', true);
   }
 
 
   /** @test */
-  public function pageShouldContainLinkToRecordsSameCollectionGallimardPoche() {
-    $this->assertXPathContentContains('//div//a[contains(@href,"recherche/simple/serie/GALLIMARD+POCHE")]',
-                                      'Voir tous les volumes de la collection "Gallimard Poche"');
+  public function pageShouldContainLinkToRecordsSameSerieCinemaAnimation() {
+    $this->assertXPathContentContains('//div//a[contains(@href,"recherche/simple/serie/ABCDEF-1")]',
+                                      'Voir tous les tomes de Cinéma d\'animation');
   }
 
 
@@ -363,6 +371,28 @@ class RechercheControllerViewNoticeCollectionWithPreferencesTest extends Recherc
 
 
 
+class RechercheControllerViewNoticeCollectionWithoutSerie extends RechercheControllerViewNoticeCollectionWithPreferencesTest {
+  public function setUp() {
+    parent::setUp();
+
+    $this->notice
+      ->setUnimarc(file_get_contents(ROOT_PATH .'/tests/fixtures/bernard_genin_2.uni'))
+      ->assertSave();
+
+    $this->dispatch('recherche/viewnotice/id/345', true);
+  }
+
+
+  /** @test */
+  public function linkToRecordSameCollectionShouldNotContainDocumentTitle() {
+    $this->assertXPathContentContains('//div//a[contains(@href,"recherche/simple/serie/GALLIMARD+POCHE")]',
+                                      'Voir tous les volumes de la collection "Gallimard Poche"',
+                                      $this->_response->getBody());
+  }
+}
+
+
+
 
 class RechercheControllerViewNoticeWithPreferencesTest extends RechercheControllerNoticeTestCase {
   protected $_web_analytics_client;
@@ -440,16 +470,16 @@ class RechercheControllerViewNoticeWithPreferencesTest extends RechercheControll
 
   /** @test */
   public function enteteShouldDisplayDocumentDeLaMemeSerie() {
-    $this->assertXPathContentContains('//div//a[contains(@href,"PETITS+CAHIERS")]',
-                                      'Voir tous les volumes de la collection "Les petits cahiers"');
+    $this->assertXPathContentContains('//div//a[contains(@href,"Gallimard+serie")]',
+                                      'Voir tous les tomes de Gallimard serie');
   }
 
 
   /** @test */
   public function enteteShouldDisplayDocumentLinkOrderByDateNouveaute() {
     $this
-      ->assertXPathContentContains('//div//a[contains(@href,"/serie/PETITS+CAHIERS/tri/date_creation+desc")]',
-                                   'Voir tous les volumes de la collection "Les petits cahiers"');
+      ->assertXPathContentContains('//div//a[contains(@href,"/Gallimard+serie-1/tri/date_creation+desc")]',
+                                   'Voir tous les tomes de Gallimard serie');
   }
 
 
diff --git a/tests/fixtures/bernard_genin_2.uni b/tests/fixtures/bernard_genin_2.uni
new file mode 100644
index 00000000000..0a72d93b1ff
--- /dev/null
+++ b/tests/fixtures/bernard_genin_2.uni
@@ -0,0 +1 @@
+01465nam0 2200301   450 001000700000010003300007020001700040021002700057100004100084101000800125102000700133105001800140106000600158200010600164210007500270215004400345225002000389300012500409300002000534300013700554330026500691345001800956606003300974606006001007676001201067700004501079801003901124218529  a2-86642-370-4bbr.d8,95 EUR  aFRb00347575  aFRbDLE-20031204-51138  a20031107d2003    m  h0frey0103    ba| afre  aFR  ay   z   000y|  ar1 aCinéma d'animationbTexte impriméedessin animé, marionnettes, images de synthèsefBernard Génin  a[Paris]c"Cahiers du cinéma"cSCEREN-CNDPdcop. 2003gimpr. en Italie  a95 p.cill., couv. ill. en coul.d19 cm2 aGallimard Poche  aLa couv. porte en plus : "du crayon à l'ordinateur, pour ou contre Disney, Europe-Japon : le dessin animé aujourd'hui"  aBibliogr. p. 93  aSCEREN = Services, cultures, éditions, ressources pour l'éducation nationale. CNDP = Centre national de documentation pédagogique  aPrésente un historique du cinéma d'animation, un survol des différentes productions nationales à travers le monde (Etats-Unis, Japon, France, Canada), les techniques du volume animé, l'image de synthèse, mais aussi l'oeuvre de Disney et le film d'auteur.  b9782866423704| 31053394aAnimation (cinéma)| 31031625aDessins animés32195497xHistoire et critique  a791.431 |32547161aGéninbBernardf1946-....4070 0aFRbBNFc20031107gAFNOR2intermrc
\ No newline at end of file
-- 
GitLab