From 2c9c0617be3fef3113ef5d0211b472a59e683f48 Mon Sep 17 00:00:00 2001
From: gloas <gloas@git-test.afi-sa.fr>
Date: Mon, 19 Aug 2013 14:24:42 +0000
Subject: [PATCH] rel #9354 affichage des evenements qui se finnissent apres la
 date du jour

---
 library/Class/Article.php                         | 15 +++++++++++++++
 library/Class/Calendar.php                        |  9 ++++++++-
 library/ZendAfi/View/Helper/Accueil/Calendar.php  |  1 +
 .../controllers/MultimediaControllerTest.php      |  2 +-
 .../opac/controllers/FormulaireControllerTest.php |  3 +--
 tests/library/Class/ArticleLoaderTest.php         |  8 ++++++++
 tests/library/Class/TimeSourceForTest.php         |  5 +++--
 .../ZendAfi/View/Helper/Accueil/CalendarTest.php  | 10 +++++-----
 8 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/library/Class/Article.php b/library/Class/Article.php
index e2467d4c4af..47456f2c53a 100644
--- a/library/Class/Article.php
+++ b/library/Class/Article.php
@@ -156,6 +156,18 @@ class ArticleLoader extends Storm_Model_Loader {
 	}
 
 
+	protected function _whereEventEndAfter($event_date) {
+		if (!$event_date || (10 > strlen($event_date)))
+			return $this;
+
+		$this->_select->where('EVENTS_FIN IS NOT NULL');
+		$this->_select->where("EVENTS_FIN >= ?", $event_date);
+
+		return $this;
+
+	}
+
+
 	/**
 	 * @return ArticleLoader
 	 */
@@ -276,6 +288,7 @@ class ArticleLoader extends Storm_Model_Loader {
 			'langue' => null, // que les traductions de cette langue
 			'event_date' => null, // que les articles dont les dates de début et/ou de fin inclue cette date
 			'event_start_after' => null, // que les articles dont l'évènement commence après cette date
+			'event_end_after' => null, // que les articles dont l'évènement termine à ou après cette date
 			'id_bib' => null, // filtre par cette bibliothèque
 			'status' => null, // filtre par cet état de workflow cf. Class_Article::STATUS_XXX
 			'events_only' => false, // filtre que les évènements,
@@ -294,6 +307,7 @@ class ArticleLoader extends Storm_Model_Loader {
 		$this->_limit = $this->_sort_order == 'Random' ? $this->_nb_analyse : $this->_nb_aff;
 		$this->_langue = $preferences['langue'];
 		$this->_event_date = $preferences['event_date'];
+		$this->_event_end_after = $preferences['event_end_after'];
 		$this->_event_start_after = $preferences['event_start_after'];
 		$this->_id_bib = $preferences['id_bib'];
 		$this->_status = $preferences['status'];
@@ -309,6 +323,7 @@ class ArticleLoader extends Storm_Model_Loader {
 			->_whereSelectionIn($this->_id_articles, $this->_id_categories)
 			->_whereEventDateIn($this->_event_date)
 			->_whereEventStartAfter($this->_event_start_after)
+			->_whereEventEndAfter($this->_event_end_after)
 			->_filterByLangue()
 			->_filterByStatus()
 			->_orderAndLimit()
diff --git a/library/Class/Calendar.php b/library/Class/Calendar.php
index 149443eeb38..02965e24901 100644
--- a/library/Class/Calendar.php
+++ b/library/Class/Calendar.php
@@ -22,6 +22,7 @@
 //	 OPAC- 3																				Class_Calendar
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 class Class_Calendar {
+	use Trait_TimeSource;
 	var $PREFIX					= "calendar_";
 	var $CSS_PREFIX			= "calendar_";
 	var $URL_PARAMETER	= "date";
@@ -106,10 +107,16 @@ class Class_Calendar {
 			$id_cat = '';
 		$prefs = ['display_order' => 'EventDebut',
 							'id_categorie' => $id_cat,
-							'event_date' => $this->param["DATE"],
 							'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"];
+
 		// Lire les news dans la bdd
 	
 		$articles = Class_Article::getLoader()->getArticlesByPreferences($prefs);
diff --git a/library/ZendAfi/View/Helper/Accueil/Calendar.php b/library/ZendAfi/View/Helper/Accueil/Calendar.php
index e09fae37b14..f94fcb17827 100644
--- a/library/ZendAfi/View/Helper/Accueil/Calendar.php
+++ b/library/ZendAfi/View/Helper/Accueil/Calendar.php
@@ -90,6 +90,7 @@ SCRIPT;
 		$param["DISPLAY_NEXT_EVENT"] = array_key_exists('display_next_event', $this->preferences) ? $this->preferences["display_next_event"] : '1';
 
 		$class_calendar = new Class_Calendar($param, $this->view);
+		$class_calendar->setTimeSource($this->getTimeSource());
 		$this->contenu = $class_calendar->rendHTML();
 
 
diff --git a/tests/application/modules/admin/controllers/MultimediaControllerTest.php b/tests/application/modules/admin/controllers/MultimediaControllerTest.php
index d761f0fd1c3..8e609704c6b 100644
--- a/tests/application/modules/admin/controllers/MultimediaControllerTest.php
+++ b/tests/application/modules/admin/controllers/MultimediaControllerTest.php
@@ -210,7 +210,7 @@ class Admin_MultimediaControllerBrowseTest extends Admin_MultimediaControllerTes
 				->setGroups(array($group));
 
 
-		$time_source = (new TimeSourceForTest())->setTime(strtotime('today'));
+		$time_source = new TimeSourceForTest('today');
 		Class_Multimedia_Device::setTimeSource($time_source);
 
 		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_DeviceHold')
diff --git a/tests/application/modules/opac/controllers/FormulaireControllerTest.php b/tests/application/modules/opac/controllers/FormulaireControllerTest.php
index 02c7e826ec1..87bdb241611 100644
--- a/tests/application/modules/opac/controllers/FormulaireControllerTest.php
+++ b/tests/application/modules/opac/controllers/FormulaireControllerTest.php
@@ -34,8 +34,7 @@ abstract class FormulaireControllerPostActionTestCase extends Admin_AbstractCont
 			});
 
 
-		$timesource = new TimeSourceForTest();
-		$timesource->setTime(strtotime('2012-10-23 12:32:00'));
+		$timesource = new TimeSourceForTest('2012-10-23 12:32:00');
 		Class_Formulaire::setTimeSource($timesource);
 	}
 }
diff --git a/tests/library/Class/ArticleLoaderTest.php b/tests/library/Class/ArticleLoaderTest.php
index 6823e6af7f8..e377989329b 100644
--- a/tests/library/Class/ArticleLoaderTest.php
+++ b/tests/library/Class/ArticleLoaderTest.php
@@ -297,6 +297,14 @@ class ArticleLoaderGetArticlesByPreferencesTest extends ModelTestCase {
 	}
 
 
+	/** @test */
+	public function withEventEndAfterSqlShouldFilterOnEventsFin() {
+		$articles = $this->getArticles(['event_end_after' => '2011-03-15']);
+		$this->assertSelect(sprintf("WHERE %s AND (EVENTS_FIN IS NOT NULL) AND (EVENTS_FIN >= '2011-03-15') AND (PARENT_ID=0) ORDER BY `DATE_CREATION` DESC",	self::WHERE_VISIBLE_CLAUSE));
+	}
+
+
+
 	/** @test */
 	public function withPublishedFalseShouldNotFilterByDebutAndFin() {
 		$article = $this->getArticles(array('published' => false));
diff --git a/tests/library/Class/TimeSourceForTest.php b/tests/library/Class/TimeSourceForTest.php
index 8877e6da6b3..0d7f7e30e63 100644
--- a/tests/library/Class/TimeSourceForTest.php
+++ b/tests/library/Class/TimeSourceForTest.php
@@ -22,8 +22,9 @@
 class TimeSourceForTest extends Class_TimeSource {
 	protected $_time;
 
-	public function __construct($strtime) {
-		$this->setTime(strtotime($strtime));
+	public function __construct($strtime = null) {
+    if ($strtime)
+			$this->setTime(strtotime($strtime));
 	}
 
 	/**
diff --git a/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php b/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php
index 1f05f235d57..525371fbc8b 100644
--- a/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php
+++ b/tests/library/ZendAfi/View/Helper/Accueil/CalendarTest.php
@@ -110,7 +110,7 @@ abstract class CalendarWithEmptyPreferencesTestCase extends CalendarViewHelperTe
 }
 
 
-class CalendarWithEmptyPreferencesTest extends CalendarWithEmptyPreferencesTestCase {
+class CalendarViewTodayWithEmptyPreferencesTest extends CalendarWithEmptyPreferencesTestCase {
 	public function setUp() {
 		parent::setUp();
 
@@ -119,7 +119,7 @@ class CalendarWithEmptyPreferencesTest extends CalendarWithEmptyPreferencesTestC
 			->with(array(
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
-									 'event_date' => '2013-08',
+									 'event_end_after' => '2013-08-19',
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
@@ -210,7 +210,7 @@ class CalendarWithPreferencesNbEventsOneTest extends CalendarWithEmptyPreference
 			->with(array(
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
-									 'event_date' => '2013-08',
+									 'event_end_after' => '2013-08-19',
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4, $this->amber))
@@ -254,7 +254,7 @@ class CalendarWithEmptyParamsLocaleEnAndOnlyTwoArticlesReturned Extends Calendar
 			->with(array(
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
-									 'event_date' => '2013-08',
+									 'event_end_after' => '2013-08-19',
 									 'events_only' => true,
 									 'published' => false))
 			->answers(array($this->nanook2, $this->opac4))
@@ -414,7 +414,7 @@ class CalendarWithWorkFlowStatusTest  extends CalendarWithEmptyPreferencesTestCa
 			->with([
 									 'display_order' => 'EventDebut',
 									 'id_categorie' => '',
-									 'event_date' => '2013-08',
+									 'event_end_after' => '2013-08-19',
 									 'events_only' => true,
 									 'published' => false
 									 ])
-- 
GitLab