]> git.agnieray.net Git - galette.git/blobdiff - galette/lib/Galette/Features/Replacements.php
Add pre_footer in replacements; closes #1808
[galette.git] / galette / lib / Galette / Features / Replacements.php
index f4769f8655127a70fb3f29f6e12af77c2b34dae3..391f1907fe50253c8b44c7574b3ad99338dd2891 100644 (file)
@@ -7,7 +7,7 @@
  *
  * PHP version 5
  *
- * Copyright © 2020-2021 The Galette Team
+ * Copyright © 2020-2023 The Galette Team
  *
  * This file is part of Galette (http://galette.tuxfamily.org).
  *
@@ -28,7 +28,7 @@
  * @package   Galette
  *
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2020-2021 The Galette Team
+ * @copyright 2020-2023 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.eu
  * @since     2020-12-20
@@ -45,12 +45,15 @@ use Galette\DynamicFields\Separator;
 use Galette\Entity\Adherent;
 use Galette\Entity\Contribution;
 use Galette\Entity\PdfModel;
+use Galette\Entity\Reminder;
 use Galette\Entity\Texts;
 use Galette\Repository\DynamicFieldsSet;
 use Galette\DynamicFields\DynamicField;
 use Analog\Analog;
 use NumberFormatter;
-use Slim\Router;
+use PHPMailer\PHPMailer\PHPMailer;
+use Slim\Routing\RouteParser;
+use DI\Attribute\Inject;
 
 /**
  * Replacements feature
@@ -59,7 +62,7 @@ use Slim\Router;
  * @name      Replacements
  * @package   Galette
  * @author    Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2020-2021 The Galette Team
+ * @copyright 2020-2023 The Galette Team
  * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
  * @link      http://galette.eu
  * @since     2020-12-20
@@ -70,29 +73,30 @@ trait Replacements
     private $patterns = [];
     private $replaces = [];
     private $dynamic_patterns = [];
+    private ?PHPMailer $mail = null;
 
     /**
-     * @Inject("zdb")
      * @var Db
      */
+    #[Inject("zdb")]
     protected $zdb;
 
     /**
-     * @Inject("login")
      * @var Login
      */
+    #[Inject("login")]
     protected $login;
 
     /**
-     * @Inject("preferences")
      * @var Preferences
      */
+    #[Inject("preferences")]
     protected $preferences;
 
     /**
-     * @var Router
+     * @var RouteParser
      */
-    protected $router;
+    protected $routeparser;
 
     /**
      * Get dynamic patterns
@@ -132,6 +136,7 @@ trait Replacements
                         break;
                     case '':
                     case 'VALUE':
+                    default:
                         $skey = $key;
                         $title = _T('Value for dynamic field "%s"');
                         break;
@@ -224,12 +229,17 @@ trait Replacements
                 'pattern'          => '/{ASSO_LOGO}/',
             ],
             'date_now'              => [
+                //TRANS: see https://www.php.net/manual/datetime.format.php
                 'title'     => _T('Current date (Y-m-d)'),
                 'pattern'   => '/{DATE_NOW}/'
             ],
             'login_uri'             => [
                 'title'     => _T("Galette's login URI"),
                 'pattern'   => '/{LOGIN_URI}/'
+            ],
+            'asso_footer' => [
+                'title'     => trim(trim(_T("Footer text:"), ':')),
+                'pattern'   => '/{ASSO_FOOTER}/'
             ]
         ];
     }
@@ -463,6 +473,19 @@ trait Replacements
         return $c_patterns + $dynamic_patterns;
     }
 
+    /**
+     * Set mail instance
+     *
+     * @param PHPMailer $mail PHPMailer instance
+     *
+     * @return self
+     */
+    public function setMail(PHPMailer $mail): self
+    {
+        $this->mail = $mail;
+        return $this;
+    }
+
     /**
      * Set main replacements
      *
@@ -480,11 +503,17 @@ trait Replacements
         }
 
         $logo = new Logo();
-        $logo_elt = '<img' .
-            ' src="' . $this->preferences->getURL() . $this->router->pathFor('logo') . '"' .
-            ' width="' . $logo->getOptimalWidth() . '"' .
-            ' height="' . $logo->getOptimalHeight() . '"' .
-            '/>';
+        if ($this->mail !== null) {
+            $logo_content = $this->preferences->getURL() . $this->routeparser->urlFor('logo');
+        } else {
+            $logo_content = '@' . base64_encode(file_get_contents($logo->getPath()));
+        }
+        $logo_elt = sprintf(
+            '<img src="%1$s" width="%2$s" height="%3$s" alt="" />',
+            $logo_content,
+            $logo->getOptimalWidth(),
+            $logo->getOptimalHeight()
+        );
 
         $this->setReplacements(
             array(
@@ -494,8 +523,10 @@ trait Replacements
                 'asso_address_multi' => $address_multi,
                 'asso_website'       => $website,
                 'asso_logo'          => $logo_elt,
+                //TRANS: see https://www.php.net/manual/datetime.format.php
                 'date_now'           => date(_T('Y-m-d')),
-                'login_uri'          => $this->preferences->getURL() . $this->router->pathFor('login'),
+                'login_uri'          => $this->preferences->getURL() . $this->routeparser->urlFor('login'),
+                'asso_footer'        => $this->preferences->pref_footer
             )
         );
 
@@ -549,7 +580,7 @@ trait Replacements
      *
      * @param Contribution $contrib Contribution
      *
-     * @return PdfModel
+     * @return self
      */
     public function setContribution(Contribution $contrib): self
     {
@@ -595,7 +626,7 @@ trait Replacements
      *
      * @param Adherent $member Member
      *
-     * @return PdfModel
+     * @return self
      */
     public function setMember(Adherent $member): self
     {
@@ -652,7 +683,7 @@ trait Replacements
                 'adh_groups'        => $group_list,
                 'adh_dues'          => $member->getDues(),
                 'days_remaining'    => $member->days_remaining,
-                'days_expired'      => $member->days_remaining + 1,
+                'days_expired'      => (int)$member->days_remaining + 1,
                 //Handle COMPANY_NAME_ADH... https://bugs.galette.eu/issues/1530
                 '_adh_company'      => $member->company_name,
                 //Handle old names for variables ... https://bugs.galette.eu/issues/1393
@@ -678,7 +709,7 @@ trait Replacements
      * @param array  $dynamic_fields Dynamic fields
      * @param mixed  $object         Related object (Adherent, Contribution, ...)
      *
-     * @return PdfModel
+     * @return self
      */
     public function setDynamicFields(string $form_name, array $dynamic_fields, $object): self
     {
@@ -746,9 +777,10 @@ trait Replacements
                             $value .= sprintf(
                                 $spattern,
                                 $this->preferences->getURL(),
-                                $this->router->pathFor(
+                                $this->routeparser->urlFor(
                                     'getDynamicFile',
                                     [
+                                        'form_name' => $form_name,
                                         'id' => $object->id,
                                         'fid' => $field_id,
                                         'pos' => ++$pos,
@@ -846,15 +878,15 @@ trait Replacements
     }
 
     /**
-     * Set Router dependency
+     * Set RouteParser dependency
      *
-     * @param Router $router Router instance
+     * @param RouteParser $routeparser RouteParser instance
      *
      * @return $this
      */
-    public function setRouter(Router $router): self
+    public function setRouteparser(RouteParser $routeparser): self
     {
-        $this->router = $router;
+        $this->routeparser = $routeparser;
         return $this;
     }
 
@@ -867,8 +899,6 @@ trait Replacements
      */
     protected function proceedReplacements(string $source): string
     {
-        $replaced = $source;
-
         //handle translations
         $callback = static function ($matches) {
             return _T($matches[1]);
@@ -908,7 +938,7 @@ trait Replacements
             $replaced
         );
 
-        return $replaced;
+        return trim($replaced);
     }
 
     /**