improve list views (#1191)
This commit is contained in:
@@ -69,9 +69,10 @@ class DatatableExtensions extends AbstractExtension
|
|||||||
*
|
*
|
||||||
* @param string $dataTable
|
* @param string $dataTable
|
||||||
* @param string $column
|
* @param string $column
|
||||||
|
* @param array $columns
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isColumnVisible(string $dataTable, string $column)
|
public function isColumnVisible(string $dataTable, string $column, array $columns)
|
||||||
{
|
{
|
||||||
// name handling is spread between here and datatables.html.twig (data_table_column_modal)
|
// name handling is spread between here and datatables.html.twig (data_table_column_modal)
|
||||||
$cookie = $this->getVisibilityCookieName($dataTable);
|
$cookie = $this->getVisibilityCookieName($dataTable);
|
||||||
@@ -86,13 +87,34 @@ class DatatableExtensions extends AbstractExtension
|
|||||||
$values = $this->cookies[$cookie];
|
$values = $this->cookies[$cookie];
|
||||||
|
|
||||||
if (empty($values) || !is_array($values)) {
|
if (empty($values) || !is_array($values)) {
|
||||||
return true;
|
return $this->checkInColumDefinition($columns, $column);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($values[$column]) && $values[$column] === false) {
|
if (!isset($values[$column])) {
|
||||||
|
return $this->checkInColumDefinition($columns, $column);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($values[$column] === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function checkInColumDefinition(array $columns, string $column)
|
||||||
|
{
|
||||||
|
if (array_key_exists($column, $columns)) {
|
||||||
|
$tmp = $columns[$column];
|
||||||
|
if (is_array($tmp)) {
|
||||||
|
$tmp = $tmp['class'];
|
||||||
|
}
|
||||||
|
foreach (explode(' ', $tmp) as $class) {
|
||||||
|
if ($class === 'hidden') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,65 +18,68 @@ final class IconExtension extends AbstractExtension
|
|||||||
* @var string[]
|
* @var string[]
|
||||||
*/
|
*/
|
||||||
private static $icons = [
|
private static $icons = [
|
||||||
|
'about' => 'fas fa-info-circle',
|
||||||
'activity' => 'fas fa-tasks',
|
'activity' => 'fas fa-tasks',
|
||||||
'admin' => 'fas fa-wrench',
|
'admin' => 'fas fa-wrench',
|
||||||
|
'audit' => 'fas fa-history',
|
||||||
|
'avatar' => 'fas fa-user',
|
||||||
|
'back' => 'fas fa-long-arrow-alt-left',
|
||||||
'calendar' => 'far fa-calendar-alt',
|
'calendar' => 'far fa-calendar-alt',
|
||||||
'customer' => 'fas fa-user-tie',
|
'clock' => 'far fa-clock',
|
||||||
|
'configuration' => 'fas fa-cogs',
|
||||||
'copy' => 'far fa-copy',
|
'copy' => 'far fa-copy',
|
||||||
'create' => 'far fa-plus-square',
|
'create' => 'far fa-plus-square',
|
||||||
|
'csv' => 'fas fa-table',
|
||||||
|
'customer' => 'fas fa-user-tie',
|
||||||
'dashboard' => 'fas fa-tachometer-alt',
|
'dashboard' => 'fas fa-tachometer-alt',
|
||||||
|
'debug' => 'far fa-file-alt',
|
||||||
'delete' => 'far fa-trash-alt',
|
'delete' => 'far fa-trash-alt',
|
||||||
|
'doctor' => 'fas fa-medkit',
|
||||||
'download' => 'fas fa-download',
|
'download' => 'fas fa-download',
|
||||||
'duration' => 'far fa-hourglass',
|
'duration' => 'far fa-hourglass',
|
||||||
'edit' => 'far fa-edit',
|
'edit' => 'far fa-edit',
|
||||||
|
'export' => 'fas fa-file-export',
|
||||||
'filter' => 'fas fa-filter',
|
'filter' => 'fas fa-filter',
|
||||||
'help' => 'far fa-question-circle',
|
'help' => 'far fa-question-circle',
|
||||||
|
'home' => 'fas fa-home',
|
||||||
'invoice' => 'fas fa-file-invoice',
|
'invoice' => 'fas fa-file-invoice',
|
||||||
'list' => 'fas fa-list',
|
'list' => 'fas fa-list',
|
||||||
'logout' => 'fas fa-sign-out-alt',
|
'logout' => 'fas fa-sign-out-alt',
|
||||||
|
'mail' => 'fas fa-envelope-open',
|
||||||
|
'mail-sent' => 'fas fa-paper-plane',
|
||||||
'manual' => 'fas fa-book',
|
'manual' => 'fas fa-book',
|
||||||
|
'mobile' => 'fas fa-mobile',
|
||||||
'money' => 'far fa-money-bill-alt',
|
'money' => 'far fa-money-bill-alt',
|
||||||
|
'ods' => 'fas fa-table',
|
||||||
|
'off' => 'fas fa-toggle-off',
|
||||||
|
'on' => 'fas fa-toggle-on',
|
||||||
|
'pdf' => 'fas fa-file-pdf',
|
||||||
|
'permissions' => 'fas fa-user-lock',
|
||||||
|
'phone' => 'fas fa-phone',
|
||||||
|
'plugin' => 'fas fa-plug',
|
||||||
'print' => 'fas fa-print',
|
'print' => 'fas fa-print',
|
||||||
|
'profile' => 'fas fa-user-edit',
|
||||||
|
'profile-stats' => 'far fa-chart-bar',
|
||||||
'project' => 'fas fa-briefcase',
|
'project' => 'fas fa-briefcase',
|
||||||
'repeat' => 'fas fa-redo-alt',
|
'repeat' => 'fas fa-redo-alt',
|
||||||
'search' => 'fas fa-search',
|
'search' => 'fas fa-search',
|
||||||
|
'settings' => 'fas fa-cog',
|
||||||
|
'shop' => 'fas fa-shopping-cart',
|
||||||
'start' => 'fas fa-play-circle',
|
'start' => 'fas fa-play-circle',
|
||||||
'start-small' => 'far fa-play-circle',
|
'start-small' => 'far fa-play-circle',
|
||||||
'stop' => 'fas fa-stop',
|
'stop' => 'fas fa-stop',
|
||||||
'stop-small' => 'far fa-stop-circle',
|
'stop-small' => 'far fa-stop-circle',
|
||||||
'timesheet' => 'fas fa-clock',
|
'success' => 'fas fa-check',
|
||||||
'trash' => 'far fa-trash-alt',
|
'tag' => 'fas fa-tags',
|
||||||
'team' => 'fas fa-users',
|
'team' => 'fas fa-users',
|
||||||
|
'timesheet' => 'fas fa-clock',
|
||||||
|
'timesheet-team' => 'fas fa-user-clock',
|
||||||
|
'trash' => 'far fa-trash-alt',
|
||||||
|
'unlocked' => 'fas fa-unlock-alt',
|
||||||
'user' => 'fas fa-user-friends',
|
'user' => 'fas fa-user-friends',
|
||||||
'visibility' => 'far fa-eye',
|
'visibility' => 'far fa-eye',
|
||||||
'settings' => 'fas fa-cog',
|
|
||||||
'export' => 'fas fa-file-export',
|
|
||||||
'pdf' => 'fas fa-file-pdf',
|
|
||||||
'csv' => 'fas fa-table',
|
|
||||||
'ods' => 'fas fa-table',
|
|
||||||
'xlsx' => 'fas fa-file-excel',
|
|
||||||
'on' => 'fas fa-toggle-on',
|
|
||||||
'off' => 'fas fa-toggle-off',
|
|
||||||
'audit' => 'fas fa-history',
|
|
||||||
'home' => 'fas fa-home',
|
|
||||||
'shop' => 'fas fa-shopping-cart',
|
|
||||||
'about' => 'fas fa-info-circle',
|
|
||||||
'debug' => 'far fa-file-alt',
|
|
||||||
'profile-stats' => 'far fa-chart-bar',
|
|
||||||
'profile' => 'fas fa-user-edit',
|
|
||||||
'warning' => 'fas fa-exclamation-triangle',
|
'warning' => 'fas fa-exclamation-triangle',
|
||||||
'permissions' => 'fas fa-user-lock',
|
'xlsx' => 'fas fa-file-excel',
|
||||||
'unlocked' => 'fas fa-unlock-alt',
|
|
||||||
'back' => 'fas fa-long-arrow-alt-left',
|
|
||||||
'tag' => 'fas fa-tags',
|
|
||||||
'avatar' => 'fas fa-user',
|
|
||||||
'timesheet-team' => 'fas fa-user-clock',
|
|
||||||
'plugin' => 'fas fa-plug',
|
|
||||||
'configuration' => 'fas fa-cogs',
|
|
||||||
'mail-sent' => 'fas fa-paper-plane',
|
|
||||||
'mail' => 'fas fa-envelope-open',
|
|
||||||
'doctor' => 'fas fa-medkit',
|
|
||||||
'success' => 'fas fa-check',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
'name': 'alwaysVisible',
|
'name': 'alwaysVisible',
|
||||||
'customer': 'hidden-xs',
|
'customer': 'hidden-xs',
|
||||||
'project': 'hidden-xs',
|
'project': 'hidden-xs',
|
||||||
'comment': 'hidden-xs',
|
'comment': 'hidden-xs hidden-sm',
|
||||||
} %}
|
} %}
|
||||||
{% for field in metaColumns %}
|
{% for field in metaColumns %}
|
||||||
{% set columns = columns|merge({
|
{% set columns = columns|merge({
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
}) %}
|
}) %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% set columns = columns|merge({
|
{% set columns = columns|merge({
|
||||||
'visible': {'class': '', 'orderBy': false},
|
'visible': {'class': 'text-center', 'orderBy': false},
|
||||||
'actions': 'actions alwaysVisible',
|
'actions': 'actions alwaysVisible',
|
||||||
}) %}
|
}) %}
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,12 @@
|
|||||||
}) %}
|
}) %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% set columns = columns|merge({
|
{% set columns = columns|merge({
|
||||||
'team': {'class': '', 'orderBy': false},
|
'email': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
|
||||||
'visible': {'class': 'hidden-xs', 'orderBy': false},
|
'homepage': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
|
||||||
|
'mobile': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
|
||||||
|
'phone': {'class': 'text-center hidden hidden-xs', 'orderBy': false},
|
||||||
|
'team': {'class': 'text-center', 'orderBy': false},
|
||||||
|
'visible': {'class': 'text-center', 'orderBy': false},
|
||||||
'actions': 'actions alwaysVisible',
|
'actions': 'actions alwaysVisible',
|
||||||
}) %}
|
}) %}
|
||||||
|
|
||||||
@@ -49,6 +53,34 @@
|
|||||||
{{ tables.datatable_meta_column(entry, field) }}
|
{{ tables.datatable_meta_column(entry, field) }}
|
||||||
</td>
|
</td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'email') }}">
|
||||||
|
{% if entry.email is not empty %}
|
||||||
|
<a href="mailto:{{ entry.email }}"><i class="{{ 'mail'|icon }}"></i></a>
|
||||||
|
{% else %}
|
||||||
|
–
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'homepage') }}">
|
||||||
|
{% if entry.homepage is not empty %}
|
||||||
|
<a href="{{ entry.homepage }}" target="_blank"><i class="{{ 'home'|icon }}"></i></a>
|
||||||
|
{% else %}
|
||||||
|
–
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'mobile') }}">
|
||||||
|
{% if entry.mobile is not empty %}
|
||||||
|
<a href="tel:{{ entry.mobile }}"><i class="{{ 'mobile'|icon }}"></i></a>
|
||||||
|
{% else %}
|
||||||
|
–
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'phone') }}">
|
||||||
|
{% if entry.phone is not empty %}
|
||||||
|
<a href="tel:{{ entry.phone }}"><i class="{{ 'phone'|icon }}"></i></a>
|
||||||
|
{% else %}
|
||||||
|
–
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
<td class="{{ tables.data_table_column_class(tableName, columns, 'team') }}">
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'team') }}">
|
||||||
{% if entry.teams|length > 0 %}
|
{% if entry.teams|length > 0 %}
|
||||||
{{ widgets.badge_counter(entry.teams|length) }}
|
{{ widgets.badge_counter(entry.teams|length) }}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% if 'alwaysVisible' not in headerOptions.class %}
|
{% if 'alwaysVisible' not in headerOptions.class %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="checkbox" id="column_{{ title }}" name="{{ title }}"{% if is_visible_column(name, title) %} checked="checked"{% endif %}>
|
<input type="checkbox" id="column_{{ title }}" name="{{ title }}"{% if is_visible_column(name, title, columns) %} checked="checked"{% endif %}>
|
||||||
<label class="control-label" for="column_{{ title }}">{{ headerTitle }}</label>
|
<label class="control-label" for="column_{{ title }}">{{ headerTitle }}</label>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -105,15 +105,17 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if not is_visible_column(name, column) %}
|
{% if not is_visible_column(name, column, columns) %}
|
||||||
{% set classes = classes ~ ' hidden' %}
|
{% set classes = classes ~ ' hidden' %}
|
||||||
{% elseif not is_datatable_configured(name) %}
|
{% elseif not is_datatable_configured(name) %}
|
||||||
|
{# needs to be a foreach, as classes like "hidden-xs" would match in: if 'hidden' in classes #}
|
||||||
{% for tmp in classes|split(' ') %}
|
{% for tmp in classes|split(' ') %}
|
||||||
{% if 'hidden' == tmp %}
|
{% if 'hidden' == tmp %}
|
||||||
{% set classes = classes|replace({(tmp): ''}) %}
|
{% set classes = classes|replace({(tmp): ''}) %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
{# needs to be a foreach, as classes like "hidden-xs" would match in: if 'hidden' in classes #}
|
||||||
{% for tmp in classes|split(' ') %}
|
{% for tmp in classes|split(' ') %}
|
||||||
{% if 'hidden' in tmp %}
|
{% if 'hidden' in tmp %}
|
||||||
{% set classes = classes|replace({(tmp): ''}) %}
|
{% set classes = classes|replace({(tmp): ''}) %}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
'customer': 'hidden-xs',
|
'customer': 'hidden-xs',
|
||||||
'comment': 'hidden-xs hidden-sm',
|
'comment': 'hidden-xs hidden-sm',
|
||||||
'orderNumber': 'hidden-xs hidden-sm',
|
'orderNumber': 'hidden-xs hidden-sm',
|
||||||
|
'orderDate': 'hidden-xs hidden-sm',
|
||||||
} %}
|
} %}
|
||||||
{% for field in metaColumns %}
|
{% for field in metaColumns %}
|
||||||
{% set columns = columns|merge({
|
{% set columns = columns|merge({
|
||||||
@@ -16,8 +17,8 @@
|
|||||||
}) %}
|
}) %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% set columns = columns|merge({
|
{% set columns = columns|merge({
|
||||||
'team': {'class': '', 'orderBy': false},
|
'team': {'class': 'text-center', 'orderBy': false},
|
||||||
'visible': {'class': '', 'orderBy': false},
|
'visible': {'class': 'text-center', 'orderBy': false},
|
||||||
'actions': 'actions alwaysVisible',
|
'actions': 'actions alwaysVisible',
|
||||||
}) %}
|
}) %}
|
||||||
|
|
||||||
@@ -46,6 +47,11 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="{{ tables.data_table_column_class(tableName, columns, 'comment') }}">{{ entry.comment|comment2html }}</td>
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'comment') }}">{{ entry.comment|comment2html }}</td>
|
||||||
<td class="{{ tables.data_table_column_class(tableName, columns, 'orderNumber') }}">{{ entry.orderNumber }}</td>
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'orderNumber') }}">{{ entry.orderNumber }}</td>
|
||||||
|
<td class="{{ tables.data_table_column_class(tableName, columns, 'orderDate') }}">
|
||||||
|
{% if entry.orderDate is not empty %}
|
||||||
|
{{ entry.orderDate|date_short }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
{% for field in metaColumns %}
|
{% for field in metaColumns %}
|
||||||
<td class="text-nowrap {{ tables.data_table_column_class(tableName, columns, 'mf_' ~ field.name) }}">
|
<td class="text-nowrap {{ tables.data_table_column_class(tableName, columns, 'mf_' ~ field.name) }}">
|
||||||
{{ tables.datatable_meta_column(entry, field) }}
|
{{ tables.datatable_meta_column(entry, field) }}
|
||||||
|
|||||||
Reference in New Issue
Block a user