[CONTROLLER][UI] Add notification settings form

This commit is contained in:
Hugo Sales 2020-08-05 16:31:39 +00:00 committed by Hugo Sales
parent ed84c1f8bf
commit b2b0990bf6
2 changed files with 30 additions and 18 deletions

View File

@ -110,27 +110,29 @@ class UserPanel extends AbstractController
{
$schema = DB::getConnection()->getSchemaManager();
$platform = $schema->getDatabasePlatform();
$columns = Common::array_remove_keys($schema->listTableColumns('user_notification_prefs'), ['user_id', 'transport', 'created', 'modified']);
$columns = Common::arrayRemoveKeys($schema->listTableColumns('user_notification_prefs'), ['user_id', 'transport', 'created', 'modified']);
$form_defs = ['placeholder' => []];
foreach ($columns as $name => $col) {
$val = $col->getType()->convertToPHPValue($col->getDefault(), $platform);
switch ($col->getType()) {
$type = $col->getType();
$val = $type->convertToPHPValue($col->getDefault(), $platform);
$type_str = lcfirst(substr((string) $type, 1));
$label = str_replace('_', ' ', ucfirst($name));
switch ($type_str) {
case Types::BOOLEAN:
$form_defs['placeholder'][] = [$name, CheckboxType::class, ['data' => $val, 'label' => _m($col->getComment())]];
$form_defs['placeholder'][] = [$name, CheckboxType::class, ['data' => $val, 'label' => $label, 'help' => _m($col->getComment())]];
break;
case Types::INTEGER:
if ($name == 'target_profile_id') {
$form_defs['placeholder'][] = ['target_profiles', TextType::class, ['data' => $val, 'label' => _m($col->getComment())], 'transformer' => ProfileArrayTransformer::class];
$form_defs['placeholder'][] = ['target_profiles', TextType::class, ['data' => $val, 'label' => $label, 'help' => _m($col->getComment())], 'transformer' => ProfileArrayTransformer::class];
break;
}
// fallthrough
// no break
default:
throw new Exception("Structure of table user_notification_prefs changed in a way not accounted to in notification settings ({$name})", 500);
}
}
Event::handle('AddNotificationTransport', [&$form_defs]);
Event::handle('add_notification_transport', [&$form_defs]);
unset($form_defs['placeholder']);
$tabbed_forms = [];

View File

@ -3,19 +3,29 @@
{% block title %}Notification Settings{% endblock %}
{% block body %}
<div class='content'>
{% block primary_nav %}
{{ parent() }}
{% endblock primary_nav %}
<div class='content'>
{% block primary_nav %}
{{ parent() }}
{% endblock primary_nav %}
{% block form %}
{% block form %}
<div id='form-tabs'>
<ul>
{% for transport, form in tabbed_forms %}
<div id="form_{{ transport }}" class='form'>
{{ form(form) }}
</div>
<li class='hover-effect'>
{{ transport }}
</li>
{% endfor %}
{% endblock form %}
</div>
</ul>
</div>
<div id='form-content'>
{% for transport, form in tabbed_forms %}
<div id="form_{{ transport }}" class='form'>
{{ form(form) }}
</div>
{% endfor %}
</div>
{% endblock form %}
</div>
{% endblock body %}