From 31a131dfa2862dce7ce5fb2da3be76b7d4edb215 Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@afi-sa.fr>
Date: Tue, 10 Nov 2015 14:49:15 +0100
Subject: [PATCH] rel #31761 notify article validators based on validation
 rights

---
 .../admin/controllers/CmsController.php       | 20 +++++++++++++++++--
 .../admin/controllers/CmsControllerTest.php   | 10 +++++++++-
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php
index cd79ccf4c6a..1a9d96a3e4e 100644
--- a/application/modules/admin/controllers/CmsController.php
+++ b/application/modules/admin/controllers/CmsController.php
@@ -361,8 +361,24 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 
   protected function _sendMailToValidators($article) {
     $mail = new ZendAfi_Mail('utf8');
-    $mails = array_filter(array_map(function($user) {return $user->getMail();},
-                                    Class_Permission::validateArticle()->getUsers()));
+    $categorie = $article->getCategorie();
+    $validate_article = Class_Permission::getWorkflow(Class_Article::STATUS_VALIDATED);
+
+    $groups = array_filter(Class_Permission::validateArticle()->getGroups(),
+                           function ($group) use ($categorie, $validate_article)
+                           {
+                             return $group->hasPermissionOn($validate_article, $categorie);
+                           });
+
+    $mails = [];
+    foreach($groups as $group) {
+      $mails = array_merge($mails,
+                           array_filter(array_map(function($user)
+                                                  {
+                                                    return $user->getMail();
+                                                  },
+                                                  $group->getUsers())));
+    }
 
     if (empty($mails))
       return;
diff --git a/tests/application/modules/admin/controllers/CmsControllerTest.php b/tests/application/modules/admin/controllers/CmsControllerTest.php
index 5faa3b69ad7..dc3d37f50d7 100644
--- a/tests/application/modules/admin/controllers/CmsControllerTest.php
+++ b/tests/application/modules/admin/controllers/CmsControllerTest.php
@@ -31,7 +31,8 @@ abstract class CmsControllerTestCase extends Admin_AbstractControllerTestCase {
     $_bernard,
     $_group_testing,
     $_group_admin,
-    $_cat_a_la_une;
+    $_cat_a_la_une,
+    $_cat_atelier;
 
 
   public function setUp() {
@@ -155,6 +156,11 @@ abstract class CmsControllerTestCase extends Admin_AbstractControllerTestCase {
     $this->root_category = $this->fixture('Class_ArticleCategorie',
                                           ['id' => 1, 'libelle' => 'Root']);
 
+    $this->_cat_atelier = $this->fixture('Class_ArticleCategorie',
+                                   ['id' => 42,
+                                    'libelle' => 'Atelier',
+                                    'parent_categorie' => $this->root_category]);
+
     $this->_cat_a_la_une = $this->fixture('Class_ArticleCategorie',
                                    ['id' => 23,
                                     'libelle' => 'A la Une',
@@ -1721,6 +1727,8 @@ class CmsControllerNewsAddActionPostWithWorkflowTest
     Class_Permission::validateArticle()->denyTo($this->_group_admin,
                                                 $this->_cat_a_la_une);
 
+    Class_Permission::validateArticle()->permitTo($this->_group_admin,
+                                                  $this->_cat_atelier);
     $this->postDispatch('/admin/cms/add/id_cat/23',
                         $data);
     $this->assertEmpty($this->mock_transport->getSentMails());
-- 
GitLab