EventConfig: Merge event configuration from database to global config

This commit is contained in:
Igor Scheller 2018-09-25 17:33:31 +02:00 committed by msquare
parent 63d1292bf8
commit 7f61dc95be
16 changed files with 289 additions and 272 deletions

View File

@ -1,5 +1,8 @@
<?php <?php
use Carbon\Carbon;
use Engelsystem\Models\EventConfig;
/** /**
* @return string * @return string
*/ */
@ -20,22 +23,17 @@ function event_config_edit_controller()
} }
$request = request(); $request = request();
$event_name = null; $config = config();
$event_welcome_msg = null; $event_name = $config->get('name');
$buildup_start_date = null; $event_welcome_msg = $config->get('welcome_msg');
$event_start_date = null; /** @var Carbon $buildup_start_date */
$event_end_date = null; $buildup_start_date = $config->get('buildup_start');
$teardown_end_date = null; /** @var Carbon $event_start_date */
$event_start_date = $config->get('event_start');
$event_config = EventConfig(); /** @var Carbon $event_end_date */
if (!empty($event_config)) { $event_end_date = $config->get('event_end');
$event_name = $event_config['event_name']; /** @var Carbon $teardown_end_date */
$buildup_start_date = $event_config['buildup_start_date']; $teardown_end_date = $config->get('teardown_end');
$event_start_date = $event_config['event_start_date'];
$event_end_date = $event_config['event_end_date'];
$teardown_end_date = $event_config['teardown_end_date'];
$event_welcome_msg = $event_config['event_welcome_msg'];
}
if ($request->has('submit')) { if ($request->has('submit')) {
$valid = true; $valid = true;
@ -91,24 +89,34 @@ function event_config_edit_controller()
} }
if ($valid) { if ($valid) {
EventConfig_update( $eventConfig = new EventConfig();
$event_name,
$buildup_start_date, foreach (
$event_start_date, [
$event_end_date, 'name' => $event_name,
$teardown_end_date, 'welcome_msg' => $event_welcome_msg,
$event_welcome_msg 'buildup_start' => $buildup_start_date,
); 'event_start' => $event_start_date,
'event_end' => $event_end_date,
'teardown_end' => $teardown_end_date,
] as $key => $value
) {
$eventConfig
->findOrNew($key)
->setAttribute('name', $key)
->setAttribute('value', $value)
->save();
}
engelsystem_log( engelsystem_log(
sprintf( sprintf(
'Changed event config: %s, %s, %s, %s, %s, %s', 'Changed event config: %s, %s, %s, %s, %s, %s',
$event_name, $event_name,
$event_welcome_msg, $event_welcome_msg,
date('Y-m-d', $buildup_start_date), $buildup_start_date ? $buildup_start_date->format('Y-m-d') : '',
date('Y-m-d', $event_start_date), $event_start_date ? $event_start_date->format('Y-m-d') : '',
date('Y-m-d', $event_end_date), $event_end_date ? $event_end_date->format('Y-m-d') : '',
date('Y-m-d', $teardown_end_date) $teardown_end_date ? $teardown_end_date->format('Y-m-d') : ''
) )
); );
success(__('Settings saved.')); success(__('Settings saved.'));

View File

@ -12,7 +12,6 @@ $includeFiles = [
__DIR__ . '/../includes/sys_template.php', __DIR__ . '/../includes/sys_template.php',
__DIR__ . '/../includes/model/AngelType_model.php', __DIR__ . '/../includes/model/AngelType_model.php',
__DIR__ . '/../includes/model/EventConfig_model.php',
__DIR__ . '/../includes/model/Message_model.php', __DIR__ . '/../includes/model/Message_model.php',
__DIR__ . '/../includes/model/NeededAngelTypes_model.php', __DIR__ . '/../includes/model/NeededAngelTypes_model.php',
__DIR__ . '/../includes/model/Room_model.php', __DIR__ . '/../includes/model/Room_model.php',

View File

@ -1,78 +0,0 @@
<?php
use Engelsystem\Database\DB;
/**
* Get event config.
*
* @return array|null
*/
function EventConfig()
{
$config = DB::selectOne('SELECT * FROM `EventConfig` LIMIT 1');
return empty($config) ? null : $config;
}
/**
* Update event config.
*
* @param string $event_name
* @param int $buildup_start_date
* @param int $event_start_date
* @param int $event_end_date
* @param int $teardown_end_date
* @param string $event_welcome_msg
* @return bool
*/
function EventConfig_update(
$event_name,
$buildup_start_date,
$event_start_date,
$event_end_date,
$teardown_end_date,
$event_welcome_msg
) {
$eventConfig = EventConfig();
if (empty($eventConfig)) {
return DB::insert('
INSERT INTO `EventConfig` (
`event_name`,
`buildup_start_date`,
`event_start_date`,
`event_end_date`,
`teardown_end_date`,
`event_welcome_msg`
)
VALUES (?, ?, ?, ?, ?, ?)
',
[
$event_name,
$buildup_start_date,
$event_start_date,
$event_end_date,
$teardown_end_date,
$event_welcome_msg
]
);
}
return (bool)DB::update('
UPDATE `EventConfig` SET
`event_name` = ?,
`buildup_start_date` = ?,
`event_start_date` = ?,
`event_end_date` = ?,
`teardown_end_date` = ?,
`event_welcome_msg` = ?
',
[
$event_name,
$buildup_start_date,
$event_start_date,
$event_end_date,
$teardown_end_date,
$event_welcome_msg,
]
);
}

View File

@ -1,5 +1,6 @@
<?php <?php
use Carbon\Carbon;
use Engelsystem\Database\Db; use Engelsystem\Database\Db;
/** /**
@ -128,10 +129,13 @@ function UserWorkLog_create($userWorkLog)
function UserWorkLog_new($user) function UserWorkLog_new($user)
{ {
$work_date = parse_date('Y-m-d H:i', date('Y-m-d 00:00', time())); $work_date = parse_date('Y-m-d H:i', date('Y-m-d 00:00', time()));
$event_config = EventConfig();
if (!empty($event_config['buildup_start_date'])) { /** @var Carbon $buildup */
$work_date = parse_date('Y-m-d H:i', date('Y-m-d 00:00', $event_config['buildup_start_date'])); $buildup = $buildup = config('buildup_start');
if (!empty($buildup)) {
$work_date = $buildup->format('Y-m-d H:i');
} }
return [ return [
'user_id' => $user['UID'], 'user_id' => $user['UID'],
'work_timestamp' => $work_date, 'work_timestamp' => $work_date,

View File

@ -1,5 +1,6 @@
<?php <?php
use Carbon\Carbon;
use Engelsystem\Database\DB; use Engelsystem\Database\DB;
use Engelsystem\ValidationResult; use Engelsystem\ValidationResult;
@ -359,19 +360,23 @@ function User_validate_planned_arrival_date($planned_arrival_date)
// null is not okay // null is not okay
return new ValidationResult(false, time()); return new ValidationResult(false, time());
} }
$event_config = EventConfig();
if (empty($event_config)) { $config = config();
// Nothing to validate against $buildup = $config->get('buildup_start');
return new ValidationResult(true, $planned_arrival_date); $teardown = $config->get('teardown_end');
}
if (isset($event_config['buildup_start_date']) && $planned_arrival_date < $event_config['buildup_start_date']) { /** @var Carbon $buildup */
if (!empty($buildup) && $buildup->greaterThan(Carbon::createFromTimestamp($planned_arrival_date))) {
// Planned arrival can not be before buildup start date // Planned arrival can not be before buildup start date
return new ValidationResult(false, $event_config['buildup_start_date']); return new ValidationResult(false, $buildup->getTimestamp());
} }
if (isset($event_config['teardown_end_date']) && $planned_arrival_date > $event_config['teardown_end_date']) {
/** @var Carbon $teardown */
if (!empty($teardown) && $teardown->lessThan(Carbon::createFromTimestamp($planned_arrival_date))) {
// Planned arrival can not be after teardown end date // Planned arrival can not be after teardown end date
return new ValidationResult(false, $event_config['teardown_end_date']); return new ValidationResult(false, $teardown->getTimestamp());
} }
return new ValidationResult(true, $planned_arrival_date); return new ValidationResult(true, $planned_arrival_date);
} }
@ -388,23 +393,28 @@ function User_validate_planned_departure_date($planned_arrival_date, $planned_de
// null is okay // null is okay
return new ValidationResult(true, null); return new ValidationResult(true, null);
} }
if ($planned_arrival_date > $planned_departure_date) { if ($planned_arrival_date > $planned_departure_date) {
// departure cannot be before arrival // departure cannot be before arrival
return new ValidationResult(false, $planned_arrival_date); return new ValidationResult(false, $planned_arrival_date);
} }
$event_config = EventConfig();
if (empty($event_config)) { $config = config();
// Nothing to validate against $buildup = $config->get('buildup_start');
return new ValidationResult(true, $planned_departure_date); $teardown = $config->get('teardown_end');
}
if (isset($event_config['buildup_start_date']) && $planned_departure_date < $event_config['buildup_start_date']) { /** @var Carbon $buildup */
if (!empty($buildup) && $buildup->greaterThan(Carbon::createFromTimestamp($planned_departure_date))) {
// Planned arrival can not be before buildup start date // Planned arrival can not be before buildup start date
return new ValidationResult(false, $event_config['buildup_start_date']); return new ValidationResult(false, $buildup->getTimestamp());
} }
if (isset($event_config['teardown_end_date']) && $planned_departure_date > $event_config['teardown_end_date']) {
/** @var Carbon $teardown */
if (!empty($teardown) && $teardown->lessThan(Carbon::createFromTimestamp($planned_departure_date))) {
// Planned arrival can not be after teardown end date // Planned arrival can not be after teardown end date
return new ValidationResult(false, $event_config['teardown_end_date']); return new ValidationResult(false, $teardown->getTimestamp());
} }
return new ValidationResult(true, $planned_departure_date); return new ValidationResult(true, $planned_departure_date);
} }

View File

@ -1,5 +1,6 @@
<?php <?php
use Carbon\Carbon;
use Engelsystem\Database\DB; use Engelsystem\Database\DB;
/** /**
@ -37,7 +38,7 @@ function guest_register()
$tshirt_sizes = config('tshirt_sizes'); $tshirt_sizes = config('tshirt_sizes');
$enable_tshirt_size = config('enable_tshirt_size'); $enable_tshirt_size = config('enable_tshirt_size');
$min_password_length = config('min_password_length'); $min_password_length = config('min_password_length');
$event_config = EventConfig(); $config = config();
$request = request(); $request = request();
$session = session(); $session = session();
@ -273,8 +274,8 @@ function guest_register()
} }
// If a welcome message is present, display registration success page. // If a welcome message is present, display registration success page.
if (!empty($event_config) && !empty($event_config['event_welcome_msg'])) { if ($message = $config->get('welcome_msg')) {
return User_registration_success_view($event_config['event_welcome_msg']); return User_registration_success_view($message);
} }
redirect(page_link_to('/')); redirect(page_link_to('/'));
@ -283,13 +284,14 @@ function guest_register()
$buildup_start_date = time(); $buildup_start_date = time();
$teardown_end_date = null; $teardown_end_date = null;
if (!empty($event_config)) { if ($buildup = $config->get('buildup_start')) {
if (isset($event_config['buildup_start_date'])) { /** @var Carbon $buildup */
$buildup_start_date = $event_config['buildup_start_date']; $buildup_start_date = $buildup->getTimestamp();
}
if (isset($event_config['teardown_end_date'])) {
$teardown_end_date = $event_config['teardown_end_date'];
} }
if ($teardown = $config->get('teardown_end')) {
/** @var Carbon $teardown */
$teardown_end_date = $teardown->getTimestamp();
} }
return page_with_title(register_title(), [ return page_with_title(register_title(), [
@ -452,12 +454,10 @@ function guest_login()
} }
} }
$event_config = EventConfig();
return page([ return page([
div('col-md-12', [ div('col-md-12', [
div('row', [ div('row', [
EventConfig_countdown_page($event_config) EventConfig_countdown_page()
]), ]),
div('row', [ div('row', [
div('col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4', [ div('col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4', [

View File

@ -1,5 +1,6 @@
<?php <?php
use Carbon\Carbon;
use Engelsystem\Database\DB; use Engelsystem\Database\DB;
/** /**
@ -206,6 +207,7 @@ function user_settings()
{ {
global $user; global $user;
$request = request(); $request = request();
$config = config();
$themes = config('available_themes'); $themes = config('available_themes');
$enable_tshirt_size = config('enable_tshirt_size'); $enable_tshirt_size = config('enable_tshirt_size');
@ -214,14 +216,15 @@ function user_settings()
$buildup_start_date = null; $buildup_start_date = null;
$teardown_end_date = null; $teardown_end_date = null;
$event_config = EventConfig();
if (!empty($event_config)) { if ($buildup = $config->get('buildup_start')) {
if (isset($event_config['buildup_start_date'])) { /** @var Carbon $buildup */
$buildup_start_date = $event_config['buildup_start_date']; $buildup_start_date = $buildup->getTimestamp();
}
if (isset($event_config['teardown_end_date'])) {
$teardown_end_date = $event_config['teardown_end_date'];
} }
if ($teardown = $config->get('teardown_end')) {
/** @var Carbon $teardown */
$teardown_end_date = $teardown->getTimestamp();
} }
$user_source = $user; $user_source = $user;

View File

@ -1,5 +1,6 @@
<?php <?php
// Methods to build a html form. // Methods to build a html form.
use Carbon\Carbon;
/** /**
* Renders a hidden input * Renders a hidden input
@ -63,6 +64,7 @@ function form_spinner($name, $label, $value)
function form_date($name, $label, $value, $start_date = '', $end_date = '') function form_date($name, $label, $value, $start_date = '', $end_date = '')
{ {
$dom_id = $name . '-date'; $dom_id = $name . '-date';
$value = ($value instanceof Carbon) ? $value->getTimestamp() : $value;
$value = is_numeric($value) ? date('Y-m-d', $value) : ''; $value = is_numeric($value) ? date('Y-m-d', $value) : '';
$start_date = is_numeric($start_date) ? date('Y-m-d', $start_date) : ''; $start_date = is_numeric($start_date) ? date('Y-m-d', $start_date) : '';
$end_date = is_numeric($end_date) ? date('Y-m-d', $end_date) : ''; $end_date = is_numeric($end_date) ? date('Y-m-d', $end_date) : '';

View File

@ -1,5 +1,6 @@
<?php <?php
use Carbon\Carbon;
use Engelsystem\ValidationResult; use Engelsystem\ValidationResult;
/** /**
@ -134,9 +135,16 @@ function check_request_date($name, $error_message = null, $null_allowed = false)
*/ */
function check_date($input, $error_message = null, $null_allowed = false) function check_date($input, $error_message = null, $null_allowed = false)
{ {
if ($tmp = parse_date('Y-m-d H:i', trim($input) . ' 00:00')) { try {
return new ValidationResult(true, $tmp); $time = Carbon::createFromFormat('Y-m-d', trim($input));
} catch (InvalidArgumentException $e) {
$time = null;
} }
if ($time) {
return new ValidationResult(true, $time);
}
if ($null_allowed) { if ($null_allowed) {
return new ValidationResult(true, null); return new ValidationResult(true, null);
} }

View File

@ -1,59 +1,62 @@
<?php <?php
use Carbon\Carbon;
/** /**
* Shows basic event infos and countdowns. * Shows basic event infos and countdowns.
* *
* @param array $event_config The event configuration
* @return string * @return string
*/ */
function EventConfig_countdown_page($event_config) function EventConfig_countdown_page()
{ {
if (empty($event_config)) { $config = config();
return div('col-md-12 text-center', [ $name = $config->get('name', '');
heading(sprintf(__('Welcome to the %s!'), '<span class="icon-icon_angel"></span> ENGELSYSTEM'), 2) /** @var Carbon $buildup */
]); $buildup = $config->get('buildup_start');
} /** @var Carbon $start */
$start = $config->get('event_start');
/** @var Carbon $end */
$end = $config->get('event_end');
/** @var Carbon $teardown */
$teardown = $config->get('teardown_end');
$elements = []; $elements = [];
if (!is_null($event_config['event_name'])) {
$elements[] = div('col-sm-12 text-center', [ $elements[] = div('col-sm-12 text-center', [
heading(sprintf( heading(sprintf(
__('Welcome to the %s!'), __('Welcome to the %s!'),
$event_config['event_name'] . ' <span class="icon-icon_angel"></span> ENGELSYSTEM' $name . ' <span class="icon-icon_angel"></span> ENGELSYSTEM'
), 2) ), 2)
]); ]);
}
if (!is_null($event_config['buildup_start_date']) && time() < $event_config['buildup_start_date']) { if (!empty($buildup) && $buildup->greaterThan(new Carbon())) {
$elements[] = div('col-sm-3 text-center hidden-xs', [ $elements[] = div('col-sm-3 text-center hidden-xs', [
heading(__('Buildup starts'), 4), heading(__('Buildup starts'), 4),
'<span class="moment-countdown text-big" data-timestamp="' . $event_config['buildup_start_date'] . '">%c</span>', '<span class="moment-countdown text-big" data-timestamp="' . $buildup->getTimestamp() . '">%c</span>',
'<small>' . date(__('Y-m-d'), $event_config['buildup_start_date']) . '</small>' '<small>' . $buildup->format(__('Y-m-d')) . '</small>'
]); ]);
} }
if (!is_null($event_config['event_start_date']) && time() < $event_config['event_start_date']) { if (!empty($start) && $start->greaterThan(new Carbon())) {
$elements[] = div('col-sm-3 text-center hidden-xs', [ $elements[] = div('col-sm-3 text-center hidden-xs', [
heading(__('Event starts'), 4), heading(__('Event starts'), 4),
'<span class="moment-countdown text-big" data-timestamp="' . $event_config['event_start_date'] . '">%c</span>', '<span class="moment-countdown text-big" data-timestamp="' . $start->getTimestamp() . '">%c</span>',
'<small>' . date(__('Y-m-d'), $event_config['event_start_date']) . '</small>' '<small>' . $start->format(__('Y-m-d')) . '</small>'
]); ]);
} }
if (!is_null($event_config['event_end_date']) && time() < $event_config['event_end_date']) { if (!empty($end) && $end->greaterThan(new Carbon())) {
$elements[] = div('col-sm-3 text-center hidden-xs', [ $elements[] = div('col-sm-3 text-center hidden-xs', [
heading(__('Event ends'), 4), heading(__('Event ends'), 4),
'<span class="moment-countdown text-big" data-timestamp="' . $event_config['event_end_date'] . '">%c</span>', '<span class="moment-countdown text-big" data-timestamp="' . $end->getTimestamp() . '">%c</span>',
'<small>' . date(__('Y-m-d'), $event_config['event_end_date']) . '</small>' '<small>' . $end->format(__('Y-m-d')) . '</small>'
]); ]);
} }
if (!is_null($event_config['teardown_end_date']) && time() < $event_config['teardown_end_date']) { if (!empty($teardown) && $teardown->greaterThan(new Carbon())) {
$elements[] = div('col-sm-3 text-center hidden-xs', [ $elements[] = div('col-sm-3 text-center hidden-xs', [
heading(__('Teardown ends'), 4), heading(__('Teardown ends'), 4),
'<span class="moment-countdown text-big" data-timestamp="' . $event_config['teardown_end_date'] . '">%c</span>', '<span class="moment-countdown text-big" data-timestamp="' . $teardown->getTimestamp() . '">%c</span>',
'<small>' . date(__('Y-m-d'), $event_config['teardown_end_date']) . '</small>' '<small>' . $teardown->format(__('Y-m-d')) . '</small>'
]); ]);
} }

View File

@ -1,5 +1,7 @@
<?php <?php
use Carbon\Carbon;
/** /**
* Renders user settings page * Renders user settings page
* *
@ -887,10 +889,9 @@ function render_user_arrived_hint()
global $user; global $user;
if ($user['Gekommen'] == 0) { if ($user['Gekommen'] == 0) {
$event_config = EventConfig(); /** @var Carbon $buildup */
if (!empty($event_config) $buildup = config('buildup_start');
&& !is_null($event_config['buildup_start_date']) if (!empty($buildup) && $buildup->lessThan(new Carbon())) {
&& time() > $event_config['buildup_start_date']) {
return __('You are not marked as arrived. Please go to heaven\'s desk, get your angel badge and/or tell them that you arrived already.'); return __('You are not marked as arrived. Please go to heaven\'s desk, get your angel badge and/or tell them that you arrived already.');
} }
} }

View File

@ -2,25 +2,25 @@
<hr/> <hr/>
<div class="text-center footer" style="margin-bottom: 10px;"> <div class="text-center footer" style="margin-bottom: 10px;">
{% block eventinfo %} {% block eventinfo %}
{% if event_config.event_name %} {% if config('name') %}
{% if event_config.event_start_date and event_config.event_end_date %} {% if config('event_start') and config('event_end') %}
{{ __('%s, from %s to %s', [ {{ __('%s, from %s to %s', [
event_config.event_name, config('name'),
date(event_config.event_start_date).format(__('Y-m-d')), config('event_start').format(__('Y-m-d')),
date(event_config.event_end_date).format(__('Y-m-d')) config('event_end').format(__('Y-m-d'))
]) }} ]) }}
{% elseif event_config.event_start_date %} {% elseif config('event_start') %}
{{ __('%s, starting %s', [ {{ __('%s, starting %s', [
event_config.event_name, config('name'),
date(event_config.event_start_date).format(__('Y-m-d')) config('event_start').format(__('Y-m-d'))
]) }} ]) }}
{% else %} {% else %}
{{ event_config.event_name }} {{ config('name') }}
{% endif %} <br> {% endif %} <br>
{% elseif event_config.event_start_date and event_config.event_end_date %} {% elseif config('event_start') and config('event_end') %}
{{ __('Event from %s to %s', [ {{ __('Event from %s to %s', [
date(event_config.event_start_date).format(__('Y-m-d')), config('event_start').format(__('Y-m-d')),
date(event_config.event_end_date).format(__('Y-m-d')) config('event_end').format(__('Y-m-d'))
]) }} <br> ]) }} <br>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -2,14 +2,31 @@
namespace Engelsystem\Config; namespace Engelsystem\Config;
use Engelsystem\Application;
use Engelsystem\Container\ServiceProvider; use Engelsystem\Container\ServiceProvider;
use Engelsystem\Models\EventConfig;
use Exception; use Exception;
use Illuminate\Database\QueryException;
class ConfigServiceProvider extends ServiceProvider class ConfigServiceProvider extends ServiceProvider
{ {
/** @var array */ /** @var array */
protected $configFiles = ['config.default.php', 'config.php']; protected $configFiles = ['config.default.php', 'config.php'];
/** @var EventConfig */
protected $eventConfig;
/**
* @param Application $app
* @param EventConfig $eventConfig
*/
public function __construct(Application $app, EventConfig $eventConfig = null)
{
parent::__construct($app);
$this->eventConfig = $eventConfig;
}
public function register() public function register()
{ {
$config = $this->app->make(Config::class); $config = $this->app->make(Config::class);
@ -17,7 +34,7 @@ class ConfigServiceProvider extends ServiceProvider
$this->app->instance('config', $config); $this->app->instance('config', $config);
foreach ($this->configFiles as $file) { foreach ($this->configFiles as $file) {
$file = config_path($file); $file = $this->getConfigPath($file);
if (!file_exists($file)) { if (!file_exists($file)) {
continue; continue;
@ -33,4 +50,44 @@ class ConfigServiceProvider extends ServiceProvider
throw new Exception('Configuration not found'); throw new Exception('Configuration not found');
} }
} }
public function boot()
{
if (!$this->eventConfig) {
return;
}
/** @var Config $config */
$config = $this->app->get('config');
/** @var EventConfig[] $values */
try {
$values = $this->eventConfig->newQuery()->get(['name', 'value']);
} catch (QueryException $e) {
return;
}
foreach ($values as $option) {
$data = $option->value;
if (is_array($data) && $config->has($option->name)) {
$data = array_replace_recursive(
$config->get($option->name),
$data
);
}
$config->set($option->name, $data);
}
}
/**
* Get the config path
*
* @param string $path
* @return string
*/
protected function getConfigPath($path = ''): string
{
return config_path($path);
}
} }

View File

@ -2,7 +2,6 @@
namespace Engelsystem\Renderer\Twig\Extensions; namespace Engelsystem\Renderer\Twig\Extensions;
use Carbon\Carbon;
use Twig_Extension as TwigExtension; use Twig_Extension as TwigExtension;
use Twig_Extension_GlobalsInterface as GlobalsInterface; use Twig_Extension_GlobalsInterface as GlobalsInterface;
@ -17,45 +16,8 @@ class Globals extends TwigExtension implements GlobalsInterface
{ {
global $user; global $user;
$eventConfig = $this->getEventConfig();
if (empty($eventConfig)) {
$eventConfig = [];
}
return [ return [
'user' => isset($user) ? $user : [], 'user' => isset($user) ? $user : [],
'event_config' => $this->filterEventConfig($eventConfig),
]; ];
} }
/**
* @return array
* @codeCoverageIgnore
*/
protected function getEventConfig()
{
return EventConfig();
}
/**
* @param $eventConfig
* @return mixed
*/
protected function filterEventConfig($eventConfig)
{
array_walk($eventConfig, function (&$value, $key) {
if (is_null($value) || !in_array($key, [
'buildup_start_date',
'event_start_date',
'event_end_date',
'teardown_end_date',
])) {
return;
}
$value = Carbon::createFromTimestamp($value);
});
return $eventConfig;
}
} }

View File

@ -5,18 +5,22 @@ namespace Engelsystem\Test\Unit\Config;
use Engelsystem\Application; use Engelsystem\Application;
use Engelsystem\Config\Config; use Engelsystem\Config\Config;
use Engelsystem\Config\ConfigServiceProvider; use Engelsystem\Config\ConfigServiceProvider;
use Engelsystem\Models\EventConfig;
use Engelsystem\Test\Unit\ServiceProviderTest; use Engelsystem\Test\Unit\ServiceProviderTest;
use Exception; use Exception;
use PHPUnit_Framework_MockObject_MockObject; use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\QueryException;
use PHPUnit\Framework\MockObject\MockObject;
class ConfigServiceProviderTest extends ServiceProviderTest class ConfigServiceProviderTest extends ServiceProviderTest
{ {
/** /**
* @covers \Engelsystem\Config\ConfigServiceProvider::register() * @covers \Engelsystem\Config\ConfigServiceProvider::register
* @covers \Engelsystem\Config\ConfigServiceProvider::getConfigPath
*/ */
public function testRegister() public function testRegister()
{ {
/** @var PHPUnit_Framework_MockObject_MockObject|Config $config */ /** @var MockObject|Config $config */
$config = $this->getMockBuilder(Config::class) $config = $this->getMockBuilder(Config::class)
->getMock(); ->getMock();
@ -53,11 +57,11 @@ class ConfigServiceProviderTest extends ServiceProviderTest
} }
/** /**
* @covers \Engelsystem\Config\ConfigServiceProvider::register() * @covers \Engelsystem\Config\ConfigServiceProvider::register
*/ */
public function testRegisterException() public function testRegisterException()
{ {
/** @var PHPUnit_Framework_MockObject_MockObject|Config $config */ /** @var MockObject|Config $config */
$config = $this->getMockBuilder(Config::class) $config = $this->getMockBuilder(Config::class)
->getMock(); ->getMock();
@ -81,4 +85,67 @@ class ConfigServiceProviderTest extends ServiceProviderTest
$serviceProvider = new ConfigServiceProvider($app); $serviceProvider = new ConfigServiceProvider($app);
$serviceProvider->register(); $serviceProvider->register();
} }
/**
* @covers \Engelsystem\Config\ConfigServiceProvider::__construct
* @covers \Engelsystem\Config\ConfigServiceProvider::boot
*/
public function testBoot()
{
$app = $this->getApp(['get']);
/** @var EventConfig|MockObject $eventConfig */
$eventConfig = $this->createMock(EventConfig::class);
/** @var EloquentBuilder|MockObject $eloquentBuilder */
$eloquentBuilder = $this->getMockBuilder(EloquentBuilder::class)
->disableOriginalConstructor()
->getMock();
$config = new Config(['foo' => 'bar', 'lorem' => ['ipsum' => 'dolor', 'bla' => 'foo']]);
$configs = [
new EventConfig(['name' => 'test', 'value' => 'testing']),
new EventConfig(['name' => 'lorem', 'value' => ['ipsum' => 'tester']]),
];
$returnValue = $eloquentBuilder;
$eventConfig
->expects($this->exactly(3))
->method('newQuery')
->willReturnCallback(function () use (&$returnValue) {
if ($returnValue instanceof EloquentBuilder) {
$return = $returnValue;
$returnValue = null;
return $return;
}
if (is_null($returnValue)) {
throw new QueryException('', [], new Exception());
}
return null;
});
$this->setExpects($eloquentBuilder, 'get', [['name', 'value']], $configs);
$this->setExpects($app, 'get', ['config'], $config, $this->exactly(3));
$serviceProvider = new ConfigServiceProvider($app);
$serviceProvider->boot();
$serviceProvider = new ConfigServiceProvider($app, $eventConfig);
$serviceProvider->boot();
$serviceProvider->boot();
$serviceProvider->boot();
$this->assertArraySubset(
[
'foo' => 'bar',
'lorem' => [
'ipsum' => 'tester',
'bla' => 'foo',
],
'test' => 'testing',
],
$config->get(null)
);
}
} }

View File

@ -2,54 +2,25 @@
namespace Engelsystem\Test\Unit\Renderer\Twig\Extensions; namespace Engelsystem\Test\Unit\Renderer\Twig\Extensions;
use Carbon\Carbon;
use Engelsystem\Renderer\Twig\Extensions\Globals; use Engelsystem\Renderer\Twig\Extensions\Globals;
use PHPUnit\Framework\MockObject\MockObject;
class GlobalsTest extends ExtensionTest class GlobalsTest extends ExtensionTest
{ {
/** /**
* @covers \Engelsystem\Renderer\Twig\Extensions\Globals::getGlobals * @covers \Engelsystem\Renderer\Twig\Extensions\Globals::getGlobals
* @covers \Engelsystem\Renderer\Twig\Extensions\Globals::filterEventConfig
*/ */
public function testGetGlobals() public function testGetGlobals()
{ {
global $user; global $user;
$user = []; $user = [];
/** @var Globals|MockObject $extension */ $extension = new Globals();
$extension = $this->getMockBuilder(Globals::class)
->setMethods(['getEventConfig'])
->getMock();
$extension->expects($this->exactly(2))
->method('getEventConfig')
->willReturnOnConsecutiveCalls(
null,
[
'lorem' => 'ipsum',
'event_end_date' => 1234567890,
]
);
$globals = $extension->getGlobals(); $globals = $extension->getGlobals();
$this->assertGlobalsExists('user', [], $globals); $this->assertGlobalsExists('user', [], $globals);
$this->assertGlobalsExists('event_config', [], $globals);
$user['foo'] = 'bar'; $user['foo'] = 'bar';
$globals = $extension->getGlobals(); $globals = $extension->getGlobals();
$this->assertGlobalsExists('user', ['foo' => 'bar'], $globals); $this->assertGlobalsExists('user', ['foo' => 'bar'], $globals);
$this->assertGlobalsExists('event_config', ['lorem' => 'ipsum'], $globals);
$config = $globals['event_config'];
$this->assertArrayHasKey('event_end_date', $config);
/** @var Carbon $eventEndDate */
$eventEndDate = $config['event_end_date'];
$this->assertInstanceOf(Carbon::class, $eventEndDate);
$eventEndDate->setTimezone('UTC');
$this->assertEquals('2009-02-13 23:31:30', $eventEndDate->format('Y-m-d H:i:s'));
} }
} }