From 0d7fe766fb1ef7b465911ea8f33741bb200ba799 Mon Sep 17 00:00:00 2001
From: Ghislain Loas <ghislo@sandbox.pergame.net>
Date: Fri, 6 Nov 2015 11:34:13 +0100
Subject: [PATCH] dev #10430 fix issues + add tests

---
 .../opac/controllers/CmsController.php        |  6 ++--
 .../opac/views/scripts/cms/articleview.phtml  |  4 +--
 library/Class/Article.php                     | 11 +++++-
 .../ZendAfi/View/Helper/Calendar/Table.php    |  2 +-
 .../ProfilOptionsControllerTest.php           | 34 +++++++++++++++----
 5 files changed, 45 insertions(+), 12 deletions(-)

diff --git a/application/modules/opac/controllers/CmsController.php b/application/modules/opac/controllers/CmsController.php
index cb1dcf37597..781ac43f7fa 100644
--- a/application/modules/opac/controllers/CmsController.php
+++ b/application/modules/opac/controllers/CmsController.php
@@ -61,11 +61,13 @@ class CmsController extends ZendAfi_Controller_Action {
 
     if($preferences['display_mode']=='Summary')
       $preferences['summary_content']='Summary';
+
     if($preferences['display_mode']!='Title')
-      $this->_viewArticlesByPreferences($preferences);
+      return $this->_viewArticlesByPreferences($preferences);
 
     $articles = Class_Article::getArticlesByPreferences($preferences);
     $articles = Class_Article::filterByLocaleAndWorkflow($articles);
+    $articles = Class_Article::filterByDay(strtotime($this->_getParam('d')), $articles);
     $articles = Class_Article::groupByBibId($articles);
 
     if ((count($articles) == 1) && isset($articles[0]))
@@ -291,6 +293,7 @@ class CmsController extends ZendAfi_Controller_Action {
                                ->getArticlesByPreferences($preferences);
 
      $articles = Class_Article::getLoader()->filterByLocaleAndWorkflow($articles);
+     $articles = Class_Article::filterByDay(strtotime($this->_getParam('d')), $articles);
 
      $this->view->articles = $articles;
 
@@ -309,6 +312,5 @@ class CmsController extends ZendAfi_Controller_Action {
     }
 
     $this->renderScript('cms/articlesview.phtml');
-
   }
 }
\ No newline at end of file
diff --git a/application/modules/opac/views/scripts/cms/articleview.phtml b/application/modules/opac/views/scripts/cms/articleview.phtml
index 1295bcf60af..aa8f8c7dfcc 100644
--- a/application/modules/opac/views/scripts/cms/articleview.phtml
+++ b/application/modules/opac/views/scripts/cms/articleview.phtml
@@ -1,6 +1,6 @@
 <a name="Top"></a>
 <?php
-   echo $this->partial('cms/article_partial.phtml', array('article' => $this->article));
+   echo $this->partial('cms/article_partial.phtml', ['article' => $this->article]);
 ?>
 
 <table style="width:100%">
@@ -8,4 +8,4 @@
     <td style="text-align:left"><a href="javascript:history.back()"><?php echo $this->_('Retour') ?></a></td>
     <td style="text-align:right"><a href="#Top"><?php echo $this->_('Haut') ?></a></td>
   </tr>
-</table>
\ No newline at end of file
+</table>
diff --git a/library/Class/Article.php b/library/Class/Article.php
index 041e6bd629b..5e1dc28732e 100644
--- a/library/Class/Article.php
+++ b/library/Class/Article.php
@@ -437,9 +437,18 @@ class ArticleLoader extends Storm_Model_Loader {
       $page++;
     }
   }
-}
 
 
+  public function filterByDay($day, $articles) {
+    $day_num = gmdate("w", $day);
+    return  array_filter($articles,
+                         function($event) {
+                                             if(empty($event->getPickDayAsArray()) || in_array($day_num, $event->getPickDayAsArray()))
+                                               return $event;
+                                           });
+  }
+}
+
 
 
 class Class_Article extends Storm_Model_Abstract {
diff --git a/library/ZendAfi/View/Helper/Calendar/Table.php b/library/ZendAfi/View/Helper/Calendar/Table.php
index 2e6e0fa6f6e..f3a5209765b 100644
--- a/library/ZendAfi/View/Helper/Calendar/Table.php
+++ b/library/ZendAfi/View/Helper/Calendar/Table.php
@@ -141,7 +141,7 @@ class ZendAfi_View_Helper_Calendar_Table extends Zend_View_Helper_HtmlElement {
       $mois_fin = (int)date('m', $event_fin);
 
       if(!empty($event->getPickDayAsArray()) && !in_array($day_num, $event->getPickDayAsArray()))
-        return false;
+        continue;
 
       // Jour clickable5#
       if($mois_debut == $month && $mois_fin == $month) {
diff --git a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
index f221c228261..9e4bfd93f5e 100644
--- a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
+++ b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
@@ -1648,14 +1648,25 @@ abstract class ProfilOptionsControllerProfilBoiteCalendarTestCase extends Abstra
                                     'description' => 'à Moulins',
                                     'events_debut' => '2011-09-05',
                                     'events_fin' => '2011-10-05',
-                                    'pick_day' => '12345',
+                                    'pick_day' => '123',
+                                    'categorie' => $fiesta_annecy]);
+
+    $fete_valleiry = $this->fixture('Class_Article',
+                                    ['id' => 36,
+                                    'titre' => 'Fête de la FIA',
+                                    'contenu' => 'Fiesta fiesta à la FIA',
+                                    'description' => 'à Valleiry',
+                                    'events_debut' => '2011-09-15',
+                                    'events_fin' => '2011-10-30',
+                                    'pick_day' => '',
                                     'categorie' => $fiesta_annecy]);
 
     Class_AdminVar::beVolatile();
     Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
       ->whenCalled('getArticlesByPreferences')
       ->answers([$fete_caion,
-                 $fete_moulins]);
+                 $fete_moulins,
+                 $fete_valleiry]);
   }
 }
 
@@ -1743,7 +1754,13 @@ class ProfilOptionsControllerProfilBoiteCalendarWithCalendarDisplayedAndModeSimp
 
   /** @test **/
   public function boiteCalendarLiShouldContainsCalendarEventDate() {
-    $this->assertXPathContentContains('//li/span[@class="calendar_event_date"]', 'samedi 03 septembre 2011');
+    $this->assertXPathContentContains('//li/span[@class="calendar_event_date"]', 'jeudi 01 septembre 2011');
+  }
+
+
+  /** @test */
+  public function firstSeptemberShouldContainsLink() {
+    $this->assertXPath('//table//tr/td[4]//a[contains(@class, "day_clickable")]' );
   }
 
 
@@ -1754,12 +1771,17 @@ class ProfilOptionsControllerProfilBoiteCalendarWithCalendarDisplayedAndModeSimp
 
 
   /** @test */
-  public function sundayShouldNotContainsLink() {
-    $this->assertNotXPath('//td[@class="calendar_weekend"]//a[contains(@class, "day_clickable")]',  $this->_response->getBody());
+  public function saturdayThe10ThShouldNotContainsLink() {
+    $this->assertXPathContentContains('//td[@class="calendar_weekend"]//span[@class="calendar_day_non_clickable"]', '10');
   }
-}
 
 
+  /** @test */
+  public function fridayShouldContainsLink() {
+    $this->assertXPath('//table//tr/td[5]//a[contains(@class, "day_clickable")]',  $this->_response->getBody());
+  }
+}
+
 
 
 class ProfilOptionsControllerProfilBoiteCalendarWithCalendarDisplayedWithModeSimpleAndCatOption extends ProfilOptionsControllerProfilBoiteCalendarTestCase {
-- 
GitLab