From 1dc78c17ca27a598473caec57e44497d5a780f94 Mon Sep 17 00:00:00 2001
From: Alex Arnaud <alex.arnaud@biblibre.com>
Date: Fri, 22 Sep 2023 15:10:14 +0000
Subject: [PATCH] dev#160166 : mailrenderer widget

---
 library/Class/Article/MailRenderer.php        | 25 ++++++++
 library/Class/Newsletter/TemplateHelper.php   | 25 +-------
 library/Class/Notice/MailRenderer.php         | 26 ++++++++
 .../controllers/NewsletterControllerTest.php  | 59 +++++++++----------
 4 files changed, 82 insertions(+), 53 deletions(-)

diff --git a/library/Class/Article/MailRenderer.php b/library/Class/Article/MailRenderer.php
index 9646a5cf5cb..d03963c5040 100644
--- a/library/Class/Article/MailRenderer.php
+++ b/library/Class/Article/MailRenderer.php
@@ -43,4 +43,29 @@ class Class_Article_MailRenderer {
       '<div style="clear:both"></div>'.
       '</div>';
   }
+
+
+  public function renderWithWidget(Class_Newsletter $newsletter) :string {
+
+    $view = (new ZendAfi_Controller_Action_Helper_View)->init();
+    $widget = (new Class_Systeme_Widget_Widget)
+      ->loadFromSettings(['type_module' => Class_Systeme_ModulesAccueil_News::CODE,
+                          'profile_id' => 1,
+                          'preferences' =>
+                          ['layout' => 'list',
+                           'rendering' => 'card-horizontal',
+                           'description_html' => $newsletter->getDisplayFullArticle(),
+                           'id_items' => $newsletter->getArticlesIds(),
+                           'id_categorie' => $newsletter->getArticlesCategoriesIds(),
+                           'display_order'  => Class_Systeme_ModulesAccueil_News::SELECTION
+                          ]
+                          ]);
+
+    $content = (new Intonation_Template)
+      ->addHelperPath($view)
+      ->renderWidget($widget, $view);
+
+    return $content;
+  }
+
 }
diff --git a/library/Class/Newsletter/TemplateHelper.php b/library/Class/Newsletter/TemplateHelper.php
index 4f1faea1e13..92643b4bb13 100644
--- a/library/Class/Newsletter/TemplateHelper.php
+++ b/library/Class/Newsletter/TemplateHelper.php
@@ -226,7 +226,8 @@ class Class_Newsletter_TemplateHelper {
     $content = [];
 
     if ($mail_renderer_function == '_renderWithWidget'){
-      $content['articles'][] = $this->_renderWithWidget();
+      $content['articles'][] = (new Class_Article_MailRenderer)->renderWithWidget($this->_newsletter);
+      $content['records'][] = (new Class_Notice_MailRenderer)->renderWithWidget($this->_newsletter);
       return $content;
     }
 
@@ -247,28 +248,6 @@ class Class_Newsletter_TemplateHelper {
   }
 
 
-  protected function _renderWithWidget() :string {
-    $view = (new ZendAfi_Controller_Action_Helper_View)->init();
-    $widget = (new Class_Systeme_Widget_Widget)
-      ->loadFromSettings(['type_module' => Class_Systeme_ModulesAccueil_News::CODE,
-                          'profile_id' => 1,
-                          'preferences' =>
-                          ['layout' => 'list',
-                           'rendering' => 'card-horizontal',
-                           'description_html' => $this->_newsletter->getDisplayFullArticle(),
-                           'id_items' => $this->_newsletter->getArticlesIds(),
-                           'id_categorie' => $this->_newsletter->getArticlesCategoriesIds(),
-                           'display_order'  => Class_Systeme_ModulesAccueil_News::SELECTION
-                          ]
-                          ]);
-
-    $content = (new Intonation_Template)
-      ->addHelperPath($view)
-      ->renderWidget($widget, $view);
-
-    return $content;
-  }
-
 
   protected function _getContentAsHTML() : string {
     if ( $this->_newsletter_contenu_cache)
diff --git a/library/Class/Notice/MailRenderer.php b/library/Class/Notice/MailRenderer.php
index 98e465987b8..fb0ea78ed09 100644
--- a/library/Class/Notice/MailRenderer.php
+++ b/library/Class/Notice/MailRenderer.php
@@ -50,6 +50,32 @@ class Class_Notice_MailRenderer {
   }
 
 
+  public function renderWithWidget(Class_Newsletter $newsletter) :string {
+    if (! ((bool)$newsletter->getIdCatalogue() && (bool)$newsletter->getIdPanier()))
+      return '';
+
+    $view = (new ZendAfi_Controller_Action_Helper_View)->init();
+    $widget = (new Class_Systeme_Widget_Widget)
+      ->loadFromSettings(['type_module' => Class_Systeme_ModulesAccueil_Kiosque::CODE,
+                          'profile_id' => 1,
+                          'preferences' =>
+                          ['layout' => 'list',
+                           'rendering' => 'card-horizontal',
+                           'aleatoire' => 0,
+                           'id_catalogue' => $newsletter->getIdCatalogue(),
+                           'id_panier' => $newsletter->getIdPanier(),
+                           'display_order'  => Class_Systeme_ModulesAccueil_News::SELECTION
+                          ]
+                          ]);
+
+    $content = (new Intonation_Template)
+      ->addHelperPath($view)
+      ->renderWidget($widget, $view);
+
+    return $content ??'';
+  }
+
+
   protected function _title(Class_Notice $record) : string {
     return $record->getTitrePrincipal() . $this->_infos($record);
   }
diff --git a/tests/application/modules/admin/controllers/NewsletterControllerTest.php b/tests/application/modules/admin/controllers/NewsletterControllerTest.php
index 378d8ab35ce..7d8f11dc3bd 100644
--- a/tests/application/modules/admin/controllers/NewsletterControllerTest.php
+++ b/tests/application/modules/admin/controllers/NewsletterControllerTest.php
@@ -1011,20 +1011,33 @@ abstract class Admin_NewsletterControllerPreviewActionTestCase
 
 
 
-
-class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHoldersTest
-  extends Admin_NewsletterControllerPreviewActionTestCase {
+abstract class Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase extends Admin_NewsletterControllerPreviewActionTestCase{
+  protected Class_Newsletter $_newsletter;
 
   public function setUp() {
     parent::setUp();
 
-    Class_Newsletter::find(3)->setContenu("Top\n[newsletter_records]\nMiddle\n[newsletter_articles]\nfooter")
-                             ->save();
-
+    $this->_newsletter = Class_Newsletter::find(3);
+    $this->_newsletter
+      ->setContenu("Top\n[newsletter_records]\nMiddle\n[newsletter_articles]\nfooter");
+    $this->_customizeNewsletter($this->_newsletter);
+    $this->_newsletter
+      ->save();
     $this->dispatch('/admin/newsletter/preview/id/3');
   }
 
 
+  protected function _customizeNewsletter(Class_Newsletter $newsletter){
+  }
+}
+
+
+
+
+
+class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHoldersTest
+  extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase {
+
   protected function _expectedText() {
     return file_get_contents(__DIR__.'/newsletter_placeholder_content_expected.txt');
   }
@@ -1062,18 +1075,11 @@ class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHolder
 
 
 class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHoldersWithoutCatalogueTest
-  extends Admin_NewsletterControllerPreviewActionTestCase {
+  extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase {
 
-
-  public function setUp() {
-    parent::setUp();
-
-    Class_Newsletter::find(3)
-      ->setIdCatalogue(0)
-      ->setContenu("Top\n[newsletter_records]\nMiddle\n[newsletter_articles]\nfooter")
-      ->save();
-
-    $this->dispatch('/admin/newsletter/preview/id/3');
+  protected function _customizeNewsletter(Class_Newsletter $newsletter) {
+    $newsletter
+      ->setIdCatalogue(0);
   }
 
 
@@ -1083,7 +1089,7 @@ class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHolder
 
 
   /** @test */
-  public function pageShouldLoad() {
+  public function pageShouldContainsExpectedText() {
     $this->assertContains($this->_expectedText(), $this->_response->getBody());
   }
 }
@@ -1092,19 +1098,12 @@ class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHolder
 
 
 class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHoldersWithoutArticlesTes
-  extends Admin_NewsletterControllerPreviewActionTestCase {
-
+  extends Admin_NewsletterControllerPreviewActionPlaceHoldersTestCase {
 
-  public function setUp() {
-    parent::setUp();
-
-    Class_Newsletter::find(3)
+  protected function _customizeNewsletter(Class_Newsletter $newsletter) {
+    $newsletter
       ->setArticlesIds(0)
-      ->setArticlesCategoriesIds(0)
-      ->setContenu("Top\n[newsletter_records]\nMiddle\n[newsletter_articles]\nfooter")
-      ->save();
-
-    $this->dispatch('/admin/newsletter/preview/id/3');
+      ->setArticlesCategoriesIds(0);
   }
 
 
@@ -1114,7 +1113,7 @@ class Admin_NewsletterControllerPreviewActionWithArticlesSelectionAndPlaceHolder
 
 
   /** @test */
-  public function pageShouldLoad() {
+  public function pageShouldContainsExpectedText() {
     $this->assertContains($this->_expectedText(), $this->_response->getBody());
   }
 }
-- 
GitLab