added start and stop entries
enhanced administration of activities/projects/customers added navbar for active records and recent activities added edit timesheet entry form added translation packages for errors and flashmessages upgraded composer packages
This commit is contained in:
13
app/Resources/translations/AvanzuAdminTheme.de.xliff
Normal file
13
app/Resources/translations/AvanzuAdminTheme.de.xliff
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file date="2016-10-19T21:46:45Z" source-language="en" target-language="de" datatype="plaintext" original="not.available">
|
||||
<body>
|
||||
|
||||
<trans-unit id="Toggle navigation">
|
||||
<source>Toggle navigation</source>
|
||||
<target>Ansicht der Seitenleiste umschalten</target>
|
||||
</trans-unit>
|
||||
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
17
app/Resources/translations/exceptions.de.xliff
Normal file
17
app/Resources/translations/exceptions.de.xliff
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file date="2016-10-19T21:46:45Z" source-language="en" target-language="de" datatype="plaintext" original="not.available">
|
||||
<body>
|
||||
|
||||
<trans-unit id="access.denied">
|
||||
<source>access.denied</source>
|
||||
<target>Der Zugriff wurde verweigert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="timesheet.access.denied">
|
||||
<source>timesheet.deny.stop</source>
|
||||
<target>Der Benutzer "%user%" darf den Zeiteintrag "%entry%" nicht aufrufen</target>
|
||||
</trans-unit>
|
||||
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
29
app/Resources/translations/flashmessages.de.xliff
Normal file
29
app/Resources/translations/flashmessages.de.xliff
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file date="2016-10-19T21:46:45Z" source-language="en" target-language="de" datatype="plaintext" original="not.available">
|
||||
<body>
|
||||
|
||||
<trans-unit id="timesheet.stop.success">
|
||||
<source>timesheet.stop.success</source>
|
||||
<target>Zeitmessung wurde gestoppt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="timesheet.stop.error">
|
||||
<source>timesheet.stop.error</source>
|
||||
<target>Zeitmessung konnte nicht gestoppt werden: %reason%</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="timesheet.start.success">
|
||||
<source>timesheet.start.success</source>
|
||||
<target>Zeitmessung wurde gestartet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="timesheet.start.error">
|
||||
<source>timesheet.start.error</source>
|
||||
<target>Zeitmessung konnte nicht gestartet werden: %reason%</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="action.updated_successfully">
|
||||
<source>action.updated_successfully</source>
|
||||
<target>Änderungen erfolgreich gespeichert</target>
|
||||
</trans-unit>
|
||||
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -212,7 +212,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="label.rate">
|
||||
<source>label.rate</source>
|
||||
<target>Umsatz</target>
|
||||
<target>Lohn</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.language">
|
||||
<source>label.language</source>
|
||||
@@ -250,10 +250,6 @@
|
||||
<source>action.back</source>
|
||||
<target>Zurück</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="action.updated_successfully">
|
||||
<source>action.updated_successfully</source>
|
||||
<target>Änderungen erfolgreich gespeichert</target>
|
||||
</trans-unit>
|
||||
|
||||
<!--
|
||||
Dashboard
|
||||
@@ -310,6 +306,18 @@
|
||||
<source>timesheet.subtitle</source>
|
||||
<target>Verwalten Sie Ihre Zeiteinträge</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="timesheet.edit">
|
||||
<source>timesheet.edit</source>
|
||||
<target>Eintrag bearbeiten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.begin">
|
||||
<source>label.begin</source>
|
||||
<target>Von</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.end">
|
||||
<source>label.end</source>
|
||||
<target>Bis</target>
|
||||
</trans-unit>
|
||||
|
||||
<!--
|
||||
User profile
|
||||
@@ -430,6 +438,10 @@
|
||||
<source>label.timezone</source>
|
||||
<target>Zeitzone</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.currency">
|
||||
<source>label.currency</source>
|
||||
<target>Währung</target>
|
||||
</trans-unit>
|
||||
|
||||
<!--
|
||||
Admin: User
|
||||
@@ -556,16 +568,28 @@
|
||||
</trans-unit>
|
||||
|
||||
<!--
|
||||
Running time entries top menu
|
||||
Navbar - recent entries and activities
|
||||
-->
|
||||
<trans-unit id="tracking.active">
|
||||
<source>tracking.active</source>
|
||||
<target>Sie haben %count% aktive Einträge</target>
|
||||
<trans-unit id="active.entries">
|
||||
<source>active.entries</source>
|
||||
<target>Sie haben %count% aktiven Eintrag|Sie haben %count% aktive Einträge</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="tracking.all">
|
||||
<source>tracking.all</source>
|
||||
<trans-unit id="timesheet.all">
|
||||
<source>timesheet.all</source>
|
||||
<target>Alle Einträge anzeigen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="recent.activities">
|
||||
<source>recent.activities</source>
|
||||
<target>Ihr %count% zuletzt bearbeitete Aktivität|Eine ihrer %count% letzten Aktivitäten neustarten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="recent.activities.format">
|
||||
<source>recent.activities.format</source>
|
||||
<target>%activity% in %project% für %customer%</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="timesheet.start">
|
||||
<source>timesheet.start</source>
|
||||
<target>Neue Zeitmessung starten</target>
|
||||
</trans-unit>
|
||||
|
||||
</body>
|
||||
</file>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{% extends 'AvanzuAdminThemeBundle:layout:default-layout.html.twig' %}
|
||||
|
||||
{% block avanzu_page_content %}
|
||||
{{ include('default/_flash_messages.html.twig') }}
|
||||
{% block main %}{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -8,10 +9,6 @@
|
||||
{% block title %}{{ 'browser.title'|trans }}{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
{% block avanzu_sidebar_search %}
|
||||
<!-- right now we simply deactivate that box -->
|
||||
{% endblock %}
|
||||
|
||||
{% block avanzu_page_title %}
|
||||
{% block page_title %}{% endblock %}
|
||||
{% endblock %}
|
||||
@@ -32,10 +29,6 @@
|
||||
<b>Kimai</b> - Time Tracking
|
||||
{% endblock %}
|
||||
|
||||
{% block flash_messages %}
|
||||
{{ include('default/_flash_messages.html.twig') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block avanzu_head %}
|
||||
<link rel="stylesheet" href="{{ asset('css/kimai.css') }}">
|
||||
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
|
||||
@@ -47,17 +40,11 @@
|
||||
$(document).ready(function() {
|
||||
$('.dropdown-toggle').dropdown();
|
||||
$(document).kimai({imagePath: '{{ asset('images') }}'});
|
||||
$(document).kimai('ticktac', 'a#ticktac');
|
||||
//$(document).kimai('pauseRecord', 'li.messages-menu ul.menu li');
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block avanzu_sidebar_user %}
|
||||
{% if app.user is not null and is_granted('IS_AUTHENTICATED_FULLY') %}
|
||||
{{ render(controller('TimesheetBundle:Timesheet:statusEntry')) }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block avanzu_footer %}
|
||||
{% block footer %}
|
||||
<footer class="main-footer">
|
||||
@@ -67,32 +54,42 @@
|
||||
<strong>Copyright © {{ 'now'|date('Y') }} - <a href="http://www.kevinpapst.de">Kevin Papst</a></strong>.
|
||||
{{ 'footer.license'|trans }}
|
||||
</footer>
|
||||
<!-- Page rendered on {{ 'now'|localizeddate('long', 'long', null, 'UTC') }} -->
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
{#
|
||||
avanzu_navbar_toggle
|
||||
avanzu_navbar_messages
|
||||
avanzu_navbar_notifications
|
||||
avanzu_navbar_tasks
|
||||
avanzu_navbar_user
|
||||
avanzu_navbar_control_sidebar_toggle
|
||||
avanzu_sidebar_user
|
||||
avanzu_sidebar_nav
|
||||
avanzu_breadcrumb
|
||||
avanzu_control_sidebar
|
||||
avanzu_javascripts
|
||||
avanzu_javascripts_inline
|
||||
{% block avanzu_navbar_messages %}
|
||||
{% if app.user is not null and is_granted('IS_AUTHENTICATED_FULLY') %}
|
||||
{{ render(controller('TimesheetBundle:Timesheet:activeEntries')) }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-globe"></i> <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu locales" role="menu">
|
||||
{% for locale in locales() %}
|
||||
<li {% if app.request.locale == locale.code %}class="active"{% endif %}><a href="{{ path(app.request.get('_route', 'homepage'), app.request.get('_route_params', [])|merge({ _locale: locale.code })) }}">{{ locale.name|capitalize }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% block avanzu_navbar_notifications %}
|
||||
{% if app.user is not null and is_granted('IS_AUTHENTICATED_FULLY') %}
|
||||
{{ render(controller('TimesheetBundle:Activity:recentActivities')) }}
|
||||
{% endif %}
|
||||
{#
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-globe"></i> <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu locales" role="menu">
|
||||
{% for locale in locales() %}
|
||||
<li {% if app.request.locale == locale.code %}class="active"{% endif %}><a href="{{ path(app.request.get('_route', 'homepage'), app.request.get('_route_params', [])|merge({ _locale: locale.code })) }}">{{ locale.name|capitalize }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
#}
|
||||
{% endblock %}
|
||||
|
||||
<!-- Page rendered on {{ 'now'|localizeddate('long', 'long', null, 'UTC') }} -->
|
||||
{% block avanzu_navbar_toggle %}{{ 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_control_sidebar %}{{ parent() }}{% endblock %}
|
||||
{% block avanzu_javascripts %}{{ parent() }}{% endblock %}
|
||||
{% block avanzu_javascripts_inline %}{{ parent() }}{% endblock %}
|
||||
|
||||
@@ -1,16 +1,9 @@
|
||||
{% if app.session.started and app.session.flashBag.peekAll is not empty %}
|
||||
<div class="messages">
|
||||
{% for type, messages in app.session.flashBag.all %}
|
||||
{% for message in messages %}
|
||||
{# Bootstrap alert, see http://getbootstrap.com/components/#alerts #}
|
||||
<div class="alert alert-dismissible alert-{{ type }}" role="alert">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
{% import "AvanzuAdminThemeBundle:layout:macros.html.twig" as macro %}
|
||||
|
||||
{{ message|trans }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% if app.session.started and app.session.flashbag.peekAll|length > 0 %}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{{ macro.session_flash(avanzu_adminlte_close_alert|default(true), false, '', 'flashmessages') }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -34,22 +34,4 @@
|
||||
</div>
|
||||
<div class="col-sm-4"></div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
|
||||
<script>
|
||||
// FIXME remove me
|
||||
$(document).ready(function() {
|
||||
var usernameEl = $('#username');
|
||||
var passwordEl = $('#password');
|
||||
// in a real application, hardcoding the user/password would be idiotic
|
||||
// but for the demo application it's very convenient to do so
|
||||
if (!usernameEl.val() && !passwordEl.val()) {
|
||||
usernameEl.val('anna_admin');
|
||||
passwordEl.val('kitten');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
@@ -6,8 +6,6 @@
|
||||
{% block main %}
|
||||
{% import _self as widgets %}
|
||||
|
||||
{{ include('default/_flash_messages.html.twig') }}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{{ widgets.profile_box(user, stats) }}
|
||||
|
||||
@@ -42,7 +42,6 @@ framework:
|
||||
engines: ['twig']
|
||||
default_locale: "%locale%"
|
||||
trusted_hosts: ~
|
||||
trusted_proxies: ~
|
||||
session:
|
||||
handler_id: session.handler.native_file
|
||||
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
|
||||
@@ -59,8 +58,9 @@ twig:
|
||||
# - "form/fields.html.twig"
|
||||
globals:
|
||||
kimai_context:
|
||||
date_1: "d.m.Y" # used for display in timesheets
|
||||
box_color: "green"
|
||||
date_1: "d.m.Y" # used for display in timesheets
|
||||
box_color: "green" # a color for ???
|
||||
active_warning: 3 # display a warning color if the user has at least X active recordings
|
||||
|
||||
# Assetic Configuration (used for managing web assets: CSS, JavaScript, Sass, etc.)
|
||||
#assetic:
|
||||
@@ -100,4 +100,5 @@ avanzu_admin_theme:
|
||||
boxed_layout : false
|
||||
collapsed_sidebar: true
|
||||
mini_sidebar : true
|
||||
# TODO support options like: language and skin via sidebar menu
|
||||
control_sidebar : false
|
||||
|
||||
@@ -43,3 +43,7 @@ services:
|
||||
|
||||
avanzu_admin_theme:
|
||||
enable_demo: false
|
||||
|
||||
web_profiler:
|
||||
toolbar: true
|
||||
intercept_redirects: false
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# this imports the routes used to display the web debug toolbar at the bottom of each page
|
||||
#_wdt:
|
||||
# resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
|
||||
# prefix: /_wdt
|
||||
_wdt:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
|
||||
prefix: /_wdt
|
||||
|
||||
# this imports the routes needed to display the Symfony Profiler information
|
||||
#_profiler:
|
||||
# resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
|
||||
# prefix: /_profiler
|
||||
_profiler:
|
||||
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
|
||||
prefix: /_profiler
|
||||
|
||||
# this imports the route used to test error pages. Just browse the following URL:
|
||||
# /{_locale}/_error/{status_code}.{format}
|
||||
|
||||
@@ -17,6 +17,9 @@ security:
|
||||
# this firewall applies to all URLs
|
||||
pattern: ^/
|
||||
|
||||
# does what it says
|
||||
logout_on_user_change: true
|
||||
|
||||
# but the firewall does not require login on every page
|
||||
# denying access is done in access_control or in your controllers
|
||||
anonymous: ~
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
services:
|
||||
slugger:
|
||||
class: AppBundle\Utils\Slugger
|
||||
|
||||
markdown:
|
||||
class: AppBundle\Utils\Markdown
|
||||
@@ -31,7 +29,7 @@ services:
|
||||
class: AppBundle\EventListener\MenuBuilder
|
||||
arguments: ["@event_dispatcher", "@security.authorization_checker"]
|
||||
tags:
|
||||
- { name: kernel.event_listener, event:theme.sidebar_setup_menu, method:onSetupNavbar }
|
||||
- { name: kernel.event_listener, event: theme.sidebar_setup_menu, method: onSetupNavbar }
|
||||
|
||||
# service that prefixes every database table
|
||||
app.tableprefix_subscriber:
|
||||
@@ -40,6 +38,7 @@ services:
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
# additional menu entries for the timesheet bundle
|
||||
timesheet.configure_menu_listener:
|
||||
class: TimesheetBundle\EventListener\Menu
|
||||
tags:
|
||||
|
||||
Reference in New Issue
Block a user