prepare release 1.12 (#2183)
* updated dependencies (#2125) * display application name and version in console (#2150)
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
unreleased=true
|
unreleased=true
|
||||||
future-release=1.11.1
|
future-release=1.12
|
||||||
exclude-labels=duplicate,support,question,invalid,wontfix,release
|
exclude-labels=duplicate,support,question,invalid,wontfix,release,waiting for feedback
|
||||||
enhancement_labels=>enhancement,Enhancement,feature request,translation i18n,technical debt,documentation
|
enhancement_labels=>enhancement,Enhancement,feature request,translation i18n,technical debt,documentation
|
||||||
issues-wo-labels=false
|
issues-wo-labels=false
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.12](https://github.com/kevinpapst/kimai2/tree/1.12)
|
||||||
|
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.11.1...1.12)
|
||||||
|
|
||||||
|
Release notes including the changelog can be found [here](https://github.com/kevinpapst/kimai2/releases/tag/1.12)
|
||||||
|
|
||||||
## [1.11.1](https://github.com/kevinpapst/kimai2/tree/1.11.1)
|
## [1.11.1](https://github.com/kevinpapst/kimai2/tree/1.11.1)
|
||||||
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.11...1.11.1)
|
[Full Changelog](https://github.com/kevinpapst/kimai2/compare/1.11...1.11.1)
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ As announced in the [README](README.md) I only support the latest available rele
|
|||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| master | :white_check_mark: |
|
| master | :white_check_mark: |
|
||||||
| 1.11 | :white_check_mark: |
|
| 1.12 | :white_check_mark: |
|
||||||
| < 1.11 | :x: |
|
| < 1.12 | :x: |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ you can upgrade your Kimai installation to the latest stable release.
|
|||||||
Check below if there are more version specific steps required, which need to be executed after the normal update process.
|
Check below if there are more version specific steps required, which need to be executed after the normal update process.
|
||||||
Perform EACH version specific task between your version and the new one, otherwise you risk data inconsistency or a broken installation.
|
Perform EACH version specific task between your version and the new one, otherwise you risk data inconsistency or a broken installation.
|
||||||
|
|
||||||
|
## [1.12](https://github.com/kevinpapst/kimai2/releases/tag/1.12)
|
||||||
|
|
||||||
|
- Export templates can now include items from plugins (eg. Expenses).
|
||||||
|
|
||||||
## [1.10](https://github.com/kevinpapst/kimai2/releases/tag/1.10)
|
## [1.10](https://github.com/kevinpapst/kimai2/releases/tag/1.10)
|
||||||
|
|
||||||
**New database tables and fields were created, don't forget to [run the updater](https://www.kimai.org/documentation/updates.html).**
|
**New database tables and fields were created, don't forget to [run the updater](https://www.kimai.org/documentation/updates.html).**
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export default class KimaiConfirmationLink extends KimaiPlugin {
|
|||||||
if (value) {
|
if (value) {
|
||||||
if (form === null) {
|
if (form === null) {
|
||||||
document.location = url;
|
document.location = url;
|
||||||
} else {
|
} else {
|
||||||
if (url !== null) {
|
if (url !== null) {
|
||||||
form.action = url;
|
form.action = url;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ import KimaiPlugin from "../KimaiPlugin";
|
|||||||
|
|
||||||
export default class KimaiReducedClickHandler extends KimaiPlugin {
|
export default class KimaiReducedClickHandler extends KimaiPlugin {
|
||||||
|
|
||||||
_addClickHandler(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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Kernel;
|
use App\Kernel;
|
||||||
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
use App\ConsoleApplication;
|
||||||
use Symfony\Component\Console\Input\ArgvInput;
|
use Symfony\Component\Console\Input\ArgvInput;
|
||||||
use Symfony\Component\ErrorHandler\Debug;
|
use Symfony\Component\ErrorHandler\Debug;
|
||||||
use Symfony\Component\Dotenv\Dotenv;
|
use Symfony\Component\Dotenv\Dotenv;
|
||||||
@@ -25,5 +25,5 @@ if ($debug) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$kernel = new Kernel($env, $debug);
|
$kernel = new Kernel($env, $debug);
|
||||||
$application = new Application($kernel);
|
$application = new ConsoleApplication($kernel);
|
||||||
$application->run($input);
|
$application->run($input);
|
||||||
|
|||||||
@@ -24,8 +24,9 @@
|
|||||||
"doctrine/doctrine-migrations-bundle": "^2.1",
|
"doctrine/doctrine-migrations-bundle": "^2.1",
|
||||||
"doctrine/orm": "^2.7",
|
"doctrine/orm": "^2.7",
|
||||||
"erusev/parsedown": "^1.6",
|
"erusev/parsedown": "^1.6",
|
||||||
"friendsofsymfony/rest-bundle": "^2.5",
|
"friendsofsymfony/rest-bundle": "^3.0",
|
||||||
"gedmo/doctrine-extensions": "^2.4",
|
"gedmo/doctrine-extensions": "^2.4",
|
||||||
|
"handcraftedinthealps/rest-routing-bundle": "^1.0",
|
||||||
"hslavich/oneloginsaml-bundle": "^1.4",
|
"hslavich/oneloginsaml-bundle": "^1.4",
|
||||||
"jms/metadata": "^2.0",
|
"jms/metadata": "^2.0",
|
||||||
"jms/serializer-bundle": "^3.2",
|
"jms/serializer-bundle": "^3.2",
|
||||||
|
|||||||
4039
composer.lock
generated
4039
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -21,4 +21,5 @@ return [
|
|||||||
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
|
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
|
||||||
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
|
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
|
||||||
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||||
|
HandcraftedInTheAlps\RestRoutingBundle\RestRoutingBundle::class => ['all' => true],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,111 +1,52 @@
|
|||||||
# TODO upgrade to 2.8
|
|
||||||
# https://github.com/FriendsOfSymfony/FOSRestBundle/releases/tag/2.8.0
|
|
||||||
fos_rest:
|
fos_rest:
|
||||||
# disable_csrf_role: IS_AUTHENTICATED_ANONYMOUSLY
|
|
||||||
# unauthorized_challenge: null
|
|
||||||
param_fetcher_listener:
|
param_fetcher_listener:
|
||||||
enabled: true
|
enabled: true
|
||||||
# force: false
|
|
||||||
# service: null
|
|
||||||
cache_dir: '%kernel.cache_dir%/fos_rest'
|
cache_dir: '%kernel.cache_dir%/fos_rest'
|
||||||
# allowed_methods_listener:
|
routing_loader: false
|
||||||
# enabled: false
|
|
||||||
# service: null
|
|
||||||
# TODO activate with 2.8
|
|
||||||
# routing_loader: false
|
|
||||||
routing_loader:
|
|
||||||
default_format: json
|
|
||||||
include_format: true
|
|
||||||
body_converter:
|
body_converter:
|
||||||
enabled: true
|
enabled: true
|
||||||
# validate: false
|
|
||||||
# validation_errors_argument: validationErrors
|
|
||||||
# service:
|
|
||||||
# router: router
|
|
||||||
# templating: templating
|
|
||||||
# serializer: null
|
|
||||||
# view_handler: fos_rest.view_handler.default
|
|
||||||
# inflector: fos_rest.inflector.doctrine
|
|
||||||
# validator: validator
|
|
||||||
serializer:
|
serializer:
|
||||||
# version: null
|
|
||||||
# groups: []
|
|
||||||
serialize_null: true
|
serialize_null: true
|
||||||
view:
|
view:
|
||||||
default_engine: twig
|
|
||||||
# force_redirects:
|
|
||||||
# name: ~
|
|
||||||
# mime_types:
|
|
||||||
# enabled: false
|
|
||||||
# service: null
|
|
||||||
# formats:
|
|
||||||
# name: ~
|
|
||||||
formats:
|
formats:
|
||||||
json: true
|
json: true
|
||||||
xml: false
|
xml: false
|
||||||
# templating_formats:
|
|
||||||
# name: ~
|
|
||||||
view_response_listener:
|
view_response_listener:
|
||||||
enabled: true
|
enabled: true
|
||||||
# force: true
|
|
||||||
# service: null
|
|
||||||
failed_validation: 400
|
failed_validation: 400
|
||||||
# empty_content: 204
|
|
||||||
# serialize_null: false
|
|
||||||
# jsonp_handler:
|
|
||||||
# callback_param: callback
|
|
||||||
# mime_type: application/javascript+jsonp
|
|
||||||
exception:
|
exception:
|
||||||
enabled: true
|
enabled: true
|
||||||
# TODO active with 2.8
|
map_exception_codes: true
|
||||||
# serialize_exceptions: false
|
serializer_error_renderer: true
|
||||||
# TODO deprecated with 2.8
|
serialize_exceptions: false
|
||||||
# https://github.com/FriendsOfSymfony/FOSRestBundle/issues/2200#issuecomment-629150462
|
exception_listener: false
|
||||||
# https://github.com/FriendsOfSymfony/FOSRestBundle/issues/2224
|
|
||||||
exception_controller: 'fos_rest.exception.controller:showAction'
|
|
||||||
codes:
|
codes:
|
||||||
# 'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404
|
'Symfony\Component\HttpKernel\Exception\BadRequestHttpException': 400
|
||||||
# 'Doctrine\ORM\OptimisticLockException': HTTP_CONFLICT
|
|
||||||
# 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException': 400
|
|
||||||
'App\Validator\ValidationFailedException': 400
|
'App\Validator\ValidationFailedException': 400
|
||||||
messages:
|
'Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException': 401
|
||||||
'Symfony\Component\Routing\Exception\ResourceNotFoundException': true
|
'Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException': 403
|
||||||
'Symfony\Component\HttpKernel\Exception\NotFoundHttpException': true
|
'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404
|
||||||
|
'Symfony\Component\HttpKernel\Exception\NotFoundHttpException': 404
|
||||||
|
'App\API\NotFoundException': 404
|
||||||
body_listener:
|
body_listener:
|
||||||
enabled: true
|
enabled: true
|
||||||
# service: null
|
decoders:
|
||||||
# default_format: null
|
json: fos_rest.decoder.json
|
||||||
# throw_exception_on_unsupported_content_type: false
|
|
||||||
# decoders:
|
|
||||||
# name: ~
|
|
||||||
array_normalizer:
|
array_normalizer:
|
||||||
service: fos_rest.normalizer.camel_keys
|
service: fos_rest.normalizer.camel_keys
|
||||||
forms: true
|
forms: true
|
||||||
format_listener:
|
format_listener:
|
||||||
enabled: true
|
enabled: true
|
||||||
# service: null
|
|
||||||
rules:
|
rules:
|
||||||
- { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] }
|
- { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] }
|
||||||
# host: null # URL host name
|
|
||||||
# methods: null # Method for URL
|
|
||||||
# stop: false
|
|
||||||
# attributes: []
|
|
||||||
# versioning:
|
|
||||||
# enabled: false
|
|
||||||
# default_version: ~
|
|
||||||
# resolvers:
|
|
||||||
# query:
|
|
||||||
# enabled: true
|
|
||||||
# parameter_name: version
|
|
||||||
# custom_header:
|
|
||||||
# enabled: true
|
|
||||||
# header_name: X-Accept-Version
|
|
||||||
# media_type:
|
|
||||||
# enabled: true
|
|
||||||
# regex: /(v|version)=(?P<version>[0-9\.]+)/
|
|
||||||
# guessing_order:
|
|
||||||
# - query
|
|
||||||
# - custom_header
|
|
||||||
# - media_type
|
|
||||||
zone:
|
zone:
|
||||||
- { path: ^/api/* }
|
- { path: ^/api/* }
|
||||||
|
|
||||||
|
handcraftedinthealps_rest_routing:
|
||||||
|
routing_loader:
|
||||||
|
default_format: 'json'
|
||||||
|
prefix_methods: true
|
||||||
|
include_format: true
|
||||||
|
formats:
|
||||||
|
json: true
|
||||||
|
xml: false
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
twig:
|
twig:
|
||||||
#paths: ['%kernel.project_dir%/templates']
|
|
||||||
debug: '%kernel.debug%'
|
debug: '%kernel.debug%'
|
||||||
strict_variables: '%kernel.debug%'
|
strict_variables: '%kernel.debug%'
|
||||||
form_themes:
|
form_themes:
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ use App\Repository\ActivityRepository;
|
|||||||
use App\Repository\Query\ActivityQuery;
|
use App\Repository\Query\ActivityQuery;
|
||||||
use App\Utils\SearchTerm;
|
use App\Utils\SearchTerm;
|
||||||
use FOS\RestBundle\Controller\Annotations as Rest;
|
use FOS\RestBundle\Controller\Annotations as Rest;
|
||||||
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
||||||
use FOS\RestBundle\Request\ParamFetcherInterface;
|
use FOS\RestBundle\Request\ParamFetcherInterface;
|
||||||
use FOS\RestBundle\View\View;
|
use FOS\RestBundle\View\View;
|
||||||
use FOS\RestBundle\View\ViewHandlerInterface;
|
use FOS\RestBundle\View\ViewHandlerInterface;
|
||||||
|
use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||||
use Swagger\Annotations as SWG;
|
use Swagger\Annotations as SWG;
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ use App\Repository\CustomerRepository;
|
|||||||
use App\Repository\Query\CustomerQuery;
|
use App\Repository\Query\CustomerQuery;
|
||||||
use App\Utils\SearchTerm;
|
use App\Utils\SearchTerm;
|
||||||
use FOS\RestBundle\Controller\Annotations as Rest;
|
use FOS\RestBundle\Controller\Annotations as Rest;
|
||||||
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
||||||
use FOS\RestBundle\Request\ParamFetcherInterface;
|
use FOS\RestBundle\Request\ParamFetcherInterface;
|
||||||
use FOS\RestBundle\View\View;
|
use FOS\RestBundle\View\View;
|
||||||
use FOS\RestBundle\View\ViewHandlerInterface;
|
use FOS\RestBundle\View\ViewHandlerInterface;
|
||||||
|
use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||||
use Swagger\Annotations as SWG;
|
use Swagger\Annotations as SWG;
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ use App\Repository\ProjectRepository;
|
|||||||
use App\Repository\Query\ProjectQuery;
|
use App\Repository\Query\ProjectQuery;
|
||||||
use App\Utils\SearchTerm;
|
use App\Utils\SearchTerm;
|
||||||
use FOS\RestBundle\Controller\Annotations as Rest;
|
use FOS\RestBundle\Controller\Annotations as Rest;
|
||||||
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
||||||
use FOS\RestBundle\Request\ParamFetcherInterface;
|
use FOS\RestBundle\Request\ParamFetcherInterface;
|
||||||
use FOS\RestBundle\View\View;
|
use FOS\RestBundle\View\View;
|
||||||
use FOS\RestBundle\View\ViewHandlerInterface;
|
use FOS\RestBundle\View\ViewHandlerInterface;
|
||||||
|
use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||||
use Swagger\Annotations as SWG;
|
use Swagger\Annotations as SWG;
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ use App\Entity\Tag;
|
|||||||
use App\Form\API\TagApiEditForm;
|
use App\Form\API\TagApiEditForm;
|
||||||
use App\Repository\TagRepository;
|
use App\Repository\TagRepository;
|
||||||
use FOS\RestBundle\Controller\Annotations as Rest;
|
use FOS\RestBundle\Controller\Annotations as Rest;
|
||||||
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
||||||
use FOS\RestBundle\Request\ParamFetcherInterface;
|
use FOS\RestBundle\Request\ParamFetcherInterface;
|
||||||
use FOS\RestBundle\View\View;
|
use FOS\RestBundle\View\View;
|
||||||
use FOS\RestBundle\View\ViewHandlerInterface;
|
use FOS\RestBundle\View\ViewHandlerInterface;
|
||||||
|
use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||||
use Swagger\Annotations as SWG;
|
use Swagger\Annotations as SWG;
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ use App\Repository\CustomerRepository;
|
|||||||
use App\Repository\ProjectRepository;
|
use App\Repository\ProjectRepository;
|
||||||
use App\Repository\TeamRepository;
|
use App\Repository\TeamRepository;
|
||||||
use App\Repository\UserRepository;
|
use App\Repository\UserRepository;
|
||||||
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
||||||
use FOS\RestBundle\Request\ParamFetcherInterface;
|
use FOS\RestBundle\Request\ParamFetcherInterface;
|
||||||
use FOS\RestBundle\View\View;
|
use FOS\RestBundle\View\View;
|
||||||
use FOS\RestBundle\View\ViewHandlerInterface;
|
use FOS\RestBundle\View\ViewHandlerInterface;
|
||||||
|
use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||||
use Swagger\Annotations as SWG;
|
use Swagger\Annotations as SWG;
|
||||||
|
|||||||
@@ -24,10 +24,10 @@ use App\Timesheet\TrackingModeService;
|
|||||||
use App\Utils\SearchTerm;
|
use App\Utils\SearchTerm;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use FOS\RestBundle\Controller\Annotations as Rest;
|
use FOS\RestBundle\Controller\Annotations as Rest;
|
||||||
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
||||||
use FOS\RestBundle\Request\ParamFetcherInterface;
|
use FOS\RestBundle\Request\ParamFetcherInterface;
|
||||||
use FOS\RestBundle\View\View;
|
use FOS\RestBundle\View\View;
|
||||||
use FOS\RestBundle\View\ViewHandlerInterface;
|
use FOS\RestBundle\View\ViewHandlerInterface;
|
||||||
|
use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
||||||
use Pagerfanta\Pagerfanta;
|
use Pagerfanta\Pagerfanta;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ use App\Repository\Query\UserQuery;
|
|||||||
use App\Repository\UserRepository;
|
use App\Repository\UserRepository;
|
||||||
use App\Utils\SearchTerm;
|
use App\Utils\SearchTerm;
|
||||||
use FOS\RestBundle\Controller\Annotations as Rest;
|
use FOS\RestBundle\Controller\Annotations as Rest;
|
||||||
use FOS\RestBundle\Controller\Annotations\RouteResource;
|
|
||||||
use FOS\RestBundle\Request\ParamFetcherInterface;
|
use FOS\RestBundle\Request\ParamFetcherInterface;
|
||||||
use FOS\RestBundle\View\View;
|
use FOS\RestBundle\View\View;
|
||||||
use FOS\RestBundle\View\ViewHandlerInterface;
|
use FOS\RestBundle\View\ViewHandlerInterface;
|
||||||
|
use HandcraftedInTheAlps\RestRoutingBundle\Controller\Annotations\RouteResource;
|
||||||
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
use Nelmio\ApiDocBundle\Annotation\Security as ApiSecurity;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||||
use Swagger\Annotations as SWG;
|
use Swagger\Annotations as SWG;
|
||||||
|
|||||||
25
src/ConsoleApplication.php
Normal file
25
src/ConsoleApplication.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Kimai time-tracking app.
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
||||||
|
|
||||||
|
class ConsoleApplication extends Application
|
||||||
|
{
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return Constants::SOFTWARE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getVersion()
|
||||||
|
{
|
||||||
|
return Constants::VERSION;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@ class Constants
|
|||||||
/**
|
/**
|
||||||
* The current release version
|
* The current release version
|
||||||
*/
|
*/
|
||||||
public const VERSION = '1.11.1';
|
public const VERSION = '1.12';
|
||||||
/**
|
/**
|
||||||
* The current release status, either "stable" or "dev"
|
* The current release status, either "stable" or "dev"
|
||||||
*/
|
*/
|
||||||
|
|||||||
61
symfony.lock
61
symfony.lock
@@ -99,6 +99,9 @@
|
|||||||
"doctrine/reflection": {
|
"doctrine/reflection": {
|
||||||
"version": "v1.0.0"
|
"version": "v1.0.0"
|
||||||
},
|
},
|
||||||
|
"doctrine/sql-formatter": {
|
||||||
|
"version": "1.1.1"
|
||||||
|
},
|
||||||
"egulias/email-validator": {
|
"egulias/email-validator": {
|
||||||
"version": "2.1.3"
|
"version": "2.1.3"
|
||||||
},
|
},
|
||||||
@@ -135,44 +138,8 @@
|
|||||||
"guzzlehttp/psr7": {
|
"guzzlehttp/psr7": {
|
||||||
"version": "1.6.1"
|
"version": "1.6.1"
|
||||||
},
|
},
|
||||||
"hoa/compiler": {
|
"handcraftedinthealps/rest-routing-bundle": {
|
||||||
"version": "3.17.08.08"
|
"version": "1.0.0"
|
||||||
},
|
|
||||||
"hoa/consistency": {
|
|
||||||
"version": "1.17.05.02"
|
|
||||||
},
|
|
||||||
"hoa/event": {
|
|
||||||
"version": "1.17.01.13"
|
|
||||||
},
|
|
||||||
"hoa/exception": {
|
|
||||||
"version": "1.17.01.16"
|
|
||||||
},
|
|
||||||
"hoa/file": {
|
|
||||||
"version": "1.17.07.11"
|
|
||||||
},
|
|
||||||
"hoa/iterator": {
|
|
||||||
"version": "2.17.01.10"
|
|
||||||
},
|
|
||||||
"hoa/math": {
|
|
||||||
"version": "1.17.05.16"
|
|
||||||
},
|
|
||||||
"hoa/protocol": {
|
|
||||||
"version": "1.17.01.14"
|
|
||||||
},
|
|
||||||
"hoa/regex": {
|
|
||||||
"version": "1.17.01.13"
|
|
||||||
},
|
|
||||||
"hoa/stream": {
|
|
||||||
"version": "1.17.02.21"
|
|
||||||
},
|
|
||||||
"hoa/ustring": {
|
|
||||||
"version": "4.17.01.16"
|
|
||||||
},
|
|
||||||
"hoa/visitor": {
|
|
||||||
"version": "2.17.01.16"
|
|
||||||
},
|
|
||||||
"hoa/zformat": {
|
|
||||||
"version": "1.17.01.10"
|
|
||||||
},
|
},
|
||||||
"hslavich/oneloginsaml-bundle": {
|
"hslavich/oneloginsaml-bundle": {
|
||||||
"version": "v1.4.1"
|
"version": "v1.4.1"
|
||||||
@@ -189,9 +156,6 @@
|
|||||||
"intervention/image": {
|
"intervention/image": {
|
||||||
"version": "2.5.0"
|
"version": "2.5.0"
|
||||||
},
|
},
|
||||||
"jdorn/sql-formatter": {
|
|
||||||
"version": "v1.2.17"
|
|
||||||
},
|
|
||||||
"jms/metadata": {
|
"jms/metadata": {
|
||||||
"version": "1.6.0"
|
"version": "1.6.0"
|
||||||
},
|
},
|
||||||
@@ -225,6 +189,9 @@
|
|||||||
"lorenzo/pinky": {
|
"lorenzo/pinky": {
|
||||||
"version": "1.0.5"
|
"version": "1.0.5"
|
||||||
},
|
},
|
||||||
|
"maennchen/zipstream-php": {
|
||||||
|
"version": "2.1.0"
|
||||||
|
},
|
||||||
"markbaker/complex": {
|
"markbaker/complex": {
|
||||||
"version": "1.4.6"
|
"version": "1.4.6"
|
||||||
},
|
},
|
||||||
@@ -240,6 +207,9 @@
|
|||||||
"myclabs/deep-copy": {
|
"myclabs/deep-copy": {
|
||||||
"version": "1.7.0"
|
"version": "1.7.0"
|
||||||
},
|
},
|
||||||
|
"myclabs/php-enum": {
|
||||||
|
"version": "1.7.6"
|
||||||
|
},
|
||||||
"nelmio/api-doc-bundle": {
|
"nelmio/api-doc-bundle": {
|
||||||
"version": "3.0",
|
"version": "3.0",
|
||||||
"recipe": {
|
"recipe": {
|
||||||
@@ -357,6 +327,12 @@
|
|||||||
"psr/container": {
|
"psr/container": {
|
||||||
"version": "1.0.0"
|
"version": "1.0.0"
|
||||||
},
|
},
|
||||||
|
"psr/http-client": {
|
||||||
|
"version": "1.0.1"
|
||||||
|
},
|
||||||
|
"psr/http-factory": {
|
||||||
|
"version": "1.0.1"
|
||||||
|
},
|
||||||
"psr/http-message": {
|
"psr/http-message": {
|
||||||
"version": "1.0.1"
|
"version": "1.0.1"
|
||||||
},
|
},
|
||||||
@@ -471,6 +447,9 @@
|
|||||||
"symfony/dependency-injection": {
|
"symfony/dependency-injection": {
|
||||||
"version": "v4.0.3"
|
"version": "v4.0.3"
|
||||||
},
|
},
|
||||||
|
"symfony/deprecation-contracts": {
|
||||||
|
"version": "v2.2.0"
|
||||||
|
},
|
||||||
"symfony/doctrine-bridge": {
|
"symfony/doctrine-bridge": {
|
||||||
"version": "v4.0.3"
|
"version": "v4.0.3"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -31,22 +31,19 @@
|
|||||||
{% if not customer.visible %}
|
{% if not customer.visible %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ 'label.visible'|trans }}</th>
|
<th>{{ 'label.visible'|trans }}</th>
|
||||||
<td>
|
<td>{{ widgets.label_boolean(customer.visible) }}</td>
|
||||||
{{ widgets.label_boolean(customer.visible) }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if customer.address is not empty %}
|
{% if customer.address is not empty %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ 'label.address'|trans }}</th>
|
<th>{{ 'label.address'|trans }}</th>
|
||||||
<td>
|
<td>{{ customer.address|nl2br }}</td>
|
||||||
{{ customer.address|nl2br }}
|
</tr>
|
||||||
|
|
||||||
{% if customer.country is not empty %}
|
|
||||||
<br>
|
|
||||||
{{ customer.country|country }}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% if customer.country is not empty %}
|
||||||
|
<tr>
|
||||||
|
<th>{{ 'label.country'|trans }}</th>
|
||||||
|
<td>{{ customer.country|country }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if customer.contact is not empty %}
|
{% if customer.contact is not empty %}
|
||||||
@@ -88,7 +85,7 @@
|
|||||||
{% if customer.timezone is not empty %}
|
{% if customer.timezone is not empty %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ 'label.timezone'|trans }}</th>
|
<th>{{ 'label.timezone'|trans }}</th>
|
||||||
<td><span data-toggle="tooltip" data-placement="top" title="{{ customer.timezone }}">{{ now|date_time }}</span></td>
|
<td>{{ now|date_full }} ({{ customer.timezone }})</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if customer.currency is not empty %}
|
{% if customer.currency is not empty %}
|
||||||
|
|||||||
@@ -56,7 +56,6 @@ class AppExtensionTest extends TestCase
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
'data_dir' => '/tmp/',
|
'data_dir' => '/tmp/',
|
||||||
'plugin_dir' => '/tmp/', // still here, to make sure that this value is NOT applied!
|
|
||||||
'timesheet' => [],
|
'timesheet' => [],
|
||||||
'saml' => [
|
'saml' => [
|
||||||
'connection' => []
|
'connection' => []
|
||||||
@@ -325,6 +324,21 @@ class AppExtensionTest extends TestCase
|
|||||||
$this->extension->load($minConfig, $container = $this->getContainer());
|
$this->extension->load($minConfig, $container = $this->getContainer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedDeprecation Changing the plugin directory via "kimai.plugin_dir" is not supported since 1.9
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
|
public function testChangingPluginsIsIgnoredAndTriggersDeprecation()
|
||||||
|
{
|
||||||
|
$minConfig = $this->getMinConfig();
|
||||||
|
$minConfig['kimai']['plugin_dir'] = '/tmp/';
|
||||||
|
$expected = realpath(__DIR__ . '/../../') . '/var/plugins';
|
||||||
|
|
||||||
|
$this->extension->load($minConfig, $container = $this->getContainer());
|
||||||
|
|
||||||
|
$this->assertEquals($expected, $container->getParameter('kimai.plugin_dir'), 'Invalid config: kimai.plugin_dir');
|
||||||
|
}
|
||||||
|
|
||||||
public function testLdapDefaultValues()
|
public function testLdapDefaultValues()
|
||||||
{
|
{
|
||||||
$minConfig = $this->getMinConfig();
|
$minConfig = $this->getMinConfig();
|
||||||
|
|||||||
@@ -18,11 +18,10 @@ use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
|
|||||||
*/
|
*/
|
||||||
class ConfigurationTest extends TestCase
|
class ConfigurationTest extends TestCase
|
||||||
{
|
{
|
||||||
protected function getMinConfig($dataDir = '/tmp/', $pluginDir = '/tmp/')
|
protected function getMinConfig($dataDir = '/tmp/')
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'data_dir' => $dataDir,
|
'data_dir' => $dataDir,
|
||||||
'plugin_dir' => $pluginDir,
|
|
||||||
'timesheet' => [],
|
'timesheet' => [],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -52,12 +51,17 @@ class ConfigurationTest extends TestCase
|
|||||||
$this->assertConfig($this->getMinConfig('sdfsdfsdfds'), []);
|
$this->assertConfig($this->getMinConfig('sdfsdfsdfds'), []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedDeprecation Changing the plugin directory via "kimai.plugin_dir" is not supported since 1.9
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
public function testValidatePluginDir()
|
public function testValidatePluginDir()
|
||||||
{
|
{
|
||||||
$finalizedConfig = $this->getCompiledConfig($this->getMinConfig());
|
$config = $this->getMinConfig();
|
||||||
$finalizedConfig['plugin_dir'] = 'sdfsdfs';
|
$config['plugin_dir'] = '/tmp/';
|
||||||
|
|
||||||
$config = $this->getMinConfig('/tmp/', 'sdfsdfs');
|
$finalizedConfig = $this->getCompiledConfig($config);
|
||||||
|
$finalizedConfig['plugin_dir'] = '/tmp/';
|
||||||
|
|
||||||
$this->assertConfig($config, $finalizedConfig);
|
$this->assertConfig($config, $finalizedConfig);
|
||||||
}
|
}
|
||||||
@@ -257,7 +261,6 @@ class ConfigurationTest extends TestCase
|
|||||||
{
|
{
|
||||||
$fullDefaultConfig = [
|
$fullDefaultConfig = [
|
||||||
'data_dir' => '/tmp/',
|
'data_dir' => '/tmp/',
|
||||||
'plugin_dir' => '/tmp/',
|
|
||||||
'timesheet' => [
|
'timesheet' => [
|
||||||
'default_begin' => 'now',
|
'default_begin' => 'now',
|
||||||
'mode' => 'default',
|
'mode' => 'default',
|
||||||
|
|||||||
@@ -2,10 +2,6 @@
|
|||||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||||
<file source-language="en" target-language="ar" datatype="plaintext" original="email.en.xlf">
|
<file source-language="en" target-language="ar" datatype="plaintext" original="email.en.xlf">
|
||||||
<body>
|
<body>
|
||||||
<trans-unit id="button_copy_url_to_browser">
|
|
||||||
<source>button_copy_url_to_browser</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="automated_email_dont_answer">
|
<trans-unit id="automated_email_dont_answer">
|
||||||
<source>automated_email_dont_answer</source>
|
<source>automated_email_dont_answer</source>
|
||||||
<target>هذا بريد آلي. رجاء لاترد، بريدك لن يقرء.</target>
|
<target>هذا بريد آلي. رجاء لاترد، بريدك لن يقرء.</target>
|
||||||
@@ -22,26 +18,6 @@
|
|||||||
<source>registration.button</source>
|
<source>registration.button</source>
|
||||||
<target>فعل حسابك</target>
|
<target>فعل حسابك</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="registration.intro">
|
|
||||||
<source>registration.intro</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="reset.subject">
|
|
||||||
<source>reset.subject</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="reset.title">
|
|
||||||
<source>reset.title</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="reset.button">
|
|
||||||
<source>reset.button</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="reset.intro">
|
|
||||||
<source>reset.intro</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|||||||
@@ -54,11 +54,11 @@
|
|||||||
-->
|
-->
|
||||||
<trans-unit id="label.password">
|
<trans-unit id="label.password">
|
||||||
<source>label.password</source>
|
<source>label.password</source>
|
||||||
<target>Senha</target>
|
<target>Palavra-passe</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="label.password_repeat">
|
<trans-unit id="label.password_repeat">
|
||||||
<source>label.password_repeat</source>
|
<source>label.password_repeat</source>
|
||||||
<target>Repita a Senha</target>
|
<target>Repita a palavra-passe</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="label.logout">
|
<trans-unit id="label.logout">
|
||||||
<source>label.logout</source>
|
<source>label.logout</source>
|
||||||
@@ -70,11 +70,11 @@
|
|||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="label.api_token">
|
<trans-unit id="label.api_token">
|
||||||
<source>label.api_token</source>
|
<source>label.api_token</source>
|
||||||
<target>Senha API</target>
|
<target>Palavra-passe da API</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="label.api_token_repeat">
|
<trans-unit id="label.api_token_repeat">
|
||||||
<source>label.api_token_repeat</source>
|
<source>label.api_token_repeat</source>
|
||||||
<target>Repita Senha da API</target>
|
<target>Repita a palavra-passe da API</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<!--
|
<!--
|
||||||
Menu / Navbar items
|
Menu / Navbar items
|
||||||
@@ -366,7 +366,7 @@
|
|||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="profile.password">
|
<trans-unit id="profile.password">
|
||||||
<source>profile.password</source>
|
<source>profile.password</source>
|
||||||
<target>Senha</target>
|
<target>Palavra-passe</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="profile.api-token">
|
<trans-unit id="profile.api-token">
|
||||||
<source>profile.api-token</source>
|
<source>profile.api-token</source>
|
||||||
@@ -618,7 +618,7 @@
|
|||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="stats.userActiveWeek">
|
<trans-unit id="stats.userActiveWeek">
|
||||||
<source>stats.userActiveWeek</source>
|
<source>stats.userActiveWeek</source>
|
||||||
<target>Usuários ativos nessa semana</target>
|
<target>Utilizadores ativos nessa semana</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="stats.userActiveMonth">
|
<trans-unit id="stats.userActiveMonth">
|
||||||
<source>stats.userActiveMonth</source>
|
<source>stats.userActiveMonth</source>
|
||||||
|
|||||||
@@ -906,10 +906,6 @@
|
|||||||
<source>upload</source>
|
<source>upload</source>
|
||||||
<target>Enviar</target>
|
<target>Enviar</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="help.rate">
|
|
||||||
<source>help.rate</source>
|
|
||||||
<target></target>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="error.no_comments_found">
|
<trans-unit id="error.no_comments_found">
|
||||||
<source>error.no_comments_found</source>
|
<source>error.no_comments_found</source>
|
||||||
<target>Não houve nenhum comentários postados ainda.</target>
|
<target>Não houve nenhum comentários postados ainda.</target>
|
||||||
|
|||||||
@@ -6,34 +6,6 @@
|
|||||||
<source>teams.title</source>
|
<source>teams.title</source>
|
||||||
<target>الفريق</target>
|
<target>الفريق</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="teams.project_access">
|
|
||||||
<source>teams.project_access</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="teams.customer_access">
|
|
||||||
<source>teams.customer_access</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="team.visibility_global">
|
|
||||||
<source>team.visibility_global</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="team.visibility_restricted">
|
|
||||||
<source>team.visibility_restricted</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="team.project_visibility_inherited">
|
|
||||||
<source>team.project_visibility_inherited</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="team.activity_visibility_inherited">
|
|
||||||
<source>team.activity_visibility_inherited</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
<trans-unit id="team.create_default">
|
|
||||||
<source>team.create_default</source>
|
|
||||||
<target/>
|
|
||||||
</trans-unit>
|
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|||||||
Reference in New Issue
Block a user