X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FRenderer.php;h=24f00341733530a24d097a1a1bf01f00049bda94;hb=0d1fa70e2ecb372d158871285e0cda5f6d77194a;hp=72073086ab33d5bfcbab1bdf0a5e9748dcc4c70f;hpb=58c9566c3d086583a1a55901c8c1c865d5f94891;p=friendica.git diff --git a/src/Core/Renderer.php b/src/Core/Renderer.php index 72073086ab..24f0034173 100644 --- a/src/Core/Renderer.php +++ b/src/Core/Renderer.php @@ -1,32 +1,48 @@ . + * */ namespace Friendica\Core; use Exception; -use Friendica\BaseObject; -use Friendica\Render\FriendicaSmarty; -use Friendica\Render\ITemplateEngine; +use Friendica\DI; +use Friendica\Network\HTTPException\InternalServerErrorException; +use Friendica\Render\TemplateEngine; /** - * @brief This class handles Renderer related functions. + * This class handles Renderer related functions. */ -class Renderer extends BaseObject +class Renderer { /** - * @brief An array of registered template engines ('name'=>'class name') + * An array of registered template engines ('name'=>'class name') */ public static $template_engines = []; /** - * @brief An array of instanced template engines ('name'=>'instance') + * An array of instanced template engines ('name'=>'instance') */ public static $template_engine_instance = []; /** - * @brief An array for all theme-controllable parameters + * An array for all theme-controllable parameters * * Mostly unimplemented yet. Only options 'template_engine' and * beyond are used. @@ -50,113 +66,124 @@ class Renderer extends BaseObject ]; /** - * @brief This is our template processor + * Returns the rendered template output from the template string and variables * - * @param string|FriendicaSmarty $s The string requiring macro substitution or an instance of FriendicaSmarty - * @param array $vars key value pairs (search => replace) - * @param bool $overwriteURL Overwrite the base url with the system wide set base url - * - * @return string substituted string - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @param string $template + * @param array $vars + * @return string + * @throws InternalServerErrorException */ - public static function replaceMacros($s, $vars, $overwriteURL = true) + public static function replaceMacros(string $template, array $vars = []) { $stamp1 = microtime(true); - $a = self::getApp(); - // pass $baseurl to all templates - if ($overwriteURL) { - $vars['$baseurl'] = System::baseUrl(); - } + // 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($s, $vars); + $output = $t->replaceMacros($template, $vars); } catch (Exception $e) { - echo "
" . __FUNCTION__ . ": " . $e->getMessage() . ""; - exit(); + 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); } - $a->getProfiler()->saveTimestamp($stamp1, "rendering", System::callstack()); + DI::profiler()->saveTimestamp($stamp1, "rendering"); return $output; } /** - * @brief Load a given template $s + * Load a given template $s * - * @param string $s Template to load. - * @param string $root Optional. + * @param string $file Template to load. + * @param string $subDir Subdirectory (Optional) * * @return string template. - * @throws Exception + * @throws InternalServerErrorException */ - public static function getMarkupTemplate($s, $root = '') + public static function getMarkupTemplate($file, $subDir = '') { $stamp1 = microtime(true); - $a = self::getApp(); $t = self::getTemplateEngine(); try { - $template = $t->getTemplateFile($s, $root); + $template = $t->getTemplateFile($file, $subDir); } catch (Exception $e) { - echo "
" . __FUNCTION__ . ": " . $e->getMessage() . ""; - exit(); + 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); } - $a->getProfiler()->saveTimestamp($stamp1, "file", System::callstack()); + DI::profiler()->saveTimestamp($stamp1, "file"); return $template; } /** - * @brief Register template engine class + * Register template engine class * * @param string $class + * @throws InternalServerErrorException */ public static function registerTemplateEngine($class) { $v = get_class_vars($class); - if (!empty($v['name'])) - { + if (!empty($v['name'])) { $name = $v['name']; self::$template_engines[$name] = $class; } else { - echo "template engine $class cannot be registered without a name.\n"; - die(); + $admin_message = DI::l10n()->t('template engine cannot be registered without a name.'); + DI::logger()->critical($admin_message, ['class' => $class]); + $message = is_site_admin() ? + $admin_message : + DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.'); + throw new InternalServerErrorException($message); } } /** - * @brief Return template engine instance. + * Return template engine instance. * * If $name is not defined, return engine defined by theme, * or default * - * @return ITemplateEngine Template Engine instance + * @return TemplateEngine Template Engine instance + * @throws InternalServerErrorException */ public static function getTemplateEngine() { - $template_engine = defaults(self::$theme, 'template_engine', 'smarty3'); + $template_engine = (self::$theme['template_engine'] ?? '') ?: 'smarty3'; if (isset(self::$template_engines[$template_engine])) { if (isset(self::$template_engine_instance[$template_engine])) { return self::$template_engine_instance[$template_engine]; } else { + $a = DI::app(); $class = self::$template_engines[$template_engine]; - $obj = new $class; + $obj = new $class($a->getCurrentTheme(), $a->theme_info); self::$template_engine_instance[$template_engine] = $obj; return $obj; } } - echo "template engine $template_engine is not registered!\n"; - exit(); + $admin_message = DI::l10n()->t('template engine is not registered!'); + DI::logger()->critical($admin_message, ['template_engine' => $template_engine]); + $message = is_site_admin() ? + $admin_message : + DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.'); + throw new InternalServerErrorException($message); } /** - * @brief Returns the active template engine. + * Returns the active template engine. * * @return string the active template engine */