From e1762e7764d4ee4f37757ecd2630f62a440dbf0e Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Thu, 20 Jul 2017 02:22:18 +0200 Subject: replaced template_render with dynamic renderer class --- includes/engelsystem_provider.php | 12 +++++- includes/pages/guest_credits.php | 2 +- includes/pages/user_shifts.php | 2 +- includes/sys_template.php | 22 ---------- public/index.php | 2 +- public/maintenance.html | 86 --------------------------------------- src/Renderer/EngineInterface.php | 21 ++++++++++ src/Renderer/HtmlEngine.php | 34 ++++++++++++++++ src/Renderer/Renderer.php | 62 ++++++++++++++++++++++++++++ src/helpers.php | 17 ++++++++ templates/maintenance.html | 86 +++++++++++++++++++++++++++++++++++++++ 11 files changed, 234 insertions(+), 112 deletions(-) delete mode 100644 public/maintenance.html create mode 100644 src/Renderer/EngineInterface.php create mode 100644 src/Renderer/HtmlEngine.php create mode 100644 src/Renderer/Renderer.php create mode 100644 templates/maintenance.html diff --git a/includes/engelsystem_provider.php b/includes/engelsystem_provider.php index edfae705..ff682871 100644 --- a/includes/engelsystem_provider.php +++ b/includes/engelsystem_provider.php @@ -4,6 +4,8 @@ use Engelsystem\Config\Config; use Engelsystem\Database\Db; use Engelsystem\Exceptions\Handler as ExceptionHandler; use Engelsystem\Http\Request; +use Engelsystem\Renderer\HtmlEngine; +use Engelsystem\Renderer\Renderer; /** * This file includes all needed functions, connects to the db etc. @@ -43,11 +45,19 @@ $request::setInstance($request); * Check for maintenance */ if ($config->get('maintenance')) { - echo file_get_contents(__DIR__ . '/../public/maintenance.html'); + echo file_get_contents(__DIR__ . '/../templates/maintenance.html'); die(); } +/** + * Initialize renderer + */ +$renderer = new Renderer(); +$renderer->addRenderer(new HtmlEngine()); +Renderer::setInstance($renderer); + + /** * Register error handler */ diff --git a/includes/pages/guest_credits.php b/includes/pages/guest_credits.php index d9224cbb..db86132d 100644 --- a/includes/pages/guest_credits.php +++ b/includes/pages/guest_credits.php @@ -13,5 +13,5 @@ function credits_title() */ function guest_credits() { - return template_render(__DIR__ . '/../../templates/guest_credits.html', []); + return view(__DIR__ . '/../../templates/guest_credits.html'); } diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php index 4dabdfb5..813cb9b3 100644 --- a/includes/pages/user_shifts.php +++ b/includes/pages/user_shifts.php @@ -206,7 +206,7 @@ function view_user_shifts() return page([ div('col-md-12', [ msg(), - template_render(__DIR__ . '/../../templates/user_shifts.html', [ + view(__DIR__ . '/../../templates/user_shifts.html', [ 'title' => shifts_title(), 'room_select' => make_select($rooms, $shiftsFilter->getRooms(), 'rooms', _('Rooms')), 'start_select' => html_select_key('start_day', 'start_day', array_combine($days, $days), $start_day), diff --git a/includes/sys_template.php b/includes/sys_template.php index bcf462d7..a659a7f3 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -321,28 +321,6 @@ function table_buttons($buttons = []) return '
' . join(' ', $buttons) . '
'; } -/** - * Load and render template - * - * @param string $file - * @param string[] $data - * @return string - */ -function template_render($file, $data = []) -{ - if (file_exists($file)) { - $template = file_get_contents($file); - if (is_array($data)) { - foreach ($data as $name => $content) { - $template = str_replace('%' . $name . '%', $content, $template); - } - } - return $template; - } - engelsystem_error('Cannot find template file «' . $file . '».'); - return ''; -} - /** * @param string $str * @param int $length diff --git a/public/index.php b/public/index.php index 52f32438..f22721c8 100644 --- a/public/index.php +++ b/public/index.php @@ -166,7 +166,7 @@ if ( $event_config = EventConfig(); -echo template_render(__DIR__ . '/../templates/layout.html', [ +echo view(__DIR__ . '/../templates/layout.html', [ 'theme' => isset($user) ? $user['color'] : config('theme'), 'title' => $title, 'atom_link' => ($page == 'news' || $page == 'user_meetings') diff --git a/public/maintenance.html b/public/maintenance.html deleted file mode 100644 index 3f7dae8a..00000000 --- a/public/maintenance.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - Maintenance - Engelsystem - - - - - - - - - - -
-
-
-
-

- - - -

-
-

- The ENGELSYSTEM is in maintenance mode. -

-

This may be due to...

-

- ...archangels closing the gates of heaven.
- ...somebody's stolen the power chord and now the battery is empty.
- ...DHCP decided to give me another ip address. -

-
-
- -
-
-
-
- -
- - - - - - - - - - diff --git a/src/Renderer/EngineInterface.php b/src/Renderer/EngineInterface.php new file mode 100644 index 00000000..ca468db5 --- /dev/null +++ b/src/Renderer/EngineInterface.php @@ -0,0 +1,21 @@ + $content) { + $template = str_replace('%' . $name . '%', $content, $template); + } + } + + return $template; + } + + /** + * @param string $path + * @return bool + */ + public function canRender($path) + { + return strpos($path, '.html') && file_exists($path); + } +} diff --git a/src/Renderer/Renderer.php b/src/Renderer/Renderer.php new file mode 100644 index 00000000..bf3d5609 --- /dev/null +++ b/src/Renderer/Renderer.php @@ -0,0 +1,62 @@ +renderer as $renderer) { + if (!$renderer->canRender($template)) { + continue; + } + + return $renderer->get($template, $data); + } + + engelsystem_error('Unable to find a renderer for template file «' . $template . '».'); + return ''; + } + + /** + * Add a new renderer engine + * + * @param EngineInterface $renderer + */ + public function addRenderer(EngineInterface $renderer) + { + $this->renderer[] = $renderer; + } + + /** + * @return self + * @throws ErrorException + */ + public static function getInstance() + { + return self::$instance; + } + + /** + * @param self $instance + */ + public static function setInstance($instance) + { + self::$instance = $instance; + } +} diff --git a/src/helpers.php b/src/helpers.php index a410b27e..d44d1d21 100644 --- a/src/helpers.php +++ b/src/helpers.php @@ -3,6 +3,7 @@ use Engelsystem\Config\Config; use Engelsystem\Http\Request; +use Engelsystem\Renderer\Renderer; /** * Get or set config values @@ -39,3 +40,19 @@ function request($key = null, $default = null) return $request->input($key, $default); } + +/** + * @param string $template + * @param mixed[] $data + * @return Renderer|string + */ +function view($template = null, $data = null) +{ + $renderer = Renderer::getInstance(); + + if (is_null($template)) { + return $renderer; + } + + return $renderer->render($template, $data); +} diff --git a/templates/maintenance.html b/templates/maintenance.html new file mode 100644 index 00000000..3f7dae8a --- /dev/null +++ b/templates/maintenance.html @@ -0,0 +1,86 @@ + + + + Maintenance - Engelsystem + + + + + + + + + + +
+
+
+
+

+ + + +

+
+

+ The ENGELSYSTEM is in maintenance mode. +

+

This may be due to...

+

+ ...archangels closing the gates of heaven.
+ ...somebody's stolen the power chord and now the battery is empty.
+ ...DHCP decided to give me another ip address. +

+
+
+ +
+
+
+
+ +
+ + + + + + + + + + -- cgit v1.2.3-54-g00ecf