From d4160674d851d48e3a477aeb417c69735109038c Mon Sep 17 00:00:00 2001
From: gloas <gloas@git-test.afi-sa.fr>
Date: Mon, 30 Sep 2013 15:06:16 +0000
Subject: [PATCH] reponseFormulaire

---
 .gitattributes                                |  1 +
 .../admin/controllers/ModoController.php      | 10 +++-
 cosmogramme/sql/patch/patch_174.sql           |  5 ++
 library/Class/Formulaire.php                  | 44 ++++++++++++++-
 .../ZendAfi/View/Helper/ReponseFormulaire.php |  6 +-
 .../View/Helper/ReponseFormulaireFilled.php   | 45 +++++++++++++++
 .../ModoControllerFormulaireTest.php          | 55 +++++++++++++++++--
 tests/library/Class/FormulaireTest.php        |  9 ++-
 .../View/Helper/ReponseFormulaireTest.php     | 26 +++++++++
 9 files changed, 189 insertions(+), 12 deletions(-)
 create mode 100644 library/ZendAfi/View/Helper/ReponseFormulaireFilled.php

diff --git a/.gitattributes b/.gitattributes
index dcfa41eb8e9..fd5da2846c0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2876,6 +2876,7 @@ library/ZendAfi/View/Helper/RenderDateRange.php -text
 library/ZendAfi/View/Helper/RenderForm.php -text
 library/ZendAfi/View/Helper/RenderLieu.php -text
 library/ZendAfi/View/Helper/ReponseFormulaire.php -text
+library/ZendAfi/View/Helper/ReponseFormulaireFilled.php -text
 library/ZendAfi/View/Helper/ReseauxSociaux.php -text
 library/ZendAfi/View/Helper/ShareByMail.php -text
 library/ZendAfi/View/Helper/SocialShare.php -text
diff --git a/application/modules/admin/controllers/ModoController.php b/application/modules/admin/controllers/ModoController.php
index 9a71c3dd567..862c89e835d 100644
--- a/application/modules/admin/controllers/ModoController.php
+++ b/application/modules/admin/controllers/ModoController.php
@@ -659,21 +659,27 @@ class Admin_ModoController extends ZendAfi_Controller_Action {
 	public function reponseFormulaireSendMailAction() {
 		$this->getHelper('ViewRenderer')->setNoRender();		
 		xdebug_break();
-		if($this->_request->isPost()) {
+		if($this->_request->isPost() && $formulaire = Class_Formulaire::find((int)$this->_getParam('id')) ) {
+			
 			$mail = new ZendAfi_Mail('utf8');
 			$mail
 				->setFrom($this->_request->getPost('mail_expediteur'))
 				->addTo($this->_request->getPost('mail_destinataire'))
 				->addTo($this->_request->getPost('mail_expediteur'))
 				->setSubject($this->_request->getPost('sujet'))
-				->setBodyText($this->_request->getPost('reponse'),'UTF-8',Zend_Mime::ENCODING_8BIT);
+				->setBodyText($this->_request->getPost('reponse'));
+
 		
 			try {
 				$mail->send();
+				$formulaire->setMailAnswer(serialize($mail))->save();
+				
 			} catch (Zend_Mail_Exception $e) {
 				$this->_helper->notify($this->view->_('Aucun courriel envoyé, erreur: ').$this->view->_($e->getMessage()));
 			}
 		}
+		
+		return $this->_helper->notify($this->view->_("Aucun courriel envoyé, erreur: le formulaire n'existe plus"));
 	}
 
 
diff --git a/cosmogramme/sql/patch/patch_174.sql b/cosmogramme/sql/patch/patch_174.sql
index d80ea4bac57..c5c80bb498f 100644
--- a/cosmogramme/sql/patch/patch_174.sql
+++ b/cosmogramme/sql/patch/patch_174.sql
@@ -1 +1,6 @@
+<<<<<<< HEAD
 delete from bib_admin_var where clef='CSS_EDITOR'; 
+=======
+alter table formulaires add column id_user_moderateur int(11);
+alter table formulaires add column mail_answer text;
+>>>>>>> reponseFormulaire : mail save + tests
diff --git a/library/Class/Formulaire.php b/library/Class/Formulaire.php
index 824e9a51dfa..9e9a40d80e3 100644
--- a/library/Class/Formulaire.php
+++ b/library/Class/Formulaire.php
@@ -34,11 +34,15 @@ class Class_Formulaire extends Storm_Model_Abstract {
 	protected	$_table_name='formulaires';
 	protected $_belongs_to =  ['user' => ['model' => 'Class_Users',
 																				'referenced_in' => 'id_user'],
+														
+														 'moderateur' => ['model' => 'Class_Users',
+																							'referenced_in' => 'id_user_moderateur'],
 
 														 'article' => ['model' => 'Class_Article',
 																					 'referenced_in' => 'id_article']];
 
-	protected $_default_attribute_values = ['data' => 'a:0:{}'];
+	protected $_default_attribute_values = ['data' => 'a:0:{}',
+																					'mail_answer' => ''];
 	protected $_datas;
 
 
@@ -51,6 +55,42 @@ class Class_Formulaire extends Storm_Model_Abstract {
 		return array_unique($names);
 	}
 
+	
+	/*
+	 * @return ZendAfi_Mail
+	 */
+	public function getMail() {
+		return unserialize($this->getMailAnswer());
+	}
+	
+
+	public function getMailDate() {
+		return $this->getMail()->getDate();
+	}
+
+
+	public function getMailSubject () {
+		return $this->getMail()->getSubject();
+	}
+
+
+	public function getMailBody () {
+		if($this->getMail()->getBodyText())
+			return quoted_printable_decode($this->getMail()->getBodyText()->getContent());
+		return '';
+	}
+
+
+	public function getMailExpediteur () {
+		return $this->getMail()->getFrom();
+	}
+
+
+	public function getMailDestinataire () {
+		if($this->getMail()->getRecipients())
+			return $this->getMail()->getRecipients()[0];
+		return '';
+	}
 
 	public function getDataNames() {
 		return array_keys(array_change_key_case($this->getDatas()));
@@ -124,4 +164,6 @@ class Class_Formulaire extends Storm_Model_Abstract {
 	public function beValidated() {
 		return $this->setValidated(true);
 	}
+
+
 }
diff --git a/library/ZendAfi/View/Helper/ReponseFormulaire.php b/library/ZendAfi/View/Helper/ReponseFormulaire.php
index fc97034dc6d..04533bcdfe6 100644
--- a/library/ZendAfi/View/Helper/ReponseFormulaire.php
+++ b/library/ZendAfi/View/Helper/ReponseFormulaire.php
@@ -68,9 +68,9 @@ class ZendAfi_View_Helper_ReponseFormulaire extends Zend_View_Helper_HtmlElement
 
 	public function mailFormulaire($warning = '') {
 		$html = '<div id="form_accordion">';
-		/*	html.= ($this->_formulaire->hasMailReponse()) 
+		$html.= ($this->_formulaire->hasMailAnswer()) 
 			? $this->filledMailFormulaire()
-			: $this->emptyMailFormulaire();*/
+			: $this->emptyMailFormulaire($warning);
 		$html.= $this->emptyMailFormulaire($warning);
 		return $html.='</div>';
 	}
@@ -78,7 +78,7 @@ class ZendAfi_View_Helper_ReponseFormulaire extends Zend_View_Helper_HtmlElement
 
 	public function filledMailFormulaire() {
 		$html = $this->getFormLegend($this->view->_('Voir la réponse.'));
-		return $html.=(new ZendAfi_Form_ReponseFormulaireMail());
+		return $html.=$this->view->reponseFormulaireFilled($this->_formulaire);
 	}
 
 	
diff --git a/library/ZendAfi/View/Helper/ReponseFormulaireFilled.php b/library/ZendAfi/View/Helper/ReponseFormulaireFilled.php
new file mode 100644
index 00000000000..2a6c603735f
--- /dev/null
+++ b/library/ZendAfi/View/Helper/ReponseFormulaireFilled.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
+ *
+ * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+ * the Free Software Foundation.
+ *
+ * There are special exceptions to the terms and conditions of the AGPL as it
+ * is applied to this software (see README file).
+ *
+ * AFI-OPAC 2.0 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * along with AFI-OPAC 2.0; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA 
+ */
+
+class ZendAfi_View_Helper_ReponseFormulaireFilled extends Zend_View_Helper_HtmlElement {
+
+	public function reponseFormulaireFilled($formulaire) {
+
+		$html='<dl>';
+		
+		$datas = [$this->view->_('Envoyé le') => $formulaire->getMailDate(),
+							$this->view->_('Expéditeur') => $formulaire->getMailExpediteur(),
+							$this->view->_('Destinataire') => $formulaire->getMailDestinataire(),
+							$this->view->_('Sujet') => $formulaire->getMailSubject(),
+							$this->view->_('Réponse') => $formulaire->getMailBody()];
+
+		foreach($datas as $name => $value){
+			$html.= '<dt>'.$name.'</dt>';
+			$html.= '<dd>'.nl2br($value).'</dd>';
+		}		
+
+		return $html.='</dl>';
+
+	}
+
+}
+
+?>
\ No newline at end of file
diff --git a/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php b/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php
index 2fd0698258b..d7663ba79f3 100644
--- a/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php
+++ b/tests/application/modules/admin/controllers/ModoControllerFormulaireTest.php
@@ -20,6 +20,7 @@
  */
 
 abstract class ModoControllerFormulaireForArticleTestCase extends Admin_AbstractControllerTestCase {
+	protected $formulaire_de_bougie;
 	public function setUp() {
 		parent::setUp();
 		
@@ -41,7 +42,7 @@ abstract class ModoControllerFormulaireForArticleTestCase extends Admin_Abstract
 																					 'article' => $article,
 																					 'validated' => false]);
 
-		$formulaire_de_bougie = 
+		$this->formulaire_de_bougie = 
 			Class_Formulaire::newInstanceWithId(5, ['data' => serialize(['nom' => 'Bougie',
 																																	 'Prenom' => 'Mireille']),
 																							'date_creation' => '2012-12-06 10:00:01',
@@ -63,14 +64,14 @@ abstract class ModoControllerFormulaireForArticleTestCase extends Admin_Abstract
 			->answers(true)
 
 			->whenCalled('delete')
-			->with($formulaire_de_bougie)
+			->with($this->formulaire_de_bougie)
 			->answers(true)
 
 			->whenCalled('save')
 			->answers(true)
 
 			->whenCalled('save')
-			->with($formulaire_de_bougie)
+			->with($this->formulaire_de_bougie)
 			->answers(true)
 
 			->whenCalled('findAllBy')
@@ -78,7 +79,7 @@ abstract class ModoControllerFormulaireForArticleTestCase extends Admin_Abstract
 							 'model' => $article,
 							 'order' => 'date_creation desc'])
 			->answers([$formulaire_de_tinguette,
-								 $formulaire_de_bougie,
+								 $this->formulaire_de_bougie,
 								 $formulaire_de_lefort])
 
 			->whenCalled('findAllBy')
@@ -93,7 +94,7 @@ abstract class ModoControllerFormulaireForArticleTestCase extends Admin_Abstract
 
 			->whenCalled('find')
 			->with('5')
-			->answers($formulaire_de_bougie)
+			->answers($this->formulaire_de_bougie)
 
 			->beStrict();
 	}
@@ -500,6 +501,14 @@ class ModoControllerFormulaireVisualiserReponseArticleSendResponseByMailTest ext
 		Zend_Mail::setDefaultTransport($this->mock_transport);
 		Class_Users::getIdentity()->setMail('laurent@afi-sa.fr');
 
+		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Formulaire')
+			->whenCalled('save')
+			->answers(true)
+
+			->whenCalled('find')
+			->with(['id'=>5])
+			->answers($this->formulaire_de_bougie);
+
 		$this->postDispatch('admin/modo/reponse-formulaire-send-mail/id_article/12/id/5',
 												['mail_expediteur' => 'gigi@afi-sa.fr',
 												 'mail_destinataire' => 'martine@afi-sa.fr',
@@ -531,6 +540,42 @@ class ModoControllerFormulaireVisualiserReponseArticleSendResponseByMailTest ext
 		$this->assertEquals("Les lits sont trop petits pour aujourd'hui! éèà@€ôö",$this->mock_transport->getSentMails()[0]->getBodyText()->getContent());
 	}
 
+
+/** @test **/
+	public function mailSendShouldHaveBeenSave() {
+			$this->assertEquals(5, Class_Formulaire::getFirstAttributeForLastCallOn('save')->getId());
+	}
+
+
+/** @test **/
+	public function dateTimeShouldHaveBeenSave() {
+		$this->assertNotEmpty($this->formulaire_de_bougie->getMailDate());
+	}
+
+	
+/** @test **/
+	public function sujetShouldHaveBeenSave() {
+		$this->assertEquals('Versaille', $this->formulaire_de_bougie->getMailSubject());
+	}
+
+
+/** @test **/
+	public function bodyShouldHaveBeenSave() {
+		$this->assertEquals("Les lits sont trop petits pour aujourd'hui! éèà@€ôö", $this->formulaire_de_bougie->getMailBody());
+	}
+
+
+/** @test **/
+	public function destinataireShouldHaveBeenSave() {
+		$this->assertEquals('martine@afi-sa.fr', $this->formulaire_de_bougie->getMailDestinataire());
+	}
+
+
+/** @test **/
+	public function expediteurShouldHaveBeenSave() {
+		$this->assertEquals('gigi@afi-sa.fr', $this->formulaire_de_bougie->getMailExpediteur());
+	}
+
 }
 
 ?>
diff --git a/tests/library/Class/FormulaireTest.php b/tests/library/Class/FormulaireTest.php
index 7d4e6c444d0..d957795f924 100644
--- a/tests/library/Class/FormulaireTest.php
+++ b/tests/library/Class/FormulaireTest.php
@@ -22,8 +22,10 @@
 class FormulaireTest extends Storm_Test_ModelTestCase {
 	public function setUp() {
 		parent::setUp();
+		$this->_jessy = Class_Users::newInstanceWithId(77, ['login' => 'Jessy']);
 		$this->_fantomas = Class_Users::newInstanceWithId(23, ['login' => 'fantomas']);
-		$this->_formulaire = Class_Formulaire::newInstanceWithId(2, ['id_user' => 23]);
+		$this->_formulaire = Class_Formulaire::newInstanceWithId(2, ['id_user' => 23,
+																																 'id_user_moderateur' => 77]);
 		$this->_article = Class_Article::newInstanceWithId(88, []);
 		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Formulaire')
 		->whenCalled('findAllBy')
@@ -52,4 +54,9 @@ class FormulaireTest extends Storm_Test_ModelTestCase {
 	}
 
 
+	/** @test **/
+	public function formualireModerateurSHouldBeJessy() {
+		$this->assertEquals('Jessy', $this->_formulaire->getModerateur()->getLogin());
+	}
+
 }
diff --git a/tests/library/ZendAfi/View/Helper/ReponseFormulaireTest.php b/tests/library/ZendAfi/View/Helper/ReponseFormulaireTest.php
index 17f48ee0b3d..64f582effc1 100644
--- a/tests/library/ZendAfi/View/Helper/ReponseFormulaireTest.php
+++ b/tests/library/ZendAfi/View/Helper/ReponseFormulaireTest.php
@@ -173,4 +173,30 @@ class ReponseFormulaireWithNoUserTest extends AbstractReponseSetupFormulaireTest
 
 
 
+class ReponseFormulaireWithReponseInDbTest extends AbstractReponseSetupFormulaireTest {
+
+	protected $_html;
+
+	public function setup() {
+		parent::setup();
+		$this->_formulaire_de_bougie
+			->setMailAnswer(serialize((new ZendAfi_Mail())->setFrom('toto')
+											->setSubject("les tests c'est bien")));
+		$this->_helper = new ZendAfi_View_Helper_ReponseFormulaire();
+		$this->_helper->setView(new ZendAfi_Controller_Action_Helper_View());
+
+		$this->_html = $this->_helper->reponseFormulaire($this->_formulaire_de_bougie);
+	}
+
+
+	/** @test **/
+	public function mailReponseShouldBeLesTestsCEstBien() {
+		$this->assertXPathContentContains($this->_html,'//dd',
+																			"les tests c'est bien");
+	}
+}
+
+
+
+
 ?>
\ No newline at end of file
-- 
GitLab