Compare commits

...

4 commits

Author SHA1 Message Date
Jan Böhmer
3e380f82d2 Revert "Declare nativeType of parent property explicitly as workaround for bug in symfony TypeInfo"
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / docker (push) Waiting to run
Docker Image Build (FrankenPHP) / docker (push) Waiting to run
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, sqlite) (push) Waiting to run
This reverts commit 2f580c92d1.
2026-01-03 22:18:10 +01:00
Jan Böhmer
a5d7a5f1d3 Downgrade symfony/type-info to 7.4.0 to prevent issue that fails proper type resolving of static 2026-01-03 22:17:52 +01:00
Jan Böhmer
876cfc0375 Updated dependencies 2026-01-03 22:04:11 +01:00
Jan Böhmer
641c8388c1 Use xxh3 for generating hash keys instead of md5 as it offers better performance 2026-01-03 00:55:49 +01:00
15 changed files with 55 additions and 85 deletions

View file

@ -79,6 +79,7 @@
"symfony/string": "7.4.*",
"symfony/translation": "7.4.*",
"symfony/twig-bundle": "7.4.*",
"symfony/type-info": "7.4.0",
"symfony/ux-translator": "^2.10",
"symfony/ux-turbo": "^2.0",
"symfony/validator": "7.4.*",

89
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "624cf08821477aa7b8f6efc0d4300087",
"content-hash": "43757aac5f0141421893ff144ccc462f",
"packages": [
{
"name": "amphp/amp",
@ -4997,16 +4997,16 @@
},
{
"name": "jbtronics/settings-bundle",
"version": "v3.1.2",
"version": "v3.1.3",
"source": {
"type": "git",
"url": "https://github.com/jbtronics/settings-bundle.git",
"reference": "f16bce21b54d202baabfe05cb7c64a14d43b9671"
"reference": "a99c6e4cde40b829c1643b89da506b9588b11eaf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/f16bce21b54d202baabfe05cb7c64a14d43b9671",
"reference": "f16bce21b54d202baabfe05cb7c64a14d43b9671",
"url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/a99c6e4cde40b829c1643b89da506b9588b11eaf",
"reference": "a99c6e4cde40b829c1643b89da506b9588b11eaf",
"shasum": ""
},
"require": {
@ -5067,7 +5067,7 @@
],
"support": {
"issues": "https://github.com/jbtronics/settings-bundle/issues",
"source": "https://github.com/jbtronics/settings-bundle/tree/v3.1.2"
"source": "https://github.com/jbtronics/settings-bundle/tree/v3.1.3"
},
"funding": [
{
@ -5079,7 +5079,7 @@
"type": "github"
}
],
"time": "2025-11-30T22:22:49+00:00"
"time": "2026-01-02T23:58:02+00:00"
},
{
"name": "jfcherng/php-color-output",
@ -10009,16 +10009,16 @@
},
{
"name": "spomky-labs/otphp",
"version": "11.3.0",
"version": "11.4.0",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/otphp.git",
"reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33"
"reference": "ec5ff751e87e67daca2b73a35cae0d0e1d20ad45"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33",
"reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33",
"url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/ec5ff751e87e67daca2b73a35cae0d0e1d20ad45",
"reference": "ec5ff751e87e67daca2b73a35cae0d0e1d20ad45",
"shasum": ""
},
"require": {
@ -10029,18 +10029,7 @@
"symfony/deprecation-contracts": "^3.2"
},
"require-dev": {
"ekino/phpstan-banned-code": "^1.0",
"infection/infection": "^0.26|^0.27|^0.28|^0.29",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-strict-rules": "^1.0",
"phpunit/phpunit": "^9.5.26|^10.0|^11.0",
"qossmic/deptrac-shim": "^1.0",
"rector/rector": "^1.0",
"symfony/phpunit-bridge": "^6.1|^7.0",
"symplify/easy-coding-standard": "^12.0"
"symfony/error-handler": "^6.4|^7.0|^8.0"
},
"type": "library",
"autoload": {
@ -10075,7 +10064,7 @@
],
"support": {
"issues": "https://github.com/Spomky-Labs/otphp/issues",
"source": "https://github.com/Spomky-Labs/otphp/tree/11.3.0"
"source": "https://github.com/Spomky-Labs/otphp/tree/11.4.0"
},
"funding": [
{
@ -10087,7 +10076,7 @@
"type": "patreon"
}
],
"time": "2024-06-12T11:22:32+00:00"
"time": "2026-01-03T13:16:55+00:00"
},
{
"name": "spomky-labs/pki-framework",
@ -13766,21 +13755,21 @@
},
{
"name": "symfony/property-access",
"version": "v7.4.3",
"version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "30aff8455647be949fc2e8fcef2847d5a6743c98"
"reference": "537626149d2910ca43eb9ce465654366bf4442f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/30aff8455647be949fc2e8fcef2847d5a6743c98",
"reference": "30aff8455647be949fc2e8fcef2847d5a6743c98",
"url": "https://api.github.com/repos/symfony/property-access/zipball/537626149d2910ca43eb9ce465654366bf4442f4",
"reference": "537626149d2910ca43eb9ce465654366bf4442f4",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/property-info": "^6.4.31|~7.3.9|^7.4.2|^8.0.3"
"symfony/property-info": "^6.4|^7.0|^8.0"
},
"require-dev": {
"symfony/cache": "^6.4|^7.0|^8.0",
@ -13823,7 +13812,7 @@
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v7.4.3"
"source": "https://github.com/symfony/property-access/tree/v7.4.0"
},
"funding": [
{
@ -13843,27 +13832,27 @@
"type": "tidelift"
}
],
"time": "2025-12-18T10:35:58+00:00"
"time": "2025-09-08T21:14:32+00:00"
},
{
"name": "symfony/property-info",
"version": "v7.4.3",
"version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "ea62b28cd68fb36e252abd77de61e505a0f2a7b1"
"reference": "c3c686e3d3a33a99f6967e69d6d5832acb7c25a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/ea62b28cd68fb36e252abd77de61e505a0f2a7b1",
"reference": "ea62b28cd68fb36e252abd77de61e505a0f2a7b1",
"url": "https://api.github.com/repos/symfony/property-info/zipball/c3c686e3d3a33a99f6967e69d6d5832acb7c25a1",
"reference": "c3c686e3d3a33a99f6967e69d6d5832acb7c25a1",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/string": "^6.4|^7.0|^8.0",
"symfony/type-info": "~7.3.8|^7.4.1|^8.0.1"
"symfony/type-info": "^7.3.5|^8.0"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<5.2",
@ -13913,7 +13902,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v7.4.3"
"source": "https://github.com/symfony/property-info/tree/v7.4.0"
},
"funding": [
{
@ -13933,7 +13922,7 @@
"type": "tidelift"
}
],
"time": "2025-12-18T08:28:41+00:00"
"time": "2025-11-13T08:38:49+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@ -15443,16 +15432,16 @@
},
{
"name": "symfony/type-info",
"version": "v7.4.1",
"version": "v7.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/type-info.git",
"reference": "ac5ab66b21c758df71b7210cf1033d1ac807f202"
"reference": "7f9743e921abcce92a03fc693530209c59e73076"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/type-info/zipball/ac5ab66b21c758df71b7210cf1033d1ac807f202",
"reference": "ac5ab66b21c758df71b7210cf1033d1ac807f202",
"url": "https://api.github.com/repos/symfony/type-info/zipball/7f9743e921abcce92a03fc693530209c59e73076",
"reference": "7f9743e921abcce92a03fc693530209c59e73076",
"shasum": ""
},
"require": {
@ -15502,7 +15491,7 @@
"type"
],
"support": {
"source": "https://github.com/symfony/type-info/tree/v7.4.1"
"source": "https://github.com/symfony/type-info/tree/v7.4.0"
},
"funding": [
{
@ -15522,7 +15511,7 @@
"type": "tidelift"
}
],
"time": "2025-12-05T14:04:53+00:00"
"time": "2025-11-07T09:36:46+00:00"
},
{
"name": "symfony/uid",
@ -19049,12 +19038,12 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "412d91dc6342787fd733523797d9c9faf2ad3ea5"
"reference": "5ba14c800ff89c74333c22d56ca1c1f35c424805"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/412d91dc6342787fd733523797d9c9faf2ad3ea5",
"reference": "412d91dc6342787fd733523797d9c9faf2ad3ea5",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/5ba14c800ff89c74333c22d56ca1c1f35c424805",
"reference": "5ba14c800ff89c74333c22d56ca1c1f35c424805",
"shasum": ""
},
"conflict": {
@ -19115,7 +19104,7 @@
"backpack/filemanager": "<2.0.2|>=3,<3.0.9",
"bacula-web/bacula-web": "<9.7.1",
"badaso/core": "<=2.9.11",
"bagisto/bagisto": "<=2.3.7",
"bagisto/bagisto": "<2.3.10",
"barrelstrength/sprout-base-email": "<1.2.7",
"barrelstrength/sprout-forms": "<3.9",
"barryvdh/laravel-translation-manager": "<0.6.8",
@ -20048,7 +20037,7 @@
"type": "tidelift"
}
],
"time": "2025-12-30T23:05:26+00:00"
"time": "2026-01-02T22:05:49+00:00"
},
{
"name": "sebastian/cli-parser",

View file

@ -104,7 +104,7 @@ final class FieldHelper
{
$db_platform = $qb->getEntityManager()->getConnection()->getDatabasePlatform();
$key = 'field2_' . md5($field_expr);
$key = 'field2_' . hash('xxh3', $field_expr);
//If we are on MySQL, we can just use the FIELD function
if ($db_platform instanceof AbstractMySQLPlatform) {
@ -121,4 +121,4 @@ final class FieldHelper
return $qb;
}
}
}

View file

@ -47,8 +47,6 @@ use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -95,7 +93,7 @@ class AttachmentType extends AbstractStructuralDBElement
#[ORM\ManyToOne(targetEntity: AttachmentType::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['attachment_type:read', 'attachment_type:write'])]
#[ApiProperty(readableLink: true, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: true, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
/**

View file

@ -50,8 +50,6 @@ use App\Entity\Parameters\CategoryParameter;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -100,7 +98,7 @@ class Category extends AbstractPartsContainingDBElement
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['category:read', 'category:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
#[Groups(['category:read', 'category:write'])]

View file

@ -49,8 +49,6 @@ use App\Entity\Parameters\FootprintParameter;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -95,7 +93,7 @@ class Footprint extends AbstractPartsContainingDBElement
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['footprint:read', 'footprint:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
#[ORM\OneToMany(mappedBy: 'parent', targetEntity: self::class)]

View file

@ -48,8 +48,6 @@ use App\Entity\Parameters\ManufacturerParameter;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -94,7 +92,7 @@ class Manufacturer extends AbstractCompany
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['manufacturer:read', 'manufacturer:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
#[ORM\OneToMany(mappedBy: 'parent', targetEntity: self::class)]

View file

@ -50,8 +50,6 @@ use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\Length;
@ -132,7 +130,7 @@ class MeasurementUnit extends AbstractPartsContainingDBElement
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['measurement_unit:read', 'measurement_unit:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
/**

View file

@ -46,8 +46,6 @@ use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -89,7 +87,7 @@ class PartCustomState extends AbstractPartsContainingDBElement
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['part_custom_state:read', 'part_custom_state:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
/**

View file

@ -50,8 +50,6 @@ use App\Entity\UserSystem\User;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -99,7 +97,7 @@ class StorageLocation extends AbstractPartsContainingDBElement
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['location:read', 'location:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
#[Groups(['location:read', 'location:write'])]

View file

@ -53,8 +53,6 @@ use Brick\Math\BigDecimal;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -101,7 +99,7 @@ class Supplier extends AbstractCompany
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['supplier:read', 'supplier:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
/**

View file

@ -52,8 +52,6 @@ use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -127,7 +125,7 @@ class Currency extends AbstractStructuralDBElement
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['currency:read', 'currency:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
/**

View file

@ -49,8 +49,6 @@ use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use InvalidArgumentException;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\TypeInfo\Type\NullableType;
use Symfony\Component\TypeInfo\Type\ObjectType;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
@ -97,7 +95,7 @@ class Project extends AbstractStructuralDBElement
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
#[ORM\JoinColumn(name: 'parent_id')]
#[Groups(['project:read', 'project:write'])]
#[ApiProperty(readableLink: false, writableLink: false, nativeType: new NullableType(new ObjectType(self::class)))]
#[ApiProperty(readableLink: false, writableLink: false)]
protected ?AbstractStructuralDBElement $parent = null;
#[Groups(['project:read', 'project:write'])]

View file

@ -139,7 +139,7 @@ class FileTypeFilterTools
{
$filter = trim($filter);
return $this->cache->get('filter_exts_'.md5($filter), function (ItemInterface $item) use ($filter) {
return $this->cache->get('filter_exts_'.hash('xxh3', $filter), function (ItemInterface $item) use ($filter) {
$elements = explode(',', $filter);
$extensions = [];

View file

@ -397,13 +397,13 @@ class OEMSecretsProvider implements InfoProviderInterface
* Generates a cache key for storing part details based on the provided provider ID.
*
* This method creates a unique cache key by prefixing the provider ID with 'part_details_'
* and hashing the provider ID using MD5 to ensure a consistent and compact key format.
* and hashing the provider ID using XXH3 to ensure a consistent and compact key format.
*
* @param string $provider_id The unique identifier of the provider or part.
* @return string The generated cache key.
*/
private function getCacheKey(string $provider_id): string {
return 'oemsecrets_part_' . md5($provider_id);
return 'oemsecrets_part_' . hash('xxh3', $provider_id);
}