From 7160caf7d4323b5c0ce593e9476db01b76ee26ea Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@git-test.afi-sa.fr>
Date: Sat, 17 Nov 2012 14:45:32 +0000
Subject: [PATCH] =?UTF-8?q?Affichage=20du=20nombre=20de=20formulaires=20re?=
 =?UTF-8?q?stant=20=C3=A0=20mod=C3=A9rer=20dans=20tous=20les=20indicateurs?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../scripts/modo/articlesformulaires.phtml    |  3 +-
 library/Class/Article.php                     |  6 +++-
 library/Class/Formulaire.php                  | 11 ++++++-
 library/Class/Moderer.php                     |  2 +-
 .../ModoControllerFormulaireTest.php          | 32 ++++++++++++++++---
 5 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/application/modules/admin/views/scripts/modo/articlesformulaires.phtml b/application/modules/admin/views/scripts/modo/articlesformulaires.phtml
index 58087f07009..13edd99c7b1 100644
--- a/application/modules/admin/views/scripts/modo/articlesformulaires.phtml
+++ b/application/modules/admin/views/scripts/modo/articlesformulaires.phtml
@@ -1,7 +1,7 @@
 <?php
 echo '<ul>';
 foreach ($this->articles as $article) {
-	echo sprintf('<li><a href="%s">%s [%d]</a></li>',
+	echo sprintf('<li><a href="%s">%s [%d/%d]</a></li>',
 							 $this->url(['module' => 'admin',
 													 'controller' => 'modo',
 													 'action' => 'formulaires',
@@ -9,6 +9,7 @@ foreach ($this->articles as $article) {
 													null,
 													true),
 							 $article->getTitre(),
+							 $article->numberOfFormulairesToValidate(),
 							 $article->numberOfFormulaires());
 }
 echo '</ul>';
diff --git a/library/Class/Article.php b/library/Class/Article.php
index 26e49e8b80d..59a2de89144 100644
--- a/library/Class/Article.php
+++ b/library/Class/Article.php
@@ -403,7 +403,11 @@ class Class_Article extends Storm_Model_Abstract {
 
 													'formulaires' => ['model' => 'Class_Formulaire',
 																						'role' => 'article',
-																						'order' => 'date_creation desc']
+																						'order' => 'date_creation desc'],
+
+													'formulaires_to_validate' => ['model' => 'Class_Formulaire',
+																												'role' => 'article',
+																												'scope' => ['validated' => false]]
 	];
 
 	protected $_belongs_to = ['categorie' => ['model' => 'Class_ArticleCategorie',
diff --git a/library/Class/Formulaire.php b/library/Class/Formulaire.php
index 1febed9f581..81a5fc16801 100644
--- a/library/Class/Formulaire.php
+++ b/library/Class/Formulaire.php
@@ -19,9 +19,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
  */
 
+class FormulaireLoader extends Storm_Model_Loader {
+	public function countNotValidated() {
+		return Class_Formulaire::countBy(['validated' => false]);
+	}
+}
+
+
+
+
 class Class_Formulaire extends Storm_Model_Abstract {
 	use Trait_TimeSource;
-
+	protected $_loader_class = 'FormulaireLoader';
 	protected	$_table_name='formulaires';
 	protected $_belongs_to =  ['user' => ['model' => 'Class_Users',
 																				'referenced_in' => 'id_user'],
diff --git a/library/Class/Moderer.php b/library/Class/Moderer.php
index 7fafebcc240..f3cab8c77d3 100644
--- a/library/Class/Moderer.php
+++ b/library/Class/Moderer.php
@@ -118,7 +118,7 @@ class Class_Moderer {
 			if (Class_AdminVar::isCmsFormulairesEnabled()) {
 				$moderations['formulaires'] =['label' => $translate->_('Formulaires'),
 																			'url' => BASE_URL . '/admin/modo/formulaires',
-																			'count' => Class_Formulaire::count()];
+																			'count' => Class_Formulaire::countNotValidated()];
 			}
 
 			$this->_moderation_stats = $moderations;
diff --git a/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php b/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php
index 321896ece8f..d3e6ecd2571 100644
--- a/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php
+++ b/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php
@@ -36,6 +36,7 @@ abstract class ModoControllerFormulaireForArticleTestCase extends Admin_Abstract
 			->with([ 'role' => 'article',
 							 'model' => $article,
 							 'order' => 'date_creation desc'])
+
 			->answers([
 				Class_Formulaire::newInstanceWithId(3, ['data' => serialize(['nom' => 'Tinguette',
 																																		 'prenom' => 'Quentine']),
@@ -264,10 +265,27 @@ class ModoControllerFormulaireListTest extends Admin_AbstractControllerTestCase
 							'role' => 'article'])
 			->answers(2)
 
+			->whenCalled('countBy')
+			->with(['model' => $hackaton,
+							'role' => 'article',
+							'scope' => ['validated' => false]])
+			->answers(2)
+
 			->whenCalled('countBy')
 			->with(['model' => $preinscription,
 							'role' => 'article'])
-			->answers(4);
+			->answers(4)
+
+			->whenCalled('countBy')
+			->with(['model' => $preinscription,
+							'role' => 'article',
+							'scope' => ['validated' => false]])
+			->answers(1)
+
+			->whenCalled('countNotValidated')
+			->answers(3)
+
+			->beStrict();
 
     $this->dispatch('admin/modo/formulaires/', true);
   }
@@ -275,13 +293,13 @@ class ModoControllerFormulaireListTest extends Admin_AbstractControllerTestCase
 
 	/** @test */
 	public function liShouldContainsLinkToFormulaireForHackaton() {
-		$this->assertXPathContentContains('//li/a[contains(@href,"admin/modo/formulaires/id_article/4")]', 'Inscrivez vous au Hackaton [2]', $this->_response->getBody());
+		$this->assertXPathContentContains('//li/a[contains(@href,"admin/modo/formulaires/id_article/4")]', 'Inscrivez vous au Hackaton [2/2]', $this->_response->getBody());
 	}
 
 
 	/** @test */
 	public function liShouldContainsLinkToFormulaireForPreinscription() {
-		$this->assertXPathContentContains('//li/a[contains(@href,"admin/modo/formulaires/id_article/2")]', 'Formulaire de préinscription [4]');
+		$this->assertXPathContentContains('//li/a[contains(@href,"admin/modo/formulaires/id_article/2")]', 'Formulaire de préinscription [1/4]');
 	}
 }
 
@@ -292,13 +310,19 @@ class ModoControllerFormulaireIndexWithOptionActivatedTest extends Admin_Abstrac
 	public function setUp() {
 		parent::setUp();
 		Class_AdminVar::newInstanceWithId('CMS_FORMULAIRES')->setValeur(1);
+
+		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Formulaire')
+			->whenCalled('countBy')
+			->with(['validated' => false])
+			->answers(2);
+
 		$this->dispatch('admin/modo/', true);
 	}
 
 
 	/** @test */
 	public function linkToModerateFormulairesShouldBePresent() {
-		$this->assertXPath('//a[contains(@href, "/admin/modo/formulaires")]');
+		$this->assertXPathContentContains('//a[contains(@href, "/admin/modo/formulaires")]/following-sibling::span', '2');
 	}
 }
 
-- 
GitLab