From c2699ad3a576ad4ec3b4073dca3624c8df9ddefc Mon Sep 17 00:00:00 2001
From: gloas <gloas@git-test.afi-sa.fr>
Date: Mon, 19 Aug 2013 15:57:51 +0000
Subject: [PATCH] =?UTF-8?q?Calendrier:=20s=C3=A9paration=20du=20chargement?=
 =?UTF-8?q?=20des=20articles=20entre=20le=20tableau=20et=20la=20liste?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 library/Class/Calendar.php                    |  87 ++++++---------
 .../View/Helper/Accueil/CalendarTest.php      | 104 +++++++++++++-----
 2 files changed, 112 insertions(+), 79 deletions(-)

diff --git a/library/Class/Calendar.php b/library/Class/Calendar.php
index 02965e24901..1cc967e4a0d 100644
--- a/library/Class/Calendar.php
+++ b/library/Class/Calendar.php
@@ -38,7 +38,6 @@ class Class_Calendar {
 	var $month;
 	var $year;
 	protected $id_module;
-	protected $articles; //Liste des articles à afficher, chargés dans _loadArticles
 	protected $_translate;
 	protected $_article_event_helper;
 	protected $_view;
@@ -84,8 +83,6 @@ class Class_Calendar {
 		$this->param = $param_array;
 		$this->today = date("dmY");
 		$this->id_module = $param_array["ID_MODULE"];
-
-		$this->_loadArticles();
 	}
 
 
@@ -97,7 +94,12 @@ class Class_Calendar {
 	 *												 ou tous si vaut "all"
 	 * param["ID_CAT"]: Liste des catégories autorisées (paramètre administrateur)
 	 */
-	protected function _loadArticles(){
+	protected function _getArticlesForCalendar(){
+		return $this->_loadArticles([]);
+	}
+
+	
+	protected function _loadArticles($extra_prefs) {
 		if (('all' !== $this->param["SELECT_ID_CAT"]) and ($this->param['DISPLAY_CAT_SELECT']))
 			$id_cat = (int)$this->param['SELECT_ID_CAT'];
 		else
@@ -105,61 +107,42 @@ class Class_Calendar {
 
 		if (0 == $id_cat)
 			$id_cat = '';
-		$prefs = ['display_order' => 'EventDebut',
-							'id_categorie' => $id_cat,
-							'events_only' => true,
-							'published' => false];
 
-		$time = $this->getTimeSource()->time();
-		
-		if($this->param["DATE"] == strftime('%Y-%m',$time))
-			$prefs ['event_end_after'] = strftime('%Y-%m-%d',$time);
-		else 
-			$prefs ['event_date'] = $this->param["DATE"];
+		$prefs = array_merge(['display_order' => 'EventDebut',
+													'id_categorie' => $id_cat,
+													'events_only' => true,
+													'event_date' => $this->param['DATE'],
+													'id_bib' => $this->param['ID_BIB'],
+													'published' => false], $extra_prefs);
 
-		// Lire les news dans la bdd
-	
-		$articles = Class_Article::getLoader()->getArticlesByPreferences($prefs);
+		$articles = Class_Article::getArticlesByPreferences($prefs);
+		$articles = Class_Article::filterByLocaleAndWorkflow($articles);
+		return $articles;
+	}
 
 
-		if ($id_bib = $this->param['ID_BIB']) {
-			$this->articles = array();
-			foreach($articles as $article)  {
-				if (($id_bib == $article->getBib()->getId()))
-					$this->articles []= $article;
-			}
-		} else {
-			$this->articles = $articles;
-		}
+	protected function _getNextEvents(){
+		$time = $this->getTimeSource()->time();
+		$prefs = [];
+		if($this->param["DATE"] == strftime('%Y-%m',$time))
+			$prefs['event_end_after'] = strftime('%Y-%m-%d',$time);
 
-		$this->articles = Class_Article::filterByLocaleAndWorkflow($this->articles);
 
-		if ($this->param["ALEATOIRE"] == 1)
-			shuffle($this->articles);
-		$prefs = [
-			'display_order' => 'EventDebut',
-			'id_categorie' => $id_cat,
-			'event_start_after' => $this->param["DATE"],
-			'events_only' => true,
-			'id_bib' => $this->param['ID_BIB'],
-			'limit' =>  $this->param['NB_NEWS'],
-			'published' => false];
+		$articles = $this->_loadArticles($prefs);
 
+		if ($this->param["ALEATOIRE"] == 1)
+			shuffle($articles);
 
 		if (count($articles) < $this->param['NB_NEWS']) {
-			$next_articles = Class_Article::getLoader()->getArticlesByPreferences($prefs);
-
-			$this->articles = array_merge($this->articles,
-																		Class_Article::filterByLocaleAndWorkflow($next_articles));
+			$next_articles = $this->_loadArticles(['event_start_after' => $this->param["DATE"],
+																						 'event_date' => '',
+																						 'event_end_after' => '',
+																						 'limit' => $this->param['NB_NEWS']]);
+			$articles = array_merge($articles,
+															Class_Article::filterByLocaleAndWorkflow($next_articles));
 		}
 
-		return $this;
-	}
-
-
-	/* liste des articles chargés, voir _loadArticles */
-	protected function _getArticles() {
-		return $this->articles;
+		return $articles;
 	}
 
 
@@ -330,7 +313,7 @@ class Class_Calendar {
 		$current_day = $first_month_day - 3600 * 24 * $offset;
 		$row_number = ceil((gmdate("t", $first_month_day) + $offset) / 7);
 
-		$articles = $this->_getArticles();
+		$articles = $this->_getArticlesForCalendar();
 
 		///////////////////////////////////////////////////////////////////////////
 		// HTML - No des jours
@@ -392,7 +375,7 @@ class Class_Calendar {
 		$html.="</table></div>";
 
 		// Html sous le calendrier
-		$html .= $this->htmlForEvents($articles);
+		$html .= $this->htmlForEvents();
 
 
 		return sprintf("<div class='calendar'>%s</div>", $html);
@@ -400,10 +383,10 @@ class Class_Calendar {
 
 
 
-	protected function htmlForEvents($articles) {
+	protected function htmlForEvents() {
 		if ($this->param['DISPLAY_NEXT_EVENT']=='0')
 			return '';
-
+		$articles = $this->_getNextEvents();
 		$nb_news = $this->param["NB_NEWS"];
 		$news_array = array_slice($articles, 0, $nb_news);
 
diff --git a/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php b/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php
index 525371fbc8b..0c42bb2a00f 100644
--- a/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php
+++ b/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php
@@ -116,14 +116,26 @@ class CalendarViewTodayWithEmptyPreferencesTest extends CalendarWithEmptyPrefere
 
 		$article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
 			->whenCalled('getArticlesByPreferences')
-			->with(array(
-									 'display_order' => 'EventDebut',
-									 'id_categorie' => '',
-									 'event_end_after' => '2013-08-19',
-									 'events_only' => true,
-									 'published' => false))
+			->with([
+							 'display_order' => 'EventDebut',
+							 'id_categorie' => '',
+							 'event_date' => '2013-08',
+							 'event_end_after' => '2013-08-19',
+							 'events_only' => true,
+							 'id_bib' => 0,
+							 'published' => false])
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
-			->getWrapper()
+
+			->whenCalled('getArticlesByPreferences')
+			->with([
+							 'display_order' => 'EventDebut',
+							 'id_categorie' => '',
+							 'event_date' => '2013-08',
+							 'events_only' => true,
+							 'id_bib' => 0,
+							 'published' => false])
+			->answers(array($this->nanook2, $this->opac4, $this->amber))
+
 			->beStrict();
 
 		$this->html = $this->helper->getBoite();
@@ -211,10 +223,22 @@ class CalendarWithPreferencesNbEventsOneTest extends CalendarWithEmptyPreference
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
 									 'event_end_after' => '2013-08-19',
+									 'event_date' => '2013-08',
+									 'id_bib' => 0,
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
-			->getWrapper()
+
+			->whenCalled('getArticlesByPreferences')
+			->with(array(
+									 'display_order' => 'EventDebut',
+									 'id_categorie' => '',
+									 'event_date' => '2013-08',
+									 'id_bib' => 0,
+									 'events_only' => true,
+									 'published' => false))
+			->answers(array($this->nanook2, $this->opac4, $this->amber))
+		
 			->beStrict();
 
 
@@ -247,28 +271,39 @@ class CalendarWithEmptyParamsLocaleEnAndOnlyTwoArticlesReturned Extends Calendar
 		parent::setUp();
 		Zend_Registry::get('translate')->setLocale('en');
 
-		Class_AdminVar::getLoader()->find('LANGUES')->setValeur('fr;en');
+		Class_AdminVar::find('LANGUES')->setValeur('fr;en');
 
-		$article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
+		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
 			->whenCalled('getArticlesByPreferences')
 			->with(array(
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
 									 'event_end_after' => '2013-08-19',
+									 'event_date' => '2013-08',
+									 'id_bib' => 0,
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4))
-			->getWrapper()
+
+			->whenCalled('getArticlesByPreferences')
+			->with(array(
+									 'display_order' => 'EventDebut',
+									 'id_categorie' => '',
+									 'event_date' => '2013-08',
+									 'id_bib' => 0,
+									 'events_only' => true,
+									 'published' => false))
+			->answers([$this->nanook2, $this->opac4])
 
 			->whenCalled('getArticlesByPreferences')
 			->with(array(
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
 									 'event_start_after' => '2013-09',
+									 'id_bib' => 0,
 									 'events_only' => true,
 									 'published' => false))
-			->answers(array($this->amber))
-			->getWrapper();
+			->answers(array($this->amber));
 
 		$this->html = $this->helper->getBoite();
 	}
@@ -316,16 +351,17 @@ class CalendarWithCategoryLimitAndBibPreferencesTest extends CalendarViewHelperT
 		$helper = new ZendAfi_View_Helper_Accueil_Calendar(2, $this->params);
 		$helper->setView(new ZendAfi_Controller_Action_Helper_View());
 
-		$article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
+		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
 			->whenCalled('getArticlesByPreferences')
 			->with(array(
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '12-3',
 									 'event_date' => '2011-03',
+									 'id_bib' => 5,
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
-			->getWrapper()
+
 			->beStrict();
 		$this->html = $helper->getBoite();
 	}
@@ -363,14 +399,6 @@ class CalendarWithCategoryLimitAndBibPreferencesTest extends CalendarViewHelperT
 	}
 
 
-	/** @test */
-	function calendarEventListShouldNotContainsNanook2() {
-		$this->assertNotXPathContentContains($this->html,
-																			'//a[@class="calendar_event_title"]',
-																			'Nanook 2 en prod !');
-	}
-
-
 	/** @test */
 	function calendarEventListShouldContainsOPAC4() {
 		$this->assertXPathContentContains($this->html,
@@ -399,8 +427,9 @@ class CalendarWithCategoryLimitAndBibPreferencesTest extends CalendarViewHelperT
 }
 
 
+
+
 class CalendarWithWorkFlowStatusTest  extends CalendarWithEmptyPreferencesTestCase {
-	
 	public function setUp() {
 		parent::setUp();
 		Class_AdminVar::set('WORKFLOW',1);
@@ -415,21 +444,39 @@ class CalendarWithWorkFlowStatusTest  extends CalendarWithEmptyPreferencesTestCa
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
 									 'event_end_after' => '2013-08-19',
+									 'event_date' => '2013-08',
+									 'id_bib' => 0,
 									 'events_only' => true,
 									 'published' => false
 									 ])
 			->answers([$this->opac4, $this->amber])
+
+			->whenCalled('getArticlesByPreferences')
+			->with([
+									 'display_order' => 'EventDebut',
+									 'id_categorie' => '',
+									 'event_date' => '2013-08',
+									 'id_bib' => 0,
+									 'events_only' => true,
+									 'published' => false
+									 ])
+			->answers([$this->opac4, $this->amber])
+
 			->whenCalled('getArticlesByPreferences')
 			->with([
 							 'display_order' => 'EventDebut',
 							 'id_categorie' => '',
 							 'event_start_after' => '2013-08',
+							 'event_date' => '',
+							 'event_end_after' => '',
 							 'events_only' => true,
 							 'id_bib' => 0,
 							 'limit' => 3,
 							 'published' => false
 							 ])
-			->answers([$this->nanook2,$this->opac4, $this->amber]) ->beStrict();
+			->answers([$this->nanook2,$this->opac4, $this->amber]) 
+			->beStrict();
+
 		$this->html = $this->helper->getBoite();
 		
 	}
@@ -468,16 +515,17 @@ class CalendarWithCategorySelectorAndRssPreferencesTest extends CalendarViewHelp
 		$helper = new ZendAfi_View_Helper_Accueil_Calendar(2, $params);
 		$helper->setView(new ZendAfi_Controller_Action_Helper_View());
 
-		$article_loader = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
+		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article')
 			->whenCalled('getArticlesByPreferences')
 			->with(array(
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '12',
 									 'event_date' => '2011-12',
+									 'id_bib' => 0,
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
-			->getWrapper()
+		
 			->beStrict();
 
 		$this->html = $helper->getBoite();
@@ -543,6 +591,7 @@ extends CalendarViewHelperTestCase {
 			->with(array('display_order' => 'EventDebut',
 									 'id_categorie' => '',
 									 'event_date' => '2011-12',
+									 'id_bib' => 0,
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
@@ -633,6 +682,7 @@ class CalendarOnJanuaryTest extends CalendarViewHelperTestCase {
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
 									 'event_date' => '2012-01',
+									 'id_bib' => 0,
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
-- 
GitLab