diff --git a/.github/workflows/assets_artifact_build.yml b/.github/workflows/assets_artifact_build.yml
index 89e6bfd6..80ce11e6 100644
--- a/.github/workflows/assets_artifact_build.yml
+++ b/.github/workflows/assets_artifact_build.yml
@@ -57,7 +57,7 @@ jobs:
${{ runner.os }}-yarn-
- name: Setup node
- uses: actions/setup-node@v3
+ uses: actions/setup-node@v4
with:
node-version: '18'
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index bd8d335d..a22d07a6 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -87,7 +87,7 @@ jobs:
run: composer install --prefer-dist --no-progress
- name: Setup node
- uses: actions/setup-node@v3
+ uses: actions/setup-node@v4
with:
node-version: '18'
diff --git a/README.md b/README.md
index ad2197dc..4edcdddc 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@

[](https://part-db.crowdin.com/part-db)
-**[Documentation](https://docs.part-db.de/)** | **[Demo](https://part-db.herokuapp.com)** | **[Docker Image](https://hub.docker.com/r/jbtronics/part-db1)**
+**[Documentation](https://docs.part-db.de/)** | **[Demo](https://demo.part-db.de/)** | **[Docker Image](https://hub.docker.com/r/jbtronics/part-db1)**
# Part-DB
@@ -24,8 +24,8 @@ for everybody.
## Demo
-If you want to test Part-DB without installing it, you can use [this](https://part-db.herokuapp.com) Heroku instance.
-(Or this link for the [German Version](https://part-db.herokuapp.com/de/)).
+If you want to test Part-DB without installing it, you can use [this](https://demo.part-db.de/) Heroku instance.
+(Or this link for the [German Version](https://demo.part-db.de/de/)).
You can log in with username: *user* and password: *user*.
@@ -101,24 +101,20 @@ for a detailed guide how to install Part-DB.**
In bigger instances with concurrent accesses, MySQL is more performant. This can not be changed easily later, so
choose wisely.
4. Install composer dependencies and generate autoload files: `composer install -o --no-dev`
-5. If you have put Part-DB into a subdirectory on your server (like `part-db/`), you have to edit the file
- `webpack.config.js` and uncomment the lines (remove the `//` before the lines) `.setPublicPath('/part-db/build')` (
- line 43) and
- `.setManifestKeyPrefix('build/')` (line 44). You have to replace `/part-db` with your own path on line 44.
-6. Install client side dependencies and build it: `yarn install` and `yarn build`
-7. _Optional_ (speeds up first load): Warmup cache: `php bin/console cache:warmup`
-8. Upgrade database to new scheme (or create it, when it was empty): `php bin/console doctrine:migrations:migrate` and
+5. Install client side dependencies and build it: `yarn install` and `yarn build`
+6. _Optional_ (speeds up first load): Warmup cache: `php bin/console cache:warmup`
+7. Upgrade database to new scheme (or create it, when it was empty): `php bin/console doctrine:migrations:migrate` and
follow the instructions given. During the process the password for the admin is user is shown. Copy it. **Caution**:
This steps tamper with your database and could potentially destroy it. So make sure to make a backup of your
database.
-9. You can configure Part-DB via `config/parameters.yaml`. You should check if settings match your expectations, after
+8. You can configure Part-DB via `config/parameters.yaml`. You should check if settings match your expectations, after
you installed/upgraded Part-DB. Check if `partdb.default_currency` matches your mainly used currency (this can not be
changed after creating price information).
Run `php bin/console cache:clear` when you changed something.
-10. Access Part-DB in your browser (under the URL you put it) and login with user *admin*. Password is the one outputted
- during DB setup.
- If you can not remember the password, set a new one with `php bin/console app:set-password admin`. You can create
- new users with the admin user and start using Part-DB.
+9. Access Part-DB in your browser (under the URL you put it) and login with user *admin*. Password is the one outputted
+ during DB setup.
+ If you can not remember the password, set a new one with `php bin/console app:set-password admin`. You can create
+ new users with the admin user and start using Part-DB.
When you want to upgrade to a newer version, then just copy the new files into the folder
and repeat the steps 4. to 7.
diff --git a/VERSION b/VERSION
index a8fdfda1..b57588e5 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.1
+1.9.0-dev
diff --git a/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js b/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js
index 03737dae..aa29e889 100644
--- a/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js
+++ b/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js
@@ -85,6 +85,9 @@ const PLACEHOLDERS = [
['[[COMMENT_T]]', 'Comment (plain text)'],
['[[LAST_MODIFIED]]', 'Last modified datetime'],
['[[CREATION_DATE]]', 'Creation datetime'],
+ ['[[IPN_BARCODE_QR]]', 'IPN as QR code'],
+ ['[[IPN_BARCODE_C128]]', 'IPN as Code 128 barcode'],
+ ['[[IPN_BARCODE_C39]]', 'IPN as Code 39 barcode'],
]
},
{
diff --git a/assets/ckeditor/plugins/PartDBLabel/lang/de.js b/assets/ckeditor/plugins/PartDBLabel/lang/de.js
index 53007a0a..2220cc0b 100644
--- a/assets/ckeditor/plugins/PartDBLabel/lang/de.js
+++ b/assets/ckeditor/plugins/PartDBLabel/lang/de.js
@@ -48,6 +48,9 @@ Object.assign( window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary, {
'Comment (plain text)': 'Kommentar (Nur-Text)',
'Last modified datetime': 'Zuletzt geändert',
'Creation datetime': 'Erstellt',
+ 'IPN as QR code': 'IPN als QR Code',
+ 'IPN as Code 128 barcode': 'IPN als Code 128 Barcode',
+ 'IPN as Code 39 barcode': 'IPN als Code 39 Barcode',
'Lot ID': 'Lot ID',
'Lot name': 'Lot Name',
diff --git a/bin/console b/bin/console
index c933dc53..88268a20 100755
--- a/bin/console
+++ b/bin/console
@@ -4,6 +4,13 @@
use App\Kernel;
use Symfony\Bundle\FrameworkBundle\Console\Application;
+//Increase xdebug.max_nesting_level to 1000 if required (see issue #411)
+//Check if xdebug extension is active, and xdebug.max_nesting_level is set to 256 or lower
+if (extension_loaded('xdebug') && ((int) ini_get('xdebug.max_nesting_level')) <= 256) {
+ //Increase xdebug.max_nesting_level to 1000
+ ini_set('xdebug.max_nesting_level', '1000');
+}
+
if (!is_file(dirname(__DIR__).'/vendor/autoload_runtime.php')) {
throw new LogicException('Symfony Runtime is missing. Try running "composer require symfony/runtime".');
}
diff --git a/composer.json b/composer.json
index a16706b9..a47bd12a 100644
--- a/composer.json
+++ b/composer.json
@@ -70,6 +70,7 @@
"symfony/runtime": "6.3.*",
"symfony/security-bundle": "6.3.*",
"symfony/serializer": "6.3.*",
+ "symfony/string": "6.3.*",
"symfony/translation": "6.3.*",
"symfony/twig-bundle": "6.3.*",
"symfony/ux-translator": "^2.10",
diff --git a/composer.lock b/composer.lock
index 41cbb33f..96c45345 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a3d850bada24e7349d2181693a50c637",
+ "content-hash": "258be26a5e5d25abc80062849a2a948e",
"packages": [
{
"name": "api-platform/core",
- "version": "v3.2.0",
+ "version": "v3.2.3",
"source": {
"type": "git",
"url": "https://github.com/api-platform/core.git",
- "reference": "de8d5835f0a349f80a32b268be893d8e2cf85a07"
+ "reference": "633bde85eb58b16d8cd161ecc3bb5b6934a753bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/api-platform/core/zipball/de8d5835f0a349f80a32b268be893d8e2cf85a07",
- "reference": "de8d5835f0a349f80a32b268be893d8e2cf85a07",
+ "url": "https://api.github.com/repos/api-platform/core/zipball/633bde85eb58b16d8cd161ecc3bb5b6934a753bd",
+ "reference": "633bde85eb58b16d8cd161ecc3bb5b6934a753bd",
"shasum": ""
},
"require": {
@@ -166,9 +166,9 @@
],
"support": {
"issues": "https://github.com/api-platform/core/issues",
- "source": "https://github.com/api-platform/core/tree/v3.2.0"
+ "source": "https://github.com/api-platform/core/tree/v3.2.3"
},
- "time": "2023-10-12T10:35:19+00:00"
+ "time": "2023-10-30T10:39:11+00:00"
},
{
"name": "beberlei/assert",
@@ -2033,7 +2033,7 @@
"issues": "https://github.com/dompdf/dompdf/issues",
"source": "https://github.com/dompdf/dompdf/tree/master"
},
- "time": "2023-10-11T01:22:36+00:00"
+ "time": "2023-11-03T16:46:24+00:00"
},
{
"name": "egulias/email-validator",
@@ -2154,16 +2154,16 @@
},
{
"name": "florianv/exchanger",
- "version": "2.8.0",
+ "version": "2.8.1",
"source": {
"type": "git",
"url": "https://github.com/florianv/exchanger.git",
- "reference": "be3e4b316a0fd90bac186cc8b8206e995df161ba"
+ "reference": "9214f51665fb907e7aa2397e21a90c456eb0c448"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/florianv/exchanger/zipball/be3e4b316a0fd90bac186cc8b8206e995df161ba",
- "reference": "be3e4b316a0fd90bac186cc8b8206e995df161ba",
+ "url": "https://api.github.com/repos/florianv/exchanger/zipball/9214f51665fb907e7aa2397e21a90c456eb0c448",
+ "reference": "9214f51665fb907e7aa2397e21a90c456eb0c448",
"shasum": ""
},
"require": {
@@ -2174,7 +2174,7 @@
"php-http/client-implementation": "^1.0",
"php-http/discovery": "^1.6",
"php-http/httplug": "^1.0 || ^2.0",
- "php-http/message-factory": "^1.0.2",
+ "psr/http-factory": "^1.0.2",
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
},
"require-dev": {
@@ -2220,9 +2220,9 @@
],
"support": {
"issues": "https://github.com/florianv/exchanger/issues",
- "source": "https://github.com/florianv/exchanger/tree/2.8.0"
+ "source": "https://github.com/florianv/exchanger/tree/2.8.1"
},
- "time": "2022-12-11T05:52:51+00:00"
+ "time": "2023-11-03T17:11:52+00:00"
},
{
"name": "florianv/swap",
@@ -3298,16 +3298,16 @@
},
{
"name": "knpuniversity/oauth2-client-bundle",
- "version": "v2.15.0",
+ "version": "v2.16.0",
"source": {
"type": "git",
"url": "https://github.com/knpuniversity/oauth2-client-bundle.git",
- "reference": "9df0736d02eb20b953ec8e9986743611747d9ed9"
+ "reference": "2d4aacdf4d32a869d785d20515adf0615d9da248"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/9df0736d02eb20b953ec8e9986743611747d9ed9",
- "reference": "9df0736d02eb20b953ec8e9986743611747d9ed9",
+ "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/2d4aacdf4d32a869d785d20515adf0615d9da248",
+ "reference": "2d4aacdf4d32a869d785d20515adf0615d9da248",
"shasum": ""
},
"require": {
@@ -3352,35 +3352,35 @@
],
"support": {
"issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues",
- "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.15.0"
+ "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.16.0"
},
- "time": "2023-05-03T16:44:38+00:00"
+ "time": "2023-10-24T15:57:05+00:00"
},
{
"name": "laminas/laminas-code",
- "version": "4.12.0",
+ "version": "4.13.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-code.git",
- "reference": "36cbee228b427446419dd51944bdfb6bb8ddbcd0"
+ "reference": "7353d4099ad5388e84737dd16994316a04f48dbf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-code/zipball/36cbee228b427446419dd51944bdfb6bb8ddbcd0",
- "reference": "36cbee228b427446419dd51944bdfb6bb8ddbcd0",
+ "url": "https://api.github.com/repos/laminas/laminas-code/zipball/7353d4099ad5388e84737dd16994316a04f48dbf",
+ "reference": "7353d4099ad5388e84737dd16994316a04f48dbf",
"shasum": ""
},
"require": {
- "php": "~8.1.0 || ~8.2.0"
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0"
},
"require-dev": {
- "doctrine/annotations": "^2.0.0",
+ "doctrine/annotations": "^2.0.1",
"ext-phar": "*",
- "laminas/laminas-coding-standard": "^2.3.0",
- "laminas/laminas-stdlib": "^3.6.1",
- "phpunit/phpunit": "^10.0.9",
+ "laminas/laminas-coding-standard": "^2.5.0",
+ "laminas/laminas-stdlib": "^3.17.0",
+ "phpunit/phpunit": "^10.3.3",
"psalm/plugin-phpunit": "^0.18.4",
- "vimeo/psalm": "^5.7.1"
+ "vimeo/psalm": "^5.15.0"
},
"suggest": {
"doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
@@ -3417,7 +3417,7 @@
"type": "community_bridge"
}
],
- "time": "2023-09-06T14:56:25+00:00"
+ "time": "2023-10-18T10:00:55+00:00"
},
{
"name": "lcobucci/clock",
@@ -3485,16 +3485,16 @@
},
{
"name": "lcobucci/jwt",
- "version": "5.0.0",
+ "version": "5.1.0",
"source": {
"type": "git",
"url": "https://github.com/lcobucci/jwt.git",
- "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34"
+ "reference": "f0031c07b96db6a0ca649206e7eacddb7e9d5908"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/lcobucci/jwt/zipball/47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34",
- "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34",
+ "url": "https://api.github.com/repos/lcobucci/jwt/zipball/f0031c07b96db6a0ca649206e7eacddb7e9d5908",
+ "reference": "f0031c07b96db6a0ca649206e7eacddb7e9d5908",
"shasum": ""
},
"require": {
@@ -3502,20 +3502,20 @@
"ext-json": "*",
"ext-openssl": "*",
"ext-sodium": "*",
- "php": "~8.1.0 || ~8.2.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
"psr/clock": "^1.0"
},
"require-dev": {
- "infection/infection": "^0.26.19",
+ "infection/infection": "^0.27.0",
"lcobucci/clock": "^3.0",
- "lcobucci/coding-standard": "^9.0",
- "phpbench/phpbench": "^1.2.8",
+ "lcobucci/coding-standard": "^11.0",
+ "phpbench/phpbench": "^1.2.9",
"phpstan/extension-installer": "^1.2",
- "phpstan/phpstan": "^1.10.3",
- "phpstan/phpstan-deprecation-rules": "^1.1.2",
- "phpstan/phpstan-phpunit": "^1.3.8",
+ "phpstan/phpstan": "^1.10.7",
+ "phpstan/phpstan-deprecation-rules": "^1.1.3",
+ "phpstan/phpstan-phpunit": "^1.3.10",
"phpstan/phpstan-strict-rules": "^1.5.0",
- "phpunit/phpunit": "^10.0.12"
+ "phpunit/phpunit": "^10.2.6"
},
"suggest": {
"lcobucci/clock": ">= 3.0"
@@ -3544,7 +3544,7 @@
],
"support": {
"issues": "https://github.com/lcobucci/jwt/issues",
- "source": "https://github.com/lcobucci/jwt/tree/5.0.0"
+ "source": "https://github.com/lcobucci/jwt/tree/5.1.0"
},
"funding": [
{
@@ -3556,7 +3556,7 @@
"type": "patreon"
}
],
- "time": "2023-02-25T21:35:16+00:00"
+ "time": "2023-10-31T06:41:47+00:00"
},
{
"name": "league/csv",
@@ -4026,16 +4026,16 @@
},
{
"name": "monolog/monolog",
- "version": "3.4.0",
+ "version": "3.5.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "e2392369686d420ca32df3803de28b5d6f76867d"
+ "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d",
- "reference": "e2392369686d420ca32df3803de28b5d6f76867d",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448",
+ "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448",
"shasum": ""
},
"require": {
@@ -4111,7 +4111,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/3.4.0"
+ "source": "https://github.com/Seldaek/monolog/tree/3.5.0"
},
"funding": [
{
@@ -4123,7 +4123,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-21T08:46:11+00:00"
+ "time": "2023-10-27T15:32:31+00:00"
},
{
"name": "nbgrp/onelogin-saml-bundle",
@@ -5192,88 +5192,28 @@
},
"time": "2023-04-14T15:10:03+00:00"
},
- {
- "name": "php-http/message-factory",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-http/message-factory.git",
- "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57",
- "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com"
- }
- ],
- "description": "Factory interfaces for PSR-7 HTTP Message",
- "homepage": "http://php-http.org",
- "keywords": [
- "factory",
- "http",
- "message",
- "stream",
- "uri"
- ],
- "support": {
- "issues": "https://github.com/php-http/message-factory/issues",
- "source": "https://github.com/php-http/message-factory/tree/1.1.0"
- },
- "abandoned": "psr/http-factory",
- "time": "2023-04-14T14:16:17+00:00"
- },
{
"name": "php-http/promise",
- "version": "1.1.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
- "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
+ "reference": "ef4905bfb492ff389eb7f12e26925a0f20073050"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
- "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
+ "url": "https://api.github.com/repos/php-http/promise/zipball/ef4905bfb492ff389eb7f12e26925a0f20073050",
+ "reference": "ef4905bfb492ff389eb7f12e26925a0f20073050",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
- "phpspec/phpspec": "^5.1.2 || ^6.2"
+ "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
+ "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
@@ -5300,9 +5240,9 @@
],
"support": {
"issues": "https://github.com/php-http/promise/issues",
- "source": "https://github.com/php-http/promise/tree/1.1.0"
+ "source": "https://github.com/php-http/promise/tree/1.2.0"
},
- "time": "2020-07-07T09:29:14+00:00"
+ "time": "2023-10-24T09:20:26+00:00"
},
{
"name": "php-translation/common",
@@ -6566,20 +6506,20 @@
},
{
"name": "scheb/2fa-backup-code",
- "version": "v6.9.0",
+ "version": "v6.10.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-backup-code.git",
- "reference": "b01965cd221cda280526e48e7f56966154b9ba2f"
+ "reference": "d258a5af83b32f88484cd345b4784004766b2fe3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-backup-code/zipball/b01965cd221cda280526e48e7f56966154b9ba2f",
- "reference": "b01965cd221cda280526e48e7f56966154b9ba2f",
+ "url": "https://api.github.com/repos/scheb/2fa-backup-code/zipball/d258a5af83b32f88484cd345b4784004766b2fe3",
+ "reference": "d258a5af83b32f88484cd345b4784004766b2fe3",
"shasum": ""
},
"require": {
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
"scheb/2fa-bundle": "self.version"
},
"type": "library",
@@ -6609,27 +6549,27 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-backup-code/tree/v6.9.0"
+ "source": "https://github.com/scheb/2fa-backup-code/tree/v6.10.0"
},
- "time": "2022-12-10T15:20:09+00:00"
+ "time": "2023-11-04T12:54:57+00:00"
},
{
"name": "scheb/2fa-bundle",
- "version": "v6.9.0",
+ "version": "v6.10.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-bundle.git",
- "reference": "98fee6bf6ce17514d8f3772d4c7f86e6f7595a85"
+ "reference": "493a8712be5461ca90f4ac0eb819cfcf6cf8d009"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/98fee6bf6ce17514d8f3772d4c7f86e6f7595a85",
- "reference": "98fee6bf6ce17514d8f3772d4c7f86e6f7595a85",
+ "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/493a8712be5461ca90f4ac0eb819cfcf6cf8d009",
+ "reference": "493a8712be5461ca90f4ac0eb819cfcf6cf8d009",
"shasum": ""
},
"require": {
"ext-json": "*",
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
"symfony/config": "^5.4 || ^6.0",
"symfony/dependency-injection": "^5.4 || ^6.0",
"symfony/event-dispatcher": "^5.4 || ^6.0",
@@ -6676,27 +6616,27 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-bundle/tree/v6.9.0"
+ "source": "https://github.com/scheb/2fa-bundle/tree/v6.10.0"
},
- "time": "2023-08-05T11:13:58+00:00"
+ "time": "2023-11-04T12:54:57+00:00"
},
{
"name": "scheb/2fa-google-authenticator",
- "version": "v6.9.0",
+ "version": "v6.10.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-google-authenticator.git",
- "reference": "20eab4c1814b587cac71c4516a06b192ca838294"
+ "reference": "3ee3fa82bcd579e396b7ed63d9006e8d63a18e67"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-google-authenticator/zipball/20eab4c1814b587cac71c4516a06b192ca838294",
- "reference": "20eab4c1814b587cac71c4516a06b192ca838294",
+ "url": "https://api.github.com/repos/scheb/2fa-google-authenticator/zipball/3ee3fa82bcd579e396b7ed63d9006e8d63a18e67",
+ "reference": "3ee3fa82bcd579e396b7ed63d9006e8d63a18e67",
"shasum": ""
},
"require": {
"paragonie/constant_time_encoding": "^2.4",
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
"scheb/2fa-bundle": "self.version",
"spomky-labs/otphp": "^10.0 || ^11.0"
},
@@ -6727,28 +6667,28 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-google-authenticator/tree/v6.9.0"
+ "source": "https://github.com/scheb/2fa-google-authenticator/tree/v6.10.0"
},
- "time": "2022-12-10T15:20:09+00:00"
+ "time": "2023-11-04T12:54:57+00:00"
},
{
"name": "scheb/2fa-trusted-device",
- "version": "v6.9.0",
+ "version": "v6.10.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-trusted-device.git",
- "reference": "cac6feaf9f2c7d3a1aade86942f7b7b234fcd151"
+ "reference": "9ee6c957d2a7f6a72a9fdb006ac4ccda3d8b61d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-trusted-device/zipball/cac6feaf9f2c7d3a1aade86942f7b7b234fcd151",
- "reference": "cac6feaf9f2c7d3a1aade86942f7b7b234fcd151",
+ "url": "https://api.github.com/repos/scheb/2fa-trusted-device/zipball/9ee6c957d2a7f6a72a9fdb006ac4ccda3d8b61d3",
+ "reference": "9ee6c957d2a7f6a72a9fdb006ac4ccda3d8b61d3",
"shasum": ""
},
"require": {
"lcobucci/clock": "^2.0 || ^3.0",
"lcobucci/jwt": "^4.1 || ^5.0",
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
"scheb/2fa-bundle": "self.version"
},
"type": "library",
@@ -6778,9 +6718,9 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-trusted-device/tree/v6.9.0"
+ "source": "https://github.com/scheb/2fa-trusted-device/tree/v6.10.0"
},
- "time": "2023-04-01T11:20:00+00:00"
+ "time": "2023-11-04T12:54:57+00:00"
},
{
"name": "shivas/versioning-bundle",
@@ -7355,16 +7295,16 @@
},
{
"name": "symfony/cache",
- "version": "v6.3.5",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "6c1a3ea078c4d88ee892530945df63a87981b2da"
+ "reference": "84aff8d948d6292d2b5a01ac622760be44dddc72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/6c1a3ea078c4d88ee892530945df63a87981b2da",
- "reference": "6c1a3ea078c4d88ee892530945df63a87981b2da",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/84aff8d948d6292d2b5a01ac622760be44dddc72",
+ "reference": "84aff8d948d6292d2b5a01ac622760be44dddc72",
"shasum": ""
},
"require": {
@@ -7373,7 +7313,7 @@
"psr/log": "^1.1|^2|^3",
"symfony/cache-contracts": "^2.5|^3",
"symfony/service-contracts": "^2.5|^3",
- "symfony/var-exporter": "^6.2.10"
+ "symfony/var-exporter": "^6.3.6"
},
"conflict": {
"doctrine/dbal": "<2.13.1",
@@ -7388,7 +7328,7 @@
},
"require-dev": {
"cache/integration-tests": "dev-master",
- "doctrine/dbal": "^2.13.1|^3.0",
+ "doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1|^2.0",
"psr/simple-cache": "^1.0|^2.0|^3.0",
"symfony/config": "^5.4|^6.0",
@@ -7431,7 +7371,7 @@
"psr6"
],
"support": {
- "source": "https://github.com/symfony/cache/tree/v6.3.5"
+ "source": "https://github.com/symfony/cache/tree/v6.3.6"
},
"funding": [
{
@@ -7447,7 +7387,7 @@
"type": "tidelift"
}
],
- "time": "2023-09-26T15:48:55+00:00"
+ "time": "2023-10-17T14:44:58+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -7978,16 +7918,16 @@
},
{
"name": "symfony/doctrine-bridge",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
- "reference": "9977eb1adf999ceded213e88c1ac6dff7a1a0306"
+ "reference": "c8af292f733cc28149485639177c5f2b67dff200"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/9977eb1adf999ceded213e88c1ac6dff7a1a0306",
- "reference": "9977eb1adf999ceded213e88c1ac6dff7a1a0306",
+ "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/c8af292f733cc28149485639177c5f2b67dff200",
+ "reference": "c8af292f733cc28149485639177c5f2b67dff200",
"shasum": ""
},
"require": {
@@ -8020,8 +7960,8 @@
"doctrine/annotations": "^1.13.1|^2",
"doctrine/collections": "^1.0|^2.0",
"doctrine/data-fixtures": "^1.1",
- "doctrine/dbal": "^2.13.1|^3.0",
- "doctrine/orm": "^2.12",
+ "doctrine/dbal": "^2.13.1|^3|^4",
+ "doctrine/orm": "^2.12|^3",
"psr/log": "^1|^2|^3",
"symfony/cache": "^5.4|^6.0",
"symfony/config": "^5.4|^6.0",
@@ -8068,7 +8008,7 @@
"description": "Provides integration for Doctrine with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/doctrine-bridge/tree/v6.3.5"
+ "source": "https://github.com/symfony/doctrine-bridge/tree/v6.3.7"
},
"funding": [
{
@@ -8084,20 +8024,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-29T16:16:03+00:00"
+ "time": "2023-10-28T23:11:45+00:00"
},
{
"name": "symfony/dotenv",
- "version": "v6.3.0",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
- "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e"
+ "reference": "7dfbe2976f3c1b7cfa8fac2212a050bfa9bd7d9e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dotenv/zipball/ceadb434fe2a6763a03d2d110441745834f3dd1e",
- "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e",
+ "url": "https://api.github.com/repos/symfony/dotenv/zipball/7dfbe2976f3c1b7cfa8fac2212a050bfa9bd7d9e",
+ "reference": "7dfbe2976f3c1b7cfa8fac2212a050bfa9bd7d9e",
"shasum": ""
},
"require": {
@@ -8142,7 +8082,7 @@
"environment"
],
"support": {
- "source": "https://github.com/symfony/dotenv/tree/v6.3.0"
+ "source": "https://github.com/symfony/dotenv/tree/v6.3.7"
},
"funding": [
{
@@ -8158,7 +8098,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-21T14:41:17+00:00"
+ "time": "2023-10-26T18:15:14+00:00"
},
{
"name": "symfony/error-handler",
@@ -8583,16 +8523,16 @@
},
{
"name": "symfony/flex",
- "version": "v2.3.3",
+ "version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
- "reference": "9c402af768c6c9f8126a9ffa192ecf7c16581e35"
+ "reference": "ae6dea68771c5fca9d172e0c0910bdd06199f6f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/flex/zipball/9c402af768c6c9f8126a9ffa192ecf7c16581e35",
- "reference": "9c402af768c6c9f8126a9ffa192ecf7c16581e35",
+ "url": "https://api.github.com/repos/symfony/flex/zipball/ae6dea68771c5fca9d172e0c0910bdd06199f6f4",
+ "reference": "ae6dea68771c5fca9d172e0c0910bdd06199f6f4",
"shasum": ""
},
"require": {
@@ -8628,7 +8568,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
- "source": "https://github.com/symfony/flex/tree/v2.3.3"
+ "source": "https://github.com/symfony/flex/tree/v2.4.1"
},
"funding": [
{
@@ -8644,20 +8584,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-04T09:02:35+00:00"
+ "time": "2023-10-30T18:35:17+00:00"
},
{
"name": "symfony/form",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
- "reference": "0f9ad8600c1021983d096512066ee54332aa3139"
+ "reference": "e6743d188f168643cb247f65cbad09ddb1dfcfe5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/form/zipball/0f9ad8600c1021983d096512066ee54332aa3139",
- "reference": "0f9ad8600c1021983d096512066ee54332aa3139",
+ "url": "https://api.github.com/repos/symfony/form/zipball/e6743d188f168643cb247f65cbad09ddb1dfcfe5",
+ "reference": "e6743d188f168643cb247f65cbad09ddb1dfcfe5",
"shasum": ""
},
"require": {
@@ -8725,7 +8665,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/form/tree/v6.3.5"
+ "source": "https://github.com/symfony/form/tree/v6.3.7"
},
"funding": [
{
@@ -8741,20 +8681,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-10T17:47:23+00:00"
+ "time": "2023-10-28T23:11:45+00:00"
},
{
"name": "symfony/framework-bundle",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
- "reference": "567cafcfc08e3076b47290a7558b0ca17a98b0ce"
+ "reference": "dba20792c726c30d455626eddfb2db008f64085f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/567cafcfc08e3076b47290a7558b0ca17a98b0ce",
- "reference": "567cafcfc08e3076b47290a7558b0ca17a98b0ce",
+ "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/dba20792c726c30d455626eddfb2db008f64085f",
+ "reference": "dba20792c726c30d455626eddfb2db008f64085f",
"shasum": ""
},
"require": {
@@ -8869,7 +8809,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/framework-bundle/tree/v6.3.5"
+ "source": "https://github.com/symfony/framework-bundle/tree/v6.3.7"
},
"funding": [
{
@@ -8885,20 +8825,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-29T10:45:15+00:00"
+ "time": "2023-10-26T18:15:14+00:00"
},
{
"name": "symfony/http-client",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d"
+ "reference": "cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/213e564da4cbf61acc9728d97e666bcdb868c10d",
- "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d",
+ "reference": "cd67fcaf4524ec6ae5d9b2d9497682d7ad3ce57d",
"shasum": ""
},
"require": {
@@ -8961,7 +8901,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v6.3.5"
+ "source": "https://github.com/symfony/http-client/tree/v6.3.7"
},
"funding": [
{
@@ -8977,7 +8917,7 @@
"type": "tidelift"
}
],
- "time": "2023-09-29T15:57:12+00:00"
+ "time": "2023-10-29T12:41:36+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -9059,16 +8999,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957"
+ "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b50f5e281d722cb0f4c296f908bacc3e2b721957",
- "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/59d1837d5d992d16c2628cd0d6b76acf8d69b33e",
+ "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e",
"shasum": ""
},
"require": {
@@ -9078,12 +9018,12 @@
"symfony/polyfill-php83": "^1.27"
},
"conflict": {
- "symfony/cache": "<6.2"
+ "symfony/cache": "<6.3"
},
"require-dev": {
- "doctrine/dbal": "^2.13.1|^3.0",
+ "doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1|^2.0",
- "symfony/cache": "^5.4|^6.0",
+ "symfony/cache": "^6.3",
"symfony/dependency-injection": "^5.4|^6.0",
"symfony/expression-language": "^5.4|^6.0",
"symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
@@ -9116,7 +9056,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.3.5"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.3.7"
},
"funding": [
{
@@ -9132,20 +9072,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-04T21:33:54+00:00"
+ "time": "2023-10-28T23:55:27+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc"
+ "reference": "6d4098095f93279d9536a0e9124439560cc764d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f991a964368bee8d883e8d57ced4fe9fff04dfc",
- "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6d4098095f93279d9536a0e9124439560cc764d0",
+ "reference": "6d4098095f93279d9536a0e9124439560cc764d0",
"shasum": ""
},
"require": {
@@ -9229,7 +9169,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v6.3.5"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.3.7"
},
"funding": [
{
@@ -9245,20 +9185,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-30T06:37:04+00:00"
+ "time": "2023-10-29T14:31:45+00:00"
},
{
"name": "symfony/intl",
- "version": "v6.3.2",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
- "reference": "1f8cb145c869ed089a8531c51a6a4b31ed0b3c69"
+ "reference": "4cc98c05f2c55150a6aa5b3e20667f7a6d06cca9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/1f8cb145c869ed089a8531c51a6a4b31ed0b3c69",
- "reference": "1f8cb145c869ed089a8531c51a6a4b31ed0b3c69",
+ "url": "https://api.github.com/repos/symfony/intl/zipball/4cc98c05f2c55150a6aa5b3e20667f7a6d06cca9",
+ "reference": "4cc98c05f2c55150a6aa5b3e20667f7a6d06cca9",
"shasum": ""
},
"require": {
@@ -9311,7 +9251,7 @@
"localization"
],
"support": {
- "source": "https://github.com/symfony/intl/tree/v6.3.2"
+ "source": "https://github.com/symfony/intl/tree/v6.3.7"
},
"funding": [
{
@@ -9327,7 +9267,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-20T07:43:09+00:00"
+ "time": "2023-10-28T23:11:45+00:00"
},
{
"name": "symfony/mailer",
@@ -10995,16 +10935,16 @@
},
{
"name": "symfony/rate-limiter",
- "version": "v6.3.2",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
- "reference": "5223387e4017f26c8c61c46d8e39c11fe4d504b7"
+ "reference": "1eba1f963a7a35cee5f19593c84c374b54bf12dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/5223387e4017f26c8c61c46d8e39c11fe4d504b7",
- "reference": "5223387e4017f26c8c61c46d8e39c11fe4d504b7",
+ "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/1eba1f963a7a35cee5f19593c84c374b54bf12dc",
+ "reference": "1eba1f963a7a35cee5f19593c84c374b54bf12dc",
"shasum": ""
},
"require": {
@@ -11045,7 +10985,7 @@
"rate-limiter"
],
"support": {
- "source": "https://github.com/symfony/rate-limiter/tree/v6.3.2"
+ "source": "https://github.com/symfony/rate-limiter/tree/v6.3.6"
},
"funding": [
{
@@ -11061,7 +11001,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-13T14:29:38+00:00"
+ "time": "2023-10-11T18:18:20+00:00"
},
{
"name": "symfony/routing",
@@ -11227,16 +11167,16 @@
},
{
"name": "symfony/security-bundle",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
- "reference": "2df460eacceb11b9287cfafddda4d27023dd9001"
+ "reference": "8ece4fd6e242acbabad4461feae7c52fe1982c48"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-bundle/zipball/2df460eacceb11b9287cfafddda4d27023dd9001",
- "reference": "2df460eacceb11b9287cfafddda4d27023dd9001",
+ "url": "https://api.github.com/repos/symfony/security-bundle/zipball/8ece4fd6e242acbabad4461feae7c52fe1982c48",
+ "reference": "8ece4fd6e242acbabad4461feae7c52fe1982c48",
"shasum": ""
},
"require": {
@@ -11253,7 +11193,8 @@
"symfony/password-hasher": "^5.4|^6.0",
"symfony/security-core": "^6.2",
"symfony/security-csrf": "^5.4|^6.0",
- "symfony/security-http": "^6.3.4"
+ "symfony/security-http": "^6.3.6",
+ "symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"symfony/browser-kit": "<5.4",
@@ -11317,7 +11258,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-bundle/tree/v6.3.5"
+ "source": "https://github.com/symfony/security-bundle/tree/v6.3.7"
},
"funding": [
{
@@ -11333,20 +11274,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-25T17:05:55+00:00"
+ "time": "2023-10-26T18:15:14+00:00"
},
{
"name": "symfony/security-core",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
- "reference": "ec8f24dc1195f46483510892271d01a5202bba70"
+ "reference": "7ceb30fed93f5ea40ccde3173d1f7712527c0d62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-core/zipball/ec8f24dc1195f46483510892271d01a5202bba70",
- "reference": "ec8f24dc1195f46483510892271d01a5202bba70",
+ "url": "https://api.github.com/repos/symfony/security-core/zipball/7ceb30fed93f5ea40ccde3173d1f7712527c0d62",
+ "reference": "7ceb30fed93f5ea40ccde3173d1f7712527c0d62",
"shasum": ""
},
"require": {
@@ -11402,7 +11343,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-core/tree/v6.3.5"
+ "source": "https://github.com/symfony/security-core/tree/v6.3.7"
},
"funding": [
{
@@ -11418,7 +11359,7 @@
"type": "tidelift"
}
],
- "time": "2023-09-10T17:47:23+00:00"
+ "time": "2023-10-28T23:11:45+00:00"
},
{
"name": "symfony/security-csrf",
@@ -11490,16 +11431,16 @@
},
{
"name": "symfony/security-http",
- "version": "v6.3.5",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
- "reference": "47058ea557a4c64ba86e9249651222842bd52e2a"
+ "reference": "573ef96ab62d509ac953362fa61f9d1bd283f3a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-http/zipball/47058ea557a4c64ba86e9249651222842bd52e2a",
- "reference": "47058ea557a4c64ba86e9249651222842bd52e2a",
+ "url": "https://api.github.com/repos/symfony/security-http/zipball/573ef96ab62d509ac953362fa61f9d1bd283f3a7",
+ "reference": "573ef96ab62d509ac953362fa61f9d1bd283f3a7",
"shasum": ""
},
"require": {
@@ -11509,7 +11450,8 @@
"symfony/http-kernel": "^6.3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^5.4|^6.0",
- "symfony/security-core": "^6.3"
+ "symfony/security-core": "^6.3",
+ "symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"symfony/clock": "<6.3",
@@ -11557,7 +11499,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-http/tree/v6.3.5"
+ "source": "https://github.com/symfony/security-http/tree/v6.3.6"
},
"funding": [
{
@@ -11573,20 +11515,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-30T06:30:46+00:00"
+ "time": "2023-10-13T10:26:24+00:00"
},
{
"name": "symfony/serializer",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
- "reference": "855fc058c8bdbb69f53834f2fdb3876c9bc0ab7c"
+ "reference": "641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/serializer/zipball/855fc058c8bdbb69f53834f2fdb3876c9bc0ab7c",
- "reference": "855fc058c8bdbb69f53834f2fdb3876c9bc0ab7c",
+ "url": "https://api.github.com/repos/symfony/serializer/zipball/641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9",
+ "reference": "641472dd3d6dc3c4d0fdd1496ebd1b55c72e43d9",
"shasum": ""
},
"require": {
@@ -11651,7 +11593,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/serializer/tree/v6.3.5"
+ "source": "https://github.com/symfony/serializer/tree/v6.3.7"
},
"funding": [
{
@@ -11667,7 +11609,7 @@
"type": "tidelift"
}
],
- "time": "2023-09-29T16:18:53+00:00"
+ "time": "2023-10-26T18:15:14+00:00"
},
{
"name": "symfony/service-contracts",
@@ -11969,16 +11911,16 @@
},
{
"name": "symfony/translation",
- "version": "v6.3.3",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd"
+ "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd",
- "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/30212e7c87dcb79c83f6362b00bde0e0b1213499",
+ "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499",
"shasum": ""
},
"require": {
@@ -12044,7 +11986,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.3.3"
+ "source": "https://github.com/symfony/translation/tree/v6.3.7"
},
"funding": [
{
@@ -12060,7 +12002,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2023-10-28T23:11:45+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -12581,16 +12523,16 @@
},
{
"name": "symfony/validator",
- "version": "v6.3.5",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
- "reference": "48e815ba3b5eb72e632588dbf7ea2dc4e608ee47"
+ "reference": "9cc736663fa5839b9710ac2c303bb0b951014fc1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/validator/zipball/48e815ba3b5eb72e632588dbf7ea2dc4e608ee47",
- "reference": "48e815ba3b5eb72e632588dbf7ea2dc4e608ee47",
+ "url": "https://api.github.com/repos/symfony/validator/zipball/9cc736663fa5839b9710ac2c303bb0b951014fc1",
+ "reference": "9cc736663fa5839b9710ac2c303bb0b951014fc1",
"shasum": ""
},
"require": {
@@ -12657,7 +12599,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/validator/tree/v6.3.5"
+ "source": "https://github.com/symfony/validator/tree/v6.3.7"
},
"funding": [
{
@@ -12673,20 +12615,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-29T07:41:15+00:00"
+ "time": "2023-10-28T23:11:45+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.3.5",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5"
+ "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3d9999376be5fea8de47752837a3e1d1c5f69ef5",
- "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/999ede244507c32b8e43aebaa10e9fce20de7c97",
+ "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97",
"shasum": ""
},
"require": {
@@ -12741,7 +12683,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.3.5"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.3.6"
},
"funding": [
{
@@ -12757,20 +12699,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-12T10:11:35+00:00"
+ "time": "2023-10-12T18:45:56+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v6.3.4",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691"
+ "reference": "374d289c13cb989027274c86206ddc63b16a2441"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df1f8aac5751871b83d30bf3e2c355770f8f0691",
- "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/374d289c13cb989027274c86206ddc63b16a2441",
+ "reference": "374d289c13cb989027274c86206ddc63b16a2441",
"shasum": ""
},
"require": {
@@ -12815,7 +12757,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v6.3.4"
+ "source": "https://github.com/symfony/var-exporter/tree/v6.3.6"
},
"funding": [
{
@@ -12831,7 +12773,7 @@
"type": "tidelift"
}
],
- "time": "2023-08-16T18:14:47+00:00"
+ "time": "2023-10-13T09:16:49+00:00"
},
{
"name": "symfony/web-link",
@@ -12918,16 +12860,16 @@
},
{
"name": "symfony/webpack-encore-bundle",
- "version": "v2.1.0",
+ "version": "v2.1.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git",
- "reference": "50d4af5cca35dab66a51dfeeb63616937ba96f4a"
+ "reference": "75cb918df3f65e28cf0d4bc03042bc45ccb19dd0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/50d4af5cca35dab66a51dfeeb63616937ba96f4a",
- "reference": "50d4af5cca35dab66a51dfeeb63616937ba96f4a",
+ "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/75cb918df3f65e28cf0d4bc03042bc45ccb19dd0",
+ "reference": "75cb918df3f65e28cf0d4bc03042bc45ccb19dd0",
"shasum": ""
},
"require": {
@@ -12969,7 +12911,7 @@
"description": "Integration with your Symfony app & Webpack Encore!",
"support": {
"issues": "https://github.com/symfony/webpack-encore-bundle/issues",
- "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.1.0"
+ "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.1.1"
},
"funding": [
{
@@ -12985,20 +12927,20 @@
"type": "tidelift"
}
],
- "time": "2023-09-26T14:41:29+00:00"
+ "time": "2023-10-22T18:53:08+00:00"
},
{
"name": "symfony/yaml",
- "version": "v6.3.3",
+ "version": "v6.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add"
+ "reference": "9758b6c69d179936435d0ffb577c3708d57e38a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add",
- "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/9758b6c69d179936435d0ffb577c3708d57e38a8",
+ "reference": "9758b6c69d179936435d0ffb577c3708d57e38a8",
"shasum": ""
},
"require": {
@@ -13041,7 +12983,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.3.3"
+ "source": "https://github.com/symfony/yaml/tree/v6.3.7"
},
"funding": [
{
@@ -13057,20 +12999,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2023-10-28T23:31:00+00:00"
},
{
"name": "tecnickcom/tc-lib-barcode",
- "version": "1.17.38",
+ "version": "1.18.4",
"source": {
"type": "git",
"url": "https://github.com/tecnickcom/tc-lib-barcode.git",
- "reference": "b74f197e80e85707c0db2cc6f0fc57fb5e80e331"
+ "reference": "cd81392e6e1e57e0f6ff8519b1edbc11d8e47a44"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/b74f197e80e85707c0db2cc6f0fc57fb5e80e331",
- "reference": "b74f197e80e85707c0db2cc6f0fc57fb5e80e331",
+ "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/cd81392e6e1e57e0f6ff8519b1edbc11d8e47a44",
+ "reference": "cd81392e6e1e57e0f6ff8519b1edbc11d8e47a44",
"shasum": ""
},
"require": {
@@ -13078,7 +13020,7 @@
"ext-date": "*",
"ext-gd": "*",
"ext-pcre": "*",
- "php": ">=5.4",
+ "php": ">=5.6",
"tecnickcom/tc-lib-color": "^1.14"
},
"require-dev": {
@@ -13118,6 +13060,9 @@
"EAN 13",
"EAN 8",
"ECC200",
+ "ISO IEC 15438 2006",
+ "ISO IEC 16022",
+ "ISO IEC 24778 2008",
"Intelligent Mail Barcode",
"Interleaved 2 of 5",
"KIX",
@@ -13134,6 +13079,7 @@
"USD-3",
"USPS-B-3200",
"USS-93",
+ "aztec",
"barcode",
"datamatrix",
"pdf417",
@@ -13145,7 +13091,7 @@
],
"support": {
"issues": "https://github.com/tecnickcom/tc-lib-barcode/issues",
- "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/1.17.38"
+ "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/1.18.4"
},
"funding": [
{
@@ -13153,20 +13099,20 @@
"type": "custom"
}
],
- "time": "2023-10-11T16:48:03+00:00"
+ "time": "2023-10-23T09:30:01+00:00"
},
{
"name": "tecnickcom/tc-lib-color",
- "version": "1.14.37",
+ "version": "1.14.39",
"source": {
"type": "git",
"url": "https://github.com/tecnickcom/tc-lib-color.git",
- "reference": "2d7b7e421dba1836d23912723d83adebc53f0ef6"
+ "reference": "f7a414e7ddbdcd98105506ca1eecc68d4820fb89"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/2d7b7e421dba1836d23912723d83adebc53f0ef6",
- "reference": "2d7b7e421dba1836d23912723d83adebc53f0ef6",
+ "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/f7a414e7ddbdcd98105506ca1eecc68d4820fb89",
+ "reference": "f7a414e7ddbdcd98105506ca1eecc68d4820fb89",
"shasum": ""
},
"require": {
@@ -13214,7 +13160,7 @@
],
"support": {
"issues": "https://github.com/tecnickcom/tc-lib-color/issues",
- "source": "https://github.com/tecnickcom/tc-lib-color/tree/1.14.37"
+ "source": "https://github.com/tecnickcom/tc-lib-color/tree/1.14.39"
},
"funding": [
{
@@ -13222,7 +13168,7 @@
"type": "custom"
}
],
- "time": "2023-10-11T16:46:17+00:00"
+ "time": "2023-10-23T09:28:20+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -13897,7 +13843,7 @@
},
{
"name": "web-auth/metadata-service",
- "version": "4.7.2",
+ "version": "4.7.3",
"source": {
"type": "git",
"url": "https://github.com/web-auth/webauthn-metadata-service.git",
@@ -13962,7 +13908,7 @@
"webauthn"
],
"support": {
- "source": "https://github.com/web-auth/webauthn-metadata-service/tree/4.7.2"
+ "source": "https://github.com/web-auth/webauthn-metadata-service/tree/4.7.3"
},
"funding": [
{
@@ -13978,16 +13924,16 @@
},
{
"name": "web-auth/webauthn-lib",
- "version": "4.7.2",
+ "version": "4.7.3",
"source": {
"type": "git",
"url": "https://github.com/web-auth/webauthn-lib.git",
- "reference": "c48f7049c96c1ed96672bcbbef13be5eb90a9163"
+ "reference": "d9b0d0563c561eaec5c24c46a551bf8ff23a030b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/c48f7049c96c1ed96672bcbbef13be5eb90a9163",
- "reference": "c48f7049c96c1ed96672bcbbef13be5eb90a9163",
+ "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/d9b0d0563c561eaec5c24c46a551bf8ff23a030b",
+ "reference": "d9b0d0563c561eaec5c24c46a551bf8ff23a030b",
"shasum": ""
},
"require": {
@@ -14050,7 +13996,7 @@
"webauthn"
],
"support": {
- "source": "https://github.com/web-auth/webauthn-lib/tree/4.7.2"
+ "source": "https://github.com/web-auth/webauthn-lib/tree/4.7.3"
},
"funding": [
{
@@ -14062,20 +14008,20 @@
"type": "patreon"
}
],
- "time": "2023-09-29T14:10:15+00:00"
+ "time": "2023-10-15T11:54:31+00:00"
},
{
"name": "web-auth/webauthn-symfony-bundle",
- "version": "4.7.2",
+ "version": "4.7.3",
"source": {
"type": "git",
"url": "https://github.com/web-auth/webauthn-symfony-bundle.git",
- "reference": "18a53727eb6bbebe39d031c135f338b69a7fd0a6"
+ "reference": "8209537a94314eb0fb9b186f72601536b953d16f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/18a53727eb6bbebe39d031c135f338b69a7fd0a6",
- "reference": "18a53727eb6bbebe39d031c135f338b69a7fd0a6",
+ "url": "https://api.github.com/repos/web-auth/webauthn-symfony-bundle/zipball/8209537a94314eb0fb9b186f72601536b953d16f",
+ "reference": "8209537a94314eb0fb9b186f72601536b953d16f",
"shasum": ""
},
"require": {
@@ -14133,7 +14079,7 @@
"webauthn"
],
"support": {
- "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/4.7.2"
+ "source": "https://github.com/web-auth/webauthn-symfony-bundle/tree/4.7.3"
},
"funding": [
{
@@ -14145,7 +14091,7 @@
"type": "patreon"
}
],
- "time": "2023-09-29T16:47:38+00:00"
+ "time": "2023-10-15T11:40:15+00:00"
},
{
"name": "web-token/jwt-core",
@@ -15481,16 +15427,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.10.38",
+ "version": "1.10.40",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691"
+ "reference": "93c84b5bf7669920d823631e39904d69b9c7dc5d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5302bb402c57f00fb3c2c015bac86e0827e4b691",
- "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/93c84b5bf7669920d823631e39904d69b9c7dc5d",
+ "reference": "93c84b5bf7669920d823631e39904d69b9c7dc5d",
"shasum": ""
},
"require": {
@@ -15539,20 +15485,20 @@
"type": "tidelift"
}
],
- "time": "2023-10-06T14:19:14+00:00"
+ "time": "2023-10-30T14:48:31+00:00"
},
{
"name": "phpstan/phpstan-doctrine",
- "version": "1.3.43",
+ "version": "1.3.45",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-doctrine.git",
- "reference": "c5015035755ad2d5013bd6bf98ff423ca6150822"
+ "reference": "90e60ba9dbea4b29c7b87026a29e91ac0a02674e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/c5015035755ad2d5013bd6bf98ff423ca6150822",
- "reference": "c5015035755ad2d5013bd6bf98ff423ca6150822",
+ "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/90e60ba9dbea4b29c7b87026a29e91ac0a02674e",
+ "reference": "90e60ba9dbea4b29c7b87026a29e91ac0a02674e",
"shasum": ""
},
"require": {
@@ -15607,27 +15553,27 @@
"description": "Doctrine extensions for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-doctrine/issues",
- "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.43"
+ "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.45"
},
- "time": "2023-09-01T15:01:13+00:00"
+ "time": "2023-10-29T08:18:22+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "1.5.1",
+ "version": "1.5.2",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6"
+ "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b21c03d4f6f3a446e4311155f4be9d65048218e6",
- "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/7a50e9662ee9f3942e4aaaf3d603653f60282542",
+ "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.10"
+ "phpstan/phpstan": "^1.10.34"
},
"require-dev": {
"nikic/php-parser": "^4.13.0",
@@ -15656,22 +15602,22 @@
"description": "Extra strict and opinionated rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.1"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.2"
},
- "time": "2023-03-29T14:47:40+00:00"
+ "time": "2023-10-30T14:35:06+00:00"
},
{
"name": "phpstan/phpstan-symfony",
- "version": "1.3.4",
+ "version": "1.3.5",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-symfony.git",
- "reference": "383855999db6a7d65d0bf580ce2762e17188c2a5"
+ "reference": "27ff6339f83796a7e0dd963cf445cd3c456fc620"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/383855999db6a7d65d0bf580ce2762e17188c2a5",
- "reference": "383855999db6a7d65d0bf580ce2762e17188c2a5",
+ "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/27ff6339f83796a7e0dd963cf445cd3c456fc620",
+ "reference": "27ff6339f83796a7e0dd963cf445cd3c456fc620",
"shasum": ""
},
"require": {
@@ -15728,9 +15674,9 @@
"description": "Symfony Framework extensions and rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-symfony/issues",
- "source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.4"
+ "source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.5"
},
- "time": "2023-09-29T14:10:11+00:00"
+ "time": "2023-10-30T14:52:15+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -16221,16 +16167,16 @@
},
{
"name": "rector/rector",
- "version": "0.18.5",
+ "version": "0.18.6",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "2a3b82f317e431fc142d21f3303891a4e64c96eb"
+ "reference": "02041b220704b9cbe075f0310d0954b2fda5c40c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/2a3b82f317e431fc142d21f3303891a4e64c96eb",
- "reference": "2a3b82f317e431fc142d21f3303891a4e64c96eb",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/02041b220704b9cbe075f0310d0954b2fda5c40c",
+ "reference": "02041b220704b9cbe075f0310d0954b2fda5c40c",
"shasum": ""
},
"require": {
@@ -16265,7 +16211,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/0.18.5"
+ "source": "https://github.com/rectorphp/rector/tree/0.18.6"
},
"funding": [
{
@@ -16273,7 +16219,7 @@
"type": "github"
}
],
- "time": "2023-10-05T11:25:40+00:00"
+ "time": "2023-10-24T15:00:59+00:00"
},
{
"name": "roave/security-advisories",
@@ -16281,12 +16227,12 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
- "reference": "efd339340c840237fad050f3ea6fd8bbbbfc7ed6"
+ "reference": "705b497810d1620aaac8779e6b82ef3d266fc6c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/efd339340c840237fad050f3ea6fd8bbbbfc7ed6",
- "reference": "efd339340c840237fad050f3ea6fd8bbbbfc7ed6",
+ "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/705b497810d1620aaac8779e6b82ef3d266fc6c1",
+ "reference": "705b497810d1620aaac8779e6b82ef3d266fc6c1",
"shasum": ""
},
"conflict": {
@@ -16323,13 +16269,14 @@
"azuracast/azuracast": "<0.18.3",
"backdrop/backdrop": "<1.24.2",
"backpack/crud": "<3.4.9",
+ "bacula-web/bacula-web": "<8.0.0.0-RC2-dev",
"badaso/core": "<2.7",
"bagisto/bagisto": "<0.1.5",
"barrelstrength/sprout-base-email": "<1.2.7",
"barrelstrength/sprout-forms": "<3.9",
"barryvdh/laravel-translation-manager": "<0.6.2",
"barzahlen/barzahlen-php": "<2.0.1",
- "baserproject/basercms": "<4.7.5",
+ "baserproject/basercms": "<4.8",
"bassjobsen/bootstrap-3-typeahead": ">4.0.2",
"bigfork/silverstripe-form-capture": ">=3,<3.1.1",
"billz/raspap-webgui": "<=2.9.2",
@@ -16361,7 +16308,7 @@
"cockpit-hq/cockpit": "<=2.6.3",
"codeception/codeception": "<3.1.3|>=4,<4.1.22",
"codeigniter/framework": "<3.1.9",
- "codeigniter4/framework": "<4.3.5",
+ "codeigniter4/framework": "<=4.4.2",
"codeigniter4/shield": "<1.0.0.0-beta4",
"codiad/codiad": "<=2.8.4",
"composer/composer": "<1.10.27|>=2,<2.2.22|>=2.3,<2.6.4",
@@ -16388,16 +16335,16 @@
"derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1",
"desperado/xml-bundle": "<=0.1.7",
"directmailteam/direct-mail": "<5.2.4",
- "doctrine/annotations": ">=1,<1.2.7",
- "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
- "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1",
+ "doctrine/annotations": "<1.2.7",
+ "doctrine/cache": "<1.3.2|>=1.4,<1.4.2",
+ "doctrine/common": "<2.4.3|>=2.5,<2.5.1",
"doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4",
"doctrine/doctrine-bundle": "<1.5.2",
"doctrine/doctrine-module": "<=0.7.1",
- "doctrine/mongodb-odm": ">=1,<1.0.2",
- "doctrine/mongodb-odm-bundle": ">=2,<3.0.1",
+ "doctrine/mongodb-odm": "<1.0.2",
+ "doctrine/mongodb-odm-bundle": "<3.0.1",
"doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4",
- "dolibarr/dolibarr": "<18",
+ "dolibarr/dolibarr": "<18.0.2",
"dompdf/dompdf": "<2.0.2|==2.0.2",
"drupal/core": "<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8",
"drupal/drupal": ">=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4",
@@ -16411,6 +16358,7 @@
"enshrined/svg-sanitize": "<0.15",
"erusev/parsedown": "<1.7.2",
"ether/logs": "<3.0.4",
+ "evolutioncms/evolution": "<=3.2.3",
"exceedone/exment": "<4.4.3|>=5,<5.0.3",
"exceedone/laravel-admin": "<2.2.3|==3",
"ezsystems/demobundle": ">=5.4,<5.4.6.1-dev",
@@ -16421,11 +16369,12 @@
"ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26",
"ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1",
"ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12",
- "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.26",
+ "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.34",
"ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8",
"ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev",
+ "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15",
"ezsystems/ezplatform-user": ">=1,<1.0.1",
- "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.30",
+ "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31",
"ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1",
"ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3",
"ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15",
@@ -16447,6 +16396,7 @@
"fluidtypo3/vhs": "<5.1.1",
"fof/byobu": ">=0.3.0.0-beta2,<1.1.7",
"fof/upload": "<1.2.3",
+ "foodcoopshop/foodcoopshop": "<3.6.1",
"fooman/tcpdf": "<6.2.22",
"forkcms/forkcms": "<5.11.1",
"fossar/tcpdf-parser": "<6.2.22",
@@ -16491,9 +16441,10 @@
"httpsoft/http-message": "<1.0.12",
"hyn/multi-tenant": ">=5.6,<5.7.2",
"ibexa/admin-ui": ">=4.2,<4.2.3",
- "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3",
+ "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.4",
"ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3",
"ibexa/post-install": "<=1.0.4",
+ "ibexa/solr": ">=4.5,<4.5.4",
"ibexa/user": ">=4,<4.4.3",
"icecoder/icecoder": "<=8.1",
"idno/known": "<=1.3.1",
@@ -16530,7 +16481,7 @@
"kelvinmo/simplexrd": "<3.1.1",
"kevinpapst/kimai2": "<1.16.7",
"khodakhah/nodcms": "<=3",
- "kimai/kimai": "<1.1",
+ "kimai/kimai": "<=2.1",
"kitodo/presentation": "<3.2.3|>=3.3,<3.3.4",
"klaviyo/magento2-extension": ">=1,<3",
"knplabs/knp-snappy": "<=1.4.2",
@@ -16564,7 +16515,7 @@
"magento/magento1ee": ">=1,<1.14.4.3-dev",
"magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2",
"maikuolan/phpmussel": ">=1,<1.6",
- "mantisbt/mantisbt": "<=2.25.5",
+ "mantisbt/mantisbt": "<=2.25.7",
"marcwillmann/turn": "<0.3.3",
"matyhtf/framework": "<3.0.6",
"mautic/core": "<4.3",
@@ -16575,7 +16526,7 @@
"melisplatform/melis-front": "<5.0.1",
"mezzio/mezzio-swoole": "<3.7|>=4,<4.3",
"mgallegos/laravel-jqgrid": "<=1.3",
- "microweber/microweber": "<=1.3.4",
+ "microweber/microweber": "<2",
"miniorange/miniorange-saml": "<1.4.3",
"mittwald/typo3_forum": "<1.2.1",
"mobiledetect/mobiledetectlib": "<2.8.32",
@@ -16584,6 +16535,7 @@
"mongodb/mongodb": ">=1,<1.9.2",
"monolog/monolog": ">=1.8,<1.12",
"moodle/moodle": "<4.2.0.0-RC2-dev|==4.2",
+ "mos/cimage": "<0.7.19",
"movim/moxl": ">=0.8,<=0.10",
"mpdf/mpdf": "<=7.1.7",
"mustache/mustache": ">=2,<2.14.1",
@@ -16599,6 +16551,7 @@
"nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6",
"nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13",
"nilsteampassnet/teampass": "<3.0.10",
+ "nonfiction/nterchange": "<4.1.1",
"notrinos/notrinos-erp": "<=0.7",
"noumo/easyii": "<=0.9",
"nukeviet/nukeviet": "<4.5.02",
@@ -16610,6 +16563,7 @@
"october/october": "<=3.4.4",
"october/rain": "<1.0.472|>=1.1,<1.1.2",
"october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66",
+ "omeka/omeka-s": "<4.0.3",
"onelogin/php-saml": "<2.10.4",
"oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5",
"open-web-analytics/open-web-analytics": "<1.7.4",
@@ -16652,12 +16606,12 @@
"phpxmlrpc/extras": "<0.6.1",
"phpxmlrpc/phpxmlrpc": "<4.9.2",
"pi/pi": "<=2.5",
- "pimcore/admin-ui-classic-bundle": "<1.1.2",
+ "pimcore/admin-ui-classic-bundle": "<1.2",
"pimcore/customer-management-framework-bundle": "<3.4.2",
"pimcore/data-hub": "<1.2.4",
"pimcore/demo": "<10.3",
"pimcore/perspective-editor": "<1.5.1",
- "pimcore/pimcore": "<10.6.8",
+ "pimcore/pimcore": "<11.1",
"pixelfed/pixelfed": "<=0.11.4",
"pocketmine/bedrock-protocol": "<8.0.2",
"pocketmine/pocketmine-mp": "<=4.23|>=5,<5.3.1",
@@ -16716,7 +16670,7 @@
"silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1",
"silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
"silverstripe/framework": "<4.13.14|>=5,<5.0.13",
- "silverstripe/graphql": "<3.5.2|>=4.0.0.0-alpha1,<4.0.0.0-alpha2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3",
+ "silverstripe/graphql": "<3.8.2|>=4,<4.1.3|>=4.2,<4.2.5|>=4.3,<4.3.4|>=5,<5.0.3",
"silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1",
"silverstripe/recipe-cms": ">=4.5,<4.5.3",
"silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1",
@@ -16807,9 +16761,9 @@
"thelia/thelia": ">=2.1,<2.1.3",
"theonedemon/phpwhois": "<=4.2.5",
"thinkcmf/thinkcmf": "<=5.1.7",
- "thorsten/phpmyfaq": "<3.2.0.0-beta2",
+ "thorsten/phpmyfaq": "<3.2.2",
"tikiwiki/tiki-manager": "<=17.1",
- "tinymce/tinymce": "<5.10.7|>=6,<6.3.1",
+ "tinymce/tinymce": "<5.10.8|>=6,<6.7.1",
"tinymighty/wiki-seo": "<1.2.2",
"titon/framework": "<9.9.99",
"tobiasbg/tablepress": "<=2.0.0.0-RC1",
@@ -16882,7 +16836,7 @@
"yourls/yourls": "<=1.8.2",
"zencart/zencart": "<=1.5.7.0-beta",
"zendesk/zendesk_api_client_php": "<2.2.11",
- "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3",
+ "zendframework/zend-cache": "<2.4.8|>=2.5,<2.5.3",
"zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2",
"zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2",
"zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5",
@@ -16914,7 +16868,7 @@
"zenstruck/collection": "<0.2.1",
"zetacomponents/mail": "<1.8.2",
"zf-commons/zfc-user": "<1.2.2",
- "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3",
+ "zfcampus/zf-apigility-doctrine": "<1.0.3",
"zfr/zfr-oauth2-server-module": "<0.1.2",
"zoujingli/thinkadmin": "<6.0.22"
},
@@ -16954,7 +16908,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-11T21:04:21+00:00"
+ "time": "2023-11-03T20:04:24+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -18286,16 +18240,16 @@
},
{
"name": "symfony/phpunit-bridge",
- "version": "v6.3.2",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/phpunit-bridge.git",
- "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d"
+ "reference": "c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e020e1efbd1b42cb670fcd7d19a25abbddba035d",
- "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d",
+ "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d",
+ "reference": "c6f1df6a76c2c12bd14a0a5bf7c556dd935efe1d",
"shasum": ""
},
"require": {
@@ -18347,7 +18301,7 @@
"description": "Provides utilities for PHPUnit, especially user deprecation notices management",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.2"
+ "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.6"
},
"funding": [
{
@@ -18363,20 +18317,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-12T16:00:22+00:00"
+ "time": "2023-10-12T15:02:41+00:00"
},
{
"name": "symfony/web-profiler-bundle",
- "version": "v6.3.2",
+ "version": "v6.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
- "reference": "6101b5ab7857c373d237e121f9060c68b32e1373"
+ "reference": "249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6101b5ab7857c373d237e121f9060c68b32e1373",
- "reference": "6101b5ab7857c373d237e121f9060c68b32e1373",
+ "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd",
+ "reference": "249cb2486597d3ab810d8bcc8e4db5ad0fc3e3bd",
"shasum": ""
},
"require": {
@@ -18428,7 +18382,7 @@
"dev"
],
"support": {
- "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.3.2"
+ "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.3.6"
},
"funding": [
{
@@ -18444,7 +18398,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-19T20:17:28+00:00"
+ "time": "2023-10-11T18:18:20+00:00"
},
{
"name": "symplify/easy-coding-standard",
diff --git a/config/packages/api_platform.yaml b/config/packages/api_platform.yaml
index b53cc7e0..9bc2168c 100644
--- a/config/packages/api_platform.yaml
+++ b/config/packages/api_platform.yaml
@@ -8,6 +8,8 @@ api_platform:
# eager_loading:
# max_joins: 100
+ keep_legacy_inflector: false
+
swagger:
api_keys:
# overridden in OpenApiFactoryDecorator
diff --git a/docs/index.md b/docs/index.md
index c3dbaa73..2d29b982 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -12,8 +12,8 @@ It is installed on a web server and so can be accessed with any browser without
{: .important-title }
> Demo
>
-> If you want to test Part-DB without installing it, you can use [this](https://part-db.herokuapp.com) Heroku instance.
-> (Or this link for the [German Version](https://part-db.herokuapp.com/de/)).
+> If you want to test Part-DB without installing it, you can use [this](https://demo.part-db.de/) Heroku instance.
+> (Or this link for the [German Version](https://demo.part-db.de/de/)).
>
> You can log in with username: **user** and password: **user**, to change/create data.
>
diff --git a/docs/installation/installation_docker.md b/docs/installation/installation_docker.md
index d66e0cfd..2af25f3f 100644
--- a/docs/installation/installation_docker.md
+++ b/docs/installation/installation_docker.md
@@ -150,6 +150,7 @@ services:
database:
container_name: partdb_database
image: mysql:8.0
+ restart: unless-stopped
command: --default-authentication-plugin=mysql_native_password
environment:
# Change this Password
diff --git a/migrations/Version1.php b/migrations/Version1.php
index f1389801..59f40c74 100644
--- a/migrations/Version1.php
+++ b/migrations/Version1.php
@@ -160,7 +160,7 @@ EOD;
21840,21840,21840,21840,21840,21520,21520,21520,20480,21520,20480,
20480,20480,20480,20480,21504,20480),
(
- 2,'admin', '${admin_pw}','','',
+ 2,'admin', '$admin_pw','','',
'','',1,1,21845,21845,21845,21,85,21,349525,21845,21845,21845,21845
,21845,21845,21845,21845,21845,21845,21845,21845,21845,21845,21845,
21845,21845,21845,21845,21845,21845);
diff --git a/migrations/Version20190902140506.php b/migrations/Version20190902140506.php
index bbccf829..36f184d5 100644
--- a/migrations/Version20190902140506.php
+++ b/migrations/Version20190902140506.php
@@ -234,8 +234,8 @@ final class Version20190902140506 extends AbstractMultiPlatformMigration
'orderdetails', 'pricedetails', 'storelocations', 'suppliers', ];
foreach ($tables as $table) {
- $this->addSql("UPDATE ${table} SET datetime_added = NOW() WHERE datetime_added = '0000-00-00 00:00:00'");
- $this->addSql("UPDATE ${table} SET last_modified = datetime_added WHERE last_modified = '0000-00-00 00:00:00'");
+ $this->addSql("UPDATE $table SET datetime_added = NOW() WHERE datetime_added = '0000-00-00 00:00:00'");
+ $this->addSql("UPDATE $table SET last_modified = datetime_added WHERE last_modified = '0000-00-00 00:00:00'");
}
//Set the dbVersion to a high value, to prevent the old Part-DB versions to upgrade DB!
diff --git a/phpstan.dist.neon b/phpstan.dist.neon
index b2ae4824..646d29e6 100644
--- a/phpstan.dist.neon
+++ b/phpstan.dist.neon
@@ -26,7 +26,7 @@ parameters:
checkUninitializedProperties: true
- checkFunctionNameCase: true
+ checkFunctionNameCase: false
checkAlwaysTrueInstanceof: false
checkAlwaysTrueCheckTypeFunctionCall: false
diff --git a/src/ApiResource/PartDBInfo.php b/src/ApiResource/PartDBInfo.php
index 9a06f262..25aed05e 100644
--- a/src/ApiResource/PartDBInfo.php
+++ b/src/ApiResource/PartDBInfo.php
@@ -26,6 +26,7 @@ namespace App\ApiResource;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\State\PartDBInfoProvider;
@@ -35,7 +36,7 @@ use App\State\PartDBInfoProvider;
#[ApiResource(
uriTemplate: '/info.{_format}',
description: 'Basic information about Part-DB like version, title, etc.',
- operations: [new Get(openapiContext: ['summary' => 'Get basic information about the installed Part-DB instance.'])],
+ operations: [new Get(openapi: new Operation(summary: 'Get basic information about the installed Part-DB instance.'))],
provider: PartDBInfoProvider::class
)]
#[ApiFilter(PropertyFilter::class)]
diff --git a/src/Controller/ScanController.php b/src/Controller/ScanController.php
index b261f3fd..311b19f4 100644
--- a/src/Controller/ScanController.php
+++ b/src/Controller/ScanController.php
@@ -42,8 +42,10 @@ declare(strict_types=1);
namespace App\Controller;
use App\Form\LabelSystem\ScanDialogType;
-use App\Services\LabelSystem\Barcodes\BarcodeNormalizer;
+use App\Services\LabelSystem\Barcodes\BarcodeScanHelper;
use App\Services\LabelSystem\Barcodes\BarcodeRedirector;
+use App\Services\LabelSystem\Barcodes\BarcodeScanResult;
+use App\Services\LabelSystem\Barcodes\BarcodeSourceType;
use Doctrine\ORM\EntityNotFoundException;
use InvalidArgumentException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@@ -55,7 +57,7 @@ use Symfony\Component\Routing\Annotation\Route;
#[Route(path: '/scan')]
class ScanController extends AbstractController
{
- public function __construct(protected BarcodeRedirector $barcodeParser, protected BarcodeNormalizer $barcodeNormalizer)
+ public function __construct(protected BarcodeRedirector $barcodeParser, protected BarcodeScanHelper $barcodeNormalizer)
{
}
@@ -73,10 +75,9 @@ class ScanController extends AbstractController
if ($input !== null) {
try {
- [$type, $id] = $this->barcodeNormalizer->normalizeBarcodeContent($input);
-
+ $scan_result = $this->barcodeNormalizer->scanBarcodeContent($input);
try {
- return $this->redirect($this->barcodeParser->getRedirectURL($type, $id));
+ return $this->redirect($this->barcodeParser->getRedirectURL($scan_result));
} catch (EntityNotFoundException) {
$this->addFlash('success', 'scan.qr_not_found');
}
@@ -95,10 +96,23 @@ class ScanController extends AbstractController
*/
public function scanQRCode(string $type, int $id): Response
{
+ $type = strtolower($type);
+
try {
$this->addFlash('success', 'scan.qr_success');
- return $this->redirect($this->barcodeParser->getRedirectURL($type, $id));
+ if (!isset(BarcodeScanHelper::QR_TYPE_MAP[$type])) {
+ throw new InvalidArgumentException('Unknown type: '.$type);
+ }
+ //Construct the scan result manually, as we don't have a barcode here
+ $scan_result = new BarcodeScanResult(
+ target_type: BarcodeScanHelper::QR_TYPE_MAP[$type],
+ target_id: $id,
+ //The routes are only used on the internal generated QR codes
+ source_type: BarcodeSourceType::INTERNAL
+ );
+
+ return $this->redirect($this->barcodeParser->getRedirectURL($scan_result));
} catch (EntityNotFoundException) {
$this->addFlash('success', 'scan.qr_not_found');
diff --git a/src/DataTables/ProjectBomEntriesDataTable.php b/src/DataTables/ProjectBomEntriesDataTable.php
index 4586d2f7..5a706146 100644
--- a/src/DataTables/ProjectBomEntriesDataTable.php
+++ b/src/DataTables/ProjectBomEntriesDataTable.php
@@ -100,7 +100,16 @@ class ProjectBomEntriesDataTable implements DataTableTypeInterface
throw new \Exception('This should never happen!');
},
])
-
+ ->add('ipn', TextColumn::class, [
+ 'label' => $this->translator->trans('part.table.ipn'),
+ 'orderField' => 'part.ipn',
+ 'visible' => false,
+ 'render' => function ($value, ProjectBOMEntry $context) {
+ if($context->getPart() instanceof Part) {
+ return $context->getPart()->getIpn();
+ }
+ }
+ ])
->add('description', MarkdownColumn::class, [
'label' => $this->translator->trans('part.table.description'),
'data' => function (ProjectBOMEntry $context) {
diff --git a/src/Doctrine/Functions/Field2.php b/src/Doctrine/Functions/Field2.php
index dc12b294..2e11a855 100644
--- a/src/Doctrine/Functions/Field2.php
+++ b/src/Doctrine/Functions/Field2.php
@@ -36,7 +36,7 @@ class Field2 extends FunctionNode
private $values = [];
- public function parse(\Doctrine\ORM\Query\Parser $parser)
+ public function parse(\Doctrine\ORM\Query\Parser $parser): void
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
@@ -58,7 +58,7 @@ class Field2 extends FunctionNode
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
- public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
+ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker): string
{
$query = 'FIELD2(';
diff --git a/src/Entity/Attachments/AttachmentType.php b/src/Entity/Attachments/AttachmentType.php
index d4cc7b25..241f3d18 100644
--- a/src/Entity/Attachments/AttachmentType.php
+++ b/src/Entity/Attachments/AttachmentType.php
@@ -33,6 +33,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Parts\Footprint;
@@ -70,7 +71,7 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/attachment_types/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of an attachment type.'],
+ new GetCollection(openapi: new Operation(summary: 'Retrieves the children elements of an attachment type.'),
security: 'is_granted("@attachment_types.read")')
],
uriVariables: [
diff --git a/src/Entity/OAuthToken.php b/src/Entity/OAuthToken.php
index b1534a4d..3924e1a8 100644
--- a/src/Entity/OAuthToken.php
+++ b/src/Entity/OAuthToken.php
@@ -135,17 +135,17 @@ class OAuthToken extends AbstractNamedDBElement implements AccessTokenInterface
$this->expires_at = self::unixTimestampToDatetime($accessToken->getExpires() ?? time() + self::DEFAULT_EXPIRATION_TIME);
}
- public function getExpires()
+ public function getExpires(): ?int
{
return $this->expires_at->getTimestamp();
}
- public function hasExpired()
+ public function hasExpired(): bool
{
return $this->isExpired();
}
- public function getValues()
+ public function getValues(): array
{
return [];
}
diff --git a/src/Entity/Parts/Category.php b/src/Entity/Parts/Category.php
index b1dc8c97..95e2295c 100644
--- a/src/Entity/Parts/Category.php
+++ b/src/Entity/Parts/Category.php
@@ -34,6 +34,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -72,8 +73,10 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/categories/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a category.'],
- security: 'is_granted("@categories.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a category.'),
+ security: 'is_granted("@categories.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'children', fromClass: Category::class)
diff --git a/src/Entity/Parts/Footprint.php b/src/Entity/Parts/Footprint.php
index 2cdf9fba..c3f70087 100644
--- a/src/Entity/Parts/Footprint.php
+++ b/src/Entity/Parts/Footprint.php
@@ -34,6 +34,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -72,8 +73,10 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/footprints/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a footprint.'],
- security: 'is_granted("@footprints.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a footprint.'),
+ security: 'is_granted("@footprints.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'children', fromClass: Footprint::class)
diff --git a/src/Entity/Parts/Manufacturer.php b/src/Entity/Parts/Manufacturer.php
index 14b31409..1a5db9ba 100644
--- a/src/Entity/Parts/Manufacturer.php
+++ b/src/Entity/Parts/Manufacturer.php
@@ -33,6 +33,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -71,8 +72,10 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/manufacturers/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a manufacturer.'],
- security: 'is_granted("@manufacturers.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a manufacturer.'),
+ security: 'is_granted("@manufacturers.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'children', fromClass: Manufacturer::class)
diff --git a/src/Entity/Parts/MeasurementUnit.php b/src/Entity/Parts/MeasurementUnit.php
index f9f45ca5..299c230d 100644
--- a/src/Entity/Parts/MeasurementUnit.php
+++ b/src/Entity/Parts/MeasurementUnit.php
@@ -33,6 +33,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -75,8 +76,10 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/footprints/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a MeasurementUnit.'],
- security: 'is_granted("@measurement_units.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a MeasurementUnit.'),
+ security: 'is_granted("@measurement_units.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'children', fromClass: MeasurementUnit::class)
diff --git a/src/Entity/Parts/StorageLocation.php b/src/Entity/Parts/StorageLocation.php
index 3a7847d9..564f30ce 100644
--- a/src/Entity/Parts/StorageLocation.php
+++ b/src/Entity/Parts/StorageLocation.php
@@ -33,6 +33,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -71,8 +72,10 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/storage_locations/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a storage location.'],
- security: 'is_granted("@storelocations.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a storage location.'),
+ security: 'is_granted("@storelocations.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'children', fromClass: Manufacturer::class)
diff --git a/src/Entity/Parts/Supplier.php b/src/Entity/Parts/Supplier.php
index 83289439..5103a565 100644
--- a/src/Entity/Parts/Supplier.php
+++ b/src/Entity/Parts/Supplier.php
@@ -33,6 +33,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -75,8 +76,10 @@ use Symfony\Component\Validator\Constraints as Assert;
)]
#[ApiResource(
uriTemplate: '/suppliers/{id}/children.{_format}',
- operations: [new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a supplier'],
- security: 'is_granted("@manufacturers.read")')],
+ operations: [new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a supplier.'),
+ security: 'is_granted("@manufacturers.read")'
+ )],
uriVariables: [
'id' => new Link(fromClass: Supplier::class, fromProperty: 'children')
],
diff --git a/src/Entity/PriceInformations/Currency.php b/src/Entity/PriceInformations/Currency.php
index a108feeb..2e95dc09 100644
--- a/src/Entity/PriceInformations/Currency.php
+++ b/src/Entity/PriceInformations/Currency.php
@@ -33,6 +33,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -75,8 +76,10 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/currencies/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a currency.'],
- security: 'is_granted("@currencies.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a currency.'),
+ security: 'is_granted("@currencies.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'children', fromClass: Currency::class)
diff --git a/src/Entity/PriceInformations/Orderdetail.php b/src/Entity/PriceInformations/Orderdetail.php
index 62426597..6fed2d75 100644
--- a/src/Entity/PriceInformations/Orderdetail.php
+++ b/src/Entity/PriceInformations/Orderdetail.php
@@ -34,6 +34,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use Doctrine\DBAL\Types\Types;
@@ -73,8 +74,10 @@ use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
uriTemplate: '/parts/{id}/orderdetails.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the orderdetails of a part.'],
- security: 'is_granted("@parts.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the orderdetails of a part.'),
+ security: 'is_granted("@parts.read")'
+ )
],
uriVariables: [
'id' => new Link(toProperty: 'part', fromClass: Part::class)
diff --git a/src/Entity/ProjectSystem/Project.php b/src/Entity/ProjectSystem/Project.php
index 81b1fc09..0859c7f1 100644
--- a/src/Entity/ProjectSystem/Project.php
+++ b/src/Entity/ProjectSystem/Project.php
@@ -33,6 +33,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -74,8 +75,10 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
#[ApiResource(
uriTemplate: '/projects/{id}/children.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the children elements of a project.'],
- security: 'is_granted("@projects.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a project.'),
+ security: 'is_granted("@projects.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'children', fromClass: Project::class)
diff --git a/src/Entity/ProjectSystem/ProjectBOMEntry.php b/src/Entity/ProjectSystem/ProjectBOMEntry.php
index 8ecaa1ed..b45e1af0 100644
--- a/src/Entity/ProjectSystem/ProjectBOMEntry.php
+++ b/src/Entity/ProjectSystem/ProjectBOMEntry.php
@@ -32,6 +32,7 @@ use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Validator\UniqueValidatableInterface;
@@ -69,8 +70,10 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
#[ApiResource(
uriTemplate: '/projects/{id}/bom.{_format}',
operations: [
- new GetCollection(openapiContext: ['summary' => 'Retrieves the BOM entries of the given project.'],
- security: 'is_granted("@projects.read")')
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the BOM entries of the given project.'),
+ security: 'is_granted("@projects.read")'
+ )
],
uriVariables: [
'id' => new Link(fromProperty: 'bom_entries', fromClass: Project::class)
diff --git a/src/Entity/UserSystem/ApiToken.php b/src/Entity/UserSystem/ApiToken.php
index 88a0ad84..95919e1d 100644
--- a/src/Entity/UserSystem/ApiToken.php
+++ b/src/Entity/UserSystem/ApiToken.php
@@ -26,6 +26,7 @@ namespace App\Entity\UserSystem;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Base\TimestampTrait;
@@ -46,7 +47,9 @@ use Symfony\Component\Validator\Constraints\NotBlank;
#[ApiResource(
uriTemplate: '/tokens/current.{_format}',
description: 'A token used to authenticate API requests.',
- operations: [new Get(openapiContext: ['summary' => 'Get information about the API token that is currently used.'])],
+ operations: [new Get(
+ openapi: new Operation(summary: 'Get information about the API token that is currently used.'),
+ )],
normalizationContext: ['groups' => ['token:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
provider: CurrentApiTokenProvider::class,
)]
diff --git a/src/Entity/UserSystem/User.php b/src/Entity/UserSystem/User.php
index a6caaa0f..2ee96406 100644
--- a/src/Entity/UserSystem/User.php
+++ b/src/Entity/UserSystem/User.php
@@ -31,6 +31,7 @@ use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
+use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\Serializer\Filter\PropertyFilter;
use App\ApiPlatform\Filter\LikeFilter;
use App\Entity\Attachments\Attachment;
@@ -86,10 +87,14 @@ use Jbtronics\TFAWebauthn\Model\TwoFactorInterface as WebauthnTwoFactorInterface
#[ApiResource(
shortName: 'User',
operations: [
- new Get(openapiContext: ['summary' => 'Get a specific user.'],
- security: 'is_granted("read", object)'),
- new GetCollection(openapiContext: ['summary' => 'Get all users defined in the system.'],
- security: 'is_granted("@users.read")'),
+ new Get(
+ openapi: new Operation(summary: 'Get information about the current user.'),
+ security: 'is_granted("read", object)'
+ ),
+ new GetCollection(
+ openapi: new Operation(summary: 'Get all users defined in the system.'),
+ security: 'is_granted("@users.read")'
+ ),
],
normalizationContext: ['groups' => ['user:read'], 'openapi_definition_name' => 'Read'],
)]
diff --git a/src/EventSubscriber/SwitchUserEventSubscriber.php b/src/EventSubscriber/SwitchUserEventSubscriber.php
index a7f2e39c..b68f6b4f 100644
--- a/src/EventSubscriber/SwitchUserEventSubscriber.php
+++ b/src/EventSubscriber/SwitchUserEventSubscriber.php
@@ -38,7 +38,7 @@ class SwitchUserEventSubscriber implements EventSubscriberInterface
{
}
- public static function getSubscribedEvents()
+ public static function getSubscribedEvents(): array
{
return [
'security.switch_user' => 'onSwitchUser',
diff --git a/src/EventSubscriber/WebpackAutoPathSubscriber.php b/src/EventSubscriber/WebpackAutoPathSubscriber.php
new file mode 100644
index 00000000..f040a646
--- /dev/null
+++ b/src/EventSubscriber/WebpackAutoPathSubscriber.php
@@ -0,0 +1,57 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\EventSubscriber;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\WebpackEncoreBundle\Event\RenderAssetTagEvent;
+
+/**
+ * This class fixes the wrong pathes generated by webpack using the auto publicPath mode.
+ * Basically it replaces the wrong /auto/ part of the path with the correct /build/ in all encore entrypoints.
+ */
+class WebpackAutoPathSubscriber implements EventSubscriberInterface
+{
+ public static function getSubscribedEvents(): array
+ {
+ return [
+ RenderAssetTagEvent::class => 'onRenderAssetTag'
+ ];
+ }
+
+ public function onRenderAssetTag(RenderAssetTagEvent $event): void
+ {
+ if ($event->isScriptTag()) {
+ $event->setAttribute('src', $this->resolveAuto($event->getUrl()));
+ }
+ if ($event->isLinkTag()) {
+ $event->setAttribute('href', $this->resolveAuto($event->getUrl()));
+ }
+ }
+
+ private function resolveAuto(string $path): string
+ {
+ //Replace the first occurence of /auto/ with /build/ to get the correct path
+ return preg_replace('/\/auto\//', '/build/', $path, 1);
+ }
+}
\ No newline at end of file
diff --git a/src/Form/InfoProviderSystem/ProviderSelectType.php b/src/Form/InfoProviderSystem/ProviderSelectType.php
index 6ebe663d..26ff6be9 100644
--- a/src/Form/InfoProviderSystem/ProviderSelectType.php
+++ b/src/Form/InfoProviderSystem/ProviderSelectType.php
@@ -43,7 +43,7 @@ class ProviderSelectType extends AbstractType
return ChoiceType::class;
}
- public function configureOptions(OptionsResolver $resolver)
+ public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'choices' => $this->providerRegistry->getActiveProviders(),
diff --git a/src/Form/PasswordTypeExtension.php b/src/Form/PasswordTypeExtension.php
index f97eeb8e..a911bf90 100644
--- a/src/Form/PasswordTypeExtension.php
+++ b/src/Form/PasswordTypeExtension.php
@@ -46,7 +46,7 @@ class PasswordTypeExtension extends AbstractTypeExtension
$resolver->setAllowedTypes('password_estimator', 'bool');
}
- public function finishView(FormView $view, FormInterface $form, array $options)
+ public function finishView(FormView $view, FormInterface $form, array $options): void
{
$view->vars['password_estimator'] = $options['password_estimator'];
}
diff --git a/src/Form/ProjectSystem/ProjectAddPartsType.php b/src/Form/ProjectSystem/ProjectAddPartsType.php
index f89f3567..ddcdc33a 100644
--- a/src/Form/ProjectSystem/ProjectAddPartsType.php
+++ b/src/Form/ProjectSystem/ProjectAddPartsType.php
@@ -35,7 +35,7 @@ use Symfony\Component\Validator\Constraints\NotNull;
class ProjectAddPartsType extends AbstractType
{
- public function buildForm(FormBuilderInterface $builder, array $options)
+ public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('project', StructuralEntityType::class, [
'class' => Project::class,
@@ -73,7 +73,7 @@ class ProjectAddPartsType extends AbstractType
});
}
- public function configureOptions(OptionsResolver $resolver)
+ public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'project' => null,
diff --git a/src/Serializer/AttachmentNormalizer.php b/src/Serializer/AttachmentNormalizer.php
index 7911a9c3..c71e035d 100644
--- a/src/Serializer/AttachmentNormalizer.php
+++ b/src/Serializer/AttachmentNormalizer.php
@@ -40,7 +40,7 @@ class AttachmentNormalizer implements NormalizerInterface
}
- public function normalize(mixed $object, string $format = null, array $context = [])
+ public function normalize(mixed $object, string $format = null, array $context = []): array|null
{
if (!$object instanceof Attachment) {
throw new \InvalidArgumentException('This normalizer only supports Attachment objects!');
diff --git a/src/Serializer/BigNumberNormalizer.php b/src/Serializer/BigNumberNormalizer.php
index 80bb98d7..8ef06d67 100644
--- a/src/Serializer/BigNumberNormalizer.php
+++ b/src/Serializer/BigNumberNormalizer.php
@@ -58,7 +58,7 @@ class BigNumberNormalizer implements NormalizerInterface, DenormalizerInterface
];
}
- public function denormalize(mixed $data, string $type, string $format = null, array $context = [])
+ public function denormalize(mixed $data, string $type, string $format = null, array $context = []): BigNumber|null
{
if (!is_a($type, BigNumber::class, true)) {
throw new \InvalidArgumentException('This normalizer only supports BigNumber objects!');
@@ -67,7 +67,7 @@ class BigNumberNormalizer implements NormalizerInterface, DenormalizerInterface
return $type::of($data);
}
- public function supportsDenormalization(mixed $data, string $type, string $format = null)
+ public function supportsDenormalization(mixed $data, string $type, string $format = null, array $context = []): bool
{
//data must be a string or a number (int, float, etc.) and the type must be BigNumber or BigDecimal
return (is_string($data) || is_numeric($data)) && (is_subclass_of($type, BigNumber::class));
diff --git a/src/Services/InfoProviderSystem/DTOs/PriceDTO.php b/src/Services/InfoProviderSystem/DTOs/PriceDTO.php
index 8c563149..f1eb28f7 100644
--- a/src/Services/InfoProviderSystem/DTOs/PriceDTO.php
+++ b/src/Services/InfoProviderSystem/DTOs/PriceDTO.php
@@ -41,6 +41,8 @@ class PriceDTO
public readonly ?string $currency_iso_code,
/** @var bool If the price includes tax */
public readonly ?bool $includes_tax = true,
+ /** @var float the price related quantity */
+ public readonly ?float $price_related_quantity = 1.0,
)
{
$this->price_as_big_decimal = BigDecimal::of($this->price);
@@ -54,4 +56,4 @@ class PriceDTO
{
return $this->price_as_big_decimal;
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php
index 881d5f20..c88ab429 100644
--- a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php
+++ b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php
@@ -87,6 +87,7 @@ final class DTOtoEntityConverter
{
$entity->setMinDiscountQuantity($dto->minimum_discount_amount);
$entity->setPrice($dto->getPriceAsBigDecimal());
+ $entity->setPriceRelatedQuantity($dto->price_related_quantity);
//Currency TODO
if ($dto->currency_iso_code !== null) {
@@ -95,7 +96,6 @@ final class DTOtoEntityConverter
$entity->setCurrency(null);
}
-
return $entity;
}
@@ -289,7 +289,7 @@ final class DTOtoEntityConverter
//If the entity was newly created, set the file filter
if ($tmp->getID() === null) {
$tmp->setFiletypeFilter('image/*');
- $tmp->setAlternativeNames(self::TYPE_DATASHEETS_NAME);
+ $tmp->setAlternativeNames(self::TYPE_IMAGE_NAME);
}
return $tmp;
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeContentGenerator.php b/src/Services/LabelSystem/Barcodes/BarcodeContentGenerator.php
index 33743e4f..7ceb30dd 100644
--- a/src/Services/LabelSystem/Barcodes/BarcodeContentGenerator.php
+++ b/src/Services/LabelSystem/Barcodes/BarcodeContentGenerator.php
@@ -76,11 +76,11 @@ final class BarcodeContentGenerator
{
$type = $this->classToString(self::URL_MAP, $target);
- return $this->urlGenerator->generate('scan_qr', [
- 'type' => $type,
+ return $this->urlGenerator->generate('scan_qr', [
+ 'type' => $type,
'id' => $target->getID() ?? 0,
'_locale' => null,
-], UrlGeneratorInterface::ABSOLUTE_URL);
+ ], UrlGeneratorInterface::ABSOLUTE_URL);
}
/**
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeHelper.php b/src/Services/LabelSystem/Barcodes/BarcodeHelper.php
new file mode 100644
index 00000000..d13da589
--- /dev/null
+++ b/src/Services/LabelSystem/Barcodes/BarcodeHelper.php
@@ -0,0 +1,96 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\LabelSystem\Barcodes;
+
+use App\Entity\LabelSystem\BarcodeType;
+use Com\Tecnick\Barcode\Barcode;
+
+/**
+ * This function is used to generate barcodes of various types using arbitrary (text) content.
+ */
+class BarcodeHelper
+{
+
+ /**
+ * Generates a barcode with the given content and type and returns it as SVG string.
+ * @param string $content
+ * @param BarcodeType $type
+ * @return string
+ */
+ public function barcodeAsSVG(string $content, BarcodeType $type): string
+ {
+ $barcode = new Barcode();
+
+ $type_str = match ($type) {
+ BarcodeType::NONE => throw new \InvalidArgumentException('Barcode type must not be NONE! This would make no sense...'),
+ BarcodeType::QR => 'QRCODE',
+ BarcodeType::DATAMATRIX => 'DATAMATRIX',
+ BarcodeType::CODE39 => 'C39',
+ BarcodeType::CODE93 => 'C93',
+ BarcodeType::CODE128 => 'C128A',
+ };
+
+ return $barcode->getBarcodeObj($type_str, $content)->getSvgCode();
+ }
+
+ /**
+ * Generates a barcode with the given content and type and returns it as HTML image tag.
+ * @param string $content
+ * @param BarcodeType $type
+ * @param string $width Width of the image tag
+ * @param string|null $alt_text The alt text of the image tag. If null, the content is used.
+ * @return string
+ */
+ public function barcodeAsHTML(string $content, BarcodeType $type, string $width = '100%', ?string $alt_text = null): string
+ {
+ $svg = $this->barcodeAsSVG($content, $type);
+ $base64 = $this->dataUri($svg, 'image/svg+xml');
+ $alt_text = $alt_text ?? $content;
+
+ return '';
+ }
+
+ /**
+ * Creates a data URI (RFC 2397).
+ * Based on the Twig implementation from HTMLExtension
+ *
+ * Length validation is not performed on purpose, validation should
+ * be done before calling this filter.
+ *
+ * @return string The generated data URI
+ */
+ private function dataUri(string $data, string $mime): string
+ {
+ $repr = 'data:';
+
+ $repr .= $mime;
+ if (str_starts_with($mime, 'text/')) {
+ $repr .= ','.rawurlencode($data);
+ } else {
+ $repr .= ';base64,'.base64_encode($data);
+ }
+
+ return $repr;
+ }
+}
\ No newline at end of file
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeRedirector.php b/src/Services/LabelSystem/Barcodes/BarcodeRedirector.php
index 0eba0ed4..bc21b787 100644
--- a/src/Services/LabelSystem/Barcodes/BarcodeRedirector.php
+++ b/src/Services/LabelSystem/Barcodes/BarcodeRedirector.php
@@ -41,6 +41,7 @@ declare(strict_types=1);
namespace App\Services\LabelSystem\Barcodes;
+use App\Entity\LabelSystem\LabelSupportedElement;
use App\Entity\Parts\PartLot;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityNotFoundException;
@@ -59,32 +60,30 @@ final class BarcodeRedirector
/**
* Determines the URL to which the user should be redirected, when scanning a QR code.
*
- * @param string $type The type of the element that was scanned (e.g. 'part', 'lot', etc.)
- * @param int $id The ID of the element that was scanned
- *
+ * @param BarcodeScanResult $barcodeScan The result of the barcode scan
* @return string the URL to which should be redirected
*
* @throws EntityNotFoundException
*/
- public function getRedirectURL(string $type, int $id): string
+ public function getRedirectURL(BarcodeScanResult $barcodeScan): string
{
- switch ($type) {
- case 'part':
- return $this->urlGenerator->generate('app_part_show', ['id' => $id]);
- case 'lot':
+ switch ($barcodeScan->target_type) {
+ case LabelSupportedElement::PART:
+ return $this->urlGenerator->generate('app_part_show', ['id' => $barcodeScan->target_id]);
+ case LabelSupportedElement::PART_LOT:
//Try to determine the part to the given lot
- $lot = $this->em->find(PartLot::class, $id);
+ $lot = $this->em->find(PartLot::class, $barcodeScan->target_id);
if (!$lot instanceof PartLot) {
throw new EntityNotFoundException();
}
return $this->urlGenerator->generate('app_part_show', ['id' => $lot->getPart()->getID()]);
- case 'location':
- return $this->urlGenerator->generate('part_list_store_location', ['id' => $id]);
+ case LabelSupportedElement::STORELOCATION:
+ return $this->urlGenerator->generate('part_list_store_location', ['id' => $barcodeScan->target_id]);
default:
- throw new InvalidArgumentException('Unknown $type: '.$type);
+ throw new InvalidArgumentException('Unknown $type: '.$barcodeScan->target_type->name);
}
}
}
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeNormalizer.php b/src/Services/LabelSystem/Barcodes/BarcodeScanHelper.php
similarity index 53%
rename from src/Services/LabelSystem/Barcodes/BarcodeNormalizer.php
rename to src/Services/LabelSystem/Barcodes/BarcodeScanHelper.php
index a5b6cb5e..b2dcdac7 100644
--- a/src/Services/LabelSystem/Barcodes/BarcodeNormalizer.php
+++ b/src/Services/LabelSystem/Barcodes/BarcodeScanHelper.php
@@ -41,24 +41,59 @@ declare(strict_types=1);
namespace App\Services\LabelSystem\Barcodes;
+use App\Entity\LabelSystem\LabelSupportedElement;
use InvalidArgumentException;
/**
* @see \App\Tests\Services\LabelSystem\Barcodes\BarcodeNormalizerTest
*/
-final class BarcodeNormalizer
+final class BarcodeScanHelper
{
private const PREFIX_TYPE_MAP = [
- 'L' => 'lot',
- 'P' => 'part',
- 'S' => 'location',
+ 'L' => LabelSupportedElement::PART_LOT,
+ 'P' => LabelSupportedElement::PART,
+ 'S' => LabelSupportedElement::STORELOCATION,
+ ];
+
+ public const QR_TYPE_MAP = [
+ 'lot' => LabelSupportedElement::PART_LOT,
+ 'part' => LabelSupportedElement::PART,
+ 'location' => LabelSupportedElement::STORELOCATION,
];
/**
- * Parses barcode content and normalizes it.
- * Returns an array in the format ['part', 1]: First entry contains element type, second the ID of the element.
+ * Parse the given barcode content and return the target type and ID.
+ * If the barcode could not be parsed, an exception is thrown.
+ * Using the $type parameter, you can specify how the barcode should be parsed. If set to null, the function
+ * will try to guess the type.
+ * @param string $input
+ * @param BarcodeSourceType|null $type
+ * @return BarcodeScanResult
*/
- public function normalizeBarcodeContent(string $input): array
+ public function scanBarcodeContent(string $input, ?BarcodeSourceType $type = null): BarcodeScanResult
+ {
+ //Do specific parsing
+ if ($type === BarcodeSourceType::INTERNAL) {
+ return $this->parseInternalBarcode($input) ?? throw new InvalidArgumentException('Could not parse barcode');
+ }
+
+ //Null means auto and we try the different formats
+ $result = $this->parseInternalBarcode($input);
+
+ if ($result !== null) {
+ return $result;
+ }
+ throw new InvalidArgumentException('Unknown barcode format');
+ }
+
+ /**
+ * This function tries to interpret the given barcode content as an internal barcode.
+ * If the barcode could not be parsed at all, null is returned. If the barcode is a valid format, but could
+ * not be found in the database, an exception is thrown.
+ * @param string $input
+ * @return BarcodeScanResult|null
+ */
+ private function parseInternalBarcode(string $input): ?BarcodeScanResult
{
$input = trim($input);
$matches = [];
@@ -68,7 +103,11 @@ final class BarcodeNormalizer
//Extract parts from QR code's URL
if (preg_match('#^https?://.*/scan/(\w+)/(\d+)/?$#', $input, $matches)) {
- return [$matches[1], (int) $matches[2]];
+ return new BarcodeScanResult(
+ target_type: self::QR_TYPE_MAP[strtolower($matches[1])],
+ target_id: (int) $matches[2],
+ source_type: BarcodeSourceType::INTERNAL
+ );
}
//New Code39 barcode use L0001 format
@@ -80,7 +119,11 @@ final class BarcodeNormalizer
throw new InvalidArgumentException('Unknown prefix '.$prefix);
}
- return [self::PREFIX_TYPE_MAP[$prefix], $id];
+ return new BarcodeScanResult(
+ target_type: self::PREFIX_TYPE_MAP[$prefix],
+ target_id: $id,
+ source_type: BarcodeSourceType::INTERNAL
+ );
}
//During development the L-000001 format was used
@@ -92,19 +135,32 @@ final class BarcodeNormalizer
throw new InvalidArgumentException('Unknown prefix '.$prefix);
}
- return [self::PREFIX_TYPE_MAP[$prefix], $id];
+ return new BarcodeScanResult(
+ target_type: self::PREFIX_TYPE_MAP[$prefix],
+ target_id: $id,
+ source_type: BarcodeSourceType::INTERNAL
+ );
}
//Legacy Part-DB location labels used $L00336 format
if (preg_match('#^\$L(\d{5,})$#', $input, $matches)) {
- return ['location', (int) $matches[1]];
+ return new BarcodeScanResult(
+ target_type: LabelSupportedElement::STORELOCATION,
+ target_id: (int) $matches[1],
+ source_type: BarcodeSourceType::INTERNAL
+ );
}
//Legacy Part-DB used EAN8 barcodes for part labels. Format 0000001(2) (note the optional 8th digit => checksum)
if (preg_match('#^(\d{7})\d?$#', $input, $matches)) {
- return ['part', (int) $matches[1]];
+ return new BarcodeScanResult(
+ target_type: LabelSupportedElement::PART,
+ target_id: (int) $matches[1],
+ source_type: BarcodeSourceType::INTERNAL
+ );
}
- throw new InvalidArgumentException('Unknown barcode format!');
+ //This function abstain from further parsing
+ return null;
}
}
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeScanResult.php b/src/Services/LabelSystem/Barcodes/BarcodeScanResult.php
new file mode 100644
index 00000000..7f1315b3
--- /dev/null
+++ b/src/Services/LabelSystem/Barcodes/BarcodeScanResult.php
@@ -0,0 +1,39 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\LabelSystem\Barcodes;
+
+use App\Entity\LabelSystem\LabelSupportedElement;
+
+/**
+ * This class represents the result of a barcode scan, with the target type and the ID of the element
+ */
+class BarcodeScanResult
+{
+ public function __construct(
+ public readonly LabelSupportedElement $target_type,
+ public readonly int $target_id,
+ public readonly BarcodeSourceType $source_type,
+ ) {
+ }
+}
\ No newline at end of file
diff --git a/src/Services/LabelSystem/Barcodes/BarcodeSourceType.php b/src/Services/LabelSystem/Barcodes/BarcodeSourceType.php
new file mode 100644
index 00000000..c2573152
--- /dev/null
+++ b/src/Services/LabelSystem/Barcodes/BarcodeSourceType.php
@@ -0,0 +1,33 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Services\LabelSystem\Barcodes;
+
+/**
+ * This enum represents the different types, where a barcode/QR-code can be generated from
+ */
+enum BarcodeSourceType
+{
+ /** This Barcode was generated using Part-DB internal recommended barcode generator */
+ case INTERNAL;
+}
\ No newline at end of file
diff --git a/src/Services/LabelSystem/BarcodeGenerator.php b/src/Services/LabelSystem/LabelBarcodeGenerator.php
similarity index 64%
rename from src/Services/LabelSystem/BarcodeGenerator.php
rename to src/Services/LabelSystem/LabelBarcodeGenerator.php
index f955955a..ea0d8f44 100644
--- a/src/Services/LabelSystem/BarcodeGenerator.php
+++ b/src/Services/LabelSystem/LabelBarcodeGenerator.php
@@ -46,67 +46,47 @@ use App\Entity\Base\AbstractStructuralDBElement;
use App\Entity\LabelSystem\BarcodeType;
use App\Entity\LabelSystem\LabelOptions;
use App\Services\LabelSystem\Barcodes\BarcodeContentGenerator;
+use App\Services\LabelSystem\Barcodes\BarcodeHelper;
use Com\Tecnick\Barcode\Barcode;
use InvalidArgumentException;
/**
* @see \App\Tests\Services\LabelSystem\BarcodeGeneratorTest
*/
-final class BarcodeGenerator
+final class LabelBarcodeGenerator
{
- public function __construct(private readonly BarcodeContentGenerator $barcodeContentGenerator)
+ public function __construct(private readonly BarcodeContentGenerator $barcodeContentGenerator, private readonly BarcodeHelper $barcodeHelper)
{
}
- public function generateHTMLBarcode(LabelOptions $options, object $target): ?string
- {
- $svg = $this->generateSVG($options, $target);
- $base64 = $this->dataUri($svg, 'image/svg+xml');
- return '
';
- }
-
- /**
- * Creates a data URI (RFC 2397).
- * Based on the Twig implementaion from HTMLExtension
- *
- * Length validation is not performed on purpose, validation should
- * be done before calling this filter.
- *
- * @return string The generated data URI
+ /**
+ * Generate the barcode for the given label as HTML image tag.
+ * @param LabelOptions $options
+ * @param AbstractDBElement $target
+ * @return string|null
*/
- private function dataUri(string $data, string $mime): string
+ public function generateHTMLBarcode(LabelOptions $options, AbstractDBElement $target): ?string
{
- $repr = 'data:';
-
- $repr .= $mime;
- if (str_starts_with($mime, 'text/')) {
- $repr .= ','.rawurlencode($data);
- } else {
- $repr .= ';base64,'.base64_encode($data);
- }
-
- return $repr;
- }
-
- public function generateSVG(LabelOptions $options, object $target): ?string
- {
- $barcode = new Barcode();
-
- $type = match ($options->getBarcodeType()) {
- BarcodeType::NONE => null,
- BarcodeType::QR => 'QRCODE',
- BarcodeType::DATAMATRIX => 'DATAMATRIX',
- BarcodeType::CODE39 => 'C39',
- BarcodeType::CODE93 => 'C93',
- BarcodeType::CODE128 => 'C128A',
- };
-
- if ($type === null) {
+ if ($options->getBarcodeType() === BarcodeType::NONE) {
return null;
}
+ return $this->barcodeHelper->barcodeAsHTML($this->getContent($options, $target), $options->getBarcodeType());
+ }
- return $barcode->getBarcodeObj($type, $this->getContent($options, $target))->getSvgCode();
+ /**
+ * Generate the barcode for the given label as SVG string.
+ * @param LabelOptions $options
+ * @param AbstractDBElement $target
+ * @return string|null
+ */
+ public function generateSVG(LabelOptions $options, AbstractDBElement $target): ?string
+ {
+ if ($options->getBarcodeType() === BarcodeType::NONE) {
+ return null;
+ }
+
+ return $this->barcodeHelper->barcodeAsSVG($this->getContent($options, $target), $options->getBarcodeType());
}
public function getContent(LabelOptions $options, AbstractDBElement $target): ?string
diff --git a/src/Services/LabelSystem/LabelHTMLGenerator.php b/src/Services/LabelSystem/LabelHTMLGenerator.php
index 7b6defa6..b4184646 100644
--- a/src/Services/LabelSystem/LabelHTMLGenerator.php
+++ b/src/Services/LabelSystem/LabelHTMLGenerator.php
@@ -53,7 +53,7 @@ use Twig\Error\Error;
final class LabelHTMLGenerator
{
- public function __construct(private readonly ElementTypeNameGenerator $elementTypeNameGenerator, private readonly LabelTextReplacer $replacer, private readonly Environment $twig, private readonly BarcodeGenerator $barcodeGenerator, private readonly SandboxedTwigProvider $sandboxedTwigProvider, private readonly Security $security, private readonly string $partdb_title)
+ public function __construct(private readonly ElementTypeNameGenerator $elementTypeNameGenerator, private readonly LabelTextReplacer $replacer, private readonly Environment $twig, private readonly LabelBarcodeGenerator $barcodeGenerator, private readonly SandboxedTwigProvider $sandboxedTwigProvider, private readonly Security $security, private readonly string $partdb_title)
{
}
diff --git a/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php b/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php
index 11824054..dd70177f 100644
--- a/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php
+++ b/src/Services/LabelSystem/PlaceholderProviders/BarcodeProvider.php
@@ -24,12 +24,18 @@ namespace App\Services\LabelSystem\PlaceholderProviders;
use App\Entity\LabelSystem\BarcodeType;
use App\Entity\LabelSystem\LabelOptions;
-use App\Services\LabelSystem\BarcodeGenerator;
+use App\Entity\Parts\Part;
+use App\Entity\Parts\PartLot;
+use App\Services\LabelSystem\Barcodes\BarcodeHelper;
+use App\Services\LabelSystem\LabelBarcodeGenerator;
use App\Services\LabelSystem\Barcodes\BarcodeContentGenerator;
+use Com\Tecnick\Barcode\Exception;
final class BarcodeProvider implements PlaceholderProviderInterface
{
- public function __construct(private readonly BarcodeGenerator $barcodeGenerator, private readonly BarcodeContentGenerator $barcodeContentGenerator)
+ public function __construct(private readonly LabelBarcodeGenerator $barcodeGenerator,
+ private readonly BarcodeContentGenerator $barcodeContentGenerator,
+ private readonly BarcodeHelper $barcodeHelper)
{
}
@@ -69,6 +75,37 @@ final class BarcodeProvider implements PlaceholderProviderInterface
return $this->barcodeGenerator->generateHTMLBarcode($label_options, $label_target);
}
+ if (($label_target instanceof Part || $label_target instanceof PartLot)
+ && str_starts_with($placeholder, '[[IPN_BARCODE_')) {
+ if ($label_target instanceof PartLot) {
+ $label_target = $label_target->getPart();
+ }
+
+ if ($label_target === null || $label_target->getIPN() === null || $label_target->getIPN() === '') {
+ //Replace with empty result, if no IPN is set
+ return '';
+ }
+
+ try {
+ //Add placeholders for the IPN barcode
+ if ('[[IPN_BARCODE_C39]]' === $placeholder) {
+ return $this->barcodeHelper->barcodeAsHTML($label_target->getIPN(), BarcodeType::CODE39);
+ }
+ if ('[[IPN_BARCODE_C128]]' === $placeholder) {
+ return $this->barcodeHelper->barcodeAsHTML($label_target->getIPN(), BarcodeType::CODE128);
+ }
+ if ('[[IPN_BARCODE_QR]]' === $placeholder) {
+ return $this->barcodeHelper->barcodeAsHTML($label_target->getIPN(), BarcodeType::QR);
+ }
+ } catch (Exception $e) {
+ //If an error occurs, output it
+ return 'IPN Barcode ERROR!: '.$e->getMessage();
+ }
+ }
+
+
+
+
return null;
}
}
diff --git a/src/Services/SnakeCasePropertyAccessExtractor.php b/src/Services/SnakeCasePropertyAccessExtractor.php
index bfe82c63..0eaed204 100644
--- a/src/Services/SnakeCasePropertyAccessExtractor.php
+++ b/src/Services/SnakeCasePropertyAccessExtractor.php
@@ -41,7 +41,7 @@ class SnakeCasePropertyAccessExtractor implements PropertyAccessExtractorInterfa
//$this->reflectionExtractor = new ReflectionExtractor();
}
- public function isReadable(string $class, string $property, array $context = [])
+ public function isReadable(string $class, string $property, array $context = []): ?bool
{
//Null means skip this extractor
return null;
@@ -56,7 +56,7 @@ class SnakeCasePropertyAccessExtractor implements PropertyAccessExtractorInterfa
}
- public function isWritable(string $class, string $property, array $context = [])
+ public function isWritable(string $class, string $property, array $context = []): ?bool
{
//Check writeablity using a camelized property name
$isWriteable = $this->reflectionExtractor->isWritable($class, $this->camelize($property), $context);
diff --git a/src/Validator/Constraints/UniqueObjectCollectionValidator.php b/src/Validator/Constraints/UniqueObjectCollectionValidator.php
index 5522ca19..eaac097d 100644
--- a/src/Validator/Constraints/UniqueObjectCollectionValidator.php
+++ b/src/Validator/Constraints/UniqueObjectCollectionValidator.php
@@ -32,7 +32,7 @@ use Symfony\Component\Validator\Exception\UnexpectedValueException;
class UniqueObjectCollectionValidator extends ConstraintValidator
{
- public function validate(mixed $value, Constraint $constraint)
+ public function validate(mixed $value, Constraint $constraint): void
{
if (!$constraint instanceof UniqueObjectCollection) {
throw new UnexpectedTypeException($constraint, UniqueObjectCollection::class);
diff --git a/templates/_turbo_control.html.twig b/templates/_turbo_control.html.twig
index 35140f62..252e644d 100644
--- a/templates/_turbo_control.html.twig
+++ b/templates/_turbo_control.html.twig
@@ -23,7 +23,7 @@