Improved mobile view #151 (#150)

- fixed group by for mysql mode
- only user can edit own prefs
- updated installation README
- pagerfanta shows less links
- improved manual tab
- moved user profile link to pref tabs
- added menu links to top navbar
- moved page actions to breadcrumb position
- integrated daterangepicker and improved toolbar forms
- bugfix for time rounding
This commit is contained in:
Kevin Papst
2018-06-05 21:28:25 +02:00
committed by GitHub
parent db5b6f8e2e
commit 7206d064a5
41 changed files with 1027 additions and 897 deletions

View File

@@ -4,6 +4,7 @@
{% block page_title %}{{ 'admin_activity.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'admin_activity.subtitle'|trans }} {{ 'subtitle.amount'|trans({'%count%': entries.count}) }}{% endblock %}
{% block page_actions %}{{ widgets.page_actions({'plus-square': path('admin_activity_create')}) }}{% endblock %}
{% block main %}
{% if entries.count == 0 %}
@@ -12,24 +13,24 @@
{{ tables.data_table_header({
'label.name': '',
'label.customer': '',
'label.customer': 'hidden-xs',
'label.project': '',
'label.comment': 'hidden-xs',
'label.visible': '',
'label.visible': 'hidden-xs',
'label.actions': '',
}, toolbarForm, {'plus-square': path('admin_activity_create')}) }}
}, toolbarForm) }}
{% for entry in entries %}
<tr>
<td>{{ entry.name }}</td>
<td>
<td class="hidden-xs">
<a href="{{ path('admin_customer_edit', {'id' : entry.project.customer.id}) }}">{{ widgets.label_customer(entry.project.customer) }}</a>
</td>
<td>
<a href="{{ path('admin_project_edit', {'id' : entry.project.id}) }}">{{ widgets.label_project(entry.project) }}</a>
</td>
<td class="hidden-xs">{{ entry.comment }}</td>
<td>{{ widgets.label_visible(entry.visible) }}</td>
<td class="hidden-xs">{{ widgets.label_visible(entry.visible) }}</td>
<td>
{% set actionButtons = {} %}
{% if is_granted('edit', entry) %}

View File

@@ -4,6 +4,7 @@
{% block page_title %}{{ 'admin_customer.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'admin_customer.subtitle'|trans }} {{ 'subtitle.amount'|trans({'%count%': entries.count}) }}{% endblock %}
{% block page_actions %}{{ widgets.page_actions({'plus-square': path('admin_customer_create')}) }}{% endblock %}
{% block main %}
{% if entries.count == 0 %}
@@ -17,9 +18,9 @@
'label.country': 'hidden-xs',
'label.customer_number': 'hidden-xs',
'label.currency': 'hidden-xs',
'label.visible': '',
'label.visible': 'hidden-xs',
'label.actions': '',
}, toolbarForm, {'plus-square': path('admin_customer_create')}) }}
}, toolbarForm) }}
{% for entry in entries %}
<tr>
@@ -27,13 +28,14 @@
<td>
{% for project in entry.projects %}
<a href="{{ path('admin_project_edit', {'id' : project.id}) }}">{{ widgets.label_project(project) }}</a>
<br class="visible-xs-block">
{% endfor %}
</td>
<td class="hidden-xs">{{ entry.comment }}</td>
<td class="hidden-xs">{{ entry.country|country }}</td>
<td class="hidden-xs">{{ entry.number }}</td>
<td class="hidden-xs">{{ entry.currency }} {{ entry.currency|currency }}</td>
<td>{{ widgets.label_visible(entry.visible) }}</td>
<td class="hidden-xs">{{ widgets.label_visible(entry.visible) }}</td>
<td>
{% set actionButtons = {} %}
{% if is_granted('edit', entry) %}

View File

@@ -4,6 +4,7 @@
{% block page_title %}{{ 'admin_project.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'admin_project.subtitle'|trans }} {{ 'subtitle.amount'|trans({'%count%': entries.count}) }}{% endblock %}
{% block page_actions %}{{ widgets.page_actions({'plus-square': path('admin_project_create')}) }}{% endblock %}
{% block main %}
{% if entries.count == 0 %}
@@ -15,9 +16,9 @@
'label.customer': '',
'label.comment': 'hidden-xs hidden-sm',
'label.budget': 'hidden-xs',
'label.visible': '',
'label.visible': 'hidden-xs',
'label.actions': '',
}, toolbarForm, {'plus-square': path('admin_project_create')}) }}
}, toolbarForm) }}
{% for entry in entries %}
<tr>
@@ -27,7 +28,7 @@
</td>
<td class="hidden-xs hidden-sm">{{ entry.comment }}</td>
<td class="hidden-xs">{{ entry.budget|money(entry.customer.currency) }}</td>
<td>{{ widgets.label_visible(entry.visible) }}</td>
<td class="hidden-xs">{{ widgets.label_visible(entry.visible) }}</td>
<td>
{% set actionButtons = {} %}
{% if is_granted('edit', entry) %}

View File

@@ -4,6 +4,7 @@
{% block page_title %}{{ 'admin_timesheet.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'admin_timesheet.subtitle'|trans }}{% endblock %}
{% block page_actions %}{{ widgets.page_actions({'plus-square': path('admin_timesheet_create')}) }}{% endblock %}
{% block main %}
{% if entries.count == 0 %}
@@ -25,7 +26,7 @@
'label.actions': '',
}) %}
{{ tables.data_table_header(columns, toolbarForm, {'plus-square': path('admin_timesheet_create')}) }}
{{ tables.data_table_header(columns, toolbarForm) }}
{% for entry in entries %}
<tr>

View File

@@ -4,6 +4,7 @@
{% block page_title %}{{ 'admin_user.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'admin_user.subtitle'|trans }} {{ 'subtitle.amount'|trans({'%count%': entries.count}) }}{% endblock %}
{% block page_actions %}{{ widgets.page_actions({'plus-square': path('admin_user_create')}) }}{% endblock %}
{% block main %}
{% if entries.count == 0 %}
@@ -19,7 +20,7 @@
'label.active': '',
'label.roles': '',
'label.actions': '',
}, toolbarForm, {'plus-square': path('admin_user_create')}) }}
}, toolbarForm) }}
{% for entry in entries %}
<tr>

View File

@@ -1,5 +1,7 @@
{% extends '@AvanzuAdminTheme/layout/default-layout.html.twig' %}
{% block avanzu_page_content_class %}{{ parent() }} {% block main_content_class %}{% endblock %}{% endblock %}
{% block avanzu_page_content_before %}
<div class="pad margin no-print">
{% block main_before %}{% endblock %}
@@ -47,6 +49,21 @@
{% block avanzu_navbar_messages %}
{% if app.user is not null and is_granted('IS_AUTHENTICATED_REMEMBERED') %}
{% if is_granted('ROLE_USER') %}
<li class="visible-xs-inline-block">
<a href="{{ path('timesheet') }}" class="ddt-large">
<i class="fa fa-clock-o fa-2x"></i>
</a>
</li>
{% endif %}
{% if is_granted('ROLE_TEAMLEAD') %}
<li class="visible-xs-inline-block">
<a href="{{ path('invoice') }}" class="ddt-large">
<i class="fa fa-print fa-2x"></i>
</a>
</li>
{% endif %}
{% block navbar_extensions %}{% endblock %}
{{ render(controller('App\\Controller\\TimesheetController::activeEntriesAction')) }}
{% endif %}
{% endblock %}
@@ -58,15 +75,20 @@
{% endblock %}
{% block avanzu_navbar_toggle %}{{ parent() }}{% endblock %}
{% block avanzu_navbar_tasks %}{{ parent() }}{% endblock %}
{% block avanzu_navbar_user %}{{ parent() }}{% endblock %}
{% block avanzu_navbar_tasks %}{#{ parent() }#}{% endblock %}
{% block avanzu_navbar_user %}{#{ parent() }#}{% endblock %}
{% block avanzu_navbar_control_sidebar_toggle %}{{ parent() }}{% endblock %}
{% block avanzu_sidebar_user %}{# right now we simply deactivate that box #}{% endblock %}
{% block avanzu_sidebar_search %}{# right now we simply deactivate that box #}{% endblock %}
{% block avanzu_sidebar_nav %}{{ parent() }}{% endblock %}
{% block avanzu_breadcrumb %}{{ parent() }}{% endblock %}
{% block avanzu_breadcrumb %}
{{ block('page_actions') }}
{% endblock %}
{% block page_actions %}{% endblock %}
{% block avanzu_control_sidebar %}{{ parent() }}{% endblock %}
{% block avanzu_javascripts %}

View File

@@ -14,18 +14,6 @@
<small>{{user.title}}</small>
</p>
</li>
{#
<!-- Menu Body -->
<li class="user-body">
<div class="col-xs-4 text-center">
</div>
<div class="col-xs-4 text-center">
</div>
<div class="col-xs-4 text-center">
</div>
</li>
#}
<!-- Menu Footer-->
<li class="user-footer">
<div class="pull-left">
<a href="{{ path('user_profile', {'username' : user.username}) }}" class="btn btn-default btn-flat">{{ 'label.user_profile'|trans }}</a>

View File

@@ -4,6 +4,8 @@
{% block page_title %}{{ 'dashboard.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'dashboard.subtitle'|trans }}{% endblock %}
{% block main_content_class %}dashboard{% endblock %}
{% block main %}
{% for settings in dashboard_widgets %}

View File

@@ -8,7 +8,7 @@
{% set class = ' timepicker' %}
{% endif %}
{% set class = class ~ ' datepicker' %}
{% set attr = attr|merge({'class' : class, 'data-datepickerenable':'on'}) %}
{% set attr = attr|merge({'class' : class}) %}
{{ block('form_widget_simple') }}
{% else %}
{% set date_pattern = '<div class="row">' ~ date_pattern ~ '</div>'|raw %}
@@ -21,6 +21,5 @@
'{{ month }}': form_widget(form.month),
'{{ day }}': form_widget(form.day),
})|raw }}
{% endif %}
{% endblock %}

View File

@@ -4,11 +4,12 @@
{% block page_title %}{{ 'invoice.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'invoice.subtitle'|trans }}{% endblock %}
{% block page_actions %}{{ widgets.page_actions({'plus-square': path('admin_invoice_template_create'), 'list': path('admin_invoice_template')}) }}{% endblock %}
{% block avanzu_page_content_class %}invoice{% endblock %}
{% block main_content_class %}invoice{% endblock %}
{% block main_before %}
{{ macro.toolbar(form, {'plus-square': path('admin_invoice_template_create'), 'list': path('admin_invoice_template')}) }}
{{ macro.toolbar(form) }}
{% endblock %}
{% block main_after %}

View File

@@ -48,6 +48,6 @@
</div>
<div class="navigation text-center no-print">
{{ pagerfanta(entries, 'twitter_bootstrap3_translated', { routeName: route }) }}
{{ pagerfanta(entries, 'twitter_bootstrap3_translated', { proximity: 1, routeName: route }) }}
</div>
{% endmacro %}

View File

@@ -1,4 +1,16 @@
{% macro page_actions(tools) %}
<div class="breadcrumb">
<div class="box-tools">
<div class="btn-group">
{% for icon,url in tools %}
<a class="btn btn-default" href="{{ url }}"><i class="fa fa-{{ icon }}"></i></a>
{% endfor %}
</div>
</div>
</div>
{% endmacro %}
{% macro page_header(title) %}
<h2 class="page-header">{{ title|trans }}</h2>
{% endmacro %}

View File

@@ -1,8 +1,8 @@
{% if entries is not empty %}
<li class="dropdown messages-menu">
<a href="#" class="dropdown-toggle ddt-large ticktac" data-toggle="dropdown">
<i class="fa fa-play-circle fa-2x"></i>
{% if entries is not empty %}<span class="label label-{% if entries|length >= kimai_context.active_warning %}danger{% else %}warning{% endif %}">{{ entries|length }}</span>{% endif %}
<span class="label label-{% if entries|length >= kimai_context.active_warning %}danger{% else %}warning{% endif %}">{{ entries|length }}</span>
</a>
<ul class="dropdown-menu">
<li class="header">
@@ -35,3 +35,10 @@
<li class="footer"><a href="{{ path('timesheet_create') }}">{{ 'timesheet.start'|trans }}</a></li>
</ul>
</li>
{% else %}
<li class="messages-menu">
<a href="{{ path('timesheet_create') }}" class="ddt-large">
<i class="fa fa-play-circle fa-2x"></i>
</a>
</li>
{% endif %}

View File

@@ -1,53 +1,19 @@
<h3 class="control-sidebar-heading">{{ 'home.title'|trans({}, 'sidebar') }}</h3>
<div class="form-group">
{{ 'home.betainfo'|trans({}, 'sidebar')|raw|nl2br }}
</div>
<h3 class="control-sidebar-heading">{{ 'help.title'|trans({}, 'sidebar') }}</h3>
<div class="form-group">
<a href="{{ path('help') }}" class="btn btn-success">{{ 'help.link'|trans({}, 'sidebar') }}</a>
</div>
<h3 class="control-sidebar-heading">{{ 'about.title'|trans({}, 'sidebar') }}</h3>
<div class="form-group">
<p>
Kimai {{ constant('App\\Constants::VERSION') }}
</p>
<p>
{{ 'made.by.license'|trans({'%kevin%': '<a href="http://www.kevinpapst.de" target="_blank">Kevin Papst</a>', '%simon%': '<a href="https://github.com/simonschaufi" target="_blank">Simon Schaufelberger</a>'}, 'sidebar')|raw }}
</p>
<p>
{{ 'github.link'|trans({'%url%': constant('App\\Constants::GITHUB')}, 'sidebar')|raw }}
</p>
</div>
{#
<ul class="control-sidebar-menu">
<li>
<a href="javascript:;">
<i class="menu-icon fa fa-birthday-cake bg-red"></i>
<a href="{{ path('help') }}">
<i class="menu-icon fa fa-book bg-yellow"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'Kevin\'s Birthday'|trans({}, 'AvanzuAdminTheme') }}</h4>
<p>{{ 'Will be 23 on April 24th'|trans({}, 'AvanzuAdminTheme') }}</p>
<h4 class="control-sidebar-subheading">{{ 'help.title'|trans({}, 'sidebar') }}</h4>
<p>{{ 'help.subtitle'|trans({}, 'sidebar') }}</p>
</div>
</a>
</li>
</ul>
<h3 class="control-sidebar-heading">{{ 'Tasks Progress'|trans({}, 'AvanzuAdminTheme') }}</h3>
<ul class="control-sidebar-menu">
<li>
<a href="javascript::;">
<h4 class="control-sidebar-subheading">
{{ 'Custom Template Design'|trans({}, 'AvanzuAdminTheme') }}
<span class="label label-danger pull-right">70%</span>
</h4>
<div class="progress progress-xxs">
<div class="progress-bar progress-bar-danger" style="width: 70%"></div>
</div>
</a>
</li>
</ul>
#}
<h3 class="control-sidebar-heading">{{ 'home.title'|trans({}, 'sidebar') }}</h3>
<div class="form-group">
{{ 'home.betainfo'|trans({'%version%': constant('App\\Constants::VERSION'), '%url%': constant('App\\Constants::GITHUB')}, 'sidebar')|raw|nl2br }}
<br>
<a href="{{ constant('App\\Constants::GITHUB') }}graphs/contributors">{{ 'made.by.license'|trans({}, 'sidebar')|raw }}</a>
</div>

View File

@@ -1,4 +1,23 @@
{% import "@AvanzuAdminTheme/layout/macros.html.twig" as macro %}
{% import "macros/widgets.html.twig" as widgets %}
<ul class="control-sidebar-menu">
<li>
<a href="{{ path('user_profile', {'username' : user.username}) }}">
<div class="pull-left image">
{{ macro.avatar(user.avatar, user.username, 'img-circle') }}
</div>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ widgets.username(user) }}</h4>
<p>{{ user.title }}</p>
</div>
</a>
</li>
</ul>
<h3 class="control-sidebar-heading">{{ 'preferences.title'|trans({}, 'sidebar') }}</h3>
<div class="form-group">
<label class="control-sidebar-subheading">
{{ 'preferences.label.language'|trans({}, 'sidebar') }}

View File

@@ -4,6 +4,7 @@
{% block page_title %}{{ 'timesheet.title'|trans }}{% endblock %}
{% block page_subtitle %}{{ 'timesheet.subtitle'|trans }}{% endblock %}
{% block page_actions %}{{ widgets.page_actions({'plus-square': path('timesheet_create')}) }}{% endblock %}
{% block main %}
@@ -25,7 +26,7 @@
'label.actions': '',
}) %}
{{ tables.data_table_header(columns, toolbarForm, {'plus-square': path('timesheet_create')}) }}
{{ tables.data_table_header(columns, toolbarForm) }}
{% for entry in entries %}
<tr>