Merge pull request #329 from MyIgel/renderer

Added renderer
This commit is contained in:
msquare 2017-07-20 20:48:57 +02:00 committed by GitHub
commit 3406967ab4
14 changed files with 161 additions and 118 deletions

View File

@ -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,

View File

@ -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
*/

View File

@ -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');
}

View File

@ -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);
}

View File

@ -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');

View File

@ -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),

View File

@ -1,16 +1,5 @@
<?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.
*
@ -332,28 +321,6 @@ function table_buttons($buttons = [])
return '<div class="btn-group">' . join(' ', $buttons) . '</div>';
}
/**
* 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

View File

@ -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')

View File

@ -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>

View File

@ -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);
}

View File

@ -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);
}
}

62
src/Renderer/Renderer.php Normal file
View File

@ -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;
}
}

View File

@ -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);
}