diff --git a/assets/ts_src/event_listeners.ts b/assets/ts_src/event_listeners.ts
index 99a0a032..36a739f7 100644
--- a/assets/ts_src/event_listeners.ts
+++ b/assets/ts_src/event_listeners.ts
@@ -110,9 +110,12 @@ $(document).on("ajaxUI:start ajaxUI:reload", function() {
});
//Register bootstrap select picker
-$(document).on("ajaxUI:reload", function () {
+$(document).on("ajaxUI:reload ajaxUI:start", function () {
//@ts-ignore
- $(".selectpicker").selectpicker();
+ $(".selectpicker").selectpicker({
+ dropdownAlignRight: 'auto',
+ container: '#content',
+ });
});
//Use bootstrap tooltips for the most tooltips
diff --git a/composer.json b/composer.json
index fe3f211a..3f4c520f 100644
--- a/composer.json
+++ b/composer.json
@@ -64,6 +64,7 @@
"phpstan/phpstan": "^0.12.8",
"phpstan/phpstan-doctrine": "^0.12.9",
"phpstan/phpstan-symfony": "^0.12.4",
+ "psalm/plugin-symfony": "^1.1",
"roave/security-advisories": "dev-master",
"symfony/debug-pack": "*",
"symfony/maker-bundle": "^1.13",
diff --git a/composer.lock b/composer.lock
index ab403135..3fccc6a8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "fd11975fb4135f47bdb119fec531a868",
+ "content-hash": "482b6aa7bcf3371c734025dc6f151ac1",
"packages": [
{
"name": "beberlei/assert",
@@ -4112,16 +4112,16 @@
},
{
"name": "symfony/asset",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
- "reference": "eb7c4595302888ee82b78acb90cc79cf4c3f213e"
+ "reference": "e3574559efcb51601022fa46fd88dd13a8febdc2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/asset/zipball/eb7c4595302888ee82b78acb90cc79cf4c3f213e",
- "reference": "eb7c4595302888ee82b78acb90cc79cf4c3f213e",
+ "url": "https://api.github.com/repos/symfony/asset/zipball/e3574559efcb51601022fa46fd88dd13a8febdc2",
+ "reference": "e3574559efcb51601022fa46fd88dd13a8febdc2",
"shasum": ""
},
"require": {
@@ -4164,20 +4164,20 @@
],
"description": "Symfony Asset Component",
"homepage": "https://symfony.com",
- "time": "2020-03-15T10:05:03+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/cache",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "f20dcf48ecee66ab5ad7ccf4b3b55392b660c3d9"
+ "reference": "f777b570291aebe51081b9827e05f3a747665e87"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/f20dcf48ecee66ab5ad7ccf4b3b55392b660c3d9",
- "reference": "f20dcf48ecee66ab5ad7ccf4b3b55392b660c3d9",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/f777b570291aebe51081b9827e05f3a747665e87",
+ "reference": "f777b570291aebe51081b9827e05f3a747665e87",
"shasum": ""
},
"require": {
@@ -4243,7 +4243,7 @@
"caching",
"psr6"
],
- "time": "2020-03-17T19:51:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -4305,16 +4305,16 @@
},
{
"name": "symfony/config",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "235e5afffd3a1a1b0dd0221973cbf670bc3be1d4"
+ "reference": "3f4a3de1af498ed0ea653d4dc2317794144e6ca4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/235e5afffd3a1a1b0dd0221973cbf670bc3be1d4",
- "reference": "235e5afffd3a1a1b0dd0221973cbf670bc3be1d4",
+ "url": "https://api.github.com/repos/symfony/config/zipball/3f4a3de1af498ed0ea653d4dc2317794144e6ca4",
+ "reference": "3f4a3de1af498ed0ea653d4dc2317794144e6ca4",
"shasum": ""
},
"require": {
@@ -4365,20 +4365,20 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/console",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "20bc0c1068565103075359f5ce9e0639b36f92d1"
+ "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/20bc0c1068565103075359f5ce9e0639b36f92d1",
- "reference": "20bc0c1068565103075359f5ce9e0639b36f92d1",
+ "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
+ "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
"shasum": ""
},
"require": {
@@ -4441,7 +4441,7 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T08:56:54+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "symfony/contracts",
@@ -4516,16 +4516,16 @@
},
{
"name": "symfony/css-selector",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "402251c6fd69806a70a2b0e1426d16f8487f0f9a"
+ "reference": "afc26133a6fbdd4f8842e38893e0ee4685c7c94b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/402251c6fd69806a70a2b0e1426d16f8487f0f9a",
- "reference": "402251c6fd69806a70a2b0e1426d16f8487f0f9a",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/afc26133a6fbdd4f8842e38893e0ee4685c7c94b",
+ "reference": "afc26133a6fbdd4f8842e38893e0ee4685c7c94b",
"shasum": ""
},
"require": {
@@ -4565,20 +4565,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T08:56:54+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/debug",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "f0ae2b4150254b8b4ac578f33d910b9c116618f0"
+ "reference": "346636d2cae417992ecfd761979b2ab98b339a45"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/f0ae2b4150254b8b4ac578f33d910b9c116618f0",
- "reference": "f0ae2b4150254b8b4ac578f33d910b9c116618f0",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45",
+ "reference": "346636d2cae417992ecfd761979b2ab98b339a45",
"shasum": ""
},
"require": {
@@ -4621,20 +4621,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "b4242fc7f18c8bf5427f84d5afe2131c9b323a04"
+ "reference": "755b18859be26b90f4bf63753432d3387458bf31"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b4242fc7f18c8bf5427f84d5afe2131c9b323a04",
- "reference": "b4242fc7f18c8bf5427f84d5afe2131c9b323a04",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/755b18859be26b90f4bf63753432d3387458bf31",
+ "reference": "755b18859be26b90f4bf63753432d3387458bf31",
"shasum": ""
},
"require": {
@@ -4694,20 +4694,20 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
- "time": "2020-03-18T07:51:32+00:00"
+ "time": "2020-03-30T10:09:30+00:00"
},
{
"name": "symfony/doctrine-bridge",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
- "reference": "57a825089b7a9851fe552b08ed83f7625352c9ab"
+ "reference": "7889c9df9fe4d95042c2f6e79901c9e6517343d9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/57a825089b7a9851fe552b08ed83f7625352c9ab",
- "reference": "57a825089b7a9851fe552b08ed83f7625352c9ab",
+ "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7889c9df9fe4d95042c2f6e79901c9e6517343d9",
+ "reference": "7889c9df9fe4d95042c2f6e79901c9e6517343d9",
"shasum": ""
},
"require": {
@@ -4788,20 +4788,20 @@
],
"description": "Symfony Doctrine Bridge",
"homepage": "https://symfony.com",
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/dotenv",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
- "reference": "9bba981ecb1f57c04520d4165b3e6a17ac49319f"
+ "reference": "a78e698cfb8aca8ef6814639eb5ffc17180a4326"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dotenv/zipball/9bba981ecb1f57c04520d4165b3e6a17ac49319f",
- "reference": "9bba981ecb1f57c04520d4165b3e6a17ac49319f",
+ "url": "https://api.github.com/repos/symfony/dotenv/zipball/a78e698cfb8aca8ef6814639eb5ffc17180a4326",
+ "reference": "a78e698cfb8aca8ef6814639eb5ffc17180a4326",
"shasum": ""
},
"require": {
@@ -4845,20 +4845,20 @@
"env",
"environment"
],
- "time": "2020-02-29T10:04:02+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "3727fe33f578a547e0acecd4034401c99c8ce013"
+ "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/3727fe33f578a547e0acecd4034401c99c8ce013",
- "reference": "3727fe33f578a547e0acecd4034401c99c8ce013",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/7e9828fc98aa1cf27b422fe478a84f5b0abb7358",
+ "reference": "7e9828fc98aa1cf27b422fe478a84f5b0abb7358",
"shasum": ""
},
"require": {
@@ -4901,20 +4901,20 @@
],
"description": "Symfony ErrorHandler Component",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-30T14:07:33+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "cf57788d1ca64ee7e689698dc0295d25c9fe3780"
+ "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cf57788d1ca64ee7e689698dc0295d25c9fe3780",
- "reference": "cf57788d1ca64ee7e689698dc0295d25c9fe3780",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abc8e3618bfdb55e44c8c6a00abd333f831bbfed",
+ "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed",
"shasum": ""
},
"require": {
@@ -4971,7 +4971,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -5033,16 +5033,16 @@
},
{
"name": "symfony/expression-language",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
- "reference": "208ceff59b98b8b38bd4426df49be697a8582240"
+ "reference": "c4171e39e6cfc72e2bedb44922310d7d2bd2ab91"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/expression-language/zipball/208ceff59b98b8b38bd4426df49be697a8582240",
- "reference": "208ceff59b98b8b38bd4426df49be697a8582240",
+ "url": "https://api.github.com/repos/symfony/expression-language/zipball/c4171e39e6cfc72e2bedb44922310d7d2bd2ab91",
+ "reference": "c4171e39e6cfc72e2bedb44922310d7d2bd2ab91",
"shasum": ""
},
"require": {
@@ -5080,20 +5080,20 @@
],
"description": "Symfony ExpressionLanguage Component",
"homepage": "https://symfony.com",
- "time": "2020-03-15T10:05:03+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "6d4fdf28187250f671c1edc9cf921ebfb7fe3809"
+ "reference": "fe297193bf2e6866ed900ed2d5869362768df6a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/6d4fdf28187250f671c1edc9cf921ebfb7fe3809",
- "reference": "6d4fdf28187250f671c1edc9cf921ebfb7fe3809",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/fe297193bf2e6866ed900ed2d5869362768df6a7",
+ "reference": "fe297193bf2e6866ed900ed2d5869362768df6a7",
"shasum": ""
},
"require": {
@@ -5130,20 +5130,20 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T08:56:54+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/finder",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357"
+ "reference": "5729f943f9854c5781984ed4907bbb817735776b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
- "reference": "ea69c129aed9fdeca781d4b77eb20b62cf5d5357",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b",
+ "reference": "5729f943f9854c5781984ed4907bbb817735776b",
"shasum": ""
},
"require": {
@@ -5179,7 +5179,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2020-02-14T07:42:58+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/flex",
@@ -5232,16 +5232,16 @@
},
{
"name": "symfony/form",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
- "reference": "3a287b3b5ecd1a534af62b8b530f181e636e72c9"
+ "reference": "6dfd2d0f47b9a4abee73807f7172e2b8a0006571"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/form/zipball/3a287b3b5ecd1a534af62b8b530f181e636e72c9",
- "reference": "3a287b3b5ecd1a534af62b8b530f181e636e72c9",
+ "url": "https://api.github.com/repos/symfony/form/zipball/6dfd2d0f47b9a4abee73807f7172e2b8a0006571",
+ "reference": "6dfd2d0f47b9a4abee73807f7172e2b8a0006571",
"shasum": ""
},
"require": {
@@ -5312,20 +5312,20 @@
],
"description": "Symfony Form Component",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/framework-bundle",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
- "reference": "f0ef822516463bef83625e7d33f8e047093f310e"
+ "reference": "80cdda836cfbe3ccb2bdd4a974f632473f0807a6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f0ef822516463bef83625e7d33f8e047093f310e",
- "reference": "f0ef822516463bef83625e7d33f8e047093f310e",
+ "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/80cdda836cfbe3ccb2bdd4a974f632473f0807a6",
+ "reference": "80cdda836cfbe3ccb2bdd4a974f632473f0807a6",
"shasum": ""
},
"require": {
@@ -5443,20 +5443,20 @@
],
"description": "Symfony FrameworkBundle",
"homepage": "https://symfony.com",
- "time": "2020-03-19T20:46:03+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "symfony/http-client",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "d24b4bbd62e73dc274cd7c4258e6d7a70167cb31"
+ "reference": "9a8f5c968dc68d58044f8e9ff39d03074489b55d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/d24b4bbd62e73dc274cd7c4258e6d7a70167cb31",
- "reference": "d24b4bbd62e73dc274cd7c4258e6d7a70167cb31",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/9a8f5c968dc68d58044f8e9ff39d03074489b55d",
+ "reference": "9a8f5c968dc68d58044f8e9ff39d03074489b55d",
"shasum": ""
},
"require": {
@@ -5511,7 +5511,7 @@
],
"description": "Symfony HttpClient component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T16:13:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -5572,16 +5572,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "0a3b7711229f816a06fac805f4ed4a8f4641c719"
+ "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/0a3b7711229f816a06fac805f4ed4a8f4641c719",
- "reference": "0a3b7711229f816a06fac805f4ed4a8f4641c719",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62f92509c9abfd1f73e17b8cf1b72c0bdac6611b",
+ "reference": "62f92509c9abfd1f73e17b8cf1b72c0bdac6611b",
"shasum": ""
},
"require": {
@@ -5623,20 +5623,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-30T14:07:33+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "02ee1d0d616b031fb48a1c9c3e5dc092dd7e448d"
+ "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/02ee1d0d616b031fb48a1c9c3e5dc092dd7e448d",
- "reference": "02ee1d0d616b031fb48a1c9c3e5dc092dd7e448d",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f356a489e51856b99908005eb7f2c51a1dfc95dc",
+ "reference": "f356a489e51856b99908005eb7f2c51a1dfc95dc",
"shasum": ""
},
"require": {
@@ -5713,20 +5713,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T08:32:28+00:00"
+ "time": "2020-03-30T14:59:15+00:00"
},
{
"name": "symfony/inflector",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/inflector.git",
- "reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1"
+ "reference": "53cfa47fe9142f39b5605df67bada3893dd4f46c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/inflector/zipball/f419ab2853cc00471ffd7fc18e544b5f5a90adb1",
- "reference": "f419ab2853cc00471ffd7fc18e544b5f5a90adb1",
+ "url": "https://api.github.com/repos/symfony/inflector/zipball/53cfa47fe9142f39b5605df67bada3893dd4f46c",
+ "reference": "53cfa47fe9142f39b5605df67bada3893dd4f46c",
"shasum": ""
},
"require": {
@@ -5771,20 +5771,20 @@
"symfony",
"words"
],
- "time": "2020-01-04T13:00:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/intl",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
- "reference": "345aa50278b9d02a9cc75a5f19596c21646aa8d8"
+ "reference": "63238a53b1cf0cd3e2b0b22cabc7c0b6f3fd4562"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/345aa50278b9d02a9cc75a5f19596c21646aa8d8",
- "reference": "345aa50278b9d02a9cc75a5f19596c21646aa8d8",
+ "url": "https://api.github.com/repos/symfony/intl/zipball/63238a53b1cf0cd3e2b0b22cabc7c0b6f3fd4562",
+ "reference": "63238a53b1cf0cd3e2b0b22cabc7c0b6f3fd4562",
"shasum": ""
},
"require": {
@@ -5846,20 +5846,20 @@
"l10n",
"localization"
],
- "time": "2020-03-16T16:04:53+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/mailer",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "b7c9b94a8bda86ca0499482ad4e5fb824aede8d8"
+ "reference": "449856e70ccb1c91ebd75d6fb287ffe21be9fafe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/b7c9b94a8bda86ca0499482ad4e5fb824aede8d8",
- "reference": "b7c9b94a8bda86ca0499482ad4e5fb824aede8d8",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/449856e70ccb1c91ebd75d6fb287ffe21be9fafe",
+ "reference": "449856e70ccb1c91ebd75d6fb287ffe21be9fafe",
"shasum": ""
},
"require": {
@@ -5914,20 +5914,20 @@
],
"description": "Symfony Mailer Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/mime",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "f6be9d809d805ab5bdb12f2d5843ba2c78533c7e"
+ "reference": "6dde9dc70155e91b850b1d009d1f841c54bc4aba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/f6be9d809d805ab5bdb12f2d5843ba2c78533c7e",
- "reference": "f6be9d809d805ab5bdb12f2d5843ba2c78533c7e",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/6dde9dc70155e91b850b1d009d1f841c54bc4aba",
+ "reference": "6dde9dc70155e91b850b1d009d1f841c54bc4aba",
"shasum": ""
},
"require": {
@@ -5976,20 +5976,20 @@
"mime",
"mime-type"
],
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/monolog-bridge",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
- "reference": "3386058348b9df26122cc42abc60201c59e8dda6"
+ "reference": "2df4a774d99ae6e87c8b67891430f935312be412"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/3386058348b9df26122cc42abc60201c59e8dda6",
- "reference": "3386058348b9df26122cc42abc60201c59e8dda6",
+ "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/2df4a774d99ae6e87c8b67891430f935312be412",
+ "reference": "2df4a774d99ae6e87c8b67891430f935312be412",
"shasum": ""
},
"require": {
@@ -6043,7 +6043,7 @@
],
"description": "Symfony Monolog Bridge",
"homepage": "https://symfony.com",
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/monolog-bundle",
@@ -6110,16 +6110,16 @@
},
{
"name": "symfony/options-resolver",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0"
+ "reference": "9072131b5e6e21203db3249c7db26b52897bc73e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0",
- "reference": "9a02d6662660fe7bfadad63b5f0b0718d4c8b6b0",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9072131b5e6e21203db3249c7db26b52897bc73e",
+ "reference": "9072131b5e6e21203db3249c7db26b52897bc73e",
"shasum": ""
},
"require": {
@@ -6160,7 +6160,7 @@
"configuration",
"options"
],
- "time": "2020-01-04T13:00:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/orm-pack",
@@ -6541,16 +6541,16 @@
},
{
"name": "symfony/process",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "b9863d0f7b684d7c4c13e665325b5ff047de0aee"
+ "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/b9863d0f7b684d7c4c13e665325b5ff047de0aee",
- "reference": "b9863d0f7b684d7c4c13e665325b5ff047de0aee",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3e40e87a20eaf83a1db825e1fa5097ae89042db3",
+ "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3",
"shasum": ""
},
"require": {
@@ -6586,20 +6586,20 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/property-access",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "a35574237897b511e9a30a7bd161d49ec8999661"
+ "reference": "75cbf0f388d82685ce06515951397bc1370901d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/a35574237897b511e9a30a7bd161d49ec8999661",
- "reference": "a35574237897b511e9a30a7bd161d49ec8999661",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/75cbf0f388d82685ce06515951397bc1370901d7",
+ "reference": "75cbf0f388d82685ce06515951397bc1370901d7",
"shasum": ""
},
"require": {
@@ -6653,20 +6653,20 @@
"property path",
"reflection"
],
- "time": "2020-03-16T16:04:53+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/property-info",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
- "reference": "e6355ba81c738be31c3c3b3cd7929963f98da576"
+ "reference": "b6baecd501adec01a9d68f9c90b83659656065af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-info/zipball/e6355ba81c738be31c3c3b3cd7929963f98da576",
- "reference": "e6355ba81c738be31c3c3b3cd7929963f98da576",
+ "url": "https://api.github.com/repos/symfony/property-info/zipball/b6baecd501adec01a9d68f9c90b83659656065af",
+ "reference": "b6baecd501adec01a9d68f9c90b83659656065af",
"shasum": ""
},
"require": {
@@ -6729,20 +6729,20 @@
"type",
"validator"
],
- "time": "2020-01-04T13:00:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/routing",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "bd92312650007d29bbabf00795c591b975a0b9a6"
+ "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/bd92312650007d29bbabf00795c591b975a0b9a6",
- "reference": "bd92312650007d29bbabf00795c591b975a0b9a6",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/0f562fa613e288d7dbae6c63abbc9b33ed75a8f8",
+ "reference": "0f562fa613e288d7dbae6c63abbc9b33ed75a8f8",
"shasum": ""
},
"require": {
@@ -6805,20 +6805,20 @@
"uri",
"url"
],
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "symfony/security-bundle",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
- "reference": "3f6e6903960e488dd20b884f13a2ad1b8dff0ac6"
+ "reference": "1c317cd29a75e4806479241ffd31d8035e243420"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-bundle/zipball/3f6e6903960e488dd20b884f13a2ad1b8dff0ac6",
- "reference": "3f6e6903960e488dd20b884f13a2ad1b8dff0ac6",
+ "url": "https://api.github.com/repos/symfony/security-bundle/zipball/1c317cd29a75e4806479241ffd31d8035e243420",
+ "reference": "1c317cd29a75e4806479241ffd31d8035e243420",
"shasum": ""
},
"require": {
@@ -6888,20 +6888,20 @@
],
"description": "Symfony SecurityBundle",
"homepage": "https://symfony.com",
- "time": "2020-03-17T19:48:51+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "symfony/security-core",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
- "reference": "77ba37225ddbcc6b34d94a885ad613210d52dd02"
+ "reference": "e99ad8bcd5d1202a1cff7b3e0e76d9077d81cbe6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-core/zipball/77ba37225ddbcc6b34d94a885ad613210d52dd02",
- "reference": "77ba37225ddbcc6b34d94a885ad613210d52dd02",
+ "url": "https://api.github.com/repos/symfony/security-core/zipball/e99ad8bcd5d1202a1cff7b3e0e76d9077d81cbe6",
+ "reference": "e99ad8bcd5d1202a1cff7b3e0e76d9077d81cbe6",
"shasum": ""
},
"require": {
@@ -6961,20 +6961,20 @@
],
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
- "time": "2020-03-20T15:02:37+00:00"
+ "time": "2020-03-30T11:51:53+00:00"
},
{
"name": "symfony/security-csrf",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
- "reference": "da4664d94164e2b50ce75f2453724c6c33222505"
+ "reference": "286a71ff176e1b0dd071f0e73dcec0970a56634b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-csrf/zipball/da4664d94164e2b50ce75f2453724c6c33222505",
- "reference": "da4664d94164e2b50ce75f2453724c6c33222505",
+ "url": "https://api.github.com/repos/symfony/security-csrf/zipball/286a71ff176e1b0dd071f0e73dcec0970a56634b",
+ "reference": "286a71ff176e1b0dd071f0e73dcec0970a56634b",
"shasum": ""
},
"require": {
@@ -7020,20 +7020,20 @@
],
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
- "time": "2020-01-04T13:00:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/security-guard",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-guard.git",
- "reference": "bf61166227b28b642055364e6feaaec7d1199dc8"
+ "reference": "606a741712d8adb49aee9b59d57010724db06797"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-guard/zipball/bf61166227b28b642055364e6feaaec7d1199dc8",
- "reference": "bf61166227b28b642055364e6feaaec7d1199dc8",
+ "url": "https://api.github.com/repos/symfony/security-guard/zipball/606a741712d8adb49aee9b59d57010724db06797",
+ "reference": "606a741712d8adb49aee9b59d57010724db06797",
"shasum": ""
},
"require": {
@@ -7074,28 +7074,28 @@
],
"description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/security-http",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
- "reference": "dcf596a85d7759a1b82ab844a51a191a409ee306"
+ "reference": "b413064160255c31077bb082d25b7bd89275971b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-http/zipball/dcf596a85d7759a1b82ab844a51a191a409ee306",
- "reference": "dcf596a85d7759a1b82ab844a51a191a409ee306",
+ "url": "https://api.github.com/repos/symfony/security-http/zipball/b413064160255c31077bb082d25b7bd89275971b",
+ "reference": "b413064160255c31077bb082d25b7bd89275971b",
"shasum": ""
},
"require": {
"php": "^7.1.3",
- "symfony/http-foundation": "^3.4|^4.0|^5.0",
+ "symfony/http-foundation": "^3.4.40|^4.4.7|^5.0.7",
"symfony/http-kernel": "^4.4",
"symfony/property-access": "^3.4|^4.0|^5.0",
- "symfony/security-core": "^4.4"
+ "symfony/security-core": "^4.4.7"
},
"conflict": {
"symfony/event-dispatcher": ">=5",
@@ -7140,20 +7140,20 @@
],
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-30T11:51:53+00:00"
},
{
"name": "symfony/serializer",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
- "reference": "f1b7a1d95537d6e3c1e141dddef9831165e1b822"
+ "reference": "2a508a535f2323defb325cf28301064fcbb061b9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/serializer/zipball/f1b7a1d95537d6e3c1e141dddef9831165e1b822",
- "reference": "f1b7a1d95537d6e3c1e141dddef9831165e1b822",
+ "url": "https://api.github.com/repos/symfony/serializer/zipball/2a508a535f2323defb325cf28301064fcbb061b9",
+ "reference": "2a508a535f2323defb325cf28301064fcbb061b9",
"shasum": ""
},
"require": {
@@ -7222,7 +7222,7 @@
],
"description": "Symfony Serializer Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/serializer-pack",
@@ -7314,16 +7314,16 @@
},
{
"name": "symfony/stopwatch",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "5f03e4ceeab7473c15d95c7a3c2eddc870bd0637"
+ "reference": "e0324d3560e4128270e3f08617480d9233d81cfc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5f03e4ceeab7473c15d95c7a3c2eddc870bd0637",
- "reference": "5f03e4ceeab7473c15d95c7a3c2eddc870bd0637",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e0324d3560e4128270e3f08617480d9233d81cfc",
+ "reference": "e0324d3560e4128270e3f08617480d9233d81cfc",
"shasum": ""
},
"require": {
@@ -7360,20 +7360,20 @@
],
"description": "Symfony Stopwatch Component",
"homepage": "https://symfony.com",
- "time": "2020-03-17T19:51:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/templating",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/templating.git",
- "reference": "bc20806de1332fedf2906aac04714818d49bdf93"
+ "reference": "d65ba8cd13339b692f709ea36625851de218c4dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/templating/zipball/bc20806de1332fedf2906aac04714818d49bdf93",
- "reference": "bc20806de1332fedf2906aac04714818d49bdf93",
+ "url": "https://api.github.com/repos/symfony/templating/zipball/d65ba8cd13339b692f709ea36625851de218c4dc",
+ "reference": "d65ba8cd13339b692f709ea36625851de218c4dc",
"shasum": ""
},
"require": {
@@ -7416,20 +7416,20 @@
],
"description": "Symfony Templating Component",
"homepage": "https://symfony.com",
- "time": "2020-03-15T10:05:03+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/translation",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "6617bb1548cec764770b719e317299a0270f4c5f"
+ "reference": "4e54d336f2eca5facad449d0b0118bb449375b76"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/6617bb1548cec764770b719e317299a0270f4c5f",
- "reference": "6617bb1548cec764770b719e317299a0270f4c5f",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/4e54d336f2eca5facad449d0b0118bb449375b76",
+ "reference": "4e54d336f2eca5facad449d0b0118bb449375b76",
"shasum": ""
},
"require": {
@@ -7492,7 +7492,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2020-03-17T19:51:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -7553,16 +7553,16 @@
},
{
"name": "symfony/twig-bridge",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
- "reference": "bd446d8e64ef049dd3afc090794e5b7e4f17d272"
+ "reference": "bef4da6724c5a89bb3408d3bc785be7cd5b9efed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bd446d8e64ef049dd3afc090794e5b7e4f17d272",
- "reference": "bd446d8e64ef049dd3afc090794e5b7e4f17d272",
+ "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bef4da6724c5a89bb3408d3bc785be7cd5b9efed",
+ "reference": "bef4da6724c5a89bb3408d3bc785be7cd5b9efed",
"shasum": ""
},
"require": {
@@ -7652,20 +7652,20 @@
],
"description": "Symfony Twig Bridge",
"homepage": "https://symfony.com",
- "time": "2020-03-17T19:51:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/twig-bundle",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
- "reference": "0b33e802fcd9a10287631d98962ca9164c4ccd45"
+ "reference": "44e3e82867bf4dcf52732dd7e0c83826f9da1095"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/0b33e802fcd9a10287631d98962ca9164c4ccd45",
- "reference": "0b33e802fcd9a10287631d98962ca9164c4ccd45",
+ "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/44e3e82867bf4dcf52732dd7e0c83826f9da1095",
+ "reference": "44e3e82867bf4dcf52732dd7e0c83826f9da1095",
"shasum": ""
},
"require": {
@@ -7727,20 +7727,20 @@
],
"description": "Symfony TwigBundle",
"homepage": "https://symfony.com",
- "time": "2020-03-17T19:51:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/validator",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
- "reference": "b0e5edb15ec6b0a03aea67ad0bc79edea0091eef"
+ "reference": "2bf1de9d5cac5e5ebc159203c53dcf5b2058d340"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/validator/zipball/b0e5edb15ec6b0a03aea67ad0bc79edea0091eef",
- "reference": "b0e5edb15ec6b0a03aea67ad0bc79edea0091eef",
+ "url": "https://api.github.com/repos/symfony/validator/zipball/2bf1de9d5cac5e5ebc159203c53dcf5b2058d340",
+ "reference": "2bf1de9d5cac5e5ebc159203c53dcf5b2058d340",
"shasum": ""
},
"require": {
@@ -7820,20 +7820,20 @@
],
"description": "Symfony Validator Component",
"homepage": "https://symfony.com",
- "time": "2020-03-23T12:37:11+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "6dae4692ac91230b33b70d9a48882ff5c838d67a"
+ "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6dae4692ac91230b33b70d9a48882ff5c838d67a",
- "reference": "6dae4692ac91230b33b70d9a48882ff5c838d67a",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5a0c2d93006131a36cf6f767d10e2ca8333b0d4a",
+ "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a",
"shasum": ""
},
"require": {
@@ -7896,20 +7896,20 @@
"debug",
"dump"
],
- "time": "2020-03-18T07:15:43+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "982ddfd0d7aeb2be0227c242399c3f29e0403266"
+ "reference": "6e4939b084defee0ab60a21e6a02e3a198afd91f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/982ddfd0d7aeb2be0227c242399c3f29e0403266",
- "reference": "982ddfd0d7aeb2be0227c242399c3f29e0403266",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/6e4939b084defee0ab60a21e6a02e3a198afd91f",
+ "reference": "6e4939b084defee0ab60a21e6a02e3a198afd91f",
"shasum": ""
},
"require": {
@@ -7956,20 +7956,20 @@
"instantiate",
"serialize"
],
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/web-link",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-link.git",
- "reference": "fda0ec7e0999e52e7b6223f59c5c00365f10f88c"
+ "reference": "9ec692b342855335f3f4e77753ad71f85c6038f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/web-link/zipball/fda0ec7e0999e52e7b6223f59c5c00365f10f88c",
- "reference": "fda0ec7e0999e52e7b6223f59c5c00365f10f88c",
+ "url": "https://api.github.com/repos/symfony/web-link/zipball/9ec692b342855335f3f4e77753ad71f85c6038f8",
+ "reference": "9ec692b342855335f3f4e77753ad71f85c6038f8",
"shasum": ""
},
"require": {
@@ -8032,7 +8032,7 @@
"psr13",
"push"
],
- "time": "2020-03-17T19:51:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/webpack-encore-bundle",
@@ -8089,16 +8089,16 @@
},
{
"name": "symfony/yaml",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "43d7a46b1f80b4fd2ecfac4a9a4cc1f22d029fbb"
+ "reference": "ef166890d821518106da3560086bfcbeb4fadfec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/43d7a46b1f80b4fd2ecfac4a9a4cc1f22d029fbb",
- "reference": "43d7a46b1f80b4fd2ecfac4a9a4cc1f22d029fbb",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/ef166890d821518106da3560086bfcbeb4fadfec",
+ "reference": "ef166890d821518106da3560086bfcbeb4fadfec",
"shasum": ""
},
"require": {
@@ -8144,7 +8144,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T08:56:54+00:00"
+ "time": "2020-03-30T11:41:10+00:00"
},
{
"name": "thecodingmachine/safe",
@@ -10465,18 +10465,67 @@
"description": "Symfony Framework extensions and rules for PHPStan",
"time": "2020-01-22T10:19:41+00:00"
},
+ {
+ "name": "psalm/plugin-symfony",
+ "version": "v1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psalm/psalm-plugin-symfony.git",
+ "reference": "c2b2dd4ae70bf269023e22efd15b7b31f7efe51d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psalm/psalm-plugin-symfony/zipball/c2b2dd4ae70bf269023e22efd15b7b31f7efe51d",
+ "reference": "c2b2dd4ae70bf269023e22efd15b7b31f7efe51d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "php": "^7.1",
+ "symfony/framework-bundle": "^3.0 || ^4.0 || ^5.0",
+ "vimeo/psalm": "^3.7"
+ },
+ "require-dev": {
+ "codeception/base": "^2.5",
+ "phpunit/phpunit": "~7.5",
+ "weirdan/codeception-psalm-module": "^0.2.2"
+ },
+ "type": "psalm-plugin",
+ "extra": {
+ "psalm": {
+ "pluginClass": "Psalm\\SymfonyPsalmPlugin\\Plugin"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psalm\\SymfonyPsalmPlugin\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Farhad Safarov",
+ "email": "farhad.safarov@gmail.com"
+ }
+ ],
+ "description": "Psalm Plugin for Symfony",
+ "time": "2020-03-15T10:38:16+00:00"
+ },
{
"name": "roave/security-advisories",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
- "reference": "b81a572cb1acffadea621e55c95af4ba94a91624"
+ "reference": "abf855b59c93a92efbebc39107e2a5a6215a0488"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b81a572cb1acffadea621e55c95af4ba94a91624",
- "reference": "b81a572cb1acffadea621e55c95af4ba94a91624",
+ "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/abf855b59c93a92efbebc39107e2a5a6215a0488",
+ "reference": "abf855b59c93a92efbebc39107e2a5a6215a0488",
"shasum": ""
},
"conflict": {
@@ -10631,9 +10680,10 @@
"symbiote/silverstripe-versionedfiles": "<=2.0.3",
"symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8",
"symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
+ "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4",
"symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1",
"symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
- "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8",
+ "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7",
"symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8",
"symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
"symfony/mime": ">=4.3,<4.3.8",
@@ -10642,14 +10692,14 @@
"symfony/polyfill-php55": ">=1,<1.10",
"symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
"symfony/routing": ">=2,<2.0.19",
- "symfony/security": ">=2,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
+ "symfony/security": ">=2,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=4.4,<4.4.7|>=5,<5.0.7",
"symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11",
"symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.37|>=3,<3.3.17|>=3.4,<3.4.7|>=4,<4.0.7",
"symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11",
"symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11",
- "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8",
+ "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7",
"symfony/serializer": ">=2,<2.0.11",
- "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8",
+ "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7",
"symfony/translation": ">=2,<2.0.17",
"symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
"symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8",
@@ -10726,7 +10776,7 @@
}
],
"description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
- "time": "2020-03-15T11:13:32+00:00"
+ "time": "2020-03-30T15:16:05+00:00"
},
{
"name": "sebastian/diff",
@@ -10786,33 +10836,38 @@
},
{
"name": "slevomat/coding-standard",
- "version": "6.1.5",
+ "version": "6.2.0",
"source": {
"type": "git",
"url": "https://github.com/slevomat/coding-standard.git",
- "reference": "d767b5e302ff096327466c97fec3cb57f6d16086"
+ "reference": "c4bf9cad66da885cc843cc24d708661d9d8fbb95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/d767b5e302ff096327466c97fec3cb57f6d16086",
- "reference": "d767b5e302ff096327466c97fec3cb57f6d16086",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/c4bf9cad66da885cc843cc24d708661d9d8fbb95",
+ "reference": "c4bf9cad66da885cc843cc24d708661d9d8fbb95",
"shasum": ""
},
"require": {
"php": "^7.1",
- "phpstan/phpdoc-parser": "0.3.5 - 0.4.3",
+ "phpstan/phpdoc-parser": "0.4.0 - 0.4.3",
"squizlabs/php_codesniffer": "^3.5.4"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "0.6.2",
- "grogy/php-parallel-lint": "1.1.0",
"phing/phing": "2.16.3",
- "phpstan/phpstan": "0.11.19|0.12.9",
- "phpstan/phpstan-phpunit": "0.11.2|0.12.6",
- "phpstan/phpstan-strict-rules": "0.11.1|0.12.2",
- "phpunit/phpunit": "7.5.18|8.5.2"
+ "php-parallel-lint/php-parallel-lint": "1.1.0",
+ "phpstan/phpstan": "0.12.18",
+ "phpstan/phpstan-phpunit": "0.12.6",
+ "phpstan/phpstan-strict-rules": "0.12.2",
+ "phpunit/phpunit": "7.5.20|8.5.2|9.0.1"
},
"type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"SlevomatCodingStandard\\": "SlevomatCodingStandard"
@@ -10823,7 +10878,7 @@
"MIT"
],
"description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
- "time": "2020-02-05T21:17:34+00:00"
+ "time": "2020-03-28T22:04:31+00:00"
},
{
"name": "squizlabs/php_codesniffer",
@@ -10878,16 +10933,16 @@
},
{
"name": "symfony/browser-kit",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "4e9a171559f5a9018c90ba9e85b4084d4e045186"
+ "reference": "e4b0dc1b100bf75b5717c5b451397f230a618a42"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/4e9a171559f5a9018c90ba9e85b4084d4e045186",
- "reference": "4e9a171559f5a9018c90ba9e85b4084d4e045186",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e4b0dc1b100bf75b5717c5b451397f230a618a42",
+ "reference": "e4b0dc1b100bf75b5717c5b451397f230a618a42",
"shasum": ""
},
"require": {
@@ -10933,20 +10988,20 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
- "time": "2020-03-15T10:05:03+00:00"
+ "time": "2020-03-28T10:15:50+00:00"
},
{
"name": "symfony/debug-bundle",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
- "reference": "570c3c69e69f7709f184ee3acbebe45e5ff1adce"
+ "reference": "dc847e4971b9f76b30e02d421b303d349d5aeed2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/570c3c69e69f7709f184ee3acbebe45e5ff1adce",
- "reference": "570c3c69e69f7709f184ee3acbebe45e5ff1adce",
+ "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/dc847e4971b9f76b30e02d421b303d349d5aeed2",
+ "reference": "dc847e4971b9f76b30e02d421b303d349d5aeed2",
"shasum": ""
},
"require": {
@@ -10999,7 +11054,7 @@
],
"description": "Symfony DebugBundle",
"homepage": "https://symfony.com",
- "time": "2020-01-04T13:00:46+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symfony/debug-pack",
@@ -11033,16 +11088,16 @@
},
{
"name": "symfony/dom-crawler",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "7e7c7957f6d53757d36b61a1f7408ef0b6683040"
+ "reference": "4d0fb3374324071ecdd94898367a3fa4b5563162"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7e7c7957f6d53757d36b61a1f7408ef0b6683040",
- "reference": "7e7c7957f6d53757d36b61a1f7408ef0b6683040",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4d0fb3374324071ecdd94898367a3fa4b5563162",
+ "reference": "4d0fb3374324071ecdd94898367a3fa4b5563162",
"shasum": ""
},
"require": {
@@ -11090,7 +11145,7 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2020-03-16T11:24:17+00:00"
+ "time": "2020-03-29T19:12:22+00:00"
},
{
"name": "symfony/maker-bundle",
@@ -11162,16 +11217,16 @@
},
{
"name": "symfony/phpunit-bridge",
- "version": "v5.0.6",
+ "version": "v5.0.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
- "reference": "cb3f0f5bf8776bccaf8d61e4c91a573db58a19b6"
+ "reference": "0258b43a94972abf1ee99ce2221359f8ac2a17fd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cb3f0f5bf8776bccaf8d61e4c91a573db58a19b6",
- "reference": "cb3f0f5bf8776bccaf8d61e4c91a573db58a19b6",
+ "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/0258b43a94972abf1ee99ce2221359f8ac2a17fd",
+ "reference": "0258b43a94972abf1ee99ce2221359f8ac2a17fd",
"shasum": ""
},
"require": {
@@ -11223,7 +11278,7 @@
],
"description": "Symfony PHPUnit Bridge",
"homepage": "https://symfony.com",
- "time": "2020-03-15T14:33:06+00:00"
+ "time": "2020-03-27T16:56:45+00:00"
},
{
"name": "symfony/profiler-pack",
@@ -11283,16 +11338,16 @@
},
{
"name": "symfony/web-profiler-bundle",
- "version": "v4.4.6",
+ "version": "v4.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
- "reference": "76c21d0137f0b9c6bbbc93ac2672cadfdf2e625a"
+ "reference": "4c432f5c21c700270819daacf95323302fa8f004"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/76c21d0137f0b9c6bbbc93ac2672cadfdf2e625a",
- "reference": "76c21d0137f0b9c6bbbc93ac2672cadfdf2e625a",
+ "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4c432f5c21c700270819daacf95323302fa8f004",
+ "reference": "4c432f5c21c700270819daacf95323302fa8f004",
"shasum": ""
},
"require": {
@@ -11345,7 +11400,7 @@
],
"description": "Symfony WebProfilerBundle",
"homepage": "https://symfony.com",
- "time": "2020-02-14T07:42:58+00:00"
+ "time": "2020-03-27T16:54:36+00:00"
},
{
"name": "symplify/auto-bind-parameter",
@@ -11353,12 +11408,12 @@
"source": {
"type": "git",
"url": "https://github.com/symplify/auto-bind-parameter.git",
- "reference": "8b85fc72fddc953feda56c3d06252eb1fafb21ef"
+ "reference": "ac4d0fff0159becdf0044641b9eb48e89afe1480"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symplify/auto-bind-parameter/zipball/8b85fc72fddc953feda56c3d06252eb1fafb21ef",
- "reference": "8b85fc72fddc953feda56c3d06252eb1fafb21ef",
+ "url": "https://api.github.com/repos/symplify/auto-bind-parameter/zipball/ac4d0fff0159becdf0044641b9eb48e89afe1480",
+ "reference": "ac4d0fff0159becdf0044641b9eb48e89afe1480",
"shasum": ""
},
"require": {
@@ -11395,12 +11450,12 @@
"source": {
"type": "git",
"url": "https://github.com/symplify/autowire-array-parameter.git",
- "reference": "53ae1541e9eca16bd5bae95d627a442092933585"
+ "reference": "e36a0d7e2e4b0a3764c192ac9cca1b2860255eda"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/53ae1541e9eca16bd5bae95d627a442092933585",
- "reference": "53ae1541e9eca16bd5bae95d627a442092933585",
+ "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/e36a0d7e2e4b0a3764c192ac9cca1b2860255eda",
+ "reference": "e36a0d7e2e4b0a3764c192ac9cca1b2860255eda",
"shasum": ""
},
"require": {
@@ -11437,12 +11492,12 @@
"source": {
"type": "git",
"url": "https://github.com/symplify/coding-standard.git",
- "reference": "084c7ba3b6cc62f8a271da3a4192f663bc12ff2e"
+ "reference": "3eebdd4e08ebac565461a06c29e28198996bf1c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symplify/coding-standard/zipball/084c7ba3b6cc62f8a271da3a4192f663bc12ff2e",
- "reference": "084c7ba3b6cc62f8a271da3a4192f663bc12ff2e",
+ "url": "https://api.github.com/repos/symplify/coding-standard/zipball/3eebdd4e08ebac565461a06c29e28198996bf1c4",
+ "reference": "3eebdd4e08ebac565461a06c29e28198996bf1c4",
"shasum": ""
},
"require": {
@@ -11558,12 +11613,12 @@
"source": {
"type": "git",
"url": "https://github.com/symplify/package-builder.git",
- "reference": "9d9b5f8f07058aaeb59ba53bfae52226b3b47236"
+ "reference": "1cddbbfa94c1d78a380c6b3996d09eb7c5710560"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symplify/package-builder/zipball/9d9b5f8f07058aaeb59ba53bfae52226b3b47236",
- "reference": "9d9b5f8f07058aaeb59ba53bfae52226b3b47236",
+ "url": "https://api.github.com/repos/symplify/package-builder/zipball/1cddbbfa94c1d78a380c6b3996d09eb7c5710560",
+ "reference": "1cddbbfa94c1d78a380c6b3996d09eb7c5710560",
"shasum": ""
},
"require": {
@@ -11604,12 +11659,12 @@
"source": {
"type": "git",
"url": "https://github.com/symplify/set-config-resolver.git",
- "reference": "561486147349cb07b5692708748ece68c31bf041"
+ "reference": "03f58a1cfcb0018c833a0b8d7210ebf652b5d3f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symplify/set-config-resolver/zipball/561486147349cb07b5692708748ece68c31bf041",
- "reference": "561486147349cb07b5692708748ece68c31bf041",
+ "url": "https://api.github.com/repos/symplify/set-config-resolver/zipball/03f58a1cfcb0018c833a0b8d7210ebf652b5d3f1",
+ "reference": "03f58a1cfcb0018c833a0b8d7210ebf652b5d3f1",
"shasum": ""
},
"require": {
@@ -11647,12 +11702,12 @@
"source": {
"type": "git",
"url": "https://github.com/symplify/smart-file-system.git",
- "reference": "9f6320c3b22c81e85f51aabf66c927bbf4d8c20f"
+ "reference": "d81f1b5ffa083713c49e0308e0f94be7ff4b55fc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/9f6320c3b22c81e85f51aabf66c927bbf4d8c20f",
- "reference": "9f6320c3b22c81e85f51aabf66c927bbf4d8c20f",
+ "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/d81f1b5ffa083713c49e0308e0f94be7ff4b55fc",
+ "reference": "d81f1b5ffa083713c49e0308e0f94be7ff4b55fc",
"shasum": ""
},
"require": {
diff --git a/config/packages/demo/doctrine.yaml b/config/packages/demo/doctrine.yaml
index 0a7c53b4..513704c8 100644
--- a/config/packages/demo/doctrine.yaml
+++ b/config/packages/demo/doctrine.yaml
@@ -2,26 +2,14 @@ doctrine:
orm:
auto_generate_proxy_classes: false
metadata_cache_driver:
- type: service
- id: doctrine.system_cache_provider
+ type: pool
+ pool: doctrine.system_cache_pool
query_cache_driver:
- type: service
- id: doctrine.system_cache_provider
+ type: pool
+ pool: doctrine.system_cache_pool
result_cache_driver:
- type: service
- id: doctrine.result_cache_provider
-
-services:
- doctrine.result_cache_provider:
- class: Symfony\Component\Cache\DoctrineProvider
- public: false
- arguments:
- - '@doctrine.result_cache_pool'
- doctrine.system_cache_provider:
- class: Symfony\Component\Cache\DoctrineProvider
- public: false
- arguments:
- - '@doctrine.system_cache_pool'
+ type: pool
+ pool: doctrine.result_cache_pool
framework:
cache:
@@ -29,4 +17,4 @@ framework:
doctrine.result_cache_pool:
adapter: cache.app
doctrine.system_cache_pool:
- adapter: cache.system
+ adapter: cache.system
\ No newline at end of file
diff --git a/config/packages/prod/doctrine.yaml b/config/packages/prod/doctrine.yaml
index 084f59a0..513704c8 100644
--- a/config/packages/prod/doctrine.yaml
+++ b/config/packages/prod/doctrine.yaml
@@ -17,4 +17,4 @@ framework:
doctrine.result_cache_pool:
adapter: cache.app
doctrine.system_cache_pool:
- adapter: cache.system
+ adapter: cache.system
\ No newline at end of file
diff --git a/config/packages/prod/webpack_encore.yaml b/config/packages/prod/webpack_encore.yaml
index 2b75ef57..12e23f97 100644
--- a/config/packages/prod/webpack_encore.yaml
+++ b/config/packages/prod/webpack_encore.yaml
@@ -4,4 +4,4 @@ webpack_encore:
cache: true
# Preload in production
- preload: false
\ No newline at end of file
+ preload: true
\ No newline at end of file
diff --git a/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml
index 1b405d71..e902208d 100644
--- a/config/packages/webpack_encore.yaml
+++ b/config/packages/webpack_encore.yaml
@@ -8,7 +8,7 @@ webpack_encore:
# crossorigin: 'anonymous'
# preload all rendered script and link tags automatically via the http2 Link header
- #preload: false
+ preload: false
# Throw an exception if the entrypoints.json file is missing or an entry is missing from the data
# strict_mode: false
diff --git a/config/permissions.yaml b/config/permissions.yaml
index fc315f7f..bd5b8181 100644
--- a/config/permissions.yaml
+++ b/config/permissions.yaml
@@ -187,6 +187,10 @@ perms: # Here comes a list with all Permission names (they have a perm_[name] co
label: "perm.revert_elements"
bit: 10
alsoSet: ["read", "edit", "create", "delete", "show_history"]
+ show_private:
+ label: "perm.attachment_show_private"
+ bit: 12
+ alsoSet: ["read"]
parts_order:
<<: *PART_ATTRIBUTE
diff --git a/config/services.yaml b/config/services.yaml
index 2b97c116..f5fa21a8 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -33,6 +33,8 @@ services:
bind:
bool $demo_mode: '%demo_mode%'
bool $gpdr_compliance : '%gpdr_compliance%'
+ bool $kernel_debug: '%kernel.debug%'
+ string $kernel_cache_dir: '%kernel.cache_dir%'
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
diff --git a/psalm.xml b/psalm.xml
index 42f355b2..24e2813d 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -1,5 +1,6 @@
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
diff --git a/src/Controller/AdminPages/BaseAdminController.php b/src/Controller/AdminPages/BaseAdminController.php
index 9fb05dea..5fc8c5a8 100644
--- a/src/Controller/AdminPages/BaseAdminController.php
+++ b/src/Controller/AdminPages/BaseAdminController.php
@@ -197,7 +197,7 @@ abstract class BaseAdminController extends AbstractController
//We can not use dynamic form events here, because the parent entity list is build from database!
$form = $this->createForm($this->form_class, $entity, [
'attachment_class' => $this->attachment_class,
- 'parameter_class' => $this->parameter_class
+ 'parameter_class' => $this->parameter_class,
]);
} elseif ($form->isSubmitted() && ! $form->isValid()) {
$this->addFlash('error', 'entity.edit_flash.invalid');
diff --git a/src/Controller/AdminPages/FootprintController.php b/src/Controller/AdminPages/FootprintController.php
index e60caba1..42a653ce 100644
--- a/src/Controller/AdminPages/FootprintController.php
+++ b/src/Controller/AdminPages/FootprintController.php
@@ -72,7 +72,7 @@ class FootprintController extends BaseAdminController
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
- public function delete(Request $request, Footprint $entity, StructuralElementRecursionHelper $recursionHelper)
+ public function delete(Request $request, Footprint $entity, StructuralElementRecursionHelper $recursionHelper): \Symfony\Component\HttpFoundation\RedirectResponse
{
return $this->_delete($request, $entity, $recursionHelper);
}
@@ -83,7 +83,7 @@ class FootprintController extends BaseAdminController
*
* @return Response
*/
- public function edit(Footprint $entity, Request $request, EntityManagerInterface $em, ?string $timestamp = null)
+ public function edit(Footprint $entity, Request $request, EntityManagerInterface $em, ?string $timestamp = null): Response
{
return $this->_edit($entity, $request, $em, $timestamp);
}
diff --git a/src/Controller/AttachmentFileController.php b/src/Controller/AttachmentFileController.php
index bf0ab2e3..b2683e12 100644
--- a/src/Controller/AttachmentFileController.php
+++ b/src/Controller/AttachmentFileController.php
@@ -69,6 +69,10 @@ class AttachmentFileController extends AbstractController
{
$this->denyAccessUnlessGranted('read', $attachment);
+ if ($attachment->isSecure()) {
+ $this->denyAccessUnlessGranted('show_private', $attachment);
+ }
+
if ($attachment->isExternal()) {
throw new RuntimeException('You can not download external attachments!');
}
@@ -97,6 +101,10 @@ class AttachmentFileController extends AbstractController
{
$this->denyAccessUnlessGranted('read', $attachment);
+ if ($attachment->isSecure()) {
+ $this->denyAccessUnlessGranted('show_private', $attachment);
+ }
+
if ($attachment->isExternal()) {
throw new RuntimeException('You can not download external attachments!');
}
diff --git a/src/Controller/LogController.php b/src/Controller/LogController.php
index 59759747..9c34be59 100644
--- a/src/Controller/LogController.php
+++ b/src/Controller/LogController.php
@@ -53,7 +53,6 @@ use App\Services\LogSystem\EventUndoHelper;
use App\Services\LogSystem\TimeTravel;
use Doctrine\ORM\EntityManagerInterface;
use Omines\DataTablesBundle\DataTableFactory;
-use phpDocumentor\Reflection\Element;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
@@ -100,7 +99,7 @@ class LogController extends AbstractController
/**
* @Route("/undo", name="log_undo", methods={"POST"})
*/
- public function undoRevertLog(Request $request, EventUndoHelper $eventUndoHelper)
+ public function undoRevertLog(Request $request, EventUndoHelper $eventUndoHelper): \Symfony\Component\HttpFoundation\RedirectResponse
{
$mode = EventUndoHelper::MODE_UNDO;
$id = $request->request->get('undo');
diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php
index c24c09ab..fcba0730 100644
--- a/src/Controller/PartController.php
+++ b/src/Controller/PartController.php
@@ -44,7 +44,12 @@ namespace App\Controller;
use App\DataTables\LogDataTable;
use App\Entity\Parts\Category;
+use App\Entity\Parts\Footprint;
use App\Entity\Parts\Part;
+use App\Entity\Parts\PartLot;
+use App\Entity\Parts\Storelocation;
+use App\Entity\Parts\Supplier;
+use App\Entity\PriceInformations\Orderdetail;
use App\Exceptions\AttachmentDownloadException;
use App\Form\Part\PartBaseType;
use App\Services\Attachments\AttachmentManager;
@@ -57,6 +62,7 @@ use App\Services\Parameters\ParameterExtractor;
use App\Services\PricedetailHelper;
use Doctrine\ORM\EntityManagerInterface;
use Omines\DataTablesBundle\DataTableFactory;
+use Proxies\__CG__\App\Entity\Parts\Manufacturer;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -135,7 +141,7 @@ class PartController extends AbstractController
'pictures' => $this->partPreviewGenerator->getPreviewAttachments($part),
'timeTravel' => $timeTravel_timestamp,
'description_params' => $parameterExtractor->extractParameters($part->getDescription()),
- 'comment_params' => $parameterExtractor->extractParameters($part->getComment())
+ 'comment_params' => $parameterExtractor->extractParameters($part->getComment()),
]
);
}
@@ -235,13 +241,42 @@ class PartController extends AbstractController
$this->denyAccessUnlessGranted('create', $new_part);
- $cid = $request->get('cid', 1);
-
- $category = $em->find(Category::class, $cid);
+ $cid = $request->get('category', null);
+ $category = $cid ? $em->find(Category::class, $cid) : null;
if (null !== $category && null === $new_part->getCategory()) {
$new_part->setCategory($category);
}
+ $fid = $request->get('footprint', null);
+ $footprint = $fid ? $em->find(Footprint::class, $cid) : null;
+ if (null !== $footprint && null === $new_part->getFootprint()) {
+ $new_part->setFootprint($footprint);
+ }
+
+ $mid = $request->get('manufacturer', null);
+ $manufacturer = $mid ? $em->find(Manufacturer::class, $mid) : null;
+ if (null !== $manufacturer && null === $new_part->getManufacturer()) {
+ $new_part->setManufacturer($manufacturer);
+ }
+
+ $store_id = $request->get('storelocation', null);
+ $storelocation = $store_id ? $em->find(Storelocation::class, $store_id): null;
+ if (null !== $storelocation && $new_part->getPartLots()->isEmpty()) {
+ $partLot = new PartLot();
+ $partLot->setStorageLocation($storelocation);
+ $partLot->setInstockUnknown(true);
+ $new_part->addPartLot($partLot);
+ }
+
+ $supplier_id = $request->get('supplier', null);
+ $supplier = $supplier_id ? $em->find(Supplier::class, $supplier_id): null;
+ if (null !== $supplier && $new_part->getOrderdetails()->isEmpty()) {
+ $orderdetail = new Orderdetail();
+ $orderdetail->setSupplier($supplier);
+ $new_part->addOrderdetail($orderdetail);
+ }
+
+
$form = $this->createForm(PartBaseType::class, $new_part);
$form->handleRequest($request);
diff --git a/src/Controller/TypeaheadController.php b/src/Controller/TypeaheadController.php
index 8a8054d0..22a31e12 100644
--- a/src/Controller/TypeaheadController.php
+++ b/src/Controller/TypeaheadController.php
@@ -62,9 +62,11 @@ class TypeaheadController extends AbstractController
/**
* @Route("/builtInResources/search/{query}", name="typeahead_builtInRessources", requirements={"query"= ".+"})
*
+ * @param string $query
+ * @param BuiltinAttachmentsFinder $finder
* @return JsonResponse
*/
- public function builtInResources(Request $request, string $query, BuiltinAttachmentsFinder $finder)
+ public function builtInResources(string $query, BuiltinAttachmentsFinder $finder)
{
$array = $finder->find($query);
diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php
index 97738de0..a7d9ef5a 100644
--- a/src/Controller/UserController.php
+++ b/src/Controller/UserController.php
@@ -43,7 +43,6 @@ declare(strict_types=1);
namespace App\Controller;
use App\Entity\Attachments\UserAttachment;
-use App\Entity\Parameters\PartParameter;
use App\Entity\UserSystem\User;
use App\Form\Permissions\PermissionsType;
use App\Form\UserAdminForm;
@@ -69,7 +68,7 @@ class UserController extends AdminPages\BaseAdminController
protected $route_base = 'user';
protected $attachment_class = UserAttachment::class;
//Just define a value here to prevent error. It is not used.
- protected $parameter_class = "not used";
+ protected $parameter_class = 'not used';
/**
* @Route("/{id}/edit/{timestamp}", requirements={"id"="\d+"}, name="user_edit")
diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php
index 141013f0..7a1e1ce1 100644
--- a/src/DataFixtures/AppFixtures.php
+++ b/src/DataFixtures/AppFixtures.php
@@ -43,7 +43,7 @@ declare(strict_types=1);
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;
-use Doctrine\Common\Persistence\ObjectManager;
+use Doctrine\Persistence\ObjectManager;
class AppFixtures extends Fixture
{
diff --git a/src/DataFixtures/DataStructureFixtures.php b/src/DataFixtures/DataStructureFixtures.php
index f2ea23e6..f7106615 100644
--- a/src/DataFixtures/DataStructureFixtures.php
+++ b/src/DataFixtures/DataStructureFixtures.php
@@ -52,7 +52,7 @@ use App\Entity\Parts\MeasurementUnit;
use App\Entity\Parts\Storelocation;
use App\Entity\Parts\Supplier;
use Doctrine\Bundle\FixturesBundle\Fixture;
-use Doctrine\Common\Persistence\ObjectManager;
+use Doctrine\Persistence\ObjectManager;
use Doctrine\ORM\EntityManagerInterface;
use InvalidArgumentException;
diff --git a/src/DataFixtures/GroupFixtures.php b/src/DataFixtures/GroupFixtures.php
index 6c667222..9707ab6a 100644
--- a/src/DataFixtures/GroupFixtures.php
+++ b/src/DataFixtures/GroupFixtures.php
@@ -44,7 +44,7 @@ namespace App\DataFixtures;
use App\Entity\UserSystem\Group;
use Doctrine\Bundle\FixturesBundle\Fixture;
-use Doctrine\Common\Persistence\ObjectManager;
+use Doctrine\Persistence\ObjectManager;
class GroupFixtures extends Fixture
{
diff --git a/src/DataFixtures/PartFixtures.php b/src/DataFixtures/PartFixtures.php
index b9a8a566..a47af181 100644
--- a/src/DataFixtures/PartFixtures.php
+++ b/src/DataFixtures/PartFixtures.php
@@ -89,16 +89,16 @@ class PartFixtures extends Fixture
$orderdetail = new Orderdetail();
$orderdetail->setSupplier($manager->find(Supplier::class, 1));
- $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(1.0)->setPrice("10.0"));
- $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(10.0)->setPrice("15.0"));
+ $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(1.0)->setPrice('10.0'));
+ $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(10.0)->setPrice('15.0'));
$part->addOrderdetail($orderdetail);
$orderdetail = new Orderdetail();
$orderdetail->setSupplierpartnr('BC 547');
$orderdetail->setObsolete(true);
$orderdetail->setSupplier($manager->find(Supplier::class, 1));
- $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(1.0)->setPrice("10.0"));
- $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(10.0)->setPrice("15.1"));
+ $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(1.0)->setPrice('10.0'));
+ $orderdetail->addPricedetail((new Pricedetail())->setPriceRelatedQuantity(10.0)->setPrice('15.1'));
$part->addOrderdetail($orderdetail);
$attachment = new PartAttachment();
diff --git a/src/DataFixtures/UserFixtures.php b/src/DataFixtures/UserFixtures.php
index 2d277d86..52ce2f4a 100644
--- a/src/DataFixtures/UserFixtures.php
+++ b/src/DataFixtures/UserFixtures.php
@@ -44,7 +44,7 @@ namespace App\DataFixtures;
use App\Entity\UserSystem\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
-use Doctrine\Common\Persistence\ObjectManager;
+use Doctrine\Persistence\ObjectManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
diff --git a/src/DataTables/Adapter/FetchJoinORMAdapter.php b/src/DataTables/Adapter/FetchJoinORMAdapter.php
index a1fc27f2..9714dd36 100644
--- a/src/DataTables/Adapter/FetchJoinORMAdapter.php
+++ b/src/DataTables/Adapter/FetchJoinORMAdapter.php
@@ -98,7 +98,7 @@ class FetchJoinORMAdapter extends ORMAdapter
}
}
- public function getCount(QueryBuilder $queryBuilder, $identifier)
+ public function getCount(QueryBuilder $queryBuilder, string $identifier)
{
$paginator = new Paginator($queryBuilder);
diff --git a/src/DataTables/Adapter/ORMAdapter.php b/src/DataTables/Adapter/ORMAdapter.php
index be6513ac..157ce4f0 100644
--- a/src/DataTables/Adapter/ORMAdapter.php
+++ b/src/DataTables/Adapter/ORMAdapter.php
@@ -216,7 +216,7 @@ class ORMAdapter extends AbstractAdapter
*
* @return int
*/
- protected function getCount(QueryBuilder $queryBuilder, $identifier)
+ protected function getCount(QueryBuilder $queryBuilder, string $identifier)
{
$qb = clone $queryBuilder;
diff --git a/src/DataTables/Column/LogEntryTargetColumn.php b/src/DataTables/Column/LogEntryTargetColumn.php
index d6c69655..e332edd5 100644
--- a/src/DataTables/Column/LogEntryTargetColumn.php
+++ b/src/DataTables/Column/LogEntryTargetColumn.php
@@ -44,7 +44,6 @@ namespace App\DataTables\Column;
use App\Entity\Attachments\Attachment;
use App\Entity\Base\AbstractDBElement;
-use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Contracts\NamedElementInterface;
use App\Entity\LogSystem\AbstractLogEntry;
use App\Entity\Parameters\AbstractParameter;
@@ -99,7 +98,7 @@ class LogEntryTargetColumn extends AbstractColumn
$tmp = '';
//The element is existing
- if ($target instanceof NamedElementInterface && !empty($target->getName())) {
+ if ($target instanceof NamedElementInterface && ! empty($target->getName())) {
try {
$tmp = sprintf(
'%s',
@@ -126,15 +125,15 @@ class LogEntryTargetColumn extends AbstractColumn
//Add a hint to the associated element if possible
if (null !== $target && $this->options['show_associated']) {
- if ($target instanceof Attachment && $target->getElement() !== null) {
+ if ($target instanceof Attachment && null !== $target->getElement()) {
$on = $target->getElement();
- } elseif ($target instanceof AbstractParameter && $target->getElement() !== null) {
+ } elseif ($target instanceof AbstractParameter && null !== $target->getElement()) {
$on = $target->getElement();
- } elseif ($target instanceof PartLot && $target->getPart() !== null) {
+ } elseif ($target instanceof PartLot && null !== $target->getPart()) {
$on = $target->getPart();
- } elseif ($target instanceof Orderdetail && $target->getPart() !== null) {
+ } elseif ($target instanceof Orderdetail && null !== $target->getPart()) {
$on = $target->getPart();
- } elseif ($target instanceof Pricedetail && $target->getOrderdetail() !== null && $target->getOrderdetail()->getPart() !== null) {
+ } elseif ($target instanceof Pricedetail && null !== $target->getOrderdetail() && null !== $target->getOrderdetail()->getPart()) {
$on = $target->getOrderdetail()->getPart();
}
@@ -146,7 +145,7 @@ class LogEntryTargetColumn extends AbstractColumn
$this->elementTypeNameGenerator->getTypeNameCombination($on, true)
);
} catch (EntityNotSupportedException $exception) {
- $tmp .= ' (' . $this->elementTypeNameGenerator->getTypeNameCombination($target, true) .')';
+ $tmp .= ' ('.$this->elementTypeNameGenerator->getTypeNameCombination($target, true).')';
}
}
}
diff --git a/src/DataTables/Column/RevertLogColumn.php b/src/DataTables/Column/RevertLogColumn.php
index 43b0d3c2..51009741 100644
--- a/src/DataTables/Column/RevertLogColumn.php
+++ b/src/DataTables/Column/RevertLogColumn.php
@@ -49,7 +49,6 @@ class RevertLogColumn extends AbstractColumn
public function render($value, $context)
{
- $revertable = true;
if (
$context instanceof CollectionElementDeleted
|| ($context instanceof ElementDeletedLogEntry && $context->hasOldDataInformations())
diff --git a/src/DataTables/LogDataTable.php b/src/DataTables/LogDataTable.php
index 135e9717..abbcf127 100644
--- a/src/DataTables/LogDataTable.php
+++ b/src/DataTables/LogDataTable.php
@@ -212,7 +212,7 @@ class LogDataTable implements DataTableTypeInterface
$dataTable->add('target', LogEntryTargetColumn::class, [
'label' => $this->translator->trans('log.target'),
- 'show_associated' => $options['mode'] !== 'element_history',
+ 'show_associated' => 'element_history' !== $options['mode'],
]);
$dataTable->add('extra', LogEntryExtraColumn::class, [
diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php
index 34dc669e..dda3829c 100644
--- a/src/DataTables/PartsDataTable.php
+++ b/src/DataTables/PartsDataTable.php
@@ -329,8 +329,6 @@ final class PartsDataTable implements DataTableTypeInterface
private function buildCriteria(QueryBuilder $builder, array $options): void
{
- $em = $builder->getEntityManager();
-
if (isset($options['category'])) {
$category = $options['category'];
$list = $this->treeBuilder->typeToNodesList(Category::class, $category);
diff --git a/src/Entity/Attachments/AttachmentType.php b/src/Entity/Attachments/AttachmentType.php
index 9971e547..6dcabe13 100644
--- a/src/Entity/Attachments/AttachmentType.php
+++ b/src/Entity/Attachments/AttachmentType.php
@@ -40,6 +40,7 @@ class AttachmentType extends AbstractStructuralDBElement
{
/**
* @ORM\OneToMany(targetEntity="AttachmentType", mappedBy="parent", cascade={"persist"})
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -56,13 +57,14 @@ class AttachmentType extends AbstractStructuralDBElement
*/
protected $filetype_filter = '';
/**
- * @var Collection|AttachmentTypeAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\AttachmentTypeAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
- /** @var AttachmentTypeParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\AttachmentTypeParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
@@ -70,7 +72,7 @@ class AttachmentType extends AbstractStructuralDBElement
protected $parameters;
/**
- * @var Collection|Attachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="Attachment", mappedBy="attachment_type")
*/
protected $attachments_with_type;
diff --git a/src/Entity/Attachments/AttachmentTypeAttachment.php b/src/Entity/Attachments/AttachmentTypeAttachment.php
index 946964a4..f95c91c6 100644
--- a/src/Entity/Attachments/AttachmentTypeAttachment.php
+++ b/src/Entity/Attachments/AttachmentTypeAttachment.php
@@ -43,11 +43,13 @@ declare(strict_types=1);
namespace App\Entity\Attachments;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to an attachmentType element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class AttachmentTypeAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/CategoryAttachment.php b/src/Entity/Attachments/CategoryAttachment.php
index a700d238..bf25fd53 100644
--- a/src/Entity/Attachments/CategoryAttachment.php
+++ b/src/Entity/Attachments/CategoryAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\Parts\Category;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a category element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class CategoryAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/CurrencyAttachment.php b/src/Entity/Attachments/CurrencyAttachment.php
index 101e33c8..1e49b9a2 100644
--- a/src/Entity/Attachments/CurrencyAttachment.php
+++ b/src/Entity/Attachments/CurrencyAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\PriceInformations\Currency;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a currency element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class CurrencyAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/DeviceAttachment.php b/src/Entity/Attachments/DeviceAttachment.php
index af347160..93f2235b 100644
--- a/src/Entity/Attachments/DeviceAttachment.php
+++ b/src/Entity/Attachments/DeviceAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\Devices\Device;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a device element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class DeviceAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/FootprintAttachment.php b/src/Entity/Attachments/FootprintAttachment.php
index 602c99d4..5335c0d0 100644
--- a/src/Entity/Attachments/FootprintAttachment.php
+++ b/src/Entity/Attachments/FootprintAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\Parts\Footprint;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a footprint element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class FootprintAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/GroupAttachment.php b/src/Entity/Attachments/GroupAttachment.php
index 24d2414e..dfc592af 100644
--- a/src/Entity/Attachments/GroupAttachment.php
+++ b/src/Entity/Attachments/GroupAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\UserSystem\Group;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a Group element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class GroupAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/ManufacturerAttachment.php b/src/Entity/Attachments/ManufacturerAttachment.php
index 443ba645..73c499a1 100644
--- a/src/Entity/Attachments/ManufacturerAttachment.php
+++ b/src/Entity/Attachments/ManufacturerAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\Parts\Manufacturer;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a manufacturer element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class ManufacturerAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/MeasurementUnitAttachment.php b/src/Entity/Attachments/MeasurementUnitAttachment.php
index 3d85443d..6ba813fc 100644
--- a/src/Entity/Attachments/MeasurementUnitAttachment.php
+++ b/src/Entity/Attachments/MeasurementUnitAttachment.php
@@ -45,11 +45,13 @@ namespace App\Entity\Attachments;
use App\Entity\Parts\Manufacturer;
use App\Entity\Parts\MeasurementUnit;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a measurement unit element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class MeasurementUnitAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/PartAttachment.php b/src/Entity/Attachments/PartAttachment.php
index d5c883a0..20974127 100644
--- a/src/Entity/Attachments/PartAttachment.php
+++ b/src/Entity/Attachments/PartAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\Parts\Part;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a part element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class PartAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/StorelocationAttachment.php b/src/Entity/Attachments/StorelocationAttachment.php
index 35213c68..a8a42e6e 100644
--- a/src/Entity/Attachments/StorelocationAttachment.php
+++ b/src/Entity/Attachments/StorelocationAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\Parts\Storelocation;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a measurement unit element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class StorelocationAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/SupplierAttachment.php b/src/Entity/Attachments/SupplierAttachment.php
index 3db739db..a4904211 100644
--- a/src/Entity/Attachments/SupplierAttachment.php
+++ b/src/Entity/Attachments/SupplierAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\Parts\Supplier;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a supplier element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class SupplierAttachment extends Attachment
{
diff --git a/src/Entity/Attachments/UserAttachment.php b/src/Entity/Attachments/UserAttachment.php
index 6198746d..6aeaa638 100644
--- a/src/Entity/Attachments/UserAttachment.php
+++ b/src/Entity/Attachments/UserAttachment.php
@@ -44,11 +44,13 @@ namespace App\Entity\Attachments;
use App\Entity\UserSystem\User;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* A attachment attached to a user element.
*
* @ORM\Entity()
+ * @UniqueEntity({"name", "attachment_type", "element"})
*/
class UserAttachment extends Attachment
{
diff --git a/src/Entity/Base/AbstractStructuralDBElement.php b/src/Entity/Base/AbstractStructuralDBElement.php
index 3bb3da16..4ef2ab6d 100644
--- a/src/Entity/Base/AbstractStructuralDBElement.php
+++ b/src/Entity/Base/AbstractStructuralDBElement.php
@@ -254,6 +254,7 @@ abstract class AbstractStructuralDBElement extends AttachmentContainingDBElement
* Get all sub elements of this element.
*
* @return Collection|iterable all subelements as an array of objects (sorted by their full path)
+ * @psalm-return Collection
*/
public function getSubelements(): iterable
{
@@ -262,6 +263,7 @@ abstract class AbstractStructuralDBElement extends AttachmentContainingDBElement
/**
* @return Collection|iterable
+ * @psalm-return Collection
*/
public function getChildren(): iterable
{
diff --git a/src/Entity/Devices/Device.php b/src/Entity/Devices/Device.php
index d5c5bdae..0fd16306 100644
--- a/src/Entity/Devices/Device.php
+++ b/src/Entity/Devices/Device.php
@@ -67,6 +67,7 @@ class Device extends AbstractPartsContainingDBElement
{
/**
* @ORM\OneToMany(targetEntity="Device", mappedBy="parent")
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -93,12 +94,13 @@ class Device extends AbstractPartsContainingDBElement
*/
protected $order_only_missing_parts = false;
/**
- * @var Collection|DeviceAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\DeviceAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $attachments;
- /** @var DeviceParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\DeviceParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
*/
diff --git a/src/Entity/LogSystem/ElementEditedLogEntry.php b/src/Entity/LogSystem/ElementEditedLogEntry.php
index 2b4011f2..d3449cfc 100644
--- a/src/Entity/LogSystem/ElementEditedLogEntry.php
+++ b/src/Entity/LogSystem/ElementEditedLogEntry.php
@@ -84,11 +84,7 @@ class ElementEditedLogEntry extends AbstractLogEntry implements TimeTravelInterf
return array_keys($this->getOldData());
}
- if (isset($this->extra['f'])) {
- return $this->extra['f'];
- }
-
- return [];
+ return $this->extra['f'] ?? [];
}
/**
diff --git a/src/Entity/Parameters/AbstractParameter.php b/src/Entity/Parameters/AbstractParameter.php
index 095df7ee..081a2cda 100644
--- a/src/Entity/Parameters/AbstractParameter.php
+++ b/src/Entity/Parameters/AbstractParameter.php
@@ -28,7 +28,6 @@ use App\Entity\Base\AbstractNamedDBElement;
use Doctrine\ORM\Mapping as ORM;
use InvalidArgumentException;
use LogicException;
-use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
@@ -121,16 +120,6 @@ abstract class AbstractParameter extends AbstractNamedDBElement
}
}
- /**
- * Returns the name of the specification (e.g. "Collector-Base Voltage").
- *
- * @return string
- */
- public function getName(): string
- {
- return $this->name;
- }
-
/**
* Returns the element this parameter belongs to.
*
@@ -213,7 +202,8 @@ abstract class AbstractParameter extends AbstractNamedDBElement
}
/**
- * Returns the name of the group this parameter is associated to (e.g. Technical Parameters)
+ * Returns the name of the group this parameter is associated to (e.g. Technical Parameters).
+ *
* @return string
*/
public function getGroup(): string
@@ -223,12 +213,13 @@ abstract class AbstractParameter extends AbstractNamedDBElement
/**
* Sets the name of the group this parameter is associated to.
- * @param string $group
+ *
* @return $this
*/
public function setGroup(string $group): self
{
$this->group = $group;
+
return $this;
}
diff --git a/src/Entity/Parameters/ParametersTrait.php b/src/Entity/Parameters/ParametersTrait.php
index 34d97a74..1d088afd 100644
--- a/src/Entity/Parameters/ParametersTrait.php
+++ b/src/Entity/Parameters/ParametersTrait.php
@@ -31,17 +31,19 @@ trait ParametersTrait
/**
* Mapping done in subclasses.
*
- * @var AbstractParameter[]|Collection
+ * @var Collection
* @Assert\Valid()
*/
protected $parameters;
/**
- * Return all associated specifications.
+ * Return all associated specifications.
*
- * @return AbstractParameter[]|Collection
+ * @return Collection
+ *
+ * @psalm-return Collection
*/
- public function getParameters(): Collection
+ public function getParameters(): \Doctrine\Common\Collections\Collection
{
return $this->parameters;
}
@@ -73,6 +75,7 @@ trait ParametersTrait
foreach ($this->parameters as $parameter) {
$tmp[$parameter->getGroup()][] = $parameter;
}
+
return $tmp;
}
}
diff --git a/src/Entity/Parts/Category.php b/src/Entity/Parts/Category.php
index 9c0a1a09..520736e9 100644
--- a/src/Entity/Parts/Category.php
+++ b/src/Entity/Parts/Category.php
@@ -39,6 +39,7 @@ class Category extends AbstractPartsContainingDBElement
{
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -101,13 +102,14 @@ class Category extends AbstractPartsContainingDBElement
*/
protected $default_comment = '';
/**
- * @var Collection|CategoryAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\CategoryAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
- /** @var CategoryParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\CategoryParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
diff --git a/src/Entity/Parts/Footprint.php b/src/Entity/Parts/Footprint.php
index 666aa95f..b5f3fa42 100644
--- a/src/Entity/Parts/Footprint.php
+++ b/src/Entity/Parts/Footprint.php
@@ -73,6 +73,7 @@ class Footprint extends AbstractPartsContainingDBElement
/**
* @ORM\OneToMany(targetEntity="Footprint", mappedBy="parent")
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -81,8 +82,9 @@ class Footprint extends AbstractPartsContainingDBElement
*/
protected $parts;
/**
- * @var Collection|FootprintAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\FootprintAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
@@ -94,9 +96,9 @@ class Footprint extends AbstractPartsContainingDBElement
*/
protected $footprint_3d;
- /** @var FootprintParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\FootprintParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
- * @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})@ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
+ * @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
*/
protected $parameters;
diff --git a/src/Entity/Parts/Manufacturer.php b/src/Entity/Parts/Manufacturer.php
index e61e3063..2b0779f4 100644
--- a/src/Entity/Parts/Manufacturer.php
+++ b/src/Entity/Parts/Manufacturer.php
@@ -73,6 +73,7 @@ class Manufacturer extends AbstractCompany
/**
* @ORM\OneToMany(targetEntity="Manufacturer", mappedBy="parent")
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -81,13 +82,14 @@ class Manufacturer extends AbstractCompany
*/
protected $parts;
/**
- * @var Collection|ManufacturerAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\ManufacturerAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
- /** @var ManufacturerParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\ManufacturerParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
diff --git a/src/Entity/Parts/MeasurementUnit.php b/src/Entity/Parts/MeasurementUnit.php
index 78a4180d..406b113a 100644
--- a/src/Entity/Parts/MeasurementUnit.php
+++ b/src/Entity/Parts/MeasurementUnit.php
@@ -84,6 +84,7 @@ class MeasurementUnit extends AbstractPartsContainingDBElement
/**
* @ORM\OneToMany(targetEntity="MeasurementUnit", mappedBy="parent", cascade={"persist"})
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -98,13 +99,14 @@ class MeasurementUnit extends AbstractPartsContainingDBElement
*/
protected $parts;
/**
- * @var Collection|MeasurementUnitAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\MeasurementUnitAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
- /** @var MeasurementUnitParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\MeasurementUnitParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
diff --git a/src/Entity/Parts/Part.php b/src/Entity/Parts/Part.php
index 749c8af2..3bfc3195 100644
--- a/src/Entity/Parts/Part.php
+++ b/src/Entity/Parts/Part.php
@@ -52,6 +52,7 @@ namespace App\Entity\Parts;
use App\Entity\Attachments\Attachment;
use App\Entity\Attachments\AttachmentContainingDBElement;
+use App\Entity\Attachments\PartAttachment;
use App\Entity\Devices\Device;
use App\Entity\Parameters\ParametersTrait;
use App\Entity\Parameters\PartParameter;
@@ -63,6 +64,7 @@ use App\Entity\Parts\PartTraits\OrderTrait;
use App\Security\Annotations\ColumnSecurity;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
@@ -90,11 +92,10 @@ class Part extends AttachmentContainingDBElement
*/
protected $devices = [];
- /** @var PartParameter[]
+ /** @var Collection
* @Assert\Valid()
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\PartParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
- * @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
*/
protected $parameters;
@@ -117,8 +118,10 @@ class Part extends AttachmentContainingDBElement
protected $name = '';
/**
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\PartAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ColumnSecurity(type="collection", prefix="attachments")
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
diff --git a/src/Entity/Parts/PartLot.php b/src/Entity/Parts/PartLot.php
index 2b8676dd..e2f85d0b 100644
--- a/src/Entity/Parts/PartLot.php
+++ b/src/Entity/Parts/PartLot.php
@@ -303,8 +303,20 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface, Named
return (float) $this->amount;
}
- public function setAmount(float $new_amount): self
+ /**
+ * Sets the amount of parts in the part lot.
+ * If null is passed, amount will be set to unknown.
+ * @param float|null $new_amount
+ * @return $this
+ */
+ public function setAmount(?float $new_amount): self
{
+ //Treat null like unknown amount
+ if ($new_amount === null) {
+ $this->instock_unknown = true;
+ $new_amount = 0.0;
+ }
+
$this->amount = $new_amount;
return $this;
@@ -328,9 +340,6 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface, Named
return $this;
}
- /**
- * @inheritDoc
- */
public function getName(): string
{
return $this->description;
diff --git a/src/Entity/Parts/PartTraits/InstockTrait.php b/src/Entity/Parts/PartTraits/InstockTrait.php
index 9678ac96..2eb596eb 100644
--- a/src/Entity/Parts/PartTraits/InstockTrait.php
+++ b/src/Entity/Parts/PartTraits/InstockTrait.php
@@ -57,6 +57,7 @@ trait InstockTrait
* @ORM\OneToMany(targetEntity="PartLot", mappedBy="part", cascade={"persist", "remove"}, orphanRemoval=true)
* @Assert\Valid()
* @ColumnSecurity(type="collection", prefix="lots")
+ * @ORM\OrderBy({"amount" = "DESC"})
*/
protected $partLots;
diff --git a/src/Entity/Parts/PartTraits/OrderTrait.php b/src/Entity/Parts/PartTraits/OrderTrait.php
index 8b022e67..60c23056 100644
--- a/src/Entity/Parts/PartTraits/OrderTrait.php
+++ b/src/Entity/Parts/PartTraits/OrderTrait.php
@@ -44,6 +44,7 @@ namespace App\Entity\Parts\PartTraits;
use App\Entity\PriceInformations\Orderdetail;
use App\Security\Annotations\ColumnSecurity;
+use Doctrine\ORM\Mapping as ORM;
use function count;
use Doctrine\Common\Collections\Collection;
@@ -57,6 +58,7 @@ trait OrderTrait
* @ORM\OneToMany(targetEntity="App\Entity\PriceInformations\Orderdetail", mappedBy="part", cascade={"persist", "remove"}, orphanRemoval=true)
* @Assert\Valid()
* @ColumnSecurity(prefix="orderdetails", type="collection")
+ * @ORM\OrderBy({"supplierpartnr" = "ASC"})
*/
protected $orderdetails;
diff --git a/src/Entity/Parts/Storelocation.php b/src/Entity/Parts/Storelocation.php
index 3af60cbd..c47a14ff 100644
--- a/src/Entity/Parts/Storelocation.php
+++ b/src/Entity/Parts/Storelocation.php
@@ -67,6 +67,7 @@ class Storelocation extends AbstractPartsContainingDBElement
{
/**
* @ORM\OneToMany(targetEntity="Storelocation", mappedBy="parent")
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -92,7 +93,7 @@ class Storelocation extends AbstractPartsContainingDBElement
*/
protected $parts;
- /** @var StorelocationParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\StorelocationParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
@@ -117,7 +118,7 @@ class Storelocation extends AbstractPartsContainingDBElement
*/
protected $limit_to_existing_parts = false;
/**
- * @var Collection|StorelocationAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\StorelocationAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @Assert\Valid()
*/
diff --git a/src/Entity/Parts/Supplier.php b/src/Entity/Parts/Supplier.php
index 0c35d768..e9597008 100644
--- a/src/Entity/Parts/Supplier.php
+++ b/src/Entity/Parts/Supplier.php
@@ -69,6 +69,7 @@ class Supplier extends AbstractCompany
{
/**
* @ORM\OneToMany(targetEntity="Supplier", mappedBy="parent")
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -107,14 +108,16 @@ class Supplier extends AbstractCompany
* )
*/
protected $parts;
+
/**
- * @var Collection|SupplierAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\SupplierAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
- /** @var SupplierParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\SupplierParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
diff --git a/src/Entity/PriceInformations/Currency.php b/src/Entity/PriceInformations/Currency.php
index 3a985ce1..1441cb47 100644
--- a/src/Entity/PriceInformations/Currency.php
+++ b/src/Entity/PriceInformations/Currency.php
@@ -78,6 +78,7 @@ class Currency extends AbstractStructuralDBElement
/**
* @ORM\OneToMany(targetEntity="Currency", mappedBy="parent", cascade={"persist"})
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -88,13 +89,14 @@ class Currency extends AbstractStructuralDBElement
protected $parent;
/**
- * @var Collection|CurrencyAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\CurrencyAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
- /** @var CurrencyParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\CurrencyParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
diff --git a/src/Entity/PriceInformations/Orderdetail.php b/src/Entity/PriceInformations/Orderdetail.php
index d938bfa3..0524316b 100644
--- a/src/Entity/PriceInformations/Orderdetail.php
+++ b/src/Entity/PriceInformations/Orderdetail.php
@@ -59,6 +59,7 @@ use App\Entity\Parts\Supplier;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
@@ -67,6 +68,7 @@ use Symfony\Component\Validator\Constraints as Assert;
* @ORM\Table("`orderdetails`")
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks()
+ * @UniqueEntity({"supplierpartnr", "supplier", "part"})
*/
class Orderdetail extends AbstractDBElement implements TimeStampableInterface, NamedElementInterface
{
@@ -361,9 +363,6 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface, N
return $this;
}
- /**
- * @inheritDoc
- */
public function getName(): string
{
return $this->getSupplierPartNr();
diff --git a/src/Entity/PriceInformations/Pricedetail.php b/src/Entity/PriceInformations/Pricedetail.php
index 2ecf5cf8..883bed59 100644
--- a/src/Entity/PriceInformations/Pricedetail.php
+++ b/src/Entity/PriceInformations/Pricedetail.php
@@ -64,7 +64,7 @@ use Symfony\Component\Validator\Constraints as Assert;
* @ORM\Entity()
* @ORM\Table("`pricedetails`")
* @ORM\HasLifecycleCallbacks()
- * @UniqueEntity(fields={"orderdetail", "min_discount_quantity"})
+ * @UniqueEntity(fields={"min_discount_quantity", "orderdetail"})
*/
class Pricedetail extends AbstractDBElement implements TimeStampableInterface
{
@@ -136,11 +136,11 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface
*********************************************************************************/
/**
- * Get the orderdetail to which this pricedetail belongs to this pricedetails.
+ * Get the orderdetail to which this pricedetail belongs to this pricedetails.
*
- * @return Orderdetail the orderdetail this price belongs to
+ * @return Orderdetail|null the orderdetail this price belongs to
*/
- public function getOrderdetail(): Orderdetail
+ public function getOrderdetail(): ?Orderdetail
{
return $this->orderdetail;
}
@@ -157,17 +157,20 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface
}
/**
- * Get the price for a single unit in the currency associated with this price detail.
+ * Get the price for a single unit in the currency associated with this price detail.
+ *
+ * @param float|string $multiplier The returned price (float or string) will be multiplied
+ * with this multiplier.
+ *
+ * You will get the price for $multiplier parts. If you want the price which is stored
+ * in the database, you have to pass the "price_related_quantity" count as $multiplier.
*
* @param float|string $multiplier The returned price (float or string) will be multiplied
* with this multiplier.
*
- * You will get the price for $multiplier parts. If you want the price which is stored
- * in the database, you have to pass the "price_related_quantity" count as $multiplier.
- *
- * @return string the price as a bcmath string
+ * @return null|string the price as a bcmath string
*/
- public function getPricePerUnit($multiplier = 1.0): string
+ public function getPricePerUnit($multiplier = 1.0): ?string
{
$multiplier = (string) $multiplier;
$tmp = bcmul($this->price, $multiplier, static::PRICE_PRECISION);
diff --git a/src/Entity/UserSystem/Group.php b/src/Entity/UserSystem/Group.php
index 8ef9ec2a..bb62d16f 100644
--- a/src/Entity/UserSystem/Group.php
+++ b/src/Entity/UserSystem/Group.php
@@ -61,6 +61,7 @@ class Group extends AbstractStructuralDBElement implements HasPermissionsInterfa
{
/**
* @ORM\OneToMany(targetEntity="Group", mappedBy="parent")
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $children;
@@ -81,8 +82,9 @@ class Group extends AbstractStructuralDBElement implements HasPermissionsInterfa
*/
protected $enforce2FA = false;
/**
- * @var Collection|GroupAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\ManufacturerAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
* @Assert\Valid()
*/
protected $attachments;
@@ -93,7 +95,7 @@ class Group extends AbstractStructuralDBElement implements HasPermissionsInterfa
*/
protected $permissions;
- /** @var GroupParameter[]
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Parameters\GroupParameter", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"group" = "ASC" ,"name" = "ASC"})
* @Assert\Valid()
diff --git a/src/Entity/UserSystem/User.php b/src/Entity/UserSystem/User.php
index 1389711a..f39f5078 100644
--- a/src/Entity/UserSystem/User.php
+++ b/src/Entity/UserSystem/User.php
@@ -53,7 +53,6 @@ namespace App\Entity\UserSystem;
use App\Entity\Attachments\AttachmentContainingDBElement;
use App\Entity\Attachments\UserAttachment;
use App\Entity\Base\AbstractNamedDBElement;
-use App\Entity\Base\MasterAttachmentTrait;
use App\Entity\PriceInformations\Currency;
use App\Security\Interfaces\HasPermissionsInterface;
use App\Validator\Constraints\Selectable;
@@ -114,7 +113,7 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
* @var string|null The hash of a token the user must provide when he wants to reset his password.
* @ORM\Column(type="string", nullable=true)
*/
- protected $pw_reset_token = null;
+ protected $pw_reset_token;
/**
* @ORM\Column(type="text", name="config_instock_comment_a")
@@ -228,8 +227,9 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
protected $settings = [];
/**
- * @var Collection|UserAttachment[]
+ * @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\Attachments\UserAttachment", mappedBy="element", cascade={"persist", "remove"}, orphanRemoval=true)
+ * @ORM\OrderBy({"name" = "ASC"})
*/
protected $attachments;
@@ -238,7 +238,7 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
*/
protected $backupCodesGenerationDate;
- /** @var Collection
+ /** @var Collection
* @ORM\OneToMany(targetEntity="App\Entity\UserSystem\U2FKey", mappedBy="user", cascade={"REMOVE"}, orphanRemoval=true)
*/
protected $u2fKeys;
@@ -252,7 +252,7 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
* @ORM\JoinColumn(name="currency_id", referencedColumnName="id")
* @Selectable()
*/
- protected $currency = null;
+ protected $currency;
/** @var PermissionsEmbed
* @ORM\Embedded(class="PermissionsEmbed", columnPrefix="perms_")
@@ -264,7 +264,7 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
* @var DateTime The time until the password reset token is valid.
* @ORM\Column(type="datetime", nullable=true)
*/
- protected $pw_reset_expires = null;
+ protected $pw_reset_expires;
public function __construct()
{
@@ -863,9 +863,11 @@ class User extends AttachmentContainingDBElement implements UserInterface, HasPe
}
/**
- * Get all U2F Keys that are associated with this user.
+ * Get all U2F Keys that are associated with this user.
*
- * @return Collection
+ * @return Collection
+ *
+ * @psalm-return Collection
*/
public function getU2FKeys(): Collection
{
diff --git a/src/EntityListeners/AttachmentDeleteListener.php b/src/EntityListeners/AttachmentDeleteListener.php
index 994301da..14735384 100644
--- a/src/EntityListeners/AttachmentDeleteListener.php
+++ b/src/EntityListeners/AttachmentDeleteListener.php
@@ -77,12 +77,21 @@ class AttachmentDeleteListener
public function preUpdateHandler(Attachment $attachment, PreUpdateEventArgs $event): void
{
if ($event->hasChangedField('path')) {
+ $old_path = $event->getOldValue('path');
+
//Dont delete file if the attachment uses a builtin ressource:
- if (Attachment::checkIfBuiltin($event->getOldValue('path'))) {
+ if (Attachment::checkIfBuiltin($old_path)) {
return;
}
- $file = new SplFileInfo($this->pathResolver->placeholderToRealPath($event->getOldValue('path')));
+ $real_path = $this->pathResolver->placeholderToRealPath($old_path);
+
+ //If the attachment does not point to a valid file, ignore it!
+ if ($real_path === null) {
+ return;
+ }
+
+ $file = new SplFileInfo($real_path);
$this->attachmentReverseSearch->deleteIfNotUsed($file);
}
}
diff --git a/src/EventSubscriber/EventLoggerSubscriber.php b/src/EventSubscriber/EventLoggerSubscriber.php
index f6c89e14..8a888ecb 100644
--- a/src/EventSubscriber/EventLoggerSubscriber.php
+++ b/src/EventSubscriber/EventLoggerSubscriber.php
@@ -60,7 +60,7 @@ class EventLoggerSubscriber implements EventSubscriber
Orderdetail::class => ['part'],
Pricedetail::class => ['orderdetail'],
Attachment::class => ['element'],
- AbstractParameter::class => ['element']
+ AbstractParameter::class => ['element'],
];
protected const MAX_STRING_LENGTH = 2000;
@@ -163,7 +163,7 @@ class EventLoggerSubscriber implements EventSubscriber
*/
public function hasFieldRestrictions(AbstractDBElement $element): bool
{
- foreach (static::FIELD_BLACKLIST as $class => $blacklist) {
+ foreach (array_keys(static::FIELD_BLACKLIST) as $class) {
if (is_a($element, $class)) {
return true;
}
@@ -283,7 +283,7 @@ class EventLoggerSubscriber implements EventSubscriber
}, ARRAY_FILTER_USE_BOTH);
}
- protected function saveChangeSet(AbstractDBElement $entity, AbstractLogEntry $logEntry, EntityManagerInterface $em, $element_deleted = false): void
+ protected function saveChangeSet(AbstractDBElement $entity, AbstractLogEntry $logEntry, EntityManagerInterface $em, bool $element_deleted = false): void
{
$uow = $em->getUnitOfWork();
diff --git a/src/EventSubscriber/LogoutOnDisabledUserListener.php b/src/EventSubscriber/LogoutOnDisabledUserListener.php
index 81829d59..7b1d07f7 100644
--- a/src/EventSubscriber/LogoutOnDisabledUserListener.php
+++ b/src/EventSubscriber/LogoutOnDisabledUserListener.php
@@ -53,8 +53,6 @@ use Symfony\Component\Security\Core\Security;
final class LogoutOnDisabledUserListener implements EventSubscriberInterface
{
private $security;
- private $translator;
- private $flashBag;
private $urlGenerator;
public function __construct(Security $security, UrlGeneratorInterface $urlGenerator)
diff --git a/src/EventSubscriber/SymfonyDebugToolbarSubscriber.php b/src/EventSubscriber/SymfonyDebugToolbarSubscriber.php
index 9576f3c2..e132bd18 100644
--- a/src/EventSubscriber/SymfonyDebugToolbarSubscriber.php
+++ b/src/EventSubscriber/SymfonyDebugToolbarSubscriber.php
@@ -45,14 +45,15 @@ namespace App\EventSubscriber;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
+use Symfony\Component\HttpKernel\Event\ResponseEvent;
final class SymfonyDebugToolbarSubscriber implements EventSubscriberInterface
{
- private $kernel;
+ private $kernel_debug;
- public function __construct(ContainerInterface $kernel)
+ public function __construct(bool $kernel_debug)
{
- $this->kernel = $kernel;
+ $this->kernel_debug = $kernel_debug;
}
/**
@@ -78,9 +79,9 @@ final class SymfonyDebugToolbarSubscriber implements EventSubscriberInterface
return ['kernel.response' => 'onKernelResponse'];
}
- public function onKernelResponse(FilterResponseEvent $event): void
+ public function onKernelResponse(ResponseEvent $event): void
{
- if (! $this->kernel->getParameter('kernel.debug')) {
+ if (! $this->kernel_debug) {
return;
}
diff --git a/src/Form/AdminPages/BaseEntityAdminForm.php b/src/Form/AdminPages/BaseEntityAdminForm.php
index d1e029b9..402de5b4 100644
--- a/src/Form/AdminPages/BaseEntityAdminForm.php
+++ b/src/Form/AdminPages/BaseEntityAdminForm.php
@@ -45,7 +45,6 @@ namespace App\Form\AdminPages;
use App\Entity\Attachments\Attachment;
use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Base\AbstractStructuralDBElement;
-use App\Entity\Parameters\PartParameter;
use App\Form\AttachmentFormType;
use App\Form\ParameterType;
use App\Form\Type\MasterPictureAttachmentType;
@@ -133,6 +132,7 @@ class BaseEntityAdminForm extends AbstractType
'allow_add' => true,
'allow_delete' => true,
'label' => false,
+ 'reindex_enable' => true,
'disabled' => ! $this->security->isGranted($is_new ? 'create' : 'edit', $entity),
'entry_options' => [
'data_class' => $options['attachment_class'],
@@ -159,6 +159,7 @@ class BaseEntityAdminForm extends AbstractType
'allow_add' => $this->security->isGranted($is_new ? 'create' : 'edit', $entity),
'allow_delete' => $this->security->isGranted($is_new ? 'create' : 'edit', $entity),
'disabled' => ! $this->security->isGranted($is_new ? 'create' : 'edit', $entity),
+ 'reindex_enable' => true,
'label' => false,
'by_reference' => false,
'prototype_data' => new $options['parameter_class'](),
diff --git a/src/Form/AttachmentFormType.php b/src/Form/AttachmentFormType.php
index 0dc1c14f..858d2a00 100644
--- a/src/Form/AttachmentFormType.php
+++ b/src/Form/AttachmentFormType.php
@@ -57,6 +57,7 @@ use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
+use Symfony\Component\Security\Core\Security;
use Symfony\Component\Validator\Constraints\File;
use Symfony\Component\Validator\Constraints\Url;
@@ -65,13 +66,15 @@ class AttachmentFormType extends AbstractType
protected $attachment_helper;
protected $urlGenerator;
protected $allow_attachments_download;
+ protected $security;
public function __construct(AttachmentManager $attachmentHelper,
- UrlGeneratorInterface $urlGenerator, bool $allow_attachments_downloads)
+ UrlGeneratorInterface $urlGenerator, Security $security, bool $allow_attachments_downloads)
{
$this->attachment_helper = $attachmentHelper;
$this->urlGenerator = $urlGenerator;
$this->allow_attachments_download = $allow_attachments_downloads;
+ $this->security = $security;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
@@ -103,6 +106,7 @@ class AttachmentFormType extends AbstractType
'required' => false,
'label' => 'attachment.edit.secure_file',
'mapped' => false,
+ 'disabled' => !$this->security->isGranted('@parts_attachments.show_private'),
'attr' => [
'class' => 'form-control-sm',
],
diff --git a/src/Form/CollectionTypeExtension.php b/src/Form/CollectionTypeExtension.php
new file mode 100644
index 00000000..c29b9d7e
--- /dev/null
+++ b/src/Form/CollectionTypeExtension.php
@@ -0,0 +1,120 @@
+.
+ */
+
+namespace App\Form;
+
+
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
+use Symfony\Component\Form\AbstractTypeExtension;
+use Symfony\Component\Form\Extension\Core\Type\CollectionType;
+use Symfony\Component\Form\FormBuilder;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\Form\FormConfigBuilder;
+use Symfony\Component\Form\FormEvent;
+use Symfony\Component\Form\FormEvents;
+use Symfony\Component\OptionsResolver\Options;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
+
+/**
+ * Perform a reindexing on CollectionType elements, by assigning the database id as index.
+ * This prevents issues when the collection that is edited uses a OrderBy annotation and therefore the direction of the
+ * elements can change during requests.
+ * Must me enabled by setting reindex_enable to true in Type options.
+ * @package App\Form
+ */
+class CollectionTypeExtension extends AbstractTypeExtension
+{
+ protected $propertyAccess;
+
+ public function __construct(PropertyAccessorInterface $propertyAccess)
+ {
+ $this->propertyAccess = $propertyAccess;
+ }
+
+ public static function getExtendedTypes(): iterable
+ {
+ return [CollectionType::class];
+ }
+
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ /*$resolver->setDefault('error_mapping', function (Options $options) {
+ $options->
+ });*/
+
+ $resolver->setDefaults([
+ 'reindex_enable' => false,
+ 'reindex_prefix' => 'db_',
+ 'reindex_path' => 'id',
+ ]);
+
+ $resolver->setAllowedTypes('reindex_enable', 'bool');
+ $resolver->setAllowedTypes('reindex_prefix', 'string');
+ $resolver->setAllowedTypes('reindex_path', 'string');
+ }
+
+ public function buildForm(FormBuilderInterface $builder, array $options)
+ {
+ $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) {
+ $data = $event->getData();
+ $config = $event->getForm()->getConfig();
+ //If enabled do a reindexing of the collection
+ if ($options['reindex_enable'] && $data instanceof Collection) {
+ $reindexed_data = new ArrayCollection();
+
+ $error_mapping = [];
+
+ foreach ($data->toArray() as $key => $item) {
+ $index = $options['reindex_prefix'] . $this->propertyAccess->getValue($item, $options['reindex_path']);
+ $error_mapping['[' . $key . ']'] = $index;
+ $reindexed_data->set($index, $item);
+ }
+ $event->setData($reindexed_data);
+
+ //Add error mapping, so that validator error are mapped correctly to the new index fields
+ if ($config instanceof FormBuilder && empty($config->getOption('error_mapping'))) {
+ $this->setOption($config, 'error_mapping', $error_mapping);
+ }
+ }
+ }, 100); //We need to have a higher priority then the PRE_SET_DATA listener on CollectionType
+ }
+
+ /**
+ * Set the option of the form.
+ * This a bit hacky cause we access private properties....
+ * @param $builder
+ * @param string $option
+ * @param $value
+ * @throws \ReflectionException
+ */
+ public function setOption(FormBuilder $builder, string $option, $value): void
+ {
+ //We have to use FormConfigBuilder::class here, because options is private and not available in sub classes
+ $reflection = new \ReflectionClass(FormConfigBuilder::class);
+ $property = $reflection->getProperty('options');
+ $property->setAccessible(true);
+ $tmp = $property->getValue($builder);
+ $tmp[$option] = $value;
+ $property->setValue($builder, $tmp);
+ $property->setAccessible(false);
+ }
+}
\ No newline at end of file
diff --git a/src/Form/ParameterType.php b/src/Form/ParameterType.php
index 8cd66abd..413df3e4 100644
--- a/src/Form/ParameterType.php
+++ b/src/Form/ParameterType.php
@@ -113,14 +113,14 @@ class ParameterType extends AbstractType
'attr' => [
'placeholder' => 'parameter.group.placeholder',
'class' => 'form-control-sm',
- ]
+ ],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
- 'data_class' => AbstractParameter::class,
- ]);
+ 'data_class' => AbstractParameter::class,
+ ]);
}
}
diff --git a/src/Form/Part/OrderdetailType.php b/src/Form/Part/OrderdetailType.php
index bc84ef1f..c6400145 100644
--- a/src/Form/Part/OrderdetailType.php
+++ b/src/Form/Part/OrderdetailType.php
@@ -69,9 +69,6 @@ class OrderdetailType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options): void
{
- /** @var Orderdetail $orderdetail */
- $orderdetail = $builder->getData();
-
$builder->add('supplierpartnr', TextType::class, [
'label' => 'orderdetails.edit.supplierpartnr',
'attr' => [
@@ -117,6 +114,7 @@ class OrderdetailType extends AbstractType
'allow_add' => $this->security->isGranted('@parts_prices.create'),
'allow_delete' => $this->security->isGranted('@parts_prices.delete'),
'label' => false,
+ 'reindex_enable' => true,
'prototype_data' => $dummy_pricedetail,
'by_reference' => false,
'entry_options' => [
diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php
index 1610afcf..bb7d4471 100644
--- a/src/Form/Part/PartBaseType.php
+++ b/src/Form/Part/PartBaseType.php
@@ -52,7 +52,6 @@ use App\Entity\Parts\MeasurementUnit;
use App\Entity\Parts\Part;
use App\Entity\PriceInformations\Orderdetail;
use App\Form\AttachmentFormType;
-use App\Form\ParameterGroupType;
use App\Form\ParameterType;
use App\Form\Type\MasterPictureAttachmentType;
use App\Form\Type\SIUnitType;
@@ -225,6 +224,7 @@ class PartBaseType extends AbstractType
'entry_type' => PartLotType::class,
'allow_add' => $this->security->isGranted('lots.create', $part),
'allow_delete' => $this->security->isGranted('lots.delete', $part),
+ 'reindex_enable' => true,
'label' => false,
'entry_options' => [
'measurement_unit' => $part->getPartUnit(),
@@ -238,6 +238,7 @@ class PartBaseType extends AbstractType
'entry_type' => AttachmentFormType::class,
'allow_add' => $this->security->isGranted('attachments.create', $part),
'allow_delete' => $this->security->isGranted('attachments.delete', $part),
+ 'reindex_enable' => true,
'label' => false,
'entry_options' => [
'data_class' => PartAttachment::class,
@@ -258,6 +259,7 @@ class PartBaseType extends AbstractType
'entry_type' => OrderdetailType::class,
'allow_add' => $this->security->isGranted('orderdetails.create', $part),
'allow_delete' => $this->security->isGranted('orderdetails.delete', $part),
+ 'reindex_enable' => true,
'label' => false,
'by_reference' => false,
'prototype_data' => new Orderdetail(),
@@ -272,6 +274,7 @@ class PartBaseType extends AbstractType
'allow_add' => $this->security->isGranted('parameters.create', $part),
'allow_delete' => $this->security->isGranted('parameters.delete', $part),
'label' => false,
+ 'reindex_enable' => true,
'by_reference' => false,
'prototype_data' => new PartParameter(),
'entry_options' => [
diff --git a/src/Form/Part/PartLotType.php b/src/Form/Part/PartLotType.php
index 86add975..78461f0b 100644
--- a/src/Form/Part/PartLotType.php
+++ b/src/Form/Part/PartLotType.php
@@ -49,7 +49,7 @@ use App\Form\Type\SIUnitType;
use App\Form\Type\StructuralEntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
-use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
+use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
@@ -88,6 +88,7 @@ class PartLotType extends AbstractType
$builder->add('amount', SIUnitType::class, [
'measurement_unit' => $options['measurement_unit'],
+ 'required' => false,
'label' => 'part_lot.edit.amount',
'attr' => [
'class' => 'form-control-sm',
@@ -116,9 +117,11 @@ class PartLotType extends AbstractType
'required' => false,
]);
- $builder->add('expirationDate', DateTimeType::class, [
+ $builder->add('expirationDate', DateType::class, [
'label' => 'part_lot.edit.expiration_date',
'attr' => [],
+ 'widget' => 'single_text',
+ 'model_timezone' => 'UTC',
'required' => false,
]);
diff --git a/src/Form/Permissions/PermissionsType.php b/src/Form/Permissions/PermissionsType.php
index 0c1b3e00..8df1f647 100644
--- a/src/Form/Permissions/PermissionsType.php
+++ b/src/Form/Permissions/PermissionsType.php
@@ -86,7 +86,7 @@ class PermissionsType extends AbstractType
{
$groups = $this->perm_structure['groups'];
- foreach ($groups as $key => $group) {
+ foreach (array_keys($groups) as $key) {
$builder->add($key, PermissionGroupType::class, [
'group_name' => $key,
'mapped' => false,
diff --git a/src/Form/Type/CurrencyEntityType.php b/src/Form/Type/CurrencyEntityType.php
index 4e955316..e5d85600 100644
--- a/src/Form/Type/CurrencyEntityType.php
+++ b/src/Form/Type/CurrencyEntityType.php
@@ -102,7 +102,7 @@ class CurrencyEntityType extends StructuralEntityType
$level -= $parent->getLevel() - 1;
}
- $tmp = str_repeat(' ', $choice->getLevel()); //Use 3 spaces for intendation
+ $tmp = str_repeat(' ', $level); //Use 3 spaces for intendation
if (empty($choice->getIsoCode())) {
$tmp .= htmlspecialchars($choice->getName());
} else {
diff --git a/src/Form/Type/StructuralEntityType.php b/src/Form/Type/StructuralEntityType.php
index 73454038..2e7dc5be 100644
--- a/src/Form/Type/StructuralEntityType.php
+++ b/src/Form/Type/StructuralEntityType.php
@@ -153,37 +153,37 @@ class StructuralEntityType extends AbstractType
}
/**
- * Transforms a value from the original representation to a transformed representation.
+ * Transforms a value from the original representation to a transformed representation.
*
- * This method is called when the form field is initialized with its default data, on
- * two occasions for two types of transformers:
+ * This method is called when the form field is initialized with its default data, on
+ * two occasions for two types of transformers:
*
- * 1. Model transformers which normalize the model data.
- * This is mainly useful when the same form type (the same configuration)
- * has to handle different kind of underlying data, e.g The DateType can
- * deal with strings or \DateTime objects as input.
+ * 1. Model transformers which normalize the model data.
+ * This is mainly useful when the same form type (the same configuration)
+ * has to handle different kind of underlying data, e.g The DateType can
+ * deal with strings or \DateTime objects as input.
*
- * 2. View transformers which adapt the normalized data to the view format.
- * a/ When the form is simple, the value returned by convention is used
- * directly in the view and thus can only be a string or an array. In
- * this case the data class should be null.
+ * 2. View transformers which adapt the normalized data to the view format.
+ * a/ When the form is simple, the value returned by convention is used
+ * directly in the view and thus can only be a string or an array. In
+ * this case the data class should be null.
*
- * b/ When the form is compound the returned value should be an array or
- * an object to be mapped to the children. Each property of the compound
- * data will be used as model data by each child and will be transformed
- * too. In this case data class should be the class of the object, or null
- * when it is an array.
+ * b/ When the form is compound the returned value should be an array or
+ * an object to be mapped to the children. Each property of the compound
+ * data will be used as model data by each child and will be transformed
+ * too. In this case data class should be the class of the object, or null
+ * when it is an array.
*
- * All transformers are called in a configured order from model data to view value.
- * At the end of this chain the view data will be validated against the data class
- * setting.
+ * All transformers are called in a configured order from model data to view value.
+ * At the end of this chain the view data will be validated against the data class
+ * setting.
*
- * This method must be able to deal with empty values. Usually this will
- * be NULL, but depending on your implementation other empty values are
- * possible as well (such as empty strings). The reasoning behind this is
- * that data transformers must be chainable. If the transform() method
- * of the first data transformer outputs NULL, the second must be able to
- * process that value.
+ * This method must be able to deal with empty values. Usually this will
+ * be NULL, but depending on your implementation other empty values are
+ * possible as well (such as empty strings). The reasoning behind this is
+ * that data transformers must be chainable. If the transform() method
+ * of the first data transformer outputs NULL, the second must be able to
+ * process that value.
*
* @param mixed $value The value in the original representation
*
@@ -191,31 +191,31 @@ class StructuralEntityType extends AbstractType
*
* @throws TransformationFailedException when the transformation fails
*/
- public function transform($value, $options)
+ public function transform($value, array $options)
{
return $value;
}
/**
- * Transforms a value from the transformed representation to its original
- * representation.
+ * Transforms a value from the transformed representation to its original
+ * representation.
*
- * This method is called when {@link Form::submit()} is called to transform the requests tainted data
- * into an acceptable format.
+ * This method is called when {@link Form::submit()} is called to transform the requests tainted data
+ * into an acceptable format.
*
- * The same transformers are called in the reverse order so the responsibility is to
- * return one of the types that would be expected as input of transform().
+ * The same transformers are called in the reverse order so the responsibility is to
+ * return one of the types that would be expected as input of transform().
*
- * This method must be able to deal with empty values. Usually this will
- * be an empty string, but depending on your implementation other empty
- * values are possible as well (such as NULL). The reasoning behind
- * this is that value transformers must be chainable. If the
- * reverseTransform() method of the first value transformer outputs an
- * empty string, the second value transformer must be able to process that
- * value.
+ * This method must be able to deal with empty values. Usually this will
+ * be an empty string, but depending on your implementation other empty
+ * values are possible as well (such as NULL). The reasoning behind
+ * this is that value transformers must be chainable. If the
+ * reverseTransform() method of the first value transformer outputs an
+ * empty string, the second value transformer must be able to process that
+ * value.
*
- * By convention, reverseTransform() should return NULL if an empty string
- * is passed.
+ * By convention, reverseTransform() should return NULL if an empty string
+ * is passed.
*
* @param mixed $value The value in the transformed representation
*
@@ -223,7 +223,7 @@ class StructuralEntityType extends AbstractType
*
* @throws TransformationFailedException when the transformation fails
*/
- public function reverseTransform($value, $options)
+ public function reverseTransform($value, array $options)
{
/* This step is important in combination with the caching!
The elements deserialized from cache, are not known to Doctrinte ORM any more, so doctrine thinks,
@@ -272,7 +272,7 @@ class StructuralEntityType extends AbstractType
$level -= $parent->getLevel() - 1;
}
- $tmp = str_repeat(' ', $choice->getLevel()); //Use 3 spaces for intendation
+ $tmp = str_repeat(' ', $level); //Use 3 spaces for intendation
$tmp .= htmlspecialchars($choice->getName());
return $tmp;
diff --git a/src/Form/UserAdminForm.php b/src/Form/UserAdminForm.php
index e7ede3b1..4fb55433 100644
--- a/src/Form/UserAdminForm.php
+++ b/src/Form/UserAdminForm.php
@@ -244,6 +244,7 @@ class UserAdminForm extends AbstractType
'allow_add' => true,
'allow_delete' => true,
'label' => false,
+ 'reindex_enable' => true,
'entry_options' => [
'data_class' => $options['attachment_class'],
],
diff --git a/src/Helpers/Trees/TreeViewNodeState.php b/src/Helpers/Trees/TreeViewNodeState.php
index f15b2904..6f22967a 100644
--- a/src/Helpers/Trees/TreeViewNodeState.php
+++ b/src/Helpers/Trees/TreeViewNodeState.php
@@ -46,11 +46,6 @@ use JsonSerializable;
final class TreeViewNodeState implements JsonSerializable
{
- /**
- * @var bool|null
- */
- private $checked = null;
-
/**
* @var bool|null
*/
diff --git a/src/Migrations/Version1.php b/src/Migrations/Version1.php
index f27581a6..37dfb8b7 100644
--- a/src/Migrations/Version1.php
+++ b/src/Migrations/Version1.php
@@ -41,7 +41,7 @@ final class Version1 extends AbstractMigration
try {
//Check if we can use this migration method:
$version = (int) $this->connection->fetchColumn("SELECT keyValue AS version FROM `internal` WHERE `keyName` = 'dbVersion'");
- $this->skipIf(true, 'Old Part-DB Database detected! Continue with upgrade...');
+ $this->skipIf($version > 0, 'Old Part-DB Database detected! Continue with upgrade...');
} catch (DBALException $dBALException) {
//when the table was not found, we can proceed, because we have an empty DB!
}
diff --git a/src/Migrations/Version20200311204104.php b/src/Migrations/Version20200311204104.php
index 0cd173d8..cd01e65a 100644
--- a/src/Migrations/Version20200311204104.php
+++ b/src/Migrations/Version20200311204104.php
@@ -27,11 +27,11 @@ final class Version20200311204104 extends AbstractMigration
$this->addSql('ALTER TABLE `users` ADD perms_parts_parameters SMALLINT NOT NULL');
$this->addSql('ALTER TABLE log CHANGE level level TINYINT');
- $sql = 'UPDATE `groups`' .
+ $sql = 'UPDATE `groups`'.
'SET perms_parts_parameters = 341 WHERE (id = 1 AND name = "admins") OR (id = 3 AND name = "users");';
$this->addSql($sql);
- $sql = 'UPDATE `groups`' .
+ $sql = 'UPDATE `groups`'.
'SET perms_parts_parameters = 681 WHERE (id = 2 AND name = "readonly");';
$this->addSql($sql);
diff --git a/src/Repository/DBElementRepository.php b/src/Repository/DBElementRepository.php
index ae7a9da9..41d8c058 100644
--- a/src/Repository/DBElementRepository.php
+++ b/src/Repository/DBElementRepository.php
@@ -44,12 +44,13 @@ class DBElementRepository extends EntityRepository
->setParameter(1, $element->getID())
->getQuery();
- $p = $q->execute();
+ //Do the renaming
+ $q->execute();
$this->setField($element, 'id', $new_id);
}
- protected function setField(AbstractDBElement $element, string $field, $new_value): void
+ protected function setField(AbstractDBElement $element, string $field, int $new_value): void
{
$reflection = new \ReflectionClass(get_class($element));
$property = $reflection->getProperty($field);
diff --git a/src/Security/EntityListeners/ElementPermissionListener.php b/src/Security/EntityListeners/ElementPermissionListener.php
index 80e51aa1..bf796e57 100644
--- a/src/Security/EntityListeners/ElementPermissionListener.php
+++ b/src/Security/EntityListeners/ElementPermissionListener.php
@@ -142,7 +142,6 @@ class ElementPermissionListener
return;
}
- $em = $eventArgs->getEntityManager();
$unitOfWork = $eventArgs->getEntityManager()->getUnitOfWork();
$reflectionClass = new ReflectionClass($element);
diff --git a/src/Security/Voter/ExtendedVoter.php b/src/Security/Voter/ExtendedVoter.php
index 8630373b..f0ea142d 100644
--- a/src/Security/Voter/ExtendedVoter.php
+++ b/src/Security/Voter/ExtendedVoter.php
@@ -43,6 +43,7 @@ declare(strict_types=1);
namespace App\Security\Voter;
use App\Entity\UserSystem\User;
+use App\Repository\UserRepository;
use App\Services\PermissionResolver;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
@@ -76,6 +77,7 @@ abstract class ExtendedVoter extends Voter
// if the user is anonymous, we use the anonymous user.
if (! $user instanceof User) {
+ /** @var UserRepository $repo */
$repo = $this->entityManager->getRepository(User::class);
$user = $repo->getAnonymousUser();
if (null === $user) {
diff --git a/src/Services/AmountFormatter.php b/src/Services/AmountFormatter.php
index 65056301..c679e035 100644
--- a/src/Services/AmountFormatter.php
+++ b/src/Services/AmountFormatter.php
@@ -60,10 +60,11 @@ class AmountFormatter
}
/**
- * Formats the given value using the measurement unit and options.
+ * Formats the given value using the measurement unit and options.
*
- * @param MeasurementUnit|null $unit The measurement unit, whose unit symbol should be used for formatting.
- * If set to null, it is assumed that the part amount is measured in pieces.
+ * @param float|string|int $value
+ * @param MeasurementUnit|null $unit The measurement unit, whose unit symbol should be used for formatting.
+ * If set to null, it is assumed that the part amount is measured in pieces.
*
* @return string The formatted string
*
diff --git a/src/Services/Attachments/AttachmentURLGenerator.php b/src/Services/Attachments/AttachmentURLGenerator.php
index 7d294c65..ebbb0e76 100644
--- a/src/Services/Attachments/AttachmentURLGenerator.php
+++ b/src/Services/Attachments/AttachmentURLGenerator.php
@@ -130,7 +130,7 @@ class AttachmentURLGenerator
throw new InvalidArgumentException('Thumbnail creation only works for picture attachments!');
}
- if ($attachment->isExternal()) {
+ if ($attachment->isExternal() && !empty($attachment->getURL())) {
return $attachment->getURL();
}
diff --git a/src/Services/Attachments/BuiltinAttachmentsFinder.php b/src/Services/Attachments/BuiltinAttachmentsFinder.php
index 92df4a9f..5c7338b8 100644
--- a/src/Services/Attachments/BuiltinAttachmentsFinder.php
+++ b/src/Services/Attachments/BuiltinAttachmentsFinder.php
@@ -43,10 +43,10 @@ declare(strict_types=1);
namespace App\Services\Attachments;
use App\Entity\Attachments\Attachment;
-use Psr\Cache\InvalidArgumentException;
use Symfony\Component\Finder\Finder;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Cache\CacheInterface;
+use Psr\Cache\InvalidArgumentException;
/**
* This service is used to find builtin attachment ressources.
diff --git a/src/Services/Attachments/FileTypeFilterTools.php b/src/Services/Attachments/FileTypeFilterTools.php
index 72479ccc..bf5640f9 100644
--- a/src/Services/Attachments/FileTypeFilterTools.php
+++ b/src/Services/Attachments/FileTypeFilterTools.php
@@ -174,7 +174,7 @@ class FileTypeFilterTools
$extensions = array_merge($extensions, static::IMAGE_EXTS);
} elseif ('audio/*' === $element) {
$extensions = array_merge($extensions, static::AUDIO_EXTS);
- } elseif ('image/*' === $element) {
+ } elseif ('video/*' === $element) {
$extensions = array_merge($extensions, static::VIDEO_EXTS);
} elseif (preg_match('#^[-\w.]+\/[-\w.*]+#', $element)) {
$extensions = array_merge($extensions, $this->mimeTypes->getExtensions($element));
diff --git a/src/Services/Attachments/PartPreviewGenerator.php b/src/Services/Attachments/PartPreviewGenerator.php
index 335d2e8c..45b33a15 100644
--- a/src/Services/Attachments/PartPreviewGenerator.php
+++ b/src/Services/Attachments/PartPreviewGenerator.php
@@ -55,13 +55,15 @@ class PartPreviewGenerator
}
/**
- * Returns a list of attachments that can be used for previewing the part ordered by priority.
- * The priority is: Part MasterAttachment -> Footprint MasterAttachment -> Category MasterAttachment
- * -> Storelocation Attachment -> MeasurementUnit Attachment -> ManufacturerAttachment.
+ * Returns a list of attachments that can be used for previewing the part ordered by priority.
+ * The priority is: Part MasterAttachment -> Footprint MasterAttachment -> Category MasterAttachment
+ * -> Storelocation Attachment -> MeasurementUnit Attachment -> ManufacturerAttachment.
*
* @param Part $part the part for which the attachments should be determined
*
- * @return Attachment[]
+ * @return (Attachment|null)[]
+ *
+ * @psalm-return list
*/
public function getPreviewAttachments(Part $part): array
{
diff --git a/src/Services/ElementTypeNameGenerator.php b/src/Services/ElementTypeNameGenerator.php
index 64362435..797919ab 100644
--- a/src/Services/ElementTypeNameGenerator.php
+++ b/src/Services/ElementTypeNameGenerator.php
@@ -102,7 +102,7 @@ class ElementTypeNameGenerator
* Useful when the type should be shown to user.
* Throws an exception if the class is not supported.
*
- * @param AbstractDBElement|string $entity The element or class for which the label should be generated
+ * @param object|string $entity The element or class for which the label should be generated
*
* @return string the localized label for the entity type
*
diff --git a/src/Services/EntityExporter.php b/src/Services/EntityExporter.php
index 8afb3b8e..a07c5b0d 100644
--- a/src/Services/EntityExporter.php
+++ b/src/Services/EntityExporter.php
@@ -77,9 +77,10 @@ class EntityExporter
}
/**
- * Exports an Entity or an array of entities to multiple file formats.
+ * Exports an Entity or an array of entities to multiple file formats.
*
* @param Request $request the request that should be used for option resolving
+ * @param AbstractNamedDBElement|object[] $entity
*
* @return Response the generated response containing the exported data
*
diff --git a/src/Services/EntityURLGenerator.php b/src/Services/EntityURLGenerator.php
index 0f54e960..2d553915 100644
--- a/src/Services/EntityURLGenerator.php
+++ b/src/Services/EntityURLGenerator.php
@@ -94,12 +94,12 @@ class EntityURLGenerator
* @param mixed $entity The element for which the page should be generated
* @param string $type The page type. Currently supported: 'info', 'edit', 'create', 'clone', 'list'/'list_parts'
*
- * @return string the link to the desired page
+ * @return null|string the link to the desired page
*
* @throws EntityNotSupportedException thrown if the entity is not supported for the given type
* @throws InvalidArgumentException thrown if the givent type is not existing
*/
- public function getURL($entity, string $type)
+ public function getURL($entity, string $type): ?string
{
switch ($type) {
case 'info':
@@ -187,7 +187,7 @@ class EntityURLGenerator
throw new EntityNotSupportedException('The given entity is not supported yet!');
}
- public function viewURL($entity): string
+ public function viewURL(Attachment $entity): ?string
{
if ($entity instanceof Attachment) {
if ($entity->isExternal()) { //For external attachments, return the link to external path
@@ -201,7 +201,7 @@ class EntityURLGenerator
throw new EntityNotSupportedException('The given entity is not supported yet!');
}
- public function downloadURL($entity): string
+ public function downloadURL($entity): ?string
{
if ($entity instanceof Attachment) {
if ($entity->isExternal()) { //For external attachments, return the link to external path
@@ -383,7 +383,7 @@ class EntityURLGenerator
//Check if we have an direct mapping for the given class
if (! array_key_exists($class, $map)) {
//Check if we need to check inheritance by looping through our map
- foreach ($map as $key => $value) {
+ foreach (array_keys($map) as $key) {
if (is_a($entity, $key)) {
return $map[$key];
}
diff --git a/src/Services/GitVersionInfo.php b/src/Services/GitVersionInfo.php
index a4753a5e..8bd54282 100644
--- a/src/Services/GitVersionInfo.php
+++ b/src/Services/GitVersionInfo.php
@@ -60,10 +60,14 @@ class GitVersionInfo
*/
public function getGitBranchName()
{
- if (file_exists($this->project_dir.'/.git/HEAD')) {
+ if (is_file($this->project_dir.'/.git/HEAD')) {
$git = file($this->project_dir.'/.git/HEAD');
$head = explode('/', $git[0], 3);
+ if (! isset($head[2])) {
+ return null;
+ }
+
return trim($head[2]);
}
@@ -82,8 +86,13 @@ class GitVersionInfo
public function getGitCommitHash(int $length = 7)
{
$filename = $this->project_dir.'/.git/refs/remotes/origin/'.$this->getGitBranchName();
- if (file_exists($filename)) {
+ if (is_file($filename)) {
$head = file($filename);
+
+ if (! isset($head[0])) {
+ return null;
+ }
+
$hash = $head[0];
return substr($hash, 0, $length);
diff --git a/src/Services/LogSystem/EventCommentHelper.php b/src/Services/LogSystem/EventCommentHelper.php
index 04d8ce0a..472293ee 100644
--- a/src/Services/LogSystem/EventCommentHelper.php
+++ b/src/Services/LogSystem/EventCommentHelper.php
@@ -31,7 +31,7 @@ class EventCommentHelper
public function __construct()
{
- $message = null;
+ $this->message = null;
}
/**
diff --git a/src/Services/LogSystem/EventUndoHelper.php b/src/Services/LogSystem/EventUndoHelper.php
index a9714f17..ccc64ed9 100644
--- a/src/Services/LogSystem/EventUndoHelper.php
+++ b/src/Services/LogSystem/EventUndoHelper.php
@@ -37,7 +37,7 @@ class EventUndoHelper
public function __construct()
{
- $undone_event = null;
+ $this->undone_event = null;
$this->mode = self::MODE_UNDO;
}
diff --git a/src/Services/LogSystem/HistoryHelper.php b/src/Services/LogSystem/HistoryHelper.php
index 88a209e4..193c891d 100644
--- a/src/Services/LogSystem/HistoryHelper.php
+++ b/src/Services/LogSystem/HistoryHelper.php
@@ -35,10 +35,12 @@ class HistoryHelper
}
/**
- * Returns an array containing all elements that are associated with the argument.
- * The returned array contains the given element.
+ * Returns an array containing all elements that are associated with the argument.
+ * The returned array contains the given element.
*
* @return array
+ *
+ * @psalm-return array<\App\Entity\Parameters\AbstractParameter|array-key, mixed>
*/
public function getAssociatedElements(AbstractDBElement $element): array
{
diff --git a/src/Services/LogSystem/TimeTravel.php b/src/Services/LogSystem/TimeTravel.php
index f8548e83..6a5ab500 100644
--- a/src/Services/LogSystem/TimeTravel.php
+++ b/src/Services/LogSystem/TimeTravel.php
@@ -209,6 +209,9 @@ class TimeTravel
return $property->getValue($element);
}
+ /**
+ * @param \DateTime|int|null $new_value
+ */
protected function setField(AbstractDBElement $element, string $field, $new_value): void
{
$reflection = new \ReflectionClass(get_class($element));
diff --git a/src/Services/Parameters/ParameterExtractor.php b/src/Services/Parameters/ParameterExtractor.php
index a01ce327..4a37314b 100644
--- a/src/Services/Parameters/ParameterExtractor.php
+++ b/src/Services/Parameters/ParameterExtractor.php
@@ -1,4 +1,7 @@
splitString($input);
foreach ($split as $param_string) {
$tmp = $this->stringToParam($param_string, $class);
- if ($tmp !== null) {
+ if (null !== $tmp) {
$parameters[] = $tmp;
}
}
@@ -67,9 +68,8 @@ class ParameterExtractor
$matches = [];
\preg_match($regex, $input, $matches);
- dump($matches);
- if (!empty($matches)) {
- [$raw, $name, $value] = $matches;
+ if (! empty($matches)) {
+ [, $name, $value] = $matches;
$value = trim($value);
//Dont allow empty names or values (these are a sign of an invalid extracted string)
@@ -91,7 +91,8 @@ class ParameterExtractor
protected function splitString(string $input): array
{
//Allow comma as limiter (include space, to prevent splitting in german style numbers)
- $input = str_replace(static::ALLOWED_PARAM_SEPARATORS, ";", $input);
- return explode(";", $input);
+ $input = str_replace(static::ALLOWED_PARAM_SEPARATORS, ';', $input);
+
+ return explode(';', $input);
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/PermissionResolver.php b/src/Services/PermissionResolver.php
index 15cb5845..9939c00b 100644
--- a/src/Services/PermissionResolver.php
+++ b/src/Services/PermissionResolver.php
@@ -62,12 +62,12 @@ class PermissionResolver
/**
* PermissionResolver constructor.
*/
- public function __construct(ContainerInterface $container)
+ public function __construct(bool $kernel_debug, string $kernel_cache_dir)
{
- $cache_dir = $container->getParameter('kernel.cache_dir');
+ $cache_dir = $kernel_cache_dir;
//Here the cached structure will be saved.
$this->cache_file = $cache_dir.'/permissions.php.cache';
- $this->is_debug = $container->getParameter('kernel.debug');
+ $this->is_debug = $kernel_debug;
$this->permission_structure = $this->generatePermissionStructure();
@@ -127,7 +127,7 @@ class PermissionResolver
return $allowed;
}
- /** @var HasPermissionsInterface $parent */
+ /** @var Group $parent */
$parent = $user->getGroup();
while (null !== $parent) { //The top group, has parent == null
//Check if our current element gives a info about disallow/allow
diff --git a/src/Twig/LastUserExtension.php b/src/Twig/LastUserExtension.php
index 524e8bad..b116f512 100644
--- a/src/Twig/LastUserExtension.php
+++ b/src/Twig/LastUserExtension.php
@@ -30,12 +30,10 @@ use Twig\TwigFunction;
class LastUserExtension extends AbstractExtension
{
- private $em;
private $repo;
public function __construct(EntityManagerInterface $em)
{
- $this->em = $em;
$this->repo = $em->getRepository(AbstractLogEntry::class);
}
diff --git a/templates/AdminPages/_attachments.html.twig b/templates/AdminPages/_attachments.html.twig
index 3429618e..7b7ce7ba 100644
--- a/templates/AdminPages/_attachments.html.twig
+++ b/templates/AdminPages/_attachments.html.twig
@@ -42,7 +42,9 @@
{% endif %}
- {% if attach.picture %}
+ {% if attach.secure and not is_granted('show_private', attach) %}
+ {# Leave blank #}
+ {% elseif attach.picture %}
@@ -60,7 +62,7 @@
{% if attach.secure %}
-
+
{% trans %}attachment.secure{% endtrans %}
@@ -90,7 +92,7 @@
//Determine the table, so we can determine, how many entries there are already.
$holder = $("#attachments_table");
- var index = $holder.find(":input").length;
+ var index = $holder.children("tbody").children("tr").length;
var newForm = $holder.data("prototype");
//Increase the index
diff --git a/templates/AdminPages/_parameters.html.twig b/templates/AdminPages/_parameters.html.twig
index 75f63cbf..49f3d0c5 100644
--- a/templates/AdminPages/_parameters.html.twig
+++ b/templates/AdminPages/_parameters.html.twig
@@ -39,7 +39,7 @@
//Determine the table, so we can determine, how many entries there are already.
$holder = $(btn).siblings("table");
- var index = $holder.find(":input").length;
+ var index = $holder.children("tbody").children("tr").length;
var newForm = $holder.data("prototype");
//Increase the index
diff --git a/templates/Parts/edit/_attachments.html.twig b/templates/Parts/edit/_attachments.html.twig
index 2f49ba74..b625d524 100644
--- a/templates/Parts/edit/_attachments.html.twig
+++ b/templates/Parts/edit/_attachments.html.twig
@@ -40,7 +40,9 @@
{% endif %}
- {% if attach.picture %}
+ {% if attach.secure and not is_granted('show_private', attach) %}
+ {# Leave blank #}
+ {% elseif attach.picture %}
@@ -58,7 +60,7 @@
{% if attach.secure %}
-
+
{% trans %}attachment.secure{% endtrans %}
@@ -88,7 +90,7 @@
//Determine the table, so we can determine, how many entries there are already.
$holder = $("#attachments_table");
- var index = $holder.find(":input").length;
+ var index = $holder.children("tbody").children("tr").length;
var newForm = $holder.data("prototype");
//Increase the index
diff --git a/templates/Parts/edit/_lots.html.twig b/templates/Parts/edit/_lots.html.twig
index e90ddadd..0a2100b3 100644
--- a/templates/Parts/edit/_lots.html.twig
+++ b/templates/Parts/edit/_lots.html.twig
@@ -41,7 +41,7 @@
//Determine the table, so we can determine, how many entries there are already.
$holder = $("#lots_table");
- var index = $holder.find(":input").length;
+ var index = $holder.children("tbody").children("tr").length;
var newForm = $holder.data("prototype");
//Increase the index
diff --git a/templates/Parts/edit/_orderdetails.html.twig b/templates/Parts/edit/_orderdetails.html.twig
index ba521dd0..e00a5811 100644
--- a/templates/Parts/edit/_orderdetails.html.twig
+++ b/templates/Parts/edit/_orderdetails.html.twig
@@ -26,7 +26,7 @@
//Determine the table, so we can determine, how many entries there are already.
$holder = $(btn).siblings("table");
- var index = $holder.find(":input").length;
+ var index = $holder.children("tbody").children("tr").length;
var newForm = $holder.data("prototype");
//Increase the index
@@ -36,9 +36,6 @@
var price_related_id = $("input[id$='price_related_quantity_value']", newForm).attr('id');
var min_discount_id = $("input[id$='min_discount_quantity_value']", newForm).attr('id');
- console.error(price_related_id);
- console.error(min_discount_id);
-
//Determine the new value for the min_discount_qty
var new_min_amount = $("input[id$='min_discount_quantity_value']" , $holder).last().val();
//Assign a valid value, if no price are existing yet
@@ -73,7 +70,7 @@
//Determine the table, so we can determine, how many entries there are already.
$holder = $("#orderdetails_table");
- var index = $holder.find(":input").length;
+ var index = $holder.children("tbody").children("tr").length;
var newForm = $holder.data("prototype");
//Increase the index
diff --git a/templates/Parts/edit/_specifications.html.twig b/templates/Parts/edit/_specifications.html.twig
index dd5af0fd..4176d750 100644
--- a/templates/Parts/edit/_specifications.html.twig
+++ b/templates/Parts/edit/_specifications.html.twig
@@ -39,7 +39,7 @@
//Determine the table, so we can determine, how many entries there are already.
$holder = $(btn).siblings("table");
- var index = $holder.find(":input").length;
+ var index = $holder.children("tbody").children("tr").length;
var newForm = $holder.data("prototype");
//Increase the index
diff --git a/templates/Parts/info/_attachments_info.html.twig b/templates/Parts/info/_attachments_info.html.twig
index 9d9830e7..76838faa 100644
--- a/templates/Parts/info/_attachments_info.html.twig
+++ b/templates/Parts/info/_attachments_info.html.twig
@@ -29,24 +29,35 @@
{{ attachment.filename }}
{% endif %}
-
+
{% if attachment.external %}
- {% trans %}attachment.external_file{% endtrans %}
+
+ {% trans %}attachment.external{% endtrans %}
+
{% elseif attachment_helper.fileExisting(attachment) %}
- {{ attachment_helper.humanFileSize(attachment) }}
+
+ {{ attachment_helper.humanFileSize(attachment) }}
+
{% else %}
- {% trans %}attachment.file_not_found{% endtrans %}
+
+ {% trans %}attachment.file_not_found{% endtrans %}
+
+ {% endif %}
+ {% if attachment.secure %}
+
+ {% trans %}attachment.secure{% endtrans %}
+
{% endif %}
\ No newline at end of file
diff --git a/templates/Parts/lists/all_list.html.twig b/templates/Parts/lists/all_list.html.twig
index 82e45487..04adc60c 100644
--- a/templates/Parts/lists/all_list.html.twig
+++ b/templates/Parts/lists/all_list.html.twig
@@ -6,6 +6,7 @@
{% block content %}
+ {% include "Parts/lists/_action_bar.html.twig" with {'url_options': {}} %}
{% include "Parts/lists/_parts_list.html.twig" %}
{% endblock %}
diff --git a/templates/Parts/lists/category_list.html.twig b/templates/Parts/lists/category_list.html.twig
index e49700c5..676bba99 100644
--- a/templates/Parts/lists/category_list.html.twig
+++ b/templates/Parts/lists/category_list.html.twig
@@ -8,6 +8,8 @@
{% include "Parts/lists/_info_card.html.twig" with {'header_label': 'category.label'} %}
+ {% include "Parts/lists/_action_bar.html.twig" with {'url_options': {'category': entity.iD}} %}
+
{% include "Parts/lists/_parts_list.html.twig" %}
{% endblock %}
diff --git a/templates/Parts/lists/footprint_list.html.twig b/templates/Parts/lists/footprint_list.html.twig
index b66aafed..403eff09 100644
--- a/templates/Parts/lists/footprint_list.html.twig
+++ b/templates/Parts/lists/footprint_list.html.twig
@@ -8,6 +8,8 @@
{% include "Parts/lists/_info_card.html.twig" with {'header_label': 'footprint.label'} %}
+ {% include "Parts/lists/_action_bar.html.twig" with {'url_options': {'footprint': entity.iD}} %}
+
{% include "Parts/lists/_parts_list.html.twig" %}
{% endblock %}
diff --git a/templates/Parts/lists/manufacturer_list.html.twig b/templates/Parts/lists/manufacturer_list.html.twig
index de427199..9bfb4684 100644
--- a/templates/Parts/lists/manufacturer_list.html.twig
+++ b/templates/Parts/lists/manufacturer_list.html.twig
@@ -8,6 +8,8 @@
{% include "Parts/lists/_info_card.html.twig" with {'header_label': 'manufacturer.label'} %}
+ {% include "Parts/lists/_action_bar.html.twig" with {'url_options': {'manufacturer': entity.iD}} %}
+
{% include "Parts/lists/_parts_list.html.twig" %}
{% endblock %}
diff --git a/templates/Parts/lists/store_location_list.html.twig b/templates/Parts/lists/store_location_list.html.twig
index 67248004..52fb0cd8 100644
--- a/templates/Parts/lists/store_location_list.html.twig
+++ b/templates/Parts/lists/store_location_list.html.twig
@@ -8,6 +8,8 @@
{% include "Parts/lists/_info_card.html.twig" with {'header_label': 'storelocation.label'} %}
+ {% include "Parts/lists/_action_bar.html.twig" with {'url_options': {'storelocation': entity.iD}} %}
+
{% include "Parts/lists/_parts_list.html.twig" %}
{% endblock %}
diff --git a/templates/Parts/lists/supplier_list.html.twig b/templates/Parts/lists/supplier_list.html.twig
index 3b0a06bb..e7f4e70d 100644
--- a/templates/Parts/lists/supplier_list.html.twig
+++ b/templates/Parts/lists/supplier_list.html.twig
@@ -8,6 +8,8 @@
{% include "Parts/lists/_info_card.html.twig" with {'header_label': 'supplier.label'} %}
+ {% include "Parts/lists/_action_bar.html.twig" with {'url_options': {'supplier': entity.iD}} %}
+
{% include "Parts/lists/_parts_list.html.twig" %}
{% endblock %}
diff --git a/templates/base.html.twig b/templates/base.html.twig
index b58aa96d..3fa875e3 100644
--- a/templates/base.html.twig
+++ b/templates/base.html.twig
@@ -4,7 +4,7 @@
-
+
diff --git a/templates/helper.twig b/templates/helper.twig
index 18f8d3bd..5304c3ac 100644
--- a/templates/helper.twig
+++ b/templates/helper.twig
@@ -7,14 +7,19 @@
{% endmacro %}
{% macro attachment_icon(attachment, attachment_helper, class = "fa-fw fas fa-3x", link = true) %}
+ {% set disabled = attachment.secure and not is_granted("show_secure", attachment) %}
{% if not attachment_helper or attachment_helper.fileExisting(attachment) %}
-
+ {% if link and not disabled %}
+
+ {% endif %}
{% if attachment.picture %}
{% else %}
{% endif %}
+ {% if link and not disabled %}
+ {% endif %}
{% elseif not attachment_helper.fileExisting(attachment) %}
{% endif %}
diff --git a/tests/ApplicationAvailabilityFunctionalTest.php b/tests/ApplicationAvailabilityFunctionalTest.php
index 4825cf27..a0e2cc1a 100644
--- a/tests/ApplicationAvailabilityFunctionalTest.php
+++ b/tests/ApplicationAvailabilityFunctionalTest.php
@@ -61,17 +61,19 @@ class ApplicationAvailabilityFunctionalTest extends WebTestCase
$url = '/en'.$url;
//Try to access pages with admin, because he should be able to view every page!
+ static::ensureKernelShutdown();
$client = static::createClient([], [
'PHP_AUTH_USER' => 'admin',
'PHP_AUTH_PW' => 'test',
]);
+ $client->catchExceptions(false);
$client->request('GET', $url);
$this->assertTrue($client->getResponse()->isSuccessful(), 'Request not successful. Status code is '.$client->getResponse()->getStatusCode());
}
- public function urlProvider()
+ public function urlProvider(): ?\Generator
{
//Homepage
//yield ['/'];
diff --git a/tests/Controller/AdminPages/AbstractAdminControllerTest.php b/tests/Controller/AdminPages/AbstractAdminControllerTest.php
index ef47a232..d462291a 100644
--- a/tests/Controller/AdminPages/AbstractAdminControllerTest.php
+++ b/tests/Controller/AdminPages/AbstractAdminControllerTest.php
@@ -54,7 +54,7 @@ abstract class AbstractAdminControllerTest extends WebTestCase
protected static $base_path = 'not_valid';
protected static $entity_class = 'not valid';
- public function readDataProvider()
+ public function readDataProvider(): array
{
return [
['noread', false],
@@ -79,6 +79,7 @@ abstract class AbstractAdminControllerTest extends WebTestCase
'PHP_AUTH_PW' => 'test',
]);
+ $client->catchExceptions(false);
if (false === $read) {
$this->expectException(AccessDeniedException::class);
}
@@ -86,7 +87,7 @@ abstract class AbstractAdminControllerTest extends WebTestCase
$client->catchExceptions(false);
//Test read/list access by access /new overview page
- $crawler = $client->request('GET', static::$base_path.'/new');
+ $client->request('GET', static::$base_path.'/new');
$this->assertFalse($client->getResponse()->isRedirect());
$this->assertSame($read, $client->getResponse()->isSuccessful(), 'Controller was not successful!');
$this->assertSame($read, ! $client->getResponse()->isForbidden(), 'Permission Checking not working!');
@@ -111,13 +112,13 @@ abstract class AbstractAdminControllerTest extends WebTestCase
}
//Test read/list access by access /new overview page
- $crawler = $client->request('GET', static::$base_path.'/1');
+ $client->request('GET', static::$base_path.'/1');
$this->assertFalse($client->getResponse()->isRedirect());
$this->assertSame($read, $client->getResponse()->isSuccessful(), 'Controller was not successful!');
$this->assertSame($read, ! $client->getResponse()->isForbidden(), 'Permission Checking not working!');
}
- public function deleteDataProvider()
+ public function deleteDataProvider(): array
{
return [
['noread', false],
@@ -147,7 +148,7 @@ abstract class AbstractAdminControllerTest extends WebTestCase
}
//Test read/list access by access /new overview page
- $crawler = $client->request('DELETE', static::$base_path.'/7');
+ $client->request('DELETE', static::$base_path.'/7');
//Page is redirected to '/new', when delete was successful
$this->assertSame($delete, $client->getResponse()->isRedirect(static::$base_path.'/new'));
diff --git a/tests/Controller/RedirectControllerTest.php b/tests/Controller/RedirectControllerTest.php
index 03057195..cfc878aa 100644
--- a/tests/Controller/RedirectControllerTest.php
+++ b/tests/Controller/RedirectControllerTest.php
@@ -63,6 +63,7 @@ class RedirectControllerTest extends WebTestCase
'PHP_AUTH_PW' => 'test',
]);
$this->client->disableReboot();
+ $this->client->catchExceptions(false);
$this->em = self::$container->get(EntityManagerInterface::class);
$this->userRepo = $this->em->getRepository(User::class);
}
diff --git a/tests/DatatablesAvailabilityTest.php b/tests/DatatablesAvailabilityTest.php
index 2ef73de1..0ad3632a 100644
--- a/tests/DatatablesAvailabilityTest.php
+++ b/tests/DatatablesAvailabilityTest.php
@@ -40,16 +40,22 @@ class DatatablesAvailabilityTest extends WebTestCase
'PHP_AUTH_USER' => 'admin',
'PHP_AUTH_PW' => 'test',
]);
-
+ $client->catchExceptions(false);
$client->request('GET', $url);
$this->assertTrue($client->getResponse()->isSuccessful(), 'Request not successful. Status code is '.$client->getResponse()->getStatusCode());
+ static::ensureKernelShutdown();
+ $client = static::createClient([], [
+ 'PHP_AUTH_USER' => 'admin',
+ 'PHP_AUTH_PW' => 'test',
+ ]);
+ $client->catchExceptions(false);
$client->request('POST', $url, ['_dt' => 'dt']);
$this->assertTrue($client->getResponse()->isSuccessful());
$this->assertJson($client->getResponse()->getContent());
}
- public function urlProvider()
+ public function urlProvider(): ?\Generator
{
//Part lists
yield ['/category/1/parts'];
diff --git a/tests/Entity/Attachments/AttachmentTest.php b/tests/Entity/Attachments/AttachmentTest.php
index 5d0e20bf..182d3049 100644
--- a/tests/Entity/Attachments/AttachmentTest.php
+++ b/tests/Entity/Attachments/AttachmentTest.php
@@ -145,7 +145,7 @@ class AttachmentTest extends TestCase
$attachment->setElement($element);
}
- public function externalDataProvider()
+ public function externalDataProvider(): array
{
return [
['', false],
@@ -170,7 +170,7 @@ class AttachmentTest extends TestCase
$this->assertSame($expected, $attachment->isExternal());
}
- public function extensionDataProvider()
+ public function extensionDataProvider(): array
{
return [
['%MEDIA%/foo/bar.txt', null, 'txt'],
@@ -197,7 +197,7 @@ class AttachmentTest extends TestCase
$this->assertSame($expected, $attachment->getExtension());
}
- public function pictureDataProvider()
+ public function pictureDataProvider(): array
{
return [
['%MEDIA%/foo/bar.txt', false],
@@ -221,7 +221,7 @@ class AttachmentTest extends TestCase
$this->assertSame($expected, $attachment->isPicture());
}
- public function builtinDataProvider()
+ public function builtinDataProvider(): array
{
return [
['', false],
@@ -243,7 +243,7 @@ class AttachmentTest extends TestCase
$this->assertSame($expected, $attachment->isBuiltIn());
}
- public function hostDataProvider()
+ public function hostDataProvider(): array
{
return [
['%MEDIA%/foo/bar.txt', null],
@@ -262,7 +262,7 @@ class AttachmentTest extends TestCase
$this->assertSame($expected, $attachment->getHost());
}
- public function filenameProvider()
+ public function filenameProvider(): array
{
return [
['%MEDIA%/foo/bar.txt', null, 'bar.txt'],
diff --git a/tests/Entity/LogSystem/AbstractLogEntryTest.php b/tests/Entity/LogSystem/AbstractLogEntryTest.php
index f20aacd2..072cb9d0 100644
--- a/tests/Entity/LogSystem/AbstractLogEntryTest.php
+++ b/tests/Entity/LogSystem/AbstractLogEntryTest.php
@@ -139,7 +139,7 @@ class AbstractLogEntryTest extends TestCase
$this->assertSame(10, $log->getTargetID());
$log->setTargetElement(null);
- $this->assertSame(null, $log->getTargetClass());
- $this->assertSame(null, $log->getTargetID());
+ $this->assertNull($log->getTargetClass());
+ $this->assertNull($log->getTargetID());
}
}
diff --git a/tests/Entity/StructuralDBElementTest.php b/tests/Entity/StructuralDBElementTest.php
index da782316..496a538b 100644
--- a/tests/Entity/StructuralDBElementTest.php
+++ b/tests/Entity/StructuralDBElementTest.php
@@ -46,7 +46,6 @@ use App\Entity\Attachments\AttachmentType;
use App\Entity\Parts\Category;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
-use Symfony\Component\Yaml\Tests\A;
/**
* Test StructuralDBElement entities.
diff --git a/tests/Entity/UserSystem/PermissionsEmbedTest.php b/tests/Entity/UserSystem/PermissionsEmbedTest.php
index 94aee84c..92d61e92 100644
--- a/tests/Entity/UserSystem/PermissionsEmbedTest.php
+++ b/tests/Entity/UserSystem/PermissionsEmbedTest.php
@@ -43,7 +43,6 @@ declare(strict_types=1);
namespace App\Tests\Entity\UserSystem;
use App\Entity\UserSystem\PermissionsEmbed;
-use Doctrine\ORM\Mapping\Embedded;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
@@ -137,7 +136,7 @@ class PermissionsEmbedTest extends TestCase
$embed->getPermissionValue('parts', 1);
}
- public function getStatesBINARY()
+ public function getStatesBINARY(): array
{
return [
'ALLOW' => [PermissionsEmbed::ALLOW],
@@ -147,7 +146,7 @@ class PermissionsEmbedTest extends TestCase
];
}
- public function getStatesBOOL()
+ public function getStatesBOOL(): array
{
return [
'ALLOW' => [true],
diff --git a/tests/Helpers/BBCodeToMarkdownConverterTest.php b/tests/Helpers/BBCodeToMarkdownConverterTest.php
index 9b6a93bb..50626fb0 100644
--- a/tests/Helpers/BBCodeToMarkdownConverterTest.php
+++ b/tests/Helpers/BBCodeToMarkdownConverterTest.php
@@ -54,7 +54,7 @@ class BBCodeToMarkdownConverterTest extends TestCase
$this->converter = new BBCodeToMarkdownConverter();
}
- public function dataProvider()
+ public function dataProvider(): array
{
return [
['[b]Bold[/b]', '**Bold**'],
diff --git a/tests/Services/Attachments/AttachmentPathResolverTest.php b/tests/Services/Attachments/AttachmentPathResolverTest.php
index 35d338c4..2ce6957f 100644
--- a/tests/Services/Attachments/AttachmentPathResolverTest.php
+++ b/tests/Services/Attachments/AttachmentPathResolverTest.php
@@ -95,7 +95,7 @@ class AttachmentPathResolverTest extends WebTestCase
$this->assertNull(self::$service->parameterToAbsolutePath('/./this/one/too'));
}
- public function placeholderDataProvider()
+ public function placeholderDataProvider(): array
{
return [
['%FOOTPRINTS%/test/test.jpg', self::$footprint_path.'/test/test.jpg'],
@@ -117,7 +117,7 @@ class AttachmentPathResolverTest extends WebTestCase
];
}
- public function realPathDataProvider()
+ public function realPathDataProvider(): array
{
return [
[self::$media_path.'/test/img.jpg', '%MEDIA%/test/img.jpg'],
diff --git a/tests/Services/Attachments/AttachmentURLGeneratorTest.php b/tests/Services/Attachments/AttachmentURLGeneratorTest.php
index 3f2ea81f..b2798756 100644
--- a/tests/Services/Attachments/AttachmentURLGeneratorTest.php
+++ b/tests/Services/Attachments/AttachmentURLGeneratorTest.php
@@ -58,7 +58,7 @@ class AttachmentURLGeneratorTest extends WebTestCase
self::$service = self::$container->get(AttachmentURLGenerator::class);
}
- public function dataProvider()
+ public function dataProvider(): array
{
return [
['/public/test.jpg', 'test.jpg'],
diff --git a/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php b/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php
index a0778c2b..a084af66 100644
--- a/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php
+++ b/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php
@@ -63,7 +63,7 @@ class BuiltinAttachmentsFinderTest extends WebTestCase
self::$service = self::$container->get(BuiltinAttachmentsFinder::class);
}
- public function dataProvider()
+ public function dataProvider(): array
{
return [
//No value should return empty array
diff --git a/tests/Services/Parameters/ParameterExtractorTest.php b/tests/Services/Parameters/ParameterExtractorTest.php
index b88f0ab7..94b79576 100644
--- a/tests/Services/Parameters/ParameterExtractorTest.php
+++ b/tests/Services/Parameters/ParameterExtractorTest.php
@@ -1,4 +1,7 @@
For good, [b]bad[/b], evil"],
- ["Param:; Test"]
+ [':;'],
+ ['NPN Transistor'],
+ ['=BC547 rewr'],
+ ['For good, [b]bad[/b], evil'],
+ ['Param:; Test'],
];
}
/**
* @dataProvider emptyDataProvider
*/
- public function testShouldReturnEmpty(string $input)
+ public function testShouldReturnEmpty(string $input): void
{
$this->assertEmpty($this->service->extractParameters($input));
}
- public function testExtract()
+ public function testExtract(): void
{
$parameters = $this->service->extractParameters(' Operating Voltage: 10 V; Property : Value, Ström=1A (Test)');
$this->assertContainsOnly(AbstractParameter::class, $parameters);
@@ -70,6 +72,5 @@ class ParameterExtractorTest extends WebTestCase
$this->assertSame('Value', $parameters[1]->getValueText());
$this->assertSame('Ström', $parameters[2]->getName());
$this->assertSame('1A (Test)', $parameters[2]->getValueText());
-
}
}
diff --git a/tests/Services/PermissionResolverTest.php b/tests/Services/PermissionResolverTest.php
index b511ecf5..1ca02b6d 100644
--- a/tests/Services/PermissionResolverTest.php
+++ b/tests/Services/PermissionResolverTest.php
@@ -109,7 +109,7 @@ class PermissionResolverTest extends WebTestCase
$this->group->method('getParent')->willReturn($parent_group);
}
- public function getPermissionNames()
+ public function getPermissionNames(): array
{
//List all possible operation names.
return [
diff --git a/tests/Services/PricedetailHelperTest.php b/tests/Services/PricedetailHelperTest.php
index 2137cba4..94089ff0 100644
--- a/tests/Services/PricedetailHelperTest.php
+++ b/tests/Services/PricedetailHelperTest.php
@@ -64,7 +64,7 @@ class PricedetailHelperTest extends WebTestCase
$this->service = self::$container->get(PricedetailHelper::class);
}
- public function maxDiscountAmountDataProvider()
+ public function maxDiscountAmountDataProvider(): ?\Generator
{
$part = new Part();
yield [$part, null, 'Part without any orderdetails failed!'];
diff --git a/tests/Services/TFA/BackupCodeGeneratorTest.php b/tests/Services/TFA/BackupCodeGeneratorTest.php
index c25ce932..e343fc45 100644
--- a/tests/Services/TFA/BackupCodeGeneratorTest.php
+++ b/tests/Services/TFA/BackupCodeGeneratorTest.php
@@ -66,7 +66,7 @@ class BackupCodeGeneratorTest extends TestCase
new BackupCodeGenerator(4, 10);
}
- public function codeLengthDataProvider()
+ public function codeLengthDataProvider(): array
{
return [[6], [8], [10], [16]];
}
@@ -80,7 +80,7 @@ class BackupCodeGeneratorTest extends TestCase
$this->assertRegExp("/^([a-f0-9]){{$code_length}}\$/", $generator->generateSingleCode());
}
- public function codeCountDataProvider()
+ public function codeCountDataProvider(): array
{
return [[2], [8], [10]];
}
diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf
index a7bbeb73..8c4b7c0e 100644
--- a/translations/messages.de.xlf
+++ b/translations/messages.de.xlf
@@ -1,13 +1,13 @@
-
+ Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4templates\AdminPages\AttachmentTypeAdmin.html.twig:4
-
+ attachment_type.captionDateitypen für Anhänge
@@ -26,7 +26,7 @@
templates\base.html.twig:197templates\base.html.twig:225
-
+ category.labelpKategorien
@@ -39,7 +39,7 @@
Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11templates\AdminPages\CategoryAdmin.html.twig:8
-
+ admin.optionsOptionen
@@ -52,7 +52,7 @@
Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15templates\AdminPages\CategoryAdmin.html.twig:9
-
+ admin.advancedErweitert
@@ -62,7 +62,7 @@
Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4
-
+ currency.captionWährung
@@ -72,7 +72,7 @@
Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12
-
+ currency.iso_code.captionISO Code
@@ -82,7 +82,7 @@
Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15
-
+ currency.symbol.captionWährungssymbol
@@ -93,7 +93,7 @@
Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:4templates\AdminPages\DeviceAdmin.html.twig:4
-
+ device.captionBaugruppen
@@ -116,7 +116,7 @@
templates\base.html.twig:206templates\base.html.twig:237
-
+ search.placeholderSuche
@@ -132,7 +132,7 @@
templates\base.html.twig:193templates\base.html.twig:221
-
+ expandAllAlle ausklappen
@@ -148,7 +148,7 @@
templates\base.html.twig:194templates\base.html.twig:222
-
+ reduceAllAlle einklappen
@@ -159,7 +159,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45templates\AdminPages\EntityAdminBase.html.twig:35
-
+ edit.captionBearbeite Element "%name"
@@ -170,7 +170,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50templates\AdminPages\EntityAdminBase.html.twig:37
-
+ new.captionNeues Element
@@ -182,9 +182,9 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54Part-DB1\templates\Parts\info\_sidebar.html.twig:4
-
+ part.info.timetravel_hint
- part.info.timetravel_hint
+ Dies ist wie das Bauteil bevor dem %timestamp% aussah. <i>Beachten Sie, dass dieses Feature experimentell ist und die angezeigten Infos daher nicht unbedingt korrekt sind.</i>
@@ -193,7 +193,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60templates\AdminPages\EntityAdminBase.html.twig:42
-
+ standard.labelEigenschaften
@@ -204,7 +204,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61templates\AdminPages\EntityAdminBase.html.twig:43
-
+ infos.labelInformationen
@@ -215,7 +215,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63new
-
+ history.labelHistorie
@@ -226,7 +226,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66templates\AdminPages\EntityAdminBase.html.twig:45
-
+ export.labelExportieren
@@ -237,7 +237,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68templates\AdminPages\EntityAdminBase.html.twig:47
-
+ import_export.labelImport / Export
@@ -247,7 +247,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69
-
+ mass_creation.labelMasseneingabe
@@ -258,7 +258,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82templates\AdminPages\EntityAdminBase.html.twig:59
-
+ admin.commonAllgemein
@@ -268,7 +268,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86
-
+ admin.attachmentsDateianhänge
@@ -276,7 +276,6 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90
- newadmin.parameters
@@ -289,7 +288,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167templates\AdminPages\EntityAdminBase.html.twig:142
-
+ export_all.labelAlles exportieren
@@ -299,7 +298,7 @@
Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:184Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173
-
+ mass_creation.helpJede Zeile wird als Name für ein neues Element interpretiert und angelegt.
@@ -314,7 +313,7 @@
templates\base.html.twig:199templates\base.html.twig:227
-
+ footprint.labelpFootprints
@@ -324,7 +323,7 @@
Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4
-
+ group.edit.captionGruppen
@@ -336,7 +335,7 @@
Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9Part-DB1\templates\AdminPages\UserAdmin.html.twig:16
-
+ user.edit.permissionsBerechtigungen
@@ -347,7 +346,7 @@
Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4templates\AdminPages\ManufacturerAdmin.html.twig:4
-
+ manufacturer.captionHersteller
@@ -357,7 +356,7 @@
Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4
-
+ measurement_unit.captionMaßeinheit
@@ -372,7 +371,7 @@
templates\base.html.twig:198templates\base.html.twig:226
-
+ storelocation.labelpLagerorte
@@ -383,7 +382,7 @@
Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:4templates\AdminPages\SupplierAdmin.html.twig:4
-
+ supplier.captionLieferanten
@@ -393,7 +392,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:8Part-DB1\templates\AdminPages\UserAdmin.html.twig:8
-
+ user.edit.captionBenutzer
@@ -403,7 +402,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:14Part-DB1\templates\AdminPages\UserAdmin.html.twig:14
-
+ user.edit.configurationKonfiguration
@@ -413,7 +412,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:15Part-DB1\templates\AdminPages\UserAdmin.html.twig:15
-
+ user.edit.passwordPasswort
@@ -423,7 +422,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:45Part-DB1\templates\AdminPages\UserAdmin.html.twig:45
-
+ user.edit.tfa.captionZwei-Faktor-Authentifizierung
@@ -433,7 +432,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:47Part-DB1\templates\AdminPages\UserAdmin.html.twig:47
-
+ user.edit.tfa.google_activeAuthentifizierungsapp aktiv
@@ -447,7 +446,7 @@
Part-DB1\templates\Users\backup_codes.html.twig:15Part-DB1\templates\Users\_2fa_settings.html.twig:95
-
+ tfa_backup.remaining_tokensVerbleibende Backupcodes
@@ -461,7 +460,7 @@
Part-DB1\templates\Users\backup_codes.html.twig:17Part-DB1\templates\Users\_2fa_settings.html.twig:96
-
+ tfa_backup.generation_dateErzeugungsdatum der Backupcodes
@@ -473,7 +472,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:53Part-DB1\templates\AdminPages\UserAdmin.html.twig:60
-
+ user.edit.tfa.disabledMethode deaktiviert
@@ -483,7 +482,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:56Part-DB1\templates\AdminPages\UserAdmin.html.twig:56
-
+ user.edit.tfa.u2f_keys_countAktive Sicherheitsschlüssel
@@ -493,7 +492,7 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:72Part-DB1\templates\AdminPages\UserAdmin.html.twig:72
-
+ user.edit.tfa.disable_tfa_titleWirklich fortfahren?
@@ -503,11 +502,11 @@
Part-DB1\templates\AdminPages\UserAdmin.html.twig:72Part-DB1\templates\AdminPages\UserAdmin.html.twig:72
-
+ user.edit.tfa.disable_tfa_message
- alle aktiven Zwei-Faktor-Authentifizierungsmethoden des Nutzers deaktivieren und die Backupcodes löschen!
-Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müssen und neue Backupcodes ausdrucken müssen!
-Führen sie dies nur durch, wenn Sie über die Identität des (um Hilfe suchenden) Benutzers absolut sicher sind, da ansonsten eine Kompromittierung des Accounts durch einen Angreifer erfolgen könnte!]]>
+ Dies wird <b>alle aktiven Zwei-Faktor-Authentifizierungsmethoden des Nutzers deaktivieren</b> und die <b>Backupcodes löschen</b>! <br>
+Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müssen und neue Backupcodes ausdrucken müssen! <br><br>
+<b>Führen sie dies nur durch, wenn Sie über die Identität des (um Hilfe suchenden) Benutzers absolut sicher sind, da ansonsten eine Kompromittierung des Accounts durch einen Angreifer erfolgen könnte!</b>
@@ -515,7 +514,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\AdminPages\UserAdmin.html.twig:73Part-DB1\templates\AdminPages\UserAdmin.html.twig:73
-
+ user.edit.tfa.disable_tfa.btnAlle Zwei-Faktor-Authentifizierungsmethoden deaktivieren
@@ -529,7 +528,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\Parts\edit\_attachments.html.twig:4Part-DB1\templates\Parts\info\_attachments_info.html.twig:63
-
+ attachment.deleteLöschen
@@ -543,7 +542,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\Parts\edit\_attachments.html.twig:38Part-DB1\src\DataTables\AttachmentDataTable.php:159
-
+ attachment.externalExtern
@@ -555,7 +554,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\AdminPages\_attachments.html.twig:47Part-DB1\templates\Parts\edit\_attachments.html.twig:45
-
+ attachment.preview.altThumbnail des Dateianhanges
@@ -569,7 +568,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\Parts\edit\_attachments.html.twig:48Part-DB1\templates\Parts\info\_attachments_info.html.twig:45
-
+ attachment.viewAnzeigen
@@ -585,7 +584,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\Parts\info\_attachments_info.html.twig:38Part-DB1\src\DataTables\AttachmentDataTable.php:166
-
+ attachment.file_not_foundDatei nicht gefunden
@@ -597,7 +596,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\AdminPages\_attachments.html.twig:64Part-DB1\templates\Parts\edit\_attachments.html.twig:62
-
+ attachment.securePrivat
@@ -609,7 +608,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\AdminPages\_attachments.html.twig:77Part-DB1\templates\Parts\edit\_attachments.html.twig:75
-
+ attachment.createDateianhang hinzufügen
@@ -623,7 +622,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\Parts\edit\_attachments.html.twig:80Part-DB1\templates\Parts\edit\_lots.html.twig:33
-
+ part_lot.edit.delete.confirmMöchten Sie diesen Bestand wirklich löschen? Dies kann nicht rückgängig gemacht werden!
@@ -634,7 +633,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\AdminPages\_delete_form.html.twig:2templates\AdminPages\_delete_form.html.twig:2
-
+ entity.delete.confirm_titleWollen sie das Element %name% wirklich löschen?
@@ -645,7 +644,7 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs
Part-DB1\templates\AdminPages\_delete_form.html.twig:3templates\AdminPages\_delete_form.html.twig:3
-
+ entity.delete.messageDiese Aktion lässt sich nicht rückgängig machen!
@@ -658,7 +657,7 @@ Subelemente werden beim Löschen nach oben verschoben.Part-DB1\templates\AdminPages\_delete_form.html.twig:11templates\AdminPages\_delete_form.html.twig:9
-
+ entity.deleteElement löschen
@@ -673,7 +672,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\src\Form\Part\PartBaseType.php:267new
-
+ edit.log_commentÄnderungskommentar
@@ -684,7 +683,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_delete_form.html.twig:24templates\AdminPages\_delete_form.html.twig:12
-
+ entity.delete.recursiveRekursiv (alle Unterelemente) löschen
@@ -698,7 +697,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\AdminPages\_export_form.html.twig:4src\Form\ImportType.php:67
-
+ export.formatDateiformat
@@ -709,7 +708,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_export_form.html.twig:16templates\AdminPages\_export_form.html.twig:16
-
+ export.levelAusführlichkeit
@@ -720,7 +719,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_export_form.html.twig:19templates\AdminPages\_export_form.html.twig:19
-
+ export.level.simpleEinfach
@@ -731,7 +730,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_export_form.html.twig:20templates\AdminPages\_export_form.html.twig:20
-
+ export.level.extendedErweitert
@@ -742,7 +741,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_export_form.html.twig:21templates\AdminPages\_export_form.html.twig:21
-
+ export.level.fullVollständig
@@ -753,7 +752,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_export_form.html.twig:31templates\AdminPages\_export_form.html.twig:31
-
+ export.include_childrenUnterelemente auch exportieren
@@ -764,7 +763,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_export_form.html.twig:39templates\AdminPages\_export_form.html.twig:39
-
+ export.btnExportieren
@@ -783,7 +782,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\edit_part_info.html.twig:12templates\Parts\show_part_info.html.twig:11
-
+ id.labelID
@@ -807,7 +806,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\AdminPages\EntityAdminBase.html.twig:101templates\Parts\show_part_info.html.twig:248
-
+ createdAtErstellt am
@@ -825,7 +824,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\AdminPages\EntityAdminBase.html.twig:114templates\Parts\show_part_info.html.twig:263
-
+ lastModifiedZuletzt bearbeitet
@@ -835,7 +834,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_info.html.twig:38Part-DB1\templates\AdminPages\_info.html.twig:38
-
+ entity.info.parts_countBauteile mit diesem Element
@@ -846,7 +845,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\helper.twig:120Part-DB1\templates\Parts\edit\_specifications.html.twig:6
-
+ specifications.propertyParameter
@@ -856,7 +855,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:7Part-DB1\templates\Parts\edit\_specifications.html.twig:7
-
+ specifications.symbolSymbol
@@ -866,7 +865,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:8Part-DB1\templates\Parts\edit\_specifications.html.twig:8
-
+ specifications.value_minMin.
@@ -876,7 +875,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:9Part-DB1\templates\Parts\edit\_specifications.html.twig:9
-
+ specifications.value_typTyp.
@@ -886,7 +885,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:10Part-DB1\templates\Parts\edit\_specifications.html.twig:10
-
+ specifications.value_maxMax.
@@ -896,7 +895,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:11Part-DB1\templates\Parts\edit\_specifications.html.twig:11
-
+ specifications.unitEinheit
@@ -906,7 +905,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:12Part-DB1\templates\Parts\edit\_specifications.html.twig:12
-
+ specifications.textText
@@ -915,7 +914,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:13Part-DB1\templates\Parts\edit\_specifications.html.twig:13
- newspecifications.group
@@ -926,7 +924,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:26Part-DB1\templates\Parts\edit\_specifications.html.twig:26
- newspecification.create
@@ -937,7 +934,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\AdminPages\_parameters.html.twig:31Part-DB1\templates\Parts\edit\_specifications.html.twig:31
- newparameter.delete.confirm
@@ -949,7 +945,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\attachment_list.html.twig:3Part-DB1\templates\attachment_list.html.twig:3
-
+ attachment.list.titleDateianhänge
@@ -963,7 +959,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\LogSystem\_log_table.html.twig:8Part-DB1\templates\Parts\lists\_parts_list.html.twig:6
-
+ part_list.loading.captionLade
@@ -977,7 +973,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\LogSystem\_log_table.html.twig:9Part-DB1\templates\Parts\lists\_parts_list.html.twig:7
-
+ part_list.loading.messageDies kann einen Moment dauern. Wenn diese Nachricht längere Zeit bestehen bleibt, versuchen sie die Seite erneut zu laden.
@@ -988,7 +984,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\base.html.twig:68templates\base.html.twig:246
-
+ vendor.base.javascript_hintAktivieren Sie Javascript um alle Features zu nutzen!
@@ -998,7 +994,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\base.html.twig:73Part-DB1\templates\base.html.twig:73
-
+ sidebar.big.toggleSeitenleiste ein/ausblenden
@@ -1009,7 +1005,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\base.html.twig:95templates\base.html.twig:271
-
+ loading.captionLade:
@@ -1020,7 +1016,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\base.html.twig:96templates\base.html.twig:272
-
+ loading.messageDies kann einen Moment dauern. Sollte diese Nachricht bestehen bleiben, dann laden sie die Seite erneut.
@@ -1031,7 +1027,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\base.html.twig:101templates\base.html.twig:277
-
+ loading.barLade...
@@ -1042,7 +1038,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\base.html.twig:112templates\base.html.twig:288
-
+ back_to_topZurück zum Seitenbeginn
@@ -1052,7 +1048,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Form\permissionLayout.html.twig:35Part-DB1\templates\Form\permissionLayout.html.twig:35
-
+ permission.edit.permissionBerechtigung
@@ -1062,7 +1058,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Form\permissionLayout.html.twig:36Part-DB1\templates\Form\permissionLayout.html.twig:36
-
+ permission.edit.valueWert
@@ -1072,7 +1068,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Form\permissionLayout.html.twig:53Part-DB1\templates\Form\permissionLayout.html.twig:53
-
+ permission.legend.titleErläuterung der Zustände
@@ -1082,7 +1078,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Form\permissionLayout.html.twig:57Part-DB1\templates\Form\permissionLayout.html.twig:57
-
+ permission.legend.disallowVerboten
@@ -1092,7 +1088,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Form\permissionLayout.html.twig:61Part-DB1\templates\Form\permissionLayout.html.twig:61
-
+ permission.legend.allowErlaubt
@@ -1102,7 +1098,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Form\permissionLayout.html.twig:65Part-DB1\templates\Form\permissionLayout.html.twig:65
-
+ permission.legend.inheritErbe von (übergeordneter) Gruppe
@@ -1112,7 +1108,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\helper.twig:3Part-DB1\templates\helper.twig:3
-
+ bool.trueJa
@@ -1122,7 +1118,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\helper.twig:5Part-DB1\templates\helper.twig:5
-
+ bool.falseNein
@@ -1132,7 +1128,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\helper.twig:87Part-DB1\templates\helper.twig:87
-
+ YesJa
@@ -1142,7 +1138,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\helper.twig:89Part-DB1\templates\helper.twig:89
-
+ NoNein
@@ -1150,7 +1146,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\helper.twig:121
- newspecifications.value
@@ -1163,7 +1158,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:7templates\homepage.html.twig:7
-
+ version.captionVersion
@@ -1174,7 +1169,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:22templates\homepage.html.twig:19
-
+ homepage.licenseLizenzinformation
@@ -1185,7 +1180,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:31templates\homepage.html.twig:28
-
+ homepage.github.captionProjektseite
@@ -1196,9 +1191,9 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:31templates\homepage.html.twig:28
-
+ homepage.github.text
- GitHub Projektseite]]>
+ Quellcode, Downloads, Bugreports, ToDo-Liste usw. gibts auf der <a class="link-external" target="_blank" href="%href%">GitHub Projektseite</a>
@@ -1207,7 +1202,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:32templates\homepage.html.twig:29
-
+ homepage.help.captionHilfe
@@ -1218,9 +1213,9 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:32templates\homepage.html.twig:29
-
+ homepage.help.text
- Wiki der GitHub Seite.]]>
+ Hilfe und Tipps finden sie im <a class="link-external" rel="noopener" target="_blank" href="%href%">Wiki</a> der GitHub Seite.
@@ -1229,7 +1224,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:33templates\homepage.html.twig:30
-
+ homepage.forum.captionForum
@@ -1240,9 +1235,9 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:33templates\homepage.html.twig:30
-
+ homepage.forum.text
- mikrocontroller.net]]>
+ Für Fragen rund um die Part-DB gibt es einen Thread auf <a class="link-external" rel="noopener" target="_blank" href="%href%">mikrocontroller.net</a>
@@ -1251,7 +1246,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:34templates\homepage.html.twig:31
-
+ homepage.wiki.captionWiki
@@ -1262,9 +1257,9 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:34templates\homepage.html.twig:31
-
+ homepage.wiki.text
- mikrocontroller.net Artikel]]>
+ Weitere Informationen gibt es im <a class="link-external" rel="noopener" target="_blank" href="%href%">mikrocontroller.net Artikel</a>
@@ -1273,7 +1268,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:36templates\homepage.html.twig:33
-
+ homepage.basedOn Basierend auf dem originale Part-DB von
@@ -1284,7 +1279,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:39templates\homepage.html.twig:36
-
+ homepage.others und anderen
@@ -1295,7 +1290,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\homepage.html.twig:45new
-
+ homepage.last_activityLetzte Aktivitäten
@@ -1305,7 +1300,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\LogSystem\log_list.html.twig:3Part-DB1\templates\LogSystem\log_list.html.twig:3
-
+ log.list.titleSystemlog
@@ -1316,7 +1311,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\LogSystem\_log_table.html.twig:1new
-
+ log.undo.confirm_titleÄnderung wirklich rückgängig machen / Element wirklich zurücksetzen?
@@ -1327,7 +1322,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\LogSystem\_log_table.html.twig:2new
-
+ log.undo.confirm_messageWollen Sie wirklich die gegebene Änderung rückgängig machen / Das Element auf einen alten Versionsstand zurücksetzen?
@@ -1337,7 +1332,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\base.html.twig:24Part-DB1\templates\mail\base.html.twig:24
-
+ mail.footer.email_sent_byDiese Email wurde automatisch erstellt von
@@ -1347,7 +1342,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\base.html.twig:24Part-DB1\templates\mail\base.html.twig:24
-
+ mail.footer.dont_replyAntworten Sie nicht auf diese Email.
@@ -1357,7 +1352,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\pw_reset.html.twig:6Part-DB1\templates\mail\pw_reset.html.twig:6
-
+ email.hi %name%Hallo %name%
@@ -1367,7 +1362,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\pw_reset.html.twig:7Part-DB1\templates\mail\pw_reset.html.twig:7
-
+ email.pw_reset.messagejemand (hoffentlich Sie) hat ein Reset ihres Passwortes angefordert. Wenn diese Anfrage nicht von Ihnen stammt, ignorieren sie diese Email.
@@ -1377,7 +1372,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\pw_reset.html.twig:9Part-DB1\templates\mail\pw_reset.html.twig:9
-
+ email.pw_reset.buttonPasswort zurücksetzen
@@ -1387,9 +1382,9 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\pw_reset.html.twig:11Part-DB1\templates\mail\pw_reset.html.twig:11
-
+ email.pw_reset.fallback
- %url% auf und geben Sie die folgenden Daten ein]]>
+ Wenn dies nicht funktioniert, rufen Sie <a href="%url%">%url%</a> auf und geben Sie die folgenden Daten ein
@@ -1397,7 +1392,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\pw_reset.html.twig:16Part-DB1\templates\mail\pw_reset.html.twig:16
-
+ email.pw_reset.usernameBenutzername
@@ -1407,7 +1402,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\pw_reset.html.twig:19Part-DB1\templates\mail\pw_reset.html.twig:19
-
+ email.pw_reset.tokenToken
@@ -1417,9 +1412,9 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\mail\pw_reset.html.twig:24Part-DB1\templates\mail\pw_reset.html.twig:24
-
+ email.pw_reset.valid_unit %date%
- %date%]]>
+ Das Reset Token ist gültig bis <i>%date%</i>
@@ -1429,7 +1424,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58
-
+ orderdetail.deleteLöschen
@@ -1439,7 +1434,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39
-
+ pricedetails.edit.min_qtyMindestbestellmenge
@@ -1449,7 +1444,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40
-
+ pricedetails.edit.pricePreis
@@ -1459,7 +1454,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41
-
+ pricedetails.edit.price_qtyfür Menge
@@ -1469,7 +1464,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54
-
+ pricedetail.createPreis hinzufügen
@@ -1480,7 +1475,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4templates\Parts\edit_part_info.html.twig:4
-
+ part.edit.titleBearbeite Bauteil %name%
@@ -1491,7 +1486,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9templates\Parts\edit_part_info.html.twig:9
-
+ part.edit.card_titleBearbeite Bauteileinformationen von
@@ -1501,7 +1496,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22
-
+ part.edit.tab.commonAllgemein
@@ -1511,7 +1506,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28
-
+ part.edit.tab.manufacturerHersteller
@@ -1521,7 +1516,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34
-
+ part.edit.tab.advancedErweiterte Optionen
@@ -1531,7 +1526,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40
-
+ part.edit.tab.part_lotsLagerbestände
@@ -1541,7 +1536,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46
-
+ part.edit.tab.attachmentsDateianhänge
@@ -1551,7 +1546,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52
-
+ part.edit.tab.orderdetailsBestellinformationen
@@ -1559,7 +1554,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58
- newpart.edit.tab.specifications
@@ -1571,7 +1565,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58
-
+ part.edit.tab.commentKommentar
@@ -1582,7 +1576,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\new_part.html.twig:8templates\Parts\new_part.html.twig:8
-
+ part.new.card_titleNeues Bauteil erstellen
@@ -1592,7 +1586,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\_lots.html.twig:5Part-DB1\templates\Parts\edit\_lots.html.twig:5
-
+ part_lot.deleteLöschen
@@ -1602,7 +1596,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\_lots.html.twig:28Part-DB1\templates\Parts\edit\_lots.html.twig:28
-
+ part_lot.createBestand anlegen
@@ -1612,7 +1606,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13
-
+ orderdetail.createLieferant hinzufügen
@@ -1622,7 +1616,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18
-
+ pricedetails.edit.delete.confirmMöchten Sie diesen Preis wirklich löschen? Das kann nicht rückgängig gemacht werden!
@@ -1632,7 +1626,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\edit\_orderdetails.html.twig:65Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61
-
+ orderdetails.edit.delete.confirmMöchten Sie diesen Lieferanten wirklich löschen? Dies kann nicht rückgängig gemacht werden!
@@ -1646,7 +1640,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\show_part_info.html.twig:4templates\Parts\show_part_info.html.twig:9
-
+ part.info.titleDetailinfo für
@@ -1656,7 +1650,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\show_part_info.html.twig:47Part-DB1\templates\Parts\info\show_part_info.html.twig:47
-
+ part.part_lots.labelLagerbestände
@@ -1671,7 +1665,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\show_part_info.html.twig:74src\Form\PartType.php:86
-
+ comment.labelKommentar
@@ -1679,7 +1673,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\show_part_info.html.twig:64
- newpart.info.specifications
@@ -1692,7 +1685,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\show_part_info.html.twig:64templates\Parts\show_part_info.html.twig:82
-
+ attachment.labelpDateianhänge
@@ -1703,7 +1696,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\show_part_info.html.twig:71templates\Parts\show_part_info.html.twig:88
-
+ vendor.partinfo.shopping_infosEinkaufsinformationen
@@ -1714,7 +1707,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\show_part_info.html.twig:78templates\Parts\show_part_info.html.twig:94
-
+ vendor.partinfo.historyHistorie
@@ -1733,7 +1726,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\base.html.twig:231templates\Parts\show_part_info.html.twig:100
-
+ tools.labelTools
@@ -1743,7 +1736,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\show_part_info.html.twig:103Part-DB1\templates\Parts\info\show_part_info.html.twig:90
-
+ extended_info.labelErweiterte Informationen
@@ -1753,7 +1746,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_attachments_info.html.twig:7Part-DB1\templates\Parts\info\_attachments_info.html.twig:7
-
+ attachment.nameName
@@ -1763,7 +1756,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_attachments_info.html.twig:8Part-DB1\templates\Parts\info\_attachments_info.html.twig:8
-
+ attachment.attachment_typeAnhangstyp
@@ -1773,7 +1766,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_attachments_info.html.twig:9Part-DB1\templates\Parts\info\_attachments_info.html.twig:9
-
+ attachment.file_nameDateiname
@@ -1783,7 +1776,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_attachments_info.html.twig:10Part-DB1\templates\Parts\info\_attachments_info.html.twig:10
-
+ attachment.file_sizeDateigröße
@@ -1793,7 +1786,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_attachments_info.html.twig:34Part-DB1\templates\Parts\info\_attachments_info.html.twig:34
-
+ attachment.external_fileExterne Datei
@@ -1803,7 +1796,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_attachments_info.html.twig:50Part-DB1\templates\Parts\info\_attachments_info.html.twig:50
-
+ attachment.downloadHerunterladen
@@ -1813,7 +1806,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_attachments_info.html.twig:62Part-DB1\templates\Parts\info\_attachments_info.html.twig:62
-
+ attachment.editBearbeiten
@@ -1824,7 +1817,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_extended_infos.html.twig:11new
-
+ user.creating_userNutzer der dieses Bauteil erstellte
@@ -1838,7 +1831,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_extended_infos.html.twig:28Part-DB1\templates\Parts\info\_extended_infos.html.twig:50
-
+ UnknownUnbekannt
@@ -1851,7 +1844,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_extended_infos.html.twig:30new
-
+ accessDeniedZugriff verboten
@@ -1862,7 +1855,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_extended_infos.html.twig:26new
-
+ user.last_editing_userNutzer der dieses Bauteil zu Letzt bearbeitete
@@ -1872,7 +1865,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_extended_infos.html.twig:41Part-DB1\templates\Parts\info\_extended_infos.html.twig:41
-
+ part.isFavoriteFavorit
@@ -1882,7 +1875,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_extended_infos.html.twig:46Part-DB1\templates\Parts\info\_extended_infos.html.twig:46
-
+ part.minOrderAmountMindestbestellmenge
@@ -1899,7 +1892,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\show_part_info.html.twig:24src\Form\PartType.php:80
-
+ manufacturer.labelHersteller
@@ -1910,7 +1903,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_main_infos.html.twig:27new
-
+ part.back_to_infoZurück zum aktuellen Versionsstand
@@ -1925,7 +1918,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\show_part_info.html.twig:31src\Form\PartType.php:65
-
+ description.labelBeschreibung
@@ -1942,7 +1935,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\show_part_info.html.twig:32src\Form\PartType.php:74
-
+ category.labelKategorie
@@ -1954,7 +1947,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\show_part_info.html.twig:42src\Form\PartType.php:69
-
+ instock.labelIm Lager
@@ -1966,7 +1959,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\Parts\show_part_info.html.twig:44src\Form\PartType.php:72
-
+ mininstock.labelMindestbestand
@@ -1982,7 +1975,7 @@ Subelemente werden beim Löschen nach oben verschoben.
templates\base.html.twig:73templates\Parts\show_part_info.html.twig:47
-
+ footprint.labelFootprint
@@ -1995,7 +1988,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_main_infos.html.twig:60templates\Parts\show_part_info.html.twig:51
-
+ part.avg_price.labelDurchschnittspreis
@@ -2005,7 +1998,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_order_infos.html.twig:5Part-DB1\templates\Parts\info\_order_infos.html.twig:5
-
+ part.supplier.nameName
@@ -2015,7 +2008,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_order_infos.html.twig:6Part-DB1\templates\Parts\info\_order_infos.html.twig:6
-
+ part.supplier.partnrBestellnr.
@@ -2025,7 +2018,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_order_infos.html.twig:28Part-DB1\templates\Parts\info\_order_infos.html.twig:28
-
+ part.order.minamountMindestanzahl
@@ -2035,7 +2028,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_order_infos.html.twig:29Part-DB1\templates\Parts\info\_order_infos.html.twig:29
-
+ part.order.pricePreis
@@ -2045,7 +2038,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_order_infos.html.twig:31Part-DB1\templates\Parts\info\_order_infos.html.twig:31
-
+ part.order.single_priceStückpreis
@@ -2055,7 +2048,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_order_infos.html.twig:71Part-DB1\templates\Parts\info\_order_infos.html.twig:71
-
+ edit.caption_shortBearbeiten
@@ -2065,7 +2058,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_order_infos.html.twig:72Part-DB1\templates\Parts\info\_order_infos.html.twig:72
-
+ delete.captionLöschen
@@ -2075,7 +2068,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:6Part-DB1\templates\Parts\info\_part_lots.html.twig:6
-
+ part_lots.descriptionBeschreibung
@@ -2085,7 +2078,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:7Part-DB1\templates\Parts\info\_part_lots.html.twig:7
-
+ part_lots.storage_locationLagerort
@@ -2095,7 +2088,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:8Part-DB1\templates\Parts\info\_part_lots.html.twig:8
-
+ part_lots.amountMenge
@@ -2105,7 +2098,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:22Part-DB1\templates\Parts\info\_part_lots.html.twig:22
-
+ part_lots.location_unknownLagerort unbekannt
@@ -2115,7 +2108,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:29Part-DB1\templates\Parts\info\_part_lots.html.twig:29
-
+ part_lots.instock_unknownMenge unbekannt
@@ -2125,7 +2118,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:38Part-DB1\templates\Parts\info\_part_lots.html.twig:38
-
+ part_lots.expiration_dateAblaufdatum
@@ -2135,7 +2128,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:46Part-DB1\templates\Parts\info\_part_lots.html.twig:46
-
+ part_lots.is_expiredAbgelaufen
@@ -2145,7 +2138,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_part_lots.html.twig:53Part-DB1\templates\Parts\info\_part_lots.html.twig:53
-
+ part_lots.need_refillMuss aufgefüllt werden
@@ -2155,7 +2148,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_picture.html.twig:15Part-DB1\templates\Parts\info\_picture.html.twig:15
-
+ part.info.prev_pictureVorheriges Bild
@@ -2165,7 +2158,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_picture.html.twig:19Part-DB1\templates\Parts\info\_picture.html.twig:19
-
+ part.info.next_pictureNächstes Bild
@@ -2175,7 +2168,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_sidebar.html.twig:21Part-DB1\templates\Parts\info\_sidebar.html.twig:21
-
+ part.mass.tooltipGewicht
@@ -2185,7 +2178,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_sidebar.html.twig:30Part-DB1\templates\Parts\info\_sidebar.html.twig:30
-
+ part.needs_review.badgeReview benötigt
@@ -2195,7 +2188,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_sidebar.html.twig:39Part-DB1\templates\Parts\info\_sidebar.html.twig:39
-
+ part.favorite.badgeFavorit
@@ -2205,7 +2198,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_sidebar.html.twig:47Part-DB1\templates\Parts\info\_sidebar.html.twig:47
-
+ part.obsolete.badgeNicht mehr lieferbar
@@ -2213,7 +2206,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_specifications.html.twig:10
- newparameters.extracted_from_description
@@ -2223,7 +2215,6 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_specifications.html.twig:15
- newparameters.auto_extracted_from_comment
@@ -2236,7 +2227,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_tools.html.twig:4templates\Parts\show_part_info.html.twig:125
-
+ part.edit.btnBauteil bearbeiten
@@ -2247,7 +2238,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_tools.html.twig:14templates\Parts\show_part_info.html.twig:135
-
+ part.clone.btnBauteil kopieren
@@ -2258,7 +2249,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_tools.html.twig:22templates\Parts\show_part_info.html.twig:143
-
+ part.create.btnNeues Bauteil anlegen
@@ -2268,7 +2259,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_tools.html.twig:29Part-DB1\templates\Parts\info\_tools.html.twig:29
-
+ part.delete.confirm_titleMöchten Sie dieses Bauteil wirklich löschen?
@@ -2278,7 +2269,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_tools.html.twig:30Part-DB1\templates\Parts\info\_tools.html.twig:30
-
+ part.delete.messageDas Bauteil und alle zugehörigen Informationen (Bestände, Dateianhänge, etc.) werden gelöscht. Dies kann nicht rückgängig gemacht werden.
@@ -2288,7 +2279,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\info\_tools.html.twig:37Part-DB1\templates\Parts\info\_tools.html.twig:37
-
+ part.deleteBauteil löschen
@@ -2298,7 +2289,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\all_list.html.twig:4Part-DB1\templates\Parts\lists\all_list.html.twig:4
-
+ parts_list.all.titleAlle Bauteile
@@ -2308,7 +2299,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\category_list.html.twig:4Part-DB1\templates\Parts\lists\category_list.html.twig:4
-
+ parts_list.category.titleBauteile mit Kategorie
@@ -2318,7 +2309,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\footprint_list.html.twig:4Part-DB1\templates\Parts\lists\footprint_list.html.twig:4
-
+ parts_list.footprint.titleBauteile mit Footprint
@@ -2328,7 +2319,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4
-
+ parts_list.manufacturer.titleBauteile mit Hersteller
@@ -2338,7 +2329,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\search_list.html.twig:4Part-DB1\templates\Parts\lists\search_list.html.twig:4
-
+ parts_list.search.titleBauteilesuche
@@ -2348,7 +2339,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\store_location_list.html.twig:4Part-DB1\templates\Parts\lists\store_location_list.html.twig:4
-
+ parts_list.storelocation.titleBauteile mit Lagerort
@@ -2358,7 +2349,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\supplier_list.html.twig:4Part-DB1\templates\Parts\lists\supplier_list.html.twig:4
-
+ parts_list.supplier.titleBauteile mit Lieferant
@@ -2368,7 +2359,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\tags_list.html.twig:4Part-DB1\templates\Parts\lists\tags_list.html.twig:4
-
+ parts_list.tags.titleBauteile mit Tag
@@ -2378,7 +2369,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\_info_card.html.twig:17Part-DB1\templates\Parts\lists\_info_card.html.twig:17
-
+ entity.info.common.tabAllgemein
@@ -2388,7 +2379,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\_info_card.html.twig:20Part-DB1\templates\Parts\lists\_info_card.html.twig:20
-
+ entity.info.statistics.tabStatistik
@@ -2398,7 +2389,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\_info_card.html.twig:30Part-DB1\templates\Parts\lists\_info_card.html.twig:30
-
+ entity.info.nameName
@@ -2410,7 +2401,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\_info_card.html.twig:34Part-DB1\templates\Parts\lists\_info_card.html.twig:67
-
+ entity.info.parentÜbergeordnetes Element
@@ -2420,7 +2411,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\_info_card.html.twig:46Part-DB1\templates\Parts\lists\_info_card.html.twig:46
-
+ entity.edit.btnBearbeiten
@@ -2430,7 +2421,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Parts\lists\_info_card.html.twig:63Part-DB1\templates\Parts\lists\_info_card.html.twig:63
-
+ entity.info.children_countAnzahl an Unterelementen
@@ -2442,7 +2433,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\2fa_base_form.html.twig:3Part-DB1\templates\security\2fa_base_form.html.twig:5
-
+ tfa.check.titleZwei-Faktor-Authentifizierung benötigt
@@ -2452,7 +2443,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\2fa_base_form.html.twig:39Part-DB1\templates\security\2fa_base_form.html.twig:39
-
+ tfa.code.trusted_pcDies ist ein vertrauenswürdiger Computer (wenn dies aktiviert ist, werden auf diesem Computer keine weiteren Zwei-Faktor-Abfragen durchgeführt)
@@ -2464,7 +2455,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\2fa_base_form.html.twig:52Part-DB1\templates\security\login.html.twig:58
-
+ login.btnLogin
@@ -2478,7 +2469,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_login.html.twig:13Part-DB1\templates\_navbar.html.twig:40
-
+ user.logoutAusloggen
@@ -2488,7 +2479,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\2fa_form.html.twig:6Part-DB1\templates\security\2fa_form.html.twig:6
-
+ tfa.check.code.labelAuthenticator App Code
@@ -2498,7 +2489,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\2fa_form.html.twig:10Part-DB1\templates\security\2fa_form.html.twig:10
-
+ tfa.check.code.helpGeben Sie hier den 6-stelligen Code aus ihrer Authenticator App ein oder einen ihrer Backupcodes, wenn der Authenticator nicht verfügbar ist.
@@ -2509,7 +2500,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:3templates\security\login.html.twig:3
-
+ login.titleLogin
@@ -2520,7 +2511,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:7templates\security\login.html.twig:7
-
+ login.card_titleLogin
@@ -2531,7 +2522,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:31templates\security\login.html.twig:31
-
+ login.username.labelBenutzername
@@ -2542,7 +2533,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:34templates\security\login.html.twig:34
-
+ login.username.placeholderBenutzername
@@ -2553,7 +2544,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:38templates\security\login.html.twig:38
-
+ login.password.labelPasswort
@@ -2564,7 +2555,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:40templates\security\login.html.twig:40
-
+ login.password.placeholderPasswort
@@ -2575,7 +2566,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:50templates\security\login.html.twig:50
-
+ login.remembermeEingeloggt bleiben (nicht empfohlen auf geteilten Computern)
@@ -2585,7 +2576,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\login.html.twig:64Part-DB1\templates\security\login.html.twig:64
-
+ pw_reset.password_forgetNutzername/Passwort vergessen?
@@ -2595,7 +2586,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\pw_reset_new_pw.html.twig:5Part-DB1\templates\security\pw_reset_new_pw.html.twig:5
-
+ pw_reset.new_pw.header.titleNeues Passwort setzen
@@ -2605,7 +2596,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\pw_reset_request.html.twig:5Part-DB1\templates\security\pw_reset_request.html.twig:5
-
+ pw_reset.request.header.titleNeues Passwort anfordern
@@ -2617,7 +2608,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_login.html.twig:7Part-DB1\templates\security\U2F\u2f_register.html.twig:10
-
+ tfa_u2f.http_warningSie greifen auf diese Seite über das unsichere HTTP-Verfahren zu, daher wird U2F sehr wahrscheinlich nicht funktionieren (Fehlermeldung Bad Request). Bitten Sie einen Adminstrator das sichere HTTPS Verfahren einzurichten, wenn Sie Sicherheitsschlüssel benutzen möchten.
@@ -2629,7 +2620,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_login.html.twig:10Part-DB1\templates\security\U2F\u2f_register.html.twig:22
-
+ r_u2f_two_factor.pressbuttonBitte Sicherheitsschlüssel einstecken und Button drücken!
@@ -2639,7 +2630,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_register.html.twig:3Part-DB1\templates\security\U2F\u2f_register.html.twig:3
-
+ tfa_u2f.add_key.titleSicherheitsschlüssel hinzufügen
@@ -2651,7 +2642,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_register.html.twig:6Part-DB1\templates\Users\_2fa_settings.html.twig:111
-
+ tfa_u2f.explanationMithilfe eines U2F/FIDO kompatiblem Sicherheitsschlüssel (z.B. YubiKey oder NitroKey) kann eine benutzerfreundliche und sichere Zwei-Faktor-Authentifizierung ermöglicht. Die Sicherheitsschlüssel können hier registriert werden, und wird eine Zwei-Faktor-Überprüfung benötigt, so muss der Schlüssel nur per USB angesteckt oder per NFC gegen das Gerät getippt werden.
@@ -2661,7 +2652,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_register.html.twig:7Part-DB1\templates\security\U2F\u2f_register.html.twig:7
-
+ tfa_u2f.add_key.backup_hintUm den Zugang auch bei Verlust des Schlüssels zu gewährleisten, ist es empfehlenswert einen zweiten Schlüssel als Backup zu registrieren und diesen an einem sicherem Ort zu lagern!
@@ -2671,7 +2662,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_register.html.twig:16Part-DB1\templates\security\U2F\u2f_register.html.twig:16
-
+ r_u2f_two_factor.nameAnzeigename des Schlüssels (z.B. Backup)
@@ -2681,7 +2672,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_register.html.twig:19Part-DB1\templates\security\U2F\u2f_register.html.twig:19
-
+ tfa_u2f.add_key.add_buttonSchlüssel hinzufügen
@@ -2691,7 +2682,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\security\U2F\u2f_register.html.twig:27Part-DB1\templates\security\U2F\u2f_register.html.twig:27
-
+ tfa_u2f.add_key.back_to_settingsZurück zu den Einstellungen
@@ -2704,7 +2695,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:8new
-
+ statistics.titleStatistik
@@ -2715,7 +2706,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:14new
-
+ statistics.partsBauteile
@@ -2726,7 +2717,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:19new
-
+ statistics.data_structuresDatenstrukturen
@@ -2737,7 +2728,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:24new
-
+ statistics.attachmentsDateianhänge
@@ -2752,7 +2743,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:104new
-
+ statistics.propertyEigenschaft
@@ -2767,7 +2758,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:105new
-
+ statistics.valueWert
@@ -2778,7 +2769,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:40new
-
+ statistics.distinct_parts_countAnzahl verschiedener Bauteile
@@ -2789,7 +2780,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:44new
-
+ statistics.parts_instock_sumSumme aller vorhanden Bauteilebestände
@@ -2800,7 +2791,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:48new
-
+ statistics.parts_with_priceBauteile mit Preisinformationen
@@ -2811,7 +2802,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:65new
-
+ statistics.categories_countAnzahl Kategorien
@@ -2822,7 +2813,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:69new
-
+ statistics.footprints_countAnzahl Footprints
@@ -2833,7 +2824,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:73new
-
+ statistics.manufacturers_countAnzahl Hersteller
@@ -2844,7 +2835,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:77new
-
+ statistics.storelocations_countAnzahl Lagerorte
@@ -2855,7 +2846,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:81new
-
+ statistics.suppliers_countAnzahl Lieferanten
@@ -2866,7 +2857,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:85new
-
+ statistics.currencies_countAnzahl Währungen
@@ -2877,7 +2868,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:89new
-
+ statistics.measurement_units_countAnzahl Maßeinheiten
@@ -2888,7 +2879,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:93new
-
+ statistics.devices_countAnzahl Baugruppen
@@ -2899,7 +2890,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:110new
-
+ statistics.attachment_types_countAnzahl Anhangstypen
@@ -2910,7 +2901,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:114new
-
+ statistics.all_attachments_countAnzahl aller Dateianhänge
@@ -2921,7 +2912,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:118new
-
+ statistics.user_uploaded_attachments_countAnzahl aller vom Nutzer hochgeladener Anhänge
@@ -2932,7 +2923,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:122new
-
+ statistics.private_attachments_countAnzahl aller privaten Anhänge
@@ -2943,7 +2934,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Statistics\statistics.html.twig:126new
-
+ statistics.external_attachments_countAnzahl aller externen Anhänge (URL)
@@ -2955,7 +2946,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Users\backup_codes.html.twig:3Part-DB1\templates\Users\backup_codes.html.twig:9
-
+ tfa_backup.codes.titleBackupcodes
@@ -2965,7 +2956,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Users\backup_codes.html.twig:12Part-DB1\templates\Users\backup_codes.html.twig:12
-
+ tfa_backup.codes.explanationDrucken Sie diese Codes aus und bewahren Sie sie an einem sicherem Ort auf!
@@ -2975,7 +2966,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Users\backup_codes.html.twig:13Part-DB1\templates\Users\backup_codes.html.twig:13
-
+ tfa_backup.codes.helpWenn Sie keinen Zugriff auf ihr Gerät mit der Authenticator App mehr haben sollten (Smartphone verloren, Datenverlust, etc.) können Sie einen dieser Codes benutzen, um Zugriff auf ihren Account zu erhalten und evtl. eine neue Authenticator App einzurichten. Jeder dieser Codes lässt sich einmal einsetzen, es empfiehlt sich benutzte Codes zu streichen. Jeder mit Zugriff auf diese Codes kann potentiell auf ihren Account zugreifen, daher bewahren Sie sie an einem sicheren Ort auf.
@@ -2985,7 +2976,7 @@ Subelemente werden beim Löschen nach oben verschoben.
Part-DB1\templates\Users\backup_codes.html.twig:16Part-DB1\templates\Users\backup_codes.html.twig:16
-
+