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