[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 4ba71426b6
commit b436a0641d
No known key found for this signature in database
GPG Key ID: 7D0C7EAFC9D835A0
2 changed files with 30 additions and 18 deletions

View File

@ -110,27 +110,29 @@ class UserPanel extends AbstractController
{ {
$schema = DB::getConnection()->getSchemaManager(); $schema = DB::getConnection()->getSchemaManager();
$platform = $schema->getDatabasePlatform(); $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' => []]; $form_defs = ['placeholder' => []];
foreach ($columns as $name => $col) { foreach ($columns as $name => $col) {
$val = $col->getType()->convertToPHPValue($col->getDefault(), $platform); $type = $col->getType();
switch ($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: 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; break;
case Types::INTEGER: case Types::INTEGER:
if ($name == 'target_profile_id') { 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; break;
} }
// fallthrough
// no break // no break
default: default:
throw new Exception("Structure of table user_notification_prefs changed in a way not accounted to in notification settings ({$name})", 500); 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']); unset($form_defs['placeholder']);
$tabbed_forms = []; $tabbed_forms = [];

View File

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