dev/core#4618 - Update APIv3 explorer to not encourage php-eval in smarty
authorcolemanw <coleman@civicrm.org>
Fri, 22 Sep 2023 23:13:20 +0000 (19:13 -0400)
committercolemanw <coleman@civicrm.org>
Fri, 22 Sep 2023 23:13:20 +0000 (19:13 -0400)
templates/CRM/Admin/Page/APIExplorer.js

index e54d6bcd8005377f083401d74d2727cdeed31ffd..f294b308ded18f6e6311f662e55690ec66500b82 100644 (file)
@@ -11,7 +11,6 @@
     getFieldsCache = {},
     getActionsCache = {},
     params = {},
-    smartyPhp,
     entityDoc,
     fieldTpl = _.template($('#api-param-tpl').html()),
     optionsTpl = _.template($('#api-options-tpl').html()),
     return JSON.stringify(val).replace(/\$/g, '\\$');
   }
 
-  /**
-   * @param value string
-   * @param js string
-   * @param key string
-   */
-  function smartyFormat(value, js, key) {
-    var varName = 'param_' + key.replace(/[. -]/g, '_').toLowerCase();
-    // Can't pass array literals directly into smarty so we add a php snippet
-    if (_.includes(js, '[') || _.includes(js, '{')) {
-      smartyPhp.push('$this->assign("'+ varName + '", '+ phpFormat(value) +');');
-      return '$' + varName;
-    }
-    return js;
-  }
-
   /**
    * Create the params array from user input
    * @param e
         "curl '" + http.url + "?" + $.param(http.query) + "'"
         : "curl -X " + http.method + " -d '" + $.param(http.query) +"' \\\n  '" + http.url + "'"
     };
-    smartyPhp = [];
     $.each(params, function(key, value) {
       var json = JSON.stringify(value),
         // Encourage 'return' to be an array - at least in php & js
       q.json += "  \"" + key + '": ' + js;
       // smarty already defaults to sequential
       if (key !== 'sequential') {
-        q.smarty += ' ' + key + '=' + smartyFormat(value, json, key);
+        q.smarty += ' ' + key + '=' + phpFormat(value);
       }
       // FIXME: This is not totally correct cli syntax
       q.cv += key + '=' + json + ' ';
     q.smarty += "}\n{foreach from=$result.values item=" + entity.toLowerCase() + "}\n  {$" + entity.toLowerCase() + ".some_field}\n{/foreach}";
     if (!_.includes(action, 'get')) {
       q.smarty = '{* Smarty API only works with get actions *}';
-    } else if (smartyPhp.length) {
-      q.smarty = "{php}\n  " + smartyPhp.join("\n  ") + "\n{/php}\n" + q.smarty;
     }
     $('#api-rest').html(restTpl(http));
     $.each(q, function(type, val) {