various code improvements (#1415)

This commit is contained in:
Kevin Papst
2020-01-28 21:57:34 +01:00
committed by GitHub
parent 79c4c237fa
commit a1b554b3ac
16 changed files with 103 additions and 76 deletions

View File

@@ -1,120 +1,120 @@
# Change Log # Change Log
## [1.7](https://github.com/kevinpapst/kimai2/tree/1.7) (2020-01-19) ## [1.7](https://github.com/kevinpapst/kimai2/tree/1.7)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.6.2...1.7) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.6.2...1.7)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.7) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.7)
## [1.6.2](https://github.com/kevinpapst/kimai2/tree/1.6.2) (2019-12-02) ## [1.6.2](https://github.com/kevinpapst/kimai2/tree/1.6.2)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.6.1...1.6.2) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.6.1...1.6.2)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.6.2) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.6.2)
## [1.6.1](https://github.com/kevinpapst/kimai2/tree/1.6.1) (2019-11-26) ## [1.6.1](https://github.com/kevinpapst/kimai2/tree/1.6.1)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.6...1.6.1) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.6...1.6.1)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.6.1) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.6.1)
## [1.6](https://github.com/kevinpapst/kimai2/tree/1.6) (2019-11-24) ## [1.6](https://github.com/kevinpapst/kimai2/tree/1.6)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.5...1.6) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.5...1.6)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.6) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.6)
## [1.5](https://github.com/kevinpapst/kimai2/tree/1.5) (2019-11-03) ## [1.5](https://github.com/kevinpapst/kimai2/tree/1.5)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.4.2...1.5) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.4.2...1.5)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.5) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.5)
## [1.4.2](https://github.com/kevinpapst/kimai2/tree/1.4) (2019-10-14) ## [1.4.2](https://github.com/kevinpapst/kimai2/tree/1.4)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.4.1...1.4.2) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.4.1...1.4.2)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.4.2) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.4.2)
## [1.4.1](https://github.com/kevinpapst/kimai2/tree/1.4) (2019-10-07) ## [1.4.1](https://github.com/kevinpapst/kimai2/tree/1.4)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.4...1.4.1) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.4...1.4.1)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.4.1) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.4.1)
## [1.4](https://github.com/kevinpapst/kimai2/tree/1.4) (2019-10-03) ## [1.4](https://github.com/kevinpapst/kimai2/tree/1.4)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.3...1.4) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.3...1.4)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.4) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.4)
## [1.3](https://github.com/kevinpapst/kimai2/tree/1.3) (2019-09-11) ## [1.3](https://github.com/kevinpapst/kimai2/tree/1.3)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.2...1.3) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.2...1.3)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.3) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.3)
## [1.2](https://github.com/kevinpapst/kimai2/tree/1.2) (2019-08-28) ## [1.2](https://github.com/kevinpapst/kimai2/tree/1.2)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.1...1.2) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.1...1.2)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.2) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.2)
## [1.1](https://github.com/kevinpapst/kimai2/tree/1.1) (2019-07-24) ## [1.1](https://github.com/kevinpapst/kimai2/tree/1.1)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.0.1...1.1) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.0.1...1.1)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.1) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.1)
## [1.0.1](https://github.com/kevinpapst/kimai2/tree/1.0.1) (2019-07-05) ## [1.0.1](https://github.com/kevinpapst/kimai2/tree/1.0.1)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.0...1.0.1) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.0...1.0.1)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.0.1) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.0.1)
## [1.0](https://github.com/kevinpapst/kimai2/tree/1.0) (2019-07-02) ## [1.0](https://github.com/kevinpapst/kimai2/tree/1.0)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.9...1.0) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.9...1.0)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.0) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.0)
## [0.9](https://github.com/kevinpapst/kimai2/tree/0.9) (2019-04-29) ## [0.9](https://github.com/kevinpapst/kimai2/tree/0.9)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.8.1...0.9) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.8.1...0.9)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.9) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.9)
## [0.8.1](https://github.com/kevinpapst/kimai2/tree/0.8.1) (2019-02-22) ## [0.8.1](https://github.com/kevinpapst/kimai2/tree/0.8.1)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.8...0.8.1) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.8...0.8.1)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.8.1) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.8.1)
## [0.8](https://github.com/kevinpapst/kimai2/tree/0.8) (2019-02-19) ## [0.8](https://github.com/kevinpapst/kimai2/tree/0.8)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.7...0.8) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.7...0.8)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.8) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.8)
## [0.7](https://github.com/kevinpapst/kimai2/tree/0.7) (2019-01-28) ## [0.7](https://github.com/kevinpapst/kimai2/tree/0.7)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.6.1...0.7) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.6.1...0.7)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.7) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.7)
## [0.6.1](https://github.com/kevinpapst/kimai2/tree/0.6.1) (2018-11-19) ## [0.6.1](https://github.com/kevinpapst/kimai2/tree/0.6.1)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.6...0.6.1) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.6...0.6.1)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.6.1) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.6.1)
## [0.6](https://github.com/kevinpapst/kimai2/tree/0.6) (2018-11-18) ## [0.6](https://github.com/kevinpapst/kimai2/tree/0.6)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.5...0.6) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.5...0.6)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.6) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.6)
## [0.5](https://github.com/kevinpapst/kimai2/tree/0.5) (2018-09-27) ## [0.5](https://github.com/kevinpapst/kimai2/tree/0.5)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.4...0.5) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.4...0.5)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.5) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.5)
## [0.4](https://github.com/kevinpapst/kimai2/tree/0.4) (2018-09-01) ## [0.4](https://github.com/kevinpapst/kimai2/tree/0.4)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.3...0.4) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.3...0.4)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.4) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.4)
## [0.3](https://github.com/kevinpapst/kimai2/tree/0.3) (2018-07-22) ## [0.3](https://github.com/kevinpapst/kimai2/tree/0.3)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.2...0.3) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.2...0.3)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.3) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.3)
## [0.2](https://github.com/kevinpapst/kimai2/tree/0.2) (2018-06-23) ## [0.2](https://github.com/kevinpapst/kimai2/tree/0.2)
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.1...0.2) [Full Changelog](https://github.com/kevinpapst/kimai2/compare/0.1...0.2)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.2) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.2)
## [0.1](https://github.com/kevinpapst/kimai2/tree/0.1) (2018-01-10) ## [0.1](https://github.com/kevinpapst/kimai2/tree/0.1)
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.1) Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/0.1)

View File

@@ -30,9 +30,7 @@ They are more strict, as they allow only access to team specific items, the olde
### ExpenseBundle ### ExpenseBundle
**ATTENTION** due to incompatibilities in the underlying frameworks users of the ExpenseBundle need to do one more step: **ATTENTION** due to incompatibilities in the underlying frameworks users of the ExpenseBundle need to do one more step:
You need to delete the bundle before updating: `rm -r var/plugins/ExpenseBundle`, otherwise you will run into errors during the update. You need to delete the bundle before updating: `rm -r var/plugins/ExpenseBundle`, otherwise you will run into errors during the update.
After the Kimai update was successful, you have to re-install the latest bundle version, which is compatible with Kimai 1.7 only. After the Kimai update was successful, you have to re-install the latest bundle version, which is compatible with Kimai 1.7 only.
### Developer ### Developer

View File

@@ -13,9 +13,9 @@
*/ */
import jQuery from 'jquery'; import jQuery from 'jquery';
import KimaiClickHandlerReducedInTableRow from "./KimaiClickHandlerReducedInTableRow"; import KimaiReducedClickHandler from "./KimaiReducedClickHandler";
export default class KimaiAjaxModalForm extends KimaiClickHandlerReducedInTableRow { export default class KimaiAjaxModalForm extends KimaiReducedClickHandler {
constructor(selector) { constructor(selector) {
super(); super();
@@ -47,7 +47,7 @@ export default class KimaiAjaxModalForm extends KimaiClickHandlerReducedInTableR
jQuery(self._getFormIdentifier()).find('input[type=text],textarea,select').filter(':not("[data-datetimepicker=on]")').filter(':visible:first').focus().delay(1000).focus(); jQuery(self._getFormIdentifier()).find('input[type=text],textarea,select').filter(':not("[data-datetimepicker=on]")').filter(':visible:first').focus().delay(1000).focus();
}); });
this._addClickHandlerReducedInTableRow(this.selector, function(href) { this._addClickHandler(this.selector, function(href) {
self.openUrlInModal(href); self.openUrlInModal(href);
}); });
} }

View File

@@ -13,9 +13,9 @@
*/ */
import jQuery from 'jquery'; import jQuery from 'jquery';
import KimaiClickHandlerReducedInTableRow from "./KimaiClickHandlerReducedInTableRow"; import KimaiReducedClickHandler from "./KimaiReducedClickHandler";
export default class KimaiAlternativeLinks extends KimaiClickHandlerReducedInTableRow { export default class KimaiAlternativeLinks extends KimaiReducedClickHandler {
constructor(selector) { constructor(selector) {
super(); super();
@@ -23,7 +23,7 @@ export default class KimaiAlternativeLinks extends KimaiClickHandlerReducedInTab
} }
init() { init() {
this._addClickHandlerReducedInTableRow(this.selector, function(href) { this._addClickHandler(this.selector, function(href) {
window.location = href; window.location = href;
}); });
} }

View File

@@ -6,24 +6,24 @@
*/ */
/*! /*!
* [KIMAI] KimaiClickHandlerReducedInTableRow: abstract class * [KIMAI] KimaiReducedClickHandler: abstract class
*/ */
import jQuery from 'jquery'; import jQuery from 'jquery';
import KimaiPlugin from "../KimaiPlugin"; import KimaiPlugin from "../KimaiPlugin";
export default class KimaiClickHandlerReducedInTableRow extends KimaiPlugin { export default class KimaiReducedClickHandler extends KimaiPlugin {
_addClickHandlerReducedInTableRow(selector, callback)  { _addClickHandler(selector, callback)  {
jQuery('body').on('click', selector, function(event) { jQuery('body').on('click', selector, function(event) {
// just in case an inner element is editable, than this should not be triggered // just in case an inner element is editable, than this should not be triggered
if (event.target.parentNode.isContentEditable || event.target.isContentEditable) { if (event.target.parentNode.isContentEditable || event.target.isContentEditable) {
return; return;
} }
// handles the "click" on table rows to open an entry for editing // handles the "click" on table rows or list elements
let target = event.target; let target = event.target;
if (event.currentTarget.matches('tr')) { if (event.currentTarget.matches('tr') || event.currentTarget.matches('li')) {
while (target !== null && !target.matches('body')) { while (target !== null && !target.matches('body')) {
// when an element within the row is clicked, that can trigger stuff itself, we don't want the event to be processed // when an element within the row is clicked, that can trigger stuff itself, we don't want the event to be processed
// don't act if a link, button or form element was clicked // don't act if a link, button or form element was clicked

View File

@@ -53,4 +53,8 @@ td {
/* Delete link in action dropdowns */ /* Delete link in action dropdowns */
.dropdown-menu > li.delete > a { .dropdown-menu > li.delete > a {
color: #dd4b39; color: #dd4b39;
} }
.open-edit {
cursor: pointer;
}

View File

@@ -32,9 +32,6 @@ table.dataTable {
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ccc;
background-color: #eaeaea; background-color: #eaeaea;
} }
&.open-edit {
cursor: pointer;
}
th.multiCheckbox { th.multiCheckbox {
width: 15px; width: 15px;
} }

View File

@@ -184,16 +184,16 @@ kimai:
permission: view_own_timesheet permission: view_own_timesheet
type: '\App\Widget\Type\CompoundChart' type: '\App\Widget\Type\CompoundChart'
widgets: [DailyWorkingTimeChart, userDurationToday, userDurationWeek, userDurationMonth, userDurationYear] widgets: [DailyWorkingTimeChart, userDurationToday, userDurationWeek, userDurationMonth, userDurationYear]
user_rates:
title: ~
order: 20
permission: view_rate_own_timesheet
widgets: [userAmountToday, userAmountWeek, userAmountMonth, userAmountYear]
user_teams: user_teams:
title: ~ title: ~
order: 15 order: 15
permission: ROLE_USER permission: ROLE_USER
widgets: [UserTeams, UserTeamProjects] widgets: [UserTeams, UserTeamProjects]
user_rates:
title: ~
order: 20
permission: view_rate_own_timesheet
widgets: [userAmountToday, userAmountWeek, userAmountMonth, userAmountYear]
duration: duration:
title: dashboard.all title: dashboard.all
order: 30 order: 30

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -5,10 +5,10 @@
"build/runtime.6ca1eea5.js", "build/runtime.6ca1eea5.js",
"build/0.1a6ffb43.js", "build/0.1a6ffb43.js",
"build/1.16767f92.js", "build/1.16767f92.js",
"build/app.8b409f35.js" "build/app.712803ae.js"
], ],
"css": [ "css": [
"build/app.8240996d.css" "build/app.ee3257e6.css"
] ]
}, },
"chart": { "chart": {
@@ -35,8 +35,8 @@
"build/runtime.6ca1eea5.js": "sha384-xNNrNinl64G3nCUrIskgSjU0mUXXCB9lj6XCSInBTwxSKXk8uTMafnLHtdWdIGtd", "build/runtime.6ca1eea5.js": "sha384-xNNrNinl64G3nCUrIskgSjU0mUXXCB9lj6XCSInBTwxSKXk8uTMafnLHtdWdIGtd",
"build/0.1a6ffb43.js": "sha384-vuVCyLVj2b4h3jpKl+JSANRCacmXeLk+ihK5T5NZBO7+SJ5Y+o6d4qju116hTPSD", "build/0.1a6ffb43.js": "sha384-vuVCyLVj2b4h3jpKl+JSANRCacmXeLk+ihK5T5NZBO7+SJ5Y+o6d4qju116hTPSD",
"build/1.16767f92.js": "sha384-JPoKdrVtBemSiVBoAnmSxLML7xXM9zYeuwOPYQv/kLzt/P4cmLY5r9gH8oaGRPFG", "build/1.16767f92.js": "sha384-JPoKdrVtBemSiVBoAnmSxLML7xXM9zYeuwOPYQv/kLzt/P4cmLY5r9gH8oaGRPFG",
"build/app.8b409f35.js": "sha384-KLjCz4QplvRgAqezJx4OSJp38bRW0WHel8mmbmGgDtYTKIHBahoGY72PQwD+UU4m", "build/app.712803ae.js": "sha384-yuwKAmpK2BtBrGezcOw8zGyW8ntAXMT1KMcw+i3kJoGpo6ziidJ8tsbY4I/1neR+",
"build/app.8240996d.css": "sha384-ZaS4ro6HGbDfLyaJc8cVXJzTd8plX3mRzhHhiiUEErSzPlRKdZfViDk23BNvAaz+", "build/app.ee3257e6.css": "sha384-XYHDohm3nf3V2OxBYJ75ZpfKPRlYoUPyvvksn5mVomq7ADeqOipaWIw4Y8OKVooQ",
"build/2.dad56560.js": "sha384-oKsefSmRq0GL+Qa6f6jExXvFay3cM6YZFHQRKoAHi2p54UOCtjJfjF2eAB1qykoL", "build/2.dad56560.js": "sha384-oKsefSmRq0GL+Qa6f6jExXvFay3cM6YZFHQRKoAHi2p54UOCtjJfjF2eAB1qykoL",
"build/chart.7f4d7f29.js": "sha384-I57c9DtU3AOG2kzKqIZkIu0hi1aGYHRZ5QG4LKC9+9slzJnAMttPGXoL2cQG3m6y", "build/chart.7f4d7f29.js": "sha384-I57c9DtU3AOG2kzKqIZkIu0hi1aGYHRZ5QG4LKC9+9slzJnAMttPGXoL2cQG3m6y",
"build/calendar.13664a8f.js": "sha384-CDVRjmMRhA0KU90taIf50/DQOr1gbxGmdxVW8uj+qcwzKE843XPCz40fYQudopGU", "build/calendar.13664a8f.js": "sha384-CDVRjmMRhA0KU90taIf50/DQOr1gbxGmdxVW8uj+qcwzKE843XPCz40fYQudopGU",

View File

@@ -2,8 +2,8 @@
"build/0.1a6ffb43.js": "build/0.1a6ffb43.js", "build/0.1a6ffb43.js": "build/0.1a6ffb43.js",
"build/1.16767f92.js": "build/1.16767f92.js", "build/1.16767f92.js": "build/1.16767f92.js",
"build/2.dad56560.js": "build/2.dad56560.js", "build/2.dad56560.js": "build/2.dad56560.js",
"build/app.css": "build/app.8240996d.css", "build/app.css": "build/app.ee3257e6.css",
"build/app.js": "build/app.8b409f35.js", "build/app.js": "build/app.712803ae.js",
"build/calendar.css": "build/calendar.ade7bcdf.css", "build/calendar.css": "build/calendar.ade7bcdf.css",
"build/calendar.js": "build/calendar.13664a8f.js", "build/calendar.js": "build/calendar.13664a8f.js",
"build/chart.js": "build/chart.7f4d7f29.js", "build/chart.js": "build/chart.7f4d7f29.js",

View File

@@ -48,7 +48,7 @@ class CreateReleaseCommand extends Command
->setName('kimai:create-release') ->setName('kimai:create-release')
->setDescription('Create a pre-installed release package') ->setDescription('Create a pre-installed release package')
->setHelp('This command will create a release package with pre-installed composer, SQLite database and user.') ->setHelp('This command will create a release package with pre-installed composer, SQLite database and user.')
->addOption('directory', null, InputOption::VALUE_OPTIONAL, 'Directory where the release package will be stored', 'var/data/') ->addOption('directory', null, InputOption::VALUE_OPTIONAL, 'Directory where the release package will be stored', '/tmp/')
->addOption('release', null, InputOption::VALUE_OPTIONAL, 'The version that should be zipped', Constants::VERSION) ->addOption('release', null, InputOption::VALUE_OPTIONAL, 'The version that should be zipped', Constants::VERSION)
; ;

View File

@@ -99,11 +99,13 @@ final class UpdateCommand extends Command
$command = $this->getApplication()->find('doctrine:migrations:migrate'); $command = $this->getApplication()->find('doctrine:migrations:migrate');
$cmdInput = new ArrayInput(['--allow-no-migration' => true]); $cmdInput = new ArrayInput(['--allow-no-migration' => true]);
$cmdInput->setInteractive(false); $cmdInput->setInteractive(false);
$command->run($cmdInput, $output); if (0 !== $command->run($cmdInput, $output)) {
throw new \RuntimeException('CRITICAL: problem when migrating database');
}
$io->writeln(''); $io->writeln('');
} catch (\Exception $ex) { } catch (\Exception $ex) {
$io->error('Failed to set migration status: ' . $ex->getMessage()); $io->error($ex->getMessage());
return self::ERROR_MIGRATIONS; return self::ERROR_MIGRATIONS;
} }
@@ -111,12 +113,19 @@ final class UpdateCommand extends Command
// flush the cache, in case values from the database are cached // flush the cache, in case values from the database are cached
$cacheResult = $this->rebuildCaches($environment, $io, $input, $output); $cacheResult = $this->rebuildCaches($environment, $io, $input, $output);
$io->success(
sprintf('Congratulations! Successfully updated %s to version %s (%s)', Constants::SOFTWARE, Constants::VERSION, Constants::STATUS)
);
if ($cacheResult !== 0) { if ($cacheResult !== 0) {
$io->warning('Problem resetting cache, please execute cache clean manually'); $io->warning(
[
sprintf('Updated %s to version %s (%s) but the cache could not be rebuilt.', Constants::SOFTWARE, Constants::VERSION, Constants::STATUS),
'Please run the cache commands manually:',
'bin/console cache:clear --env=' . $environment . PHP_EOL .
'bin/console cache:warmup --env=' . $environment
]
);
} else {
$io->success(
sprintf('Congratulations! Successfully updated %s to version %s (%s)', Constants::SOFTWARE, Constants::VERSION, Constants::STATUS)
);
} }
return 0; return 0;
@@ -128,18 +137,22 @@ final class UpdateCommand extends Command
$command = $this->getApplication()->find('cache:clear'); $command = $this->getApplication()->find('cache:clear');
try { try {
$command->run(new ArrayInput(['--env' => $environment]), $output); if (0 !== $command->run(new ArrayInput(['--env' => $environment]), $output)) {
throw new \RuntimeException('Could not clear cache, missing permissions?');
}
} catch (\Exception $ex) { } catch (\Exception $ex) {
$io->error('Failed to clear cache: ' . $ex->getMessage()); $io->error($ex->getMessage());
return self::ERROR_CACHE_CLEAN; return self::ERROR_CACHE_CLEAN;
} }
$command = $this->getApplication()->find('cache:warmup'); $command = $this->getApplication()->find('cache:warmup');
try { try {
$command->run(new ArrayInput(['--env' => $environment]), $output); if (0 !== $command->run(new ArrayInput(['--env' => $environment]), $output)) {
throw new \RuntimeException('Could not warmup cache, missing permissions?');
}
} catch (\Exception $ex) { } catch (\Exception $ex) {
$io->error('Failed to warmup cache: ' . $ex->getMessage()); $io->error($ex->getMessage());
return self::ERROR_CACHE_WARMUP; return self::ERROR_CACHE_WARMUP;
} }

View File

@@ -17,11 +17,11 @@ class Constants
/** /**
* The current release version * The current release version
*/ */
public const VERSION = '1.7'; public const VERSION = '1.8';
/** /**
* The current release status, either "stable" or "dev" * The current release status, either "stable" or "dev"
*/ */
public const STATUS = 'stable'; public const STATUS = 'dev';
/** /**
* The software name * The software name
*/ */

View File

@@ -149,26 +149,41 @@ class DoctorController extends AbstractController
try { try {
$logfile = $this->getLogFilename(); $logfile = $this->getLogFilename();
} catch (\Exception $ex) { } catch (\Exception $ex) {
return [ return ['ATTENTION: ' . $ex->getMessage()];
$ex->getMessage()
];
} }
if (!file_exists($logfile)) { if (!file_exists($logfile)) {
return [ return ['ATTENTION: Missing logfile'];
'Empty or missing logfile' }
];
if (!is_readable($logfile)) {
return ['ATTENTION: Cannot read log file'];
} }
$file = new \SplFileObject($logfile, 'r'); $file = new \SplFileObject($logfile, 'r');
if ($file->getSize() === 0) {
return ['Empty log'];
}
$file->seek($file->getSize()); $file->seek($file->getSize());
$last_line = $file->key(); $last_line = $file->key();
while ($last_line - $lines < 0) { while ($last_line - $lines < 0) {
$lines--; $lines--;
} }
$lines = new \LimitIterator($file, $last_line - $lines, $last_line); $iterator = new \LimitIterator($file, $last_line - $lines, $last_line);
return iterator_to_array($lines); $result = [];
if ($iterator->valid()) {
$result = iterator_to_array($iterator);
}
if (!is_writable($logfile)) {
$result[] = 'ATTENTION: Cannot write log file';
}
return $result;
} }
private function getFilePermissions() private function getFilePermissions()