From 8bca440f822d1afe6eb85eb47d6c67ea36db4a36 Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@afi-sa.fr>
Date: Tue, 10 Nov 2015 17:33:07 +0100
Subject: [PATCH] rel #31761 notify article validators: add text substitutions
 in admin var

---
 .../admin/controllers/CmsController.php       | 43 ++++++++++---------
 library/Class/AdminVar.php                    |  6 +--
 .../admin/controllers/CmsControllerTest.php   | 11 +++--
 3 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php
index b69685ae34e..f4bee15637e 100644
--- a/application/modules/admin/controllers/CmsController.php
+++ b/application/modules/admin/controllers/CmsController.php
@@ -321,11 +321,16 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 
 
   protected function prepareBodyMail($article, $message) {
-    $message = str_replace('TITRE_ARTICLE', $article->getTitre(), $message);
-    $message = str_replace('URL_ARTICLE',
-                           $this->view->absoluteUrl($article->getUrl(), null, true),
-                           $message);
-    return $message;
+    return
+      str_replace(['TITRE_ARTICLE', 'URL_ARTICLE', 'AUTHOR_ARTICLE', 'SAVED_BY_ARTICLE'],
+
+                  [
+                   $article->getTitre(),
+                   $this->view->absoluteUrl($article->getUrl(), null, true),
+                   $article->getNomCompletAuteur(),
+                   $this->identity->getNomComplet(),
+                  ],
+                  $message);
   }
 
 
@@ -359,28 +364,26 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
   }
 
 
-  protected function _sendMailToValidators($article) {
-    $mails = Class_Permission::getWorkflow(Class_Article::STATUS_VALIDATED)
-      ->getUsersOnModel($article->getCategorie())
-      ->collect('mail');
+  protected function _getValidatorsMail($article) {
+    return array_unique(
+                        Class_Permission::getWorkflow(Class_Article::STATUS_VALIDATED)
+                        ->getUsersOnModel($article->getCategorie())
+                        ->collect('mail')
+                        ->getArrayCopy());
+  }
 
-    if ($mails->isEmpty())
-      return;
 
-    $body = Class_AdminVar::getWorkflowTextMailArticlePending();
-    $body = str_replace('TITRE_ARTICLE',
-                        $article->getTitre(),
-                        $body);
-    $body = str_replace('URL_ARTICLE',
-                        $this->view->absoluteUrl($article->getUrl(), null, true),
-                        $body);
+  protected function _sendMailToValidators($article) {
+    if (!$mails = $this->_getValidatorsMail($article))
+      return;
 
     $mail = new ZendAfi_Mail('utf8');
     $mail
       ->setFrom('no-reply@afi-sa.fr')
-      ->addTo(implode(',', array_unique($mails->getArrayCopy())))
+      ->addTo(implode(',', $mails))
       ->setSubject($this->_('[Bokeh] Validation d\'article en attente: ') . $article->getTitre())
-      ->setBodyText($body);
+      ->setBodyText($this->prepareBodyMail($article,
+                                           Class_AdminVar::getWorkflowTextMailArticlePending()));
 
     if($this->_sendMail($mail))
       $this->_helper->notify($this->_('Mail de validation envoyé aux validateurs.'));
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index 1e029fe4334..ae2cb2a67ce 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -193,9 +193,9 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
                                                                         'Les identifiants 1 à 5 sont réservés']),
                                                                ['validate' => 'ZendAfi_Validate_WorkflowVar',
                                                                 'after_save' => 'setWorkflowPermissions']),
-                 'WORKFLOW_TEXT_MAIL_ARTICLE_PENDING' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification d\'article en attente de validation')),
-                 'WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de refus d\'un article à valider')),
-                 'WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de validation d\'un article')),
+                 'WORKFLOW_TEXT_MAIL_ARTICLE_PENDING' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification d\'article en attente de validation. Termes substitués: TITRE_ARTICLE, URL_ARTICLE, AUTHOR_ARTICLE, SAVED_BY_ARTICLE')),
+                 'WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de refus d\'un article à valider. Termes substitués: TITRE_ARTICLE, URL_ARTICLE, AUTHOR_ARTICLE, SAVED_BY_ARTICLE')),
+                 'WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED' => Class_AdminVar_Meta::newDefault($this->_('Contenu de l\'email de notification de validation d\'un article. Termes substitués: TITRE_ARTICLE, URL_ARTICLE, AUTHOR_ARTICLE, SAVED_BY_ARTICLE')),
 
        ],
        'album' => ['ALBUMS_LIST_MODE' => Class_AdminVar_Meta::newOnOff($this->_('Le gestionnaire de contenu affiche les albums sous forme de liste paginée au lieu de d\'une arborescence. Cet affichage est adapté lorsque le nombre d\'albums devient trop important')),
diff --git a/tests/application/modules/admin/controllers/CmsControllerTest.php b/tests/application/modules/admin/controllers/CmsControllerTest.php
index 4ad82618f13..b7824f3f15d 100644
--- a/tests/application/modules/admin/controllers/CmsControllerTest.php
+++ b/tests/application/modules/admin/controllers/CmsControllerTest.php
@@ -59,6 +59,8 @@ abstract class CmsControllerTestCase extends Admin_AbstractControllerTestCase {
 
     $this->_admin_bib = $this->fixture('Class_Users',['id' => 10,
                                                       'login' => 'AdminBibConnected',
+                                                      'nom' => 'Super',
+                                                      'prenom' => 'Mario',
                                                       'bib' => $this->annecy,
                                                       'role' => 'admin_bib',
                                                       'mail' => 'admin@afi-sa.fr',
@@ -1505,10 +1507,10 @@ abstract class CmsControllerWorkflowTestCase extends CmsControllerWithPermission
     $this->fixture('Class_AdminVar', ['id' => 'WORKFLOW', 'valeur' => '1']);
     $this->fixture('Class_AdminVar',
                    ['id' => 'WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED',
-                    'valeur' => 'L\'article TITRE_ARTICLE a été validé. URL_ARTICLE']);
+                    'valeur' => 'L\'article TITRE_ARTICLE a été validé par SAVED_BY_ARTICLE. URL_ARTICLE']);
     $this->fixture('Class_AdminVar',
                    ['id' => 'WORKFLOW_TEXT_MAIL_ARTICLE_PENDING',
-                    'valeur' => 'Un nouvel article est à valider. TITRE_ARTICLE URL_ARTICLE']);
+                    'valeur' => 'Un nouvel article de AUTHOR_ARTICLE est à valider. TITRE_ARTICLE URL_ARTICLE']);
     $this->fixture('Class_AdminVar',
                    ['id' => 'WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED',
                     'valeur' => 'L\'article a été refusé.']);
@@ -1614,6 +1616,7 @@ class CmsControllerNewsAddActionPostWithWorkflowTest
                                                      ['id' => 1,
                                                       'login' => 'l',
                                                       'password' => 'l',
+                                                      'nom' => 'Batman',
                                                       'mail' => 'l@afi-sa.fr']);;
     $this->fixture('Class_Article',
                    ['id' => 18,
@@ -1670,7 +1673,7 @@ class CmsControllerNewsAddActionPostWithWorkflowTest
   /** @test */
   public function sentMailToAuthorWhenNewsIsValidatedShouldContainsDefaultBody() {
     $this->postArticleValidated();
-    $this->assertEquals('L\'article Katsuhiro Otomo en dédicace ! a été validé. http://localhost'.BASE_URL.'/cms/articleview/id/18',quoted_printable_decode($this->mock_transport->getSentMails()[0]->getBodyText()->getContent()));
+    $this->assertEquals('L\'article Katsuhiro Otomo en dédicace ! a été validé par Mario Super. http://localhost'.BASE_URL.'/cms/articleview/id/18',quoted_printable_decode($this->mock_transport->getSentMails()[0]->getBodyText()->getContent()));
   }
 
 
@@ -1767,7 +1770,7 @@ class CmsControllerNewsAddActionPostWithWorkflowTest
   /** @test */
   public function sentMailToAdminWhenValidationPendingShouldContainsDefaultText() {
     $this->postArticleAValider();
-    $this->assertEquals('Un nouvel article est à valider. Katsuhiro Otomo en dédicace ! http://localhost'.BASE_URL.'/cms/articleview/id/18',quoted_printable_decode($this->mock_transport->getSentMails()[0]->getBodyText()->getContent()));
+    $this->assertEquals('Un nouvel article de Batman est à valider. Katsuhiro Otomo en dédicace ! http://localhost'.BASE_URL.'/cms/articleview/id/18',quoted_printable_decode($this->mock_transport->getSentMails()[0]->getBodyText()->getContent()));
   }
 
 
-- 
GitLab