summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsquare <msquare@notrademark.de>2017-07-20 20:48:57 +0200
committerGitHub <noreply@github.com>2017-07-20 20:48:57 +0200
commit3406967ab4bf60fd00a22541a6b5a8155121cbad (patch)
treeab10822d61e7a2549be99bf2e7964351ddda484b
parent37d4edcd9ace5021b6eb02761a9c3865c5607f33 (diff)
parente1762e7764d4ee4f37757ecd2630f62a440dbf0e (diff)
Merge pull request #329 from MyIgel/renderer
Added renderer
-rw-r--r--config/config.default.php11
-rw-r--r--includes/engelsystem_provider.php12
-rw-r--r--includes/pages/guest_credits.php2
-rw-r--r--includes/pages/guest_login.php3
-rw-r--r--includes/pages/user_settings.php3
-rw-r--r--includes/pages/user_shifts.php2
-rw-r--r--includes/sys_template.php33
-rw-r--r--public/index.php2
-rw-r--r--public/overwhelmed.html77
-rw-r--r--src/Renderer/EngineInterface.php21
-rw-r--r--src/Renderer/HtmlEngine.php34
-rw-r--r--src/Renderer/Renderer.php62
-rw-r--r--src/helpers.php17
-rw-r--r--templates/maintenance.html (renamed from public/maintenance.html)0
14 files changed, 161 insertions, 118 deletions
diff --git a/config/config.default.php b/config/config.default.php
index e816fe9c..ffa030db 100644
--- a/config/config.default.php
+++ b/config/config.default.php
@@ -29,9 +29,18 @@ return [
// From address of all emails
'no_reply_email' => 'noreply@engelsystem.de',
- // Default theme of the start page, 1=style1.css
+ // Default theme, 1=style1.css
'theme' => 1,
+ // Available themes
+ 'available_themes' => [
+ '4' => 'Engelsystem 33c3 (2016)',
+ '3' => 'Engelsystem 32c3 (2015)',
+ '2' => 'Engelsystem cccamp15',
+ '0' => 'Engelsystem light',
+ '1' => 'Engelsystem dark'
+ ],
+
// Number of News shown on one site
'display_news' => 6,
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,12 +45,20 @@ $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
*/
$errorHandler = new ExceptionHandler();
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/guest_login.php b/includes/pages/guest_login.php
index 858ced80..106db33a 100644
--- a/includes/pages/guest_login.php
+++ b/includes/pages/guest_login.php
@@ -488,6 +488,5 @@ function get_register_hint()
]);
}
- //@TODO: FIXME: return error(_('Registration is disabled.'), true);
- return error('Registration is <a href="https://engelsystem.de/33c3/overwhelmed.html">disabled</a>.', true);
+ return error(_('Registration is disabled.'), true);
}
diff --git a/includes/pages/user_settings.php b/includes/pages/user_settings.php
index 69e5a7fb..667e73d9 100644
--- a/includes/pages/user_settings.php
+++ b/includes/pages/user_settings.php
@@ -198,8 +198,9 @@ function user_settings_locale($user_source, $locales)
*/
function user_settings()
{
- global $themes, $user;
+ global $user;
$request = request();
+ $themes = config('available_themes');
$enable_tshirt_size = config('enable_tshirt_size');
$tshirt_sizes = config('tshirt_sizes');
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 1d3943b7..a659a7f3 100644
--- a/includes/sys_template.php
+++ b/includes/sys_template.php
@@ -1,17 +1,6 @@
<?php
/**
- * Liste der verfügbaren Themes
- */
-$themes = [
- '4' => 'Engelsystem 33c3 (2016)',
- '3' => 'Engelsystem 32c3 (2015)',
- '2' => 'Engelsystem cccamp15',
- '0' => 'Engelsystem light',
- '1' => 'Engelsystem dark'
-];
-
-/**
* Display muted (grey) text.
*
* @param string $text
@@ -333,28 +322,6 @@ function table_buttons($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 &laquo;' . $file . '&raquo;.');
- return '';
-}
-
-/**
* @param string $str
* @param int $length
* @return string
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/overwhelmed.html b/public/overwhelmed.html
deleted file mode 100644
index cae0d1b5..00000000
--- a/public/overwhelmed.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Engelsystem</title>
- <meta charset="UTF-8"/>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link rel="stylesheet" type="text/css" href="css/theme0.css"/>
- <link rel="stylesheet" type="text/css" href="vendor/icomoon/style.css"/>
- <link rel="stylesheet" type="text/css" href="vendor/bootstrap-datepicker-1.4.0/css/bootstrap-datepicker3.min.css"/>
- <script type="text/javascript" src="vendor/jquery-2.1.1.min.js"></script>
- <script type="text/javascript" src="vendor/jquery-ui.min.js"></script>
-</head>
-<body>
-<div class="navbar navbar-default navbar-fixed-top">
- <div class="container-fluid">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed"
- data-toggle="collapse" data-target="#navbar-collapse-1">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="https://engelsystem.de"><span class="icon-icon_angel"></span> <strong
- class="visible-lg-inline">ENGELSYSTEM</strong></a>
- </div>
- <div class="collapse navbar-collapse" id="navbar-collapse-1">
- <ul class="nav navbar-nav"></ul>
- <ul class="nav navbar-nav navbar-right"></ul>
- </div>
- </div>
-</div>
-<div class="container-fluid">
- <div class="row">
- <div class="jumbotron">
- <div class="container text-center">
- <div class="col-md-6 col-md-offset-3">
- <h2>Dear Angels,</h2>
- <p>
- The great interest in becoming an angel and participating at 33C3 is is something we are
- grateful for every time. There is a record number of angels and helping volunteers this year.
- </p>
- <p>
- We did anticipate a great number but we are overwhelmed by this endless wave of support. We do
- want to enable each and every one of you to be an angel at the congress, but sadly our resources
- and capacities at Heaven are limited. The amount of angels at this point is beyond our
- planing and to ensure we can support the angels already checked in. We did make a choice never
- thought possible on a chaos event:
- </p>
- <p>
- We closed the registration in the Engelsystem and at Heaven Desk at 19:00 27. Dec. 2016.
- </p>
- <p>
- Everyone of us works for you to support you in being an angel, but the Heaven Desk and the
- Kitchen among others are limited and so we decided to focus our effort to support those of you
- already arrived to the best of our abilities.
- </p>
- <p>
- For the Heaven Team<br/>
- Agnes, Jen, LLF and Knuth
- </p>
- </div>
- </div>
- </div>
- </div>
- <div class="row">
- <div class="col-md-12">
- <div class="text-center footer">
- <a href="https://github.com/engelsystem/engelsystem/issues">Bugs / Features</a>
- · <a href="https://github.com/engelsystem/engelsystem/">Development Platform</a>
- </div>
- </div>
- </div>
-</div>
-<script type="text/javascript" src="vendor/bootstrap/js/bootstrap.min.js"></script>
-</body>
-</html>
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 @@
+<?php
+
+namespace Engelsystem\Renderer;
+
+interface EngineInterface
+{
+ /**
+ * Render a template
+ *
+ * @param string $path
+ * @param mixed[] $data
+ * @return string
+ */
+ public function get($path, $data = []);
+
+ /**
+ * @param string $path
+ * @return bool
+ */
+ public function canRender($path);
+}
diff --git a/src/Renderer/HtmlEngine.php b/src/Renderer/HtmlEngine.php
new file mode 100644
index 00000000..4a48e1f0
--- /dev/null
+++ b/src/Renderer/HtmlEngine.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Engelsystem\Renderer;
+
+class HtmlEngine implements EngineInterface
+{
+ /**
+ * Render a template
+ *
+ * @param string $path
+ * @param mixed[] $data
+ * @return string
+ */
+ public function get($path, $data = [])
+ {
+ $template = file_get_contents($path);
+ if (is_array($data)) {
+ foreach ($data as $name => $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 @@
+<?php
+
+namespace Engelsystem\Renderer;
+
+use ErrorException;
+
+class Renderer
+{
+ /** @var self */
+ protected static $instance;
+
+ /** @var EngineInterface[] */
+ protected $renderer = [];
+
+ /**
+ * Render a template
+ *
+ * @param string $template
+ * @param mixed[] $data
+ * @return string
+ */
+ public function render($template, $data = [])
+ {
+ foreach ($this->renderer as $renderer) {
+ if (!$renderer->canRender($template)) {
+ continue;
+ }
+
+ return $renderer->get($template, $data);
+ }
+
+ engelsystem_error('Unable to find a renderer for template file &laquo;' . $template . '&raquo;.');
+ 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/public/maintenance.html b/templates/maintenance.html
index 3f7dae8a..3f7dae8a 100644
--- a/public/maintenance.html
+++ b/templates/maintenance.html