diff --git a/VERSIONS_HOTLINE/#17242_send_mail_to_author_when_article_is_validated b/VERSIONS_HOTLINE/#17242_send_mail_to_author_when_article_is_validated
new file mode 100644
index 0000000000000000000000000000000000000000..09c2bc8be43a41ebbf2e348b54d4f3f3545f2793
--- /dev/null
+++ b/VERSIONS_HOTLINE/#17242_send_mail_to_author_when_article_is_validated
@@ -0,0 +1,2 @@
+- ticket #17242: Workflow des articles.
+  - un email est envoyé au créateur de l'article quand celui-ci est validé.
\ No newline at end of file
diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php
index 87b479729933db8ad19dbb0e61b7eb6d24bda081..12a835d227b2b9837961f452c2164f51324c7ba5 100644
--- a/application/modules/admin/controllers/CmsController.php
+++ b/application/modules/admin/controllers/CmsController.php
@@ -269,6 +269,7 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 				$post[$content_field] = Class_CmsUrlTransformer::forSaving($post['ckeditor_'.$content_field]);
 				unset($post['ckeditor_'.$content_field]);
 			}
+
 			return $article
 				->updateAttributes($post)
 				->save();
@@ -285,13 +286,22 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 	protected function _notifyArticleChanged($article) {
 		$this->_sendMailWhenUpdatedStatusToValidationPending($article);
 		$this->_sendMailWhenUpdatedStatusToRefused($article);
+		$this->_sendMailWhenUpdatedStatusToValidated($article);
 	}
 
 
 	protected function _sendMailWhenUpdatedStatusToRefused($article) {
 		if ($article->old_status != Class_Article::STATUS_REFUSED &&
 				$article->getStatus() == Class_Article::STATUS_REFUSED)  {
-			$this->_sendMailToAuteur($article);
+			$this->_sendRefusedMailToAuteur($article);
+		}
+	}
+
+
+	protected function _sendMailWhenUpdatedStatusToValidated($article) {
+		if ($article->old_status != Class_Article::STATUS_VALIDATED &&
+				$article->getStatus() == Class_Article::STATUS_VALIDATED)  {
+			$this->_sendValidatedMailToAuteur($article);
 		}
 	}
 
@@ -304,8 +314,8 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 	}
 
 
-	protected function _sendMailToAuteur($article) {
-		$mail = new ZendAfi_Mail('utf8');
+    protected function prepareMailForAuteur($article) {
+        $mail = new ZendAfi_Mail('utf8');
 		if(!$article->getAuteur()) {
 			$this->_helper->notify('Mail non envoyé: article sans auteur');
 			return;
@@ -315,22 +325,42 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 			return;
 		}
 
-		$body = $article->getRefusMessage();
-		$body = str_replace('TITRE_ARTICLE',
-												$article->getTitre(),
-												$body);
-		$body = str_replace('URL_ARTICLE',
-												$this->view->absoluteUrl($article->getUrl(), null, true),
-												$body);
+        $mail->setFrom('no-reply@no-reply-afi.fr')
+             ->addTo($mail_address);
+        return $mail;
+    }
+
+
+    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;
+    }
+
+
+	protected function _sendRefusedMailToAuteur($article) {
+		if(!$mail = $this->prepareMailForAuteur($article))
+            return;
+        $body = $this->prepareBodyMail($article, $article->getRefusMessage());
+        $this->sendPreparedMail($mail, '[Bokeh] Refus de l\'article '.$article->getTitre(), $body);
+	}
+
+
+    protected function sendPreparedMail($mail, $subject, $body) {
+        $mail->setSubject(quoted_printable_decode($subject))
+             ->setBodyText($body,'utf-8',Zend_Mime::ENCODING_8BIT);
 
-		$mail
-			->setFrom('no-reply@no-reply-afi.fr')
-			->addTo($mail_address)
-			->setSubject(quoted_printable_decode('[Bokeh] Refus de l\'article '.$article->getTitre()))
-			->setBodyText($body,'utf-8',Zend_Mime::ENCODING_8BIT);
 		if($this->_sendMail($mail))
-			$this->_helper->notify('Mail envoyé à: '.$mail_address);
+			$this->_helper->notify('Mail envoyé à: '.$mail->getRecipients()[0]);
+
+    }
+
 
+	protected function _sendValidatedMailToAuteur($article) {
+        if(!$mail = $this->prepareMailForAuteur($article))
+            return;
+				$body = $this->prepareBodyMail($article, $article->getValideMessage());
+				$this->sendPreparedMail($mail, '[Bokeh] Validation de l\'article '.$article->getTitre(), $body);
 	}
 
 
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index 875124191f1bdb3876b8939ec4494116cb926b90..a83af5a69c46e2325b8f78b7e0cfe6207c789584 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -307,6 +307,7 @@
 				'WORKFLOW' => 'Activer ou désactiver la gestion des validations des articles<br />1 = Activé, Autre valeur = désactivé',
 				'WORKFLOW_TEXT_MAIL_ARTICLE_PENDING' => 'Contenu de l\'email de notification d\'article en attente de validation',
 				'WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED' => 'Contenu de l\'email de notification de refus d\'un article à valider',
+				'WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED' => 'Contenu de l\'email de notification de validation d\'un article',
 				'BIBNUM' => 'Activer ou désactiver la bibliothèque numérique<br />1 = Activé, Autre valeur = désactivé',
 				'FORMATIONS' => 'Activer ou désactiver le module formation<br />1 = Activé, Autre valeur = désactivé',
 				'VODECLIC_KEY' => 'Clé de sécurité Vodeclic',
@@ -471,6 +472,16 @@
 
 		return static::get('WORKFLOW_TEXT_MAIL_ARTICLE_REFUSED');
 	}
+
+
+	public static function getWorkflowTextMailArticleValidated() {
+		if(!static::get('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED'))
+			static::set('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED',
+									'L\'article TITRE_ARTICLE a été validé. URL_ARTICLE');
+
+		return static::get('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED');
+	}
+
 }
 
 ?>
diff --git a/library/Class/Article.php b/library/Class/Article.php
index 181dd716caa6e108cfe7987d690926f9341b8bf6..b94da55dd75880ae60446e26993b60564c67d329 100644
--- a/library/Class/Article.php
+++ b/library/Class/Article.php
@@ -624,6 +624,13 @@ class Class_Article extends Storm_Model_Abstract {
 			return  Class_AdminVar::getWorkflowTextMailArticleRefused();
 		return parent::_get('refus_message');
 	}
+
+
+	public function getValideMessage() {
+		return  Class_AdminVar::getWorkflowTextMailArticleValidated();
+	}
+
+
 	/**
 	 * @param string $langue
 	 * @return bool
diff --git a/tests/application/modules/admin/controllers/CmsControllerTest.php b/tests/application/modules/admin/controllers/CmsControllerTest.php
index d2e15f8e9a292db4c85687249fb25642d185fde6..bbc91430e8b70354c4b73d082a9bf9587a9fa582 100644
--- a/tests/application/modules/admin/controllers/CmsControllerTest.php
+++ b/tests/application/modules/admin/controllers/CmsControllerTest.php
@@ -1366,7 +1366,8 @@ abstract class CmsControllerWorkflowTestCase extends CmsControllerTestCase {
 		Zend_Mail::setDefaultTransport($this->mock_transport);
 		Class_Profil::getCurrentProfil()->setMailSite('laurent@afi-sa.fr');
 
-		Class_AdminVar::getLoader()->newInstanceWithId('WORKFLOW')->setValeur('1');
+		Class_AdminVar::newInstanceWithId('WORKFLOW')->setValeur('1');
+		Class_AdminVar::newInstanceWithId('WORKFLOW_TEXT_MAIL_ARTICLE_VALIDATED')->setValeur('');
 	}
 }
 
@@ -1391,8 +1392,6 @@ class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerWorkfl
 																											'login' => 'l',
 																											'password' => 'l',
 																											'mail' => 'l@afi-sa.fr']);;
-		Class_AdminVar::getLoader()->newInstanceWithId('WORKFLOW')->setValeur('1');
-
 		$this->fixture('Class_Article',
 									 ['id' => 18,
 										'id_user' => '',
@@ -1400,19 +1399,44 @@ class CmsControllerNewsAddActionPostWithWorkflowTest extends CmsControllerWorkfl
 										'contenu' => 'September News',
 										'description' => '',
 										'status' =>'']);
+	}
+
 
+	protected function postArticleValidated() {
+		$data = $this->_basePostDatas;
+		$data['status'] = Class_Article::STATUS_VALIDATED;
+		$this->postDispatch('/admin/cms/edit/id/18', $data);
 	}
 
 
 	/** @test */
 	public function statusShouldBeUpdated() {
-		$data = $this->_basePostDatas;
-		$data['status'] = Class_Article::STATUS_VALIDATED;
-		$this->postDispatch('/admin/cms/add/id_cat/23', $data);
+		$this->postArticleValidated();
 		$this->assertEquals(Class_Article::STATUS_VALIDATED, Class_Article::findFirstBy(['order' => 'id desc'])->getStatus());
 	}
 
 
+	/** @test */
+	public function validatedNewsShouldSendMailToAuthor() {
+		$this->postArticleValidated();
+		$this->assertEquals('l@afi-sa.fr',$this->mock_transport->getSentMails()[0]->getRecipients()[0]);
+	}
+
+
+	/** @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()));
+	}
+
+
+	/** @test */
+	public function sentMailToAuthorWhenNewsIsValidatedShouldContainsDefaultSubject() {
+		$this->postArticleValidated();
+		$this->assertEquals('[Bokeh] Validation de l\'article Katsuhiro Otomo en dédicace !',quoted_printable_decode($this->mock_transport->getSentMails()[0]->getSubject()));
+	}
+
+
 	/** @test */
 	public function statusAValiderUpdatedToSameStatusShouldNotSendMail() {
 		Class_Article::find(18)->setStatus(Class_Article::STATUS_VALIDATION_PENDING)->save();