(dev/core#4303) Allow {htxt} guard to accommodate variable ID
authorTim Otten <totten@civicrm.org>
Mon, 22 May 2023 04:48:57 +0000 (21:48 -0700)
committerTim Otten <totten@civicrm.org>
Tue, 23 May 2023 21:12:13 +0000 (14:12 -0700)
Before
------

`{htxt}` guard works with static IDs (`{htxt id="abc"}`)

After
-----

`{htxt}` guard with with variable ID (`{htxt id=$abc}`)

Comments
--------

As discussed in dev/core#4303, one relevant use-case comes from `CustomField.hlp`.

In my copy of universe, there's a similar construction in
`nz.co.fuzion.entitysetting` (`entitysettingscommon.hlp`).

CRM/Core/Smarty/plugins/prefilter.htxtFilter.php

index 1a2a56a085709193c9fed5dde5d0e3816b5d59f3..c7fdac2c207d4797083c736767918c39491ec45e 100644 (file)
@@ -22,6 +22,10 @@ function smarty_prefilter_htxtFilter($tpl_source, &$smarty) {
       $htxts++;
       return sprintf('{if $id == %s}%s', $m[1], $m[0]);
     },
+    '/\{htxt id=(\$\w+)}/' => function ($m) use (&$htxts) {
+      $htxts++;
+      return sprintf('{if $id == %s}%s', $m[1], $m[0]);
+    },
     ';\{/htxt\};' => function($m) use (&$_htxts) {
       $_htxts++;
       return '{/htxt}{/if}';