- ];
-
- /**
- * @brief This is our template processor
- *
- * @param string|FriendicaSmarty $s The string requiring macro substitution or an instance of FriendicaSmarty
- * @param array $r key value pairs (search => replace)
- *
- * @return string substituted string
- */
- public static function replaceMacros($s, $r)
- {
- $stamp1 = microtime(true);
- $a = self::getApp();
-
- // pass $baseurl to all templates
- $r['$baseurl'] = System::baseUrl();
- $t = self::getTemplateEngine();
-
- try {
- $output = $t->replaceMacros($s, $r);
- } catch (Exception $e) {
- echo "<pre><b>" . __FUNCTION__ . "</b>: " . $e->getMessage() . "</pre>";
- killme();
- }
-
- $a->saveTimestamp($stamp1, "rendering");
-
- return $output;
- }
-
- /**
- * @brief Load a given template $s
- *
- * @param string $s Template to load.
- * @param string $root Optional.
- *
- * @return string template.
- */
- public static function getMarkupTemplate($s, $root = '')
- {
- $stamp1 = microtime(true);
- $a = self::getApp();
- $t = self::getTemplateEngine();
-
- try {
- $template = $t->getTemplateFile($s, $root);
- } catch (Exception $e) {
- echo "<pre><b>" . __FUNCTION__ . "</b>: " . $e->getMessage() . "</pre>";
- killme();
- }
-
- $a->saveTimestamp($stamp1, "file");
-
- return $template;
- }
-
- /**
- * @brief Register template engine class
+ ];
+
+ /**
+ * Returns the rendered template output from the template string and variables
+ *
+ * @param string $template
+ * @param array $vars
+ * @return string
+ * @throws InternalServerErrorException
+ */
+ public static function replaceMacros(string $template, array $vars = [])
+ {
+ $stamp1 = microtime(true);
+
+ // pass $baseurl to all templates if it isn't set
+ $vars = array_merge(['$baseurl' => DI::baseUrl()->get(), '$APP' => DI::app()], $vars);
+
+ $t = self::getTemplateEngine();
+
+ try {
+ $output = $t->replaceMacros($template, $vars);
+ } catch (Exception $e) {
+ DI::logger()->critical($e->getMessage(), ['template' => $template, 'vars' => $vars]);
+ $message = is_site_admin() ?
+ $e->getMessage() :
+ DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
+ throw new InternalServerErrorException($message);
+ }
+
+ DI::profiler()->saveTimestamp($stamp1, "rendering");
+
+ return $output;
+ }
+
+ /**
+ * Load a given template $s
+ *
+ * @param string $file Template to load.
+ * @param string $subDir Subdirectory (Optional)
+ *
+ * @return string template.
+ * @throws InternalServerErrorException
+ */
+ public static function getMarkupTemplate($file, $subDir = '')
+ {
+ $stamp1 = microtime(true);
+ $t = self::getTemplateEngine();
+
+ try {
+ $template = $t->getTemplateFile($file, $subDir);
+ } catch (Exception $e) {
+ DI::logger()->critical($e->getMessage(), ['file' => $file, 'subDir' => $subDir]);
+ $message = is_site_admin() ?
+ $e->getMessage() :
+ DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
+ throw new InternalServerErrorException($message);
+ }
+
+ DI::profiler()->saveTimestamp($stamp1, "file");
+
+ return $template;
+ }
+
+ /**
+ * Register template engine class