SettingsUtil::evaluate - Substitute variables atomically
authorTim Otten <totten@civicrm.org>
Wed, 28 Jun 2023 08:11:44 +0000 (01:11 -0700)
committerTim Otten <totten@civicrm.org>
Wed, 28 Jun 2023 10:42:25 +0000 (03:42 -0700)
Iterative substitution allows silliness. It's not a specific problem because
the range of inputs is so narrow here, but it's good cleanup the code-smell.

setup/src/Setup/SettingsUtil.php

index 2e217087b0d914f934d0e6dc4a96b745b52602c9..508d25890277976713962ffc1aa0047edaf6a50c 100644 (file)
@@ -77,12 +77,12 @@ class SettingsUtil {
    *   Evaluated template.
    */
   public static function evaluate(string $tplPath, array $params): string {
-    $str = file_get_contents($tplPath);
-    // FIXME: Use a single call to 'strtr($str, $vars)'
+    $template = file_get_contents($tplPath);
+    $vars = [];
     foreach ($params as $key => $value) {
-      $str = str_replace('%%' . $key . '%%', $value, $str);
+      $vars['%%' . $key . '%%'] = $value;
     }
-    return trim($str) . "\n";
+    return trim(strtr($template, $vars)) . "\n";
   }
 
 }