Fix mixin
authorEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 24 Feb 2023 07:36:50 +0000 (20:36 +1300)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 24 Feb 2023 20:55:56 +0000 (09:55 +1300)
CRM/Core/Smarty.php
mixin/smarty-v2@1/mixin.php

index 13db08c3b3dc4902f562a423a8723946b4a803e4..da5272d9687f211d90aed162a372aabac9c6f36a 100644 (file)
@@ -315,7 +315,9 @@ class CRM_Core_Smarty extends Smarty {
       return parent::addTemplateDir($template_dir, $key, $isConfig);
     }
     if (is_array($this->template_dir)) {
-      array_unshift($this->template_dir, $template_dir);
+      if (!in_array($template_dir, $this->template_dir)) {
+        array_unshift($this->template_dir, $template_dir);
+      }
     }
     else {
       $this->template_dir = [$template_dir, $this->template_dir];
index 0b371057cce7efb4228c109e2c4aea8e34b24151..5972dbdc57ffd6badbb1eb84f628700ea9727b09 100644 (file)
@@ -4,7 +4,7 @@
  * Auto-register "templates/" folder.
  *
  * @mixinName smarty-v2
- * @mixinVersion 1.0.0
+ * @mixinVersion 1.0.1
  * @since 5.59
  *
  * @param CRM_Extension_MixInfo $mixInfo
@@ -19,14 +19,9 @@ return function ($mixInfo, $bootCache) {
   }
 
   $register = function() use ($dir) {
-    // This implementation is useful for older versions of CiviCRM. It can be replaced/updated going forward (v1.1+).
-    $smarty = CRM_Core_Smarty::singleton();
-    if (!is_array($smarty->template_dir)) {
-      $this->template_dir = [$smarty->template_dir];
-    }
-    if (!in_array($dir, $smarty->template_dir)) {
-      array_unshift($smarty->template_dir, $dir);
-    }
+    // This implementation has a theoretical edge-case bug on older versions of CiviCRM where a template could
+    // be registered more than once.
+    CRM_Core_Smarty::singleton()->addTemplateDir($dir);
   };
 
   // Let's figure out what environment we're in -- so that we know the best way to call $register().