From 890652892260b18e8f0a39b246be8ef2eb6056b8 Mon Sep 17 00:00:00 2001
From: efalcy <efalcy@afi-sa.fr>
Date: Thu, 23 Jul 2015 18:20:18 +0200
Subject: [PATCH] hotdev $26909 : add pager on viewcritiques page and option to
 customize number of critics display per page

---
 .../views/scripts/modules/blog_all.phtml      |  9 ++++++++
 .../opac/controllers/BlogController.php       | 16 ++++++++++---
 .../views/scripts/blog/viewcritiques.phtml    | 13 +++++++----
 library/Class/Systeme/ModulesAppli.php        |  3 ++-
 .../controllers/ModulesControllerTest.php     | 16 +++++++++++++
 .../controllers/AbonneControllerAvisTest.php  | 23 +++++++++++++++----
 6 files changed, 66 insertions(+), 14 deletions(-)

diff --git a/application/modules/admin/views/scripts/modules/blog_all.phtml b/application/modules/admin/views/scripts/modules/blog_all.phtml
index 5c8ab78edfe..1d9ec7f6545 100644
--- a/application/modules/admin/views/scripts/modules/blog_all.phtml
+++ b/application/modules/admin/views/scripts/modules/blog_all.phtml
@@ -1,2 +1,11 @@
 <?php echo $this->render('modules/_debut.phtml');?>
+
+<table>
+        <tr>
+
+          <td class="droite"><?php echo $this->_('Nombre affichés par page:'); ?>&nbsp;</td>
+          <td class="gauche">          <input name="nb_display" value="<?php echo $this->preferences['nb_display']; ?>"  /></td>
+        </tr>
+</table>
+
 <?php echo $this->render('modules/_fin.phtml');?>
diff --git a/application/modules/opac/controllers/BlogController.php b/application/modules/opac/controllers/BlogController.php
index 4ec79a6e167..27a13c20daf 100644
--- a/application/modules/opac/controllers/BlogController.php
+++ b/application/modules/opac/controllers/BlogController.php
@@ -37,6 +37,7 @@ class BlogController extends ZendAfi_Controller_Action {
   }
 
 
+
   public function viewauteurAction()  {
     $id_user = (int)$this->_getParam('id', $this->_user->ID_USER);
     if ($auteur = Class_Users::find($id_user)) {
@@ -90,13 +91,22 @@ class BlogController extends ZendAfi_Controller_Action {
 
 
   public function viewcritiquesAction() {
+    $this->view->page = $this->_getParam('page',1);
     $id_module = (int)$this->_getParam('id_module');
-    $preferences = Class_Profil::getCurrentProfil()
+    $profil = Class_Profil::getCurrentProfil();
+    $preferences =  $profil
       ->getModuleAccueilPreferences($id_module, 'CRITIQUES');
-    $avis = Class_AvisNotice::getAvisFromPreferences($preferences);
+    $this->view->config=$profil->getConfigurationOf('blog','viewcritiques','');
+
+    $avis = Class_AvisNotice::getAvisFromPreferences($preferences,[$this->view->page, $this->view->config['nb_display']]);
 
-    $this->view->nb_aff = 50;
     $this->view->liste_avis = $avis;
+
+    $params_url=$this->_request->getParams();
+    unset($params_url['page']);
+    unset($params_url['current_module']);
+    $this->view->params_url=$params_url;
+    $this->view->total=count(Class_AvisNotice::getAvisFromPreferences($preferences));
     $this->view->title = 'Dernières critiques';
     if (array_key_exists('titre', $preferences))
       $this->view->title = $preferences['titre'];
diff --git a/application/modules/opac/views/scripts/blog/viewcritiques.phtml b/application/modules/opac/views/scripts/blog/viewcritiques.phtml
index 54ceeb12fc7..d51790df69a 100644
--- a/application/modules/opac/views/scripts/blog/viewcritiques.phtml
+++ b/application/modules/opac/views/scripts/blog/viewcritiques.phtml
@@ -1,13 +1,16 @@
-<?php  
+<?php
 $this->openBoite($this->title);
-if(is_array($this->liste_avis)) 
+xdebug_break();
+if(is_array($this->liste_avis))
 {
-  $avis_to_show = array_slice($this->liste_avis, 0, $this->nb_aff);
-  $html_avis = array();
-  foreach($avis_to_show as $avis)
+  $html_avis = [];
+  foreach($this->liste_avis as $avis)
     $html_avis []= $this->avis($avis);
   echo implode('<div class="separator"></div>', $html_avis);
 }
 
+
+echo BR.'<div align="center" style="width:100%">'.$this->pager($this->total,$this->config['nb_display'],$this->page,$this->params_url ).'</div>';
+
 $this->closeBoite();
 ?>
diff --git a/library/Class/Systeme/ModulesAppli.php b/library/Class/Systeme/ModulesAppli.php
index d72b2a493e6..c45d40bf32f 100644
--- a/library/Class/Systeme/ModulesAppli.php
+++ b/library/Class/Systeme/ModulesAppli.php
@@ -411,7 +411,8 @@ class Class_Systeme_ModulesAppli extends Class_Systeme_ModulesAbstract {
    * @return array
    */
   private function getDefautBlog($action) {
-    return array('barre_nav' => 'Critique');
+    return ['barre_nav' => 'Critique',
+            'nb_display' => 50];
   }
 
   /**
diff --git a/tests/application/modules/admin/controllers/ModulesControllerTest.php b/tests/application/modules/admin/controllers/ModulesControllerTest.php
index 8cee70c2eb7..744b5748ae0 100644
--- a/tests/application/modules/admin/controllers/ModulesControllerTest.php
+++ b/tests/application/modules/admin/controllers/ModulesControllerTest.php
@@ -412,6 +412,22 @@ class ModulesControllerConfigRechercheResultatTest extends Admin_AbstractControl
 
 
 
+class ModulesControllerConfigViewCritiquesResultatTest extends Admin_AbstractControllerTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    Class_Profil::getCurrentProfil()->setCfgModules([]);
+    $this->dispatch('/admin/modules/blog?config=site&type_module=blog&id_profil=2&action1=viewcritiques&action2=', true);
+  }
+
+  /** @test */
+  public function inputNumberOfCriticsDisplayOnPageShouldBe50() {
+    $this->assertXPath('//input[@name="nb_display"][@value="50"]');
+  }
+}
+
+
+
 
 class ModulesControllerRechercheSaisieTest extends Admin_AbstractControllerTestCase {
   public function setUp() {
diff --git a/tests/application/modules/opac/controllers/AbonneControllerAvisTest.php b/tests/application/modules/opac/controllers/AbonneControllerAvisTest.php
index e24a7e99dd9..1f2339cfd2f 100644
--- a/tests/application/modules/opac/controllers/AbonneControllerAvisTest.php
+++ b/tests/application/modules/opac/controllers/AbonneControllerAvisTest.php
@@ -290,8 +290,8 @@ abstract class AvisControllersFixturesTestCase extends AbonneFlorenceIsLoggedCon
     $this->millenium_with_vignette->save();
 
 
-    $this->avis_millenium =  Class_AvisNotice::newInstanceWithId(13, [
-                                                                      'entete' => "J'adore",
+    $this->avis_millenium =  $this->fixture('Class_AvisNotice', ['id' => 13,
+                                                                 'entete' => "J'adore",
                                                                       'avis' => '<div><ul><li>Suspense Intense !</li><li>Suspense Intense !</li></ul></div>',
                                                                       'note' => 5,
                                                                       'date_avis' => '2011-03-18 13:00:00',
@@ -614,13 +614,15 @@ abstract class ModuleSelectionCritiquesTestCase extends AvisControllersFixturesT
 
     $preferences = array('modules' => array(3 => array('division' => 2,
                                                        'type_module' => 'CRITIQUES',
-                                                       'preferences' => array('titre' => 'Coups de coeur'))));
+                                                       'preferences' => array('titre' => 'Coups de coeur'
+                                                       ))));
     $profil = Class_Profil::getLoader()
       ->find(2)
+      ->setCfgModules( ['blog' =>  ['viewcritiques' => ['nb_display' => 2]]])
       ->setCfgAccueil($preferences);
 
-    $this->_generateLoaderFor('Class_AvisNotice', array('getAvisFromPreferences'))
-         ->expects($this->once())
+    $this->_generateLoaderFor('Class_AvisNotice', ['getAvisFromPreferences'])
+//         ->expects($this->once())
          ->method('getAvisFromPreferences')
          ->will($this->returnValue([$this->avis_millenium,
                                     $this->avis_potter,
@@ -645,6 +647,17 @@ class AbonneControllerAvisBlogControllerViewCritiquesTest extends ModuleSelectio
     $this->assertQueryContentContains('h2', 'Potter');
   }
 
+  /** @test */
+  public function pagerShouldBeDisplayed() {
+    $this->assertXPath('//a[@href="/blog/viewcritiques/id_profil/2/id_module/3/page/2"]', $this->_response->getBody());
+  }
+
+  /** @test */
+  public function pagerShouldNotContains3Pages() {
+    $this->assertNotXPath('//a[contains(@href,"/page/3")]', $this->_response->getBody());
+  }
+
+
   /** @test */
   public function titleShouldBeCoupsDeCoeur() {
     $this->assertXPathContentContains('//h1', 'Coups de coeur');
-- 
GitLab