diff --git a/VERSION b/VERSION index ccbccc3d..c043eea7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2.0 +2.2.1 diff --git a/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js b/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js index 095b0d25..bb9fcd1f 100644 --- a/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js +++ b/assets/ckeditor/plugins/PartDBLabel/PartDBLabelUI.js @@ -20,11 +20,12 @@ import {Plugin} from 'ckeditor5'; require('./lang/de.js'); +require('./lang/en.js'); import { addListToDropdown, createDropdown } from 'ckeditor5'; import {Collection} from 'ckeditor5'; -import {Model} from 'ckeditor5'; +import {UIModel} from 'ckeditor5'; export default class PartDBLabelUI extends Plugin { init() { @@ -151,18 +152,28 @@ const PLACEHOLDERS = [ function getDropdownItemsDefinitions(t) { const itemDefinitions = new Collection(); + let first = true; + for ( const group of PLACEHOLDERS) { + //Add group header - itemDefinitions.add({ - 'type': 'separator', - model: new Model( { - withText: true, - }) - }); + + //Skip separator for first group + if (!first) { + + itemDefinitions.add({ + 'type': 'separator', + model: new UIModel( { + withText: true, + }) + }); + } else { + first = false; + } itemDefinitions.add({ type: 'button', - model: new Model( { + model: new UIModel( { label: t(group.label), withText: true, isEnabled: false, @@ -173,7 +184,7 @@ function getDropdownItemsDefinitions(t) { for ( const entry of group.entries) { const definition = { type: 'button', - model: new Model( { + model: new UIModel( { commandParam: entry[0], label: t(entry[1]), tooltip: entry[0], diff --git a/assets/ckeditor/plugins/PartDBLabel/lang/de.js b/assets/ckeditor/plugins/PartDBLabel/lang/de.js index 748b1607..e0ca0521 100644 --- a/assets/ckeditor/plugins/PartDBLabel/lang/de.js +++ b/assets/ckeditor/plugins/PartDBLabel/lang/de.js @@ -17,15 +17,9 @@ * along with this program. If not, see . */ -// Make sure that the global object is defined. If not, define it. -window.CKEDITOR_TRANSLATIONS = window.CKEDITOR_TRANSLATIONS || {}; +import {add} from "ckeditor5"; -// Make sure that the dictionary for Polish translations exist. -window.CKEDITOR_TRANSLATIONS[ 'de' ] = window.CKEDITOR_TRANSLATIONS[ 'de' ] || {}; -window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary = window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary || {}; - -// Extend the dictionary for Polish translations with your translations: -Object.assign( window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary, { +add( "de", { 'Label Placeholder': 'Label Platzhalter', 'Part': 'Bauteil', @@ -88,5 +82,4 @@ Object.assign( window.CKEDITOR_TRANSLATIONS[ 'de' ].dictionary, { 'Instance name': 'Instanzname', 'Target type': 'Zieltyp', 'URL of this Part-DB instance': 'URL dieser Part-DB Instanz', - -} ); \ No newline at end of file +}); diff --git a/assets/ckeditor/plugins/PartDBLabel/lang/en.js b/assets/ckeditor/plugins/PartDBLabel/lang/en.js new file mode 100644 index 00000000..8f77aaf1 --- /dev/null +++ b/assets/ckeditor/plugins/PartDBLabel/lang/en.js @@ -0,0 +1,84 @@ +/* + * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). + * + * Copyright (C) 2019 - 2025 Jan Böhmer (https://github.com/jbtronics) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import {add} from "ckeditor5"; + +add( "en", { + 'Label Placeholder': 'Label placeholder', + 'Part': 'Part', + + 'Database ID': 'Database ID', + 'Part name': 'Part name', + 'Category': 'Category', + 'Category (Full path)': 'Category (full path)', + 'Manufacturer': 'Manufacturer', + 'Manufacturer (Full path)': 'Manufacturer (full path)', + 'Footprint': 'Footprint', + 'Footprint (Full path)': 'Footprint (full path)', + 'Mass': 'Mass', + 'Manufacturer Product Number (MPN)': 'Manufacturer Product Number (MPN)', + 'Internal Part Number (IPN)': 'Internal Part Number (IPN)', + 'Tags': 'Tags', + 'Manufacturing status': 'Manufacturing status', + 'Description': 'Description', + 'Description (plain text)': 'Description (plain text)', + 'Comment': 'Comment', + 'Comment (plain text)': 'Comment (plain text)', + 'Last modified datetime': 'Last modified datetime', + 'Creation datetime': 'Creation datetime', + 'IPN as QR code': 'IPN as QR code', + 'IPN as Code 128 barcode': 'IPN as Code 128 barcode', + 'IPN as Code 39 barcode': 'IPN as Code 39 barcode', + + 'Lot ID': 'Lot ID', + 'Lot name': 'Lot name', + 'Lot comment': 'Lot comment', + 'Lot expiration date': 'Lot expiration date', + 'Lot amount': 'Lot amount', + 'Storage location': 'Storage location', + 'Storage location (Full path)': 'Storage location (full path)', + 'Full name of the lot owner': 'Full name of the lot owner', + 'Username of the lot owner': 'Username of the lot owner', + + 'Barcodes': 'Barcodes', + 'Content of the 1D barcodes (like Code 39)': 'Content of the 1D barcodes (like Code 39)', + 'Content of the 2D barcodes (QR codes)': 'Content of the 2D barcodes (QR codes)', + 'QR code linking to this element': 'QR code linking to this element', + 'Code 128 barcode linking to this element': 'Code 128 barcode linking to this element', + 'Code 39 barcode linking to this element': 'Code 39 barcode linking to this element', + 'Code 93 barcode linking to this element': 'Code 93 barcode linking to this element', + 'Datamatrix code linking to this element': 'Datamatrix code linking to this element', + + 'Location ID': 'Location ID', + 'Name': 'Name', + 'Full path': 'Full path', + 'Parent name': 'Parent name', + 'Parent full path': 'Parent full path', + 'Full name of the location owner': 'Full name of the location owner', + 'Username of the location owner': 'Username of the location owner', + + 'Username': 'Username', + 'Username (including name)': 'Username (including name)', + 'Current datetime': 'Current datetime', + 'Current date': 'Current date', + 'Current time': 'Current time', + 'Instance name': 'Instance name', + 'Target type': 'Target type', + 'URL of this Part-DB instance': 'URL of this Part-DB instance', +} ); diff --git a/assets/controllers/elements/attachment_autocomplete_controller.js b/assets/controllers/elements/attachment_autocomplete_controller.js index 0175b284..94b01136 100644 --- a/assets/controllers/elements/attachment_autocomplete_controller.js +++ b/assets/controllers/elements/attachment_autocomplete_controller.js @@ -34,6 +34,11 @@ export default class extends Controller { connect() { + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } + let settings = { persistent: false, create: true, @@ -42,7 +47,7 @@ export default class extends Controller { selectOnTab: true, //This a an ugly solution to disable the delimiter parsing of the TomSelect plugin delimiter: 'VERY_L0NG_D€LIMITER_WHICH_WILL_NEVER_BE_ENCOUNTERED_IN_A_STRING', - dropdownParent: 'body', + dropdownParent: dropdownParent, render: { item: (data, escape) => { return '' + escape(data.label) + ''; diff --git a/assets/controllers/elements/ckeditor_controller.js b/assets/controllers/elements/ckeditor_controller.js index 62a48b15..46e78fd5 100644 --- a/assets/controllers/elements/ckeditor_controller.js +++ b/assets/controllers/elements/ckeditor_controller.js @@ -28,6 +28,27 @@ import {EditorWatchdog} from 'ckeditor5'; import "ckeditor5/ckeditor5.css";; import "../../css/components/ckeditor.css"; +const translationContext = require.context( + 'ckeditor5/translations', + false, + //Only load the translation files we will really need + /(de|it|fr|ru|ja|cs|da|zh|pl|hu)\.js$/ +); + +function loadTranslation(language) { + if (!language || language === 'en') { + return null; + } + const lang = language.slice(0, 2); + const path = `./${lang}.js`; + if (translationContext.keys().includes(path)) { + const module = translationContext(path); + return module.default; + } else { + return null; + } +} + /* stimulusFetch: 'lazy' */ export default class extends Controller { connect() { @@ -63,6 +84,13 @@ export default class extends Controller { } } + //Load translations if not english + let translations = loadTranslation(language); + if (translations) { + //Keep existing translations (e.g. from other plugins), if any + config.translations = [window.CKEDITOR_TRANSLATIONS, translations]; + } + const watchdog = new EditorWatchdog(); watchdog.setCreator((elementOrData, editorConfig) => { return EDITOR_TYPE.create(elementOrData, editorConfig) diff --git a/assets/controllers/elements/part_select_controller.js b/assets/controllers/elements/part_select_controller.js index 0658f4b4..8a4e19b8 100644 --- a/assets/controllers/elements/part_select_controller.js +++ b/assets/controllers/elements/part_select_controller.js @@ -10,13 +10,19 @@ export default class extends Controller { connect() { + //Check if tomselect is inside an modal and do not attach the dropdown to body in that case (as it breaks the modal) + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } + let settings = { allowEmptyOption: true, plugins: ['dropdown_input'], searchField: ["name", "description", "category", "footprint"], valueField: "id", labelField: "name", - dropdownParent: 'body', + dropdownParent: dropdownParent, preload: "focus", render: { item: (data, escape) => { diff --git a/assets/controllers/elements/select_controller.js b/assets/controllers/elements/select_controller.js index f933731a..d70e588c 100644 --- a/assets/controllers/elements/select_controller.js +++ b/assets/controllers/elements/select_controller.js @@ -38,13 +38,17 @@ export default class extends Controller { this._emptyMessage = this.element.getAttribute('title'); } + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } let settings = { plugins: ["clear_button"], allowEmptyOption: true, selectOnTab: true, maxOptions: null, - dropdownParent: 'body', + dropdownParent: dropdownParent, render: { item: this.renderItem.bind(this), diff --git a/assets/controllers/elements/select_multiple_controller.js b/assets/controllers/elements/select_multiple_controller.js index daa6b0a1..17e85fae 100644 --- a/assets/controllers/elements/select_multiple_controller.js +++ b/assets/controllers/elements/select_multiple_controller.js @@ -26,10 +26,15 @@ export default class extends Controller { _tomSelect; connect() { + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } + this._tomSelect = new TomSelect(this.element, { maxItems: 1000, allowEmptyOption: true, - dropdownParent: 'body', + dropdownParent: dropdownParent, plugins: ['remove_button'], }); } diff --git a/assets/controllers/elements/static_file_autocomplete_controller.js b/assets/controllers/elements/static_file_autocomplete_controller.js index 0421a26d..9703c618 100644 --- a/assets/controllers/elements/static_file_autocomplete_controller.js +++ b/assets/controllers/elements/static_file_autocomplete_controller.js @@ -40,6 +40,11 @@ export default class extends Controller { connect() { + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } + let settings = { persistent: false, create: true, @@ -50,7 +55,7 @@ export default class extends Controller { valueField: 'text', searchField: 'text', orderField: 'text', - dropdownParent: 'body', + dropdownParent: dropdownParent, //This a an ugly solution to disable the delimiter parsing of the TomSelect plugin delimiter: 'VERY_L0NG_D€LIMITER_WHICH_WILL_NEVER_BE_ENCOUNTERED_IN_A_STRING', diff --git a/assets/controllers/elements/structural_entity_select_controller.js b/assets/controllers/elements/structural_entity_select_controller.js index 5c6f9490..4b220d5b 100644 --- a/assets/controllers/elements/structural_entity_select_controller.js +++ b/assets/controllers/elements/structural_entity_select_controller.js @@ -40,7 +40,10 @@ export default class extends Controller { const allowAdd = this.element.getAttribute("data-allow-add") === "true"; const addHint = this.element.getAttribute("data-add-hint") ?? ""; - + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } let settings = { @@ -54,7 +57,7 @@ export default class extends Controller { maxItems: 1, delimiter: "$$VERY_LONG_DELIMITER_THAT_SHOULD_NEVER_APPEAR$$", splitOn: null, - dropdownParent: 'body', + dropdownParent: dropdownParent, searchField: [ {field: "text", weight : 2}, diff --git a/assets/controllers/elements/tagsinput_controller.js b/assets/controllers/elements/tagsinput_controller.js index 53bf7608..14725227 100644 --- a/assets/controllers/elements/tagsinput_controller.js +++ b/assets/controllers/elements/tagsinput_controller.js @@ -33,6 +33,11 @@ export default class extends Controller { _tomSelect; connect() { + let dropdownParent = "body"; + if (this.element.closest('.modal')) { + dropdownParent = null + } + let settings = { plugins: { remove_button:{}, @@ -43,7 +48,7 @@ export default class extends Controller { selectOnTab: true, createOnBlur: true, create: true, - dropdownParent: 'body', + dropdownParent: dropdownParent, }; if(this.element.dataset.autocomplete) { diff --git a/composer.json b/composer.json index 9f335f94..f53130d4 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "doctrine/doctrine-bundle": "^2.0", "doctrine/doctrine-migrations-bundle": "^3.0", "doctrine/orm": "^3.2.0", - "dompdf/dompdf": "^v3.0.0", + "dompdf/dompdf": "^3.1.2", "gregwar/captcha-bundle": "^2.1.0", "hshn/base64-encoded-file": "^5.0", "jbtronics/2fa-webauthn": "^3.0.0", diff --git a/composer.lock b/composer.lock index 1970868e..72e83e0f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "10fd1b276a868a4f195721ac5fcd82de", + "content-hash": "3b5a603cc4c289262a2e58b0f37ee42e", "packages": [ { "name": "amphp/amp", @@ -968,7 +968,7 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", @@ -1052,22 +1052,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.2.0" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.2.2" }, "time": "2025-08-27T12:34:14+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", - "reference": "23b0de35bb7d2903854c6ee3ac300b7f5056c12b" + "reference": "d35d97423f7b399117ee033ecc886b3ed9dc2e23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/23b0de35bb7d2903854c6ee3ac300b7f5056c12b", - "reference": "23b0de35bb7d2903854c6ee3ac300b7f5056c12b", + "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/d35d97423f7b399117ee033ecc886b3ed9dc2e23", + "reference": "d35d97423f7b399117ee033ecc886b3ed9dc2e23", "shasum": "" }, "require": { @@ -1139,13 +1139,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.2.0" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.2.2" }, - "time": "2025-09-16T12:49:22+00:00" + "time": "2025-10-07T13:54:25+00:00" }, { "name": "api-platform/documentation", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", @@ -1202,13 +1202,13 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.2.0" + "source": "https://github.com/api-platform/documentation/tree/v4.2.2" }, "time": "2025-08-19T08:04:29+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", @@ -1282,22 +1282,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.2.0" + "source": "https://github.com/api-platform/http-cache/tree/v4.2.2" }, "time": "2025-09-16T12:51:08+00:00" }, { "name": "api-platform/hydra", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", - "reference": "5061103e7a5f019097993e6370232c46e24b9b42" + "reference": "bfbe928e6a3999433ef11afc267e591152b17cc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/hydra/zipball/5061103e7a5f019097993e6370232c46e24b9b42", - "reference": "5061103e7a5f019097993e6370232c46e24b9b42", + "url": "https://api.github.com/repos/api-platform/hydra/zipball/bfbe928e6a3999433ef11afc267e591152b17cc3", + "reference": "bfbe928e6a3999433ef11afc267e591152b17cc3", "shasum": "" }, "require": { @@ -1369,13 +1369,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.2.0" + "source": "https://github.com/api-platform/hydra/tree/v4.2.2" }, - "time": "2025-09-16T12:49:22+00:00" + "time": "2025-10-07T13:39:38+00:00" }, { "name": "api-platform/json-api", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", @@ -1451,26 +1451,26 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.2.0" + "source": "https://github.com/api-platform/json-api/tree/v4.2.2" }, "time": "2025-09-16T12:49:22+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", - "reference": "e25a8d95b3958abdbe07055833bd69f5f3ed4aeb" + "reference": "ec81bdd09375067d7d2555c10ec3dfc697874327" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-schema/zipball/e25a8d95b3958abdbe07055833bd69f5f3ed4aeb", - "reference": "e25a8d95b3958abdbe07055833bd69f5f3ed4aeb", + "url": "https://api.github.com/repos/api-platform/json-schema/zipball/ec81bdd09375067d7d2555c10ec3dfc697874327", + "reference": "ec81bdd09375067d7d2555c10ec3dfc697874327", "shasum": "" }, "require": { - "api-platform/metadata": "^4.2@beta", + "api-platform/metadata": "^4.2", "php": ">=8.2", "symfony/console": "^6.4 || ^7.0", "symfony/property-info": "^6.4 || ^7.1", @@ -1532,22 +1532,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.2.0" + "source": "https://github.com/api-platform/json-schema/tree/v4.2.2" }, - "time": "2025-09-16T12:49:22+00:00" + "time": "2025-10-07T09:45:59+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", - "reference": "0f4c79c1f57680cbbcaaf7219e4e0aa2865a2c51" + "reference": "774b460273177983c52540a479ea9e9f940d7a1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/jsonld/zipball/0f4c79c1f57680cbbcaaf7219e4e0aa2865a2c51", - "reference": "0f4c79c1f57680cbbcaaf7219e4e0aa2865a2c51", + "url": "https://api.github.com/repos/api-platform/jsonld/zipball/774b460273177983c52540a479ea9e9f940d7a1b", + "reference": "774b460273177983c52540a479ea9e9f940d7a1b", "shasum": "" }, "require": { @@ -1612,22 +1612,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.2.0" + "source": "https://github.com/api-platform/jsonld/tree/v4.2.2" }, - "time": "2025-09-09T12:23:22+00:00" + "time": "2025-09-25T19:30:56+00:00" }, { "name": "api-platform/metadata", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", - "reference": "71db1e169d3c0b28d1d3eab5b572720285ad1a6c" + "reference": "5aeba910cb6352068664ca11cd9ee0dc208894c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/metadata/zipball/71db1e169d3c0b28d1d3eab5b572720285ad1a6c", - "reference": "71db1e169d3c0b28d1d3eab5b572720285ad1a6c", + "url": "https://api.github.com/repos/api-platform/metadata/zipball/5aeba910cb6352068664ca11cd9ee0dc208894c0", + "reference": "5aeba910cb6352068664ca11cd9ee0dc208894c0", "shasum": "" }, "require": { @@ -1710,22 +1710,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.2.0" + "source": "https://github.com/api-platform/metadata/tree/v4.2.2" }, - "time": "2025-09-15T12:27:38+00:00" + "time": "2025-10-08T08:36:37+00:00" }, { "name": "api-platform/openapi", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", - "reference": "8e400e24ef695f17dbeeaeb60442707ba9c1dbd1" + "reference": "2545f2be06eed0f9a121d631b8f1db22212a7826" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/openapi/zipball/8e400e24ef695f17dbeeaeb60442707ba9c1dbd1", - "reference": "8e400e24ef695f17dbeeaeb60442707ba9c1dbd1", + "url": "https://api.github.com/repos/api-platform/openapi/zipball/2545f2be06eed0f9a121d631b8f1db22212a7826", + "reference": "2545f2be06eed0f9a121d631b8f1db22212a7826", "shasum": "" }, "require": { @@ -1800,26 +1800,26 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.2.0" + "source": "https://github.com/api-platform/openapi/tree/v4.2.2" }, - "time": "2025-09-16T12:49:22+00:00" + "time": "2025-09-30T12:06:50+00:00" }, { "name": "api-platform/serializer", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "8c94416556df14fd20203975d000c0213a308e2d" + "reference": "58c1378af6429049ee62951b838f6b645706c3a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/8c94416556df14fd20203975d000c0213a308e2d", - "reference": "8c94416556df14fd20203975d000c0213a308e2d", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/58c1378af6429049ee62951b838f6b645706c3a3", + "reference": "58c1378af6429049ee62951b838f6b645706c3a3", "shasum": "" }, "require": { - "api-platform/metadata": "^4.1.16", + "api-platform/metadata": "^4.2.0", "api-platform/state": "^4.1.11", "php": ">=8.2", "symfony/property-access": "^6.4 || ^7.0", @@ -1893,22 +1893,22 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.2.0" + "source": "https://github.com/api-platform/serializer/tree/v4.2.2" }, - "time": "2025-09-15T13:20:40+00:00" + "time": "2025-10-03T08:13:34+00:00" }, { "name": "api-platform/state", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "439b0c542e4c2e921f909f2f2e01d077ed0248f4" + "reference": "7dc3dfbafa4627cc789bd8bcd4da46e6c37f6b26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/439b0c542e4c2e921f909f2f2e01d077ed0248f4", - "reference": "439b0c542e4c2e921f909f2f2e01d077ed0248f4", + "url": "https://api.github.com/repos/api-platform/state/zipball/7dc3dfbafa4627cc789bd8bcd4da46e6c37f6b26", + "reference": "7dc3dfbafa4627cc789bd8bcd4da46e6c37f6b26", "shasum": "" }, "require": { @@ -1924,6 +1924,7 @@ "api-platform/validator": "^4.1", "phpunit/phpunit": "11.5.x-dev", "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/object-mapper": "^7.3", "symfony/type-info": "^7.3", "symfony/web-link": "^6.4 || ^7.1", "willdurand/negotiation": "^3.1" @@ -1988,22 +1989,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.2.0" + "source": "https://github.com/api-platform/state/tree/v4.2.2" }, - "time": "2025-09-17T08:54:53+00:00" + "time": "2025-10-09T08:33:56+00:00" }, { "name": "api-platform/symfony", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "c3fa7d2176bd9c36e2961d88c4a69a5a7e948b83" + "reference": "44bb117df1cd5695203ec6a97999cabc85257780" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/c3fa7d2176bd9c36e2961d88c4a69a5a7e948b83", - "reference": "c3fa7d2176bd9c36e2961d88c4a69a5a7e948b83", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/44bb117df1cd5695203ec6a97999cabc85257780", + "reference": "44bb117df1cd5695203ec6a97999cabc85257780", "shasum": "" }, "require": { @@ -2050,7 +2051,6 @@ "api-platform/graphql": "To support GraphQL.", "api-platform/hal": "to support the HAL format", "api-platform/ramsey-uuid": "To support Ramsey's UUID identifiers.", - "ocramius/package-versions": "To display the API Platform's version in the debug bar.", "phpstan/phpdoc-parser": "To support extracting metadata from PHPDoc.", "psr/cache-implementation": "To use metadata caching.", "symfony/cache": "To have metadata caching when using Symfony integration.", @@ -2118,22 +2118,22 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.2.0" + "source": "https://github.com/api-platform/symfony/tree/v4.2.2" }, - "time": "2025-09-16T12:49:22+00:00" + "time": "2025-10-09T08:33:56+00:00" }, { "name": "api-platform/validator", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", - "reference": "562f97b0acdacef462ff9ececd62158ae4709530" + "reference": "9986e84b27e3de7f87c7c23f238430a572f87f67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/validator/zipball/562f97b0acdacef462ff9ececd62158ae4709530", - "reference": "562f97b0acdacef462ff9ececd62158ae4709530", + "url": "https://api.github.com/repos/api-platform/validator/zipball/9986e84b27e3de7f87c7c23f238430a572f87f67", + "reference": "9986e84b27e3de7f87c7c23f238430a572f87f67", "shasum": "" }, "require": { @@ -2194,9 +2194,9 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.2.0" + "source": "https://github.com/api-platform/validator/tree/v4.2.2" }, - "time": "2025-09-05T08:12:26+00:00" + "time": "2025-09-29T15:36:04+00:00" }, { "name": "beberlei/assert", @@ -2909,16 +2909,16 @@ }, { "name": "doctrine/data-fixtures", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "f161e20f04ba5440a09330e156b40f04dd70d47f" + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f161e20f04ba5440a09330e156b40f04dd70d47f", - "reference": "f161e20f04ba5440a09330e156b40f04dd70d47f", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/7a615ba135e45d67674bb623d90f34f6c7b6bd97", + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97", "shasum": "" }, "require": { @@ -2932,14 +2932,14 @@ "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { - "doctrine/coding-standard": "^13", + "doctrine/coding-standard": "^14", "doctrine/dbal": "^3.5 || ^4", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", "doctrine/orm": "^2.14 || ^3", "ext-sqlite3": "*", "fig/log-test": "^1", - "phpstan/phpstan": "2.1.17", - "phpunit/phpunit": "10.5.45", + "phpstan/phpstan": "2.1.31", + "phpunit/phpunit": "10.5.45 || 12.4.0", "symfony/cache": "^6.4 || ^7", "symfony/var-exporter": "^6.4 || ^7" }, @@ -2972,7 +2972,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/2.1.0" + "source": "https://github.com/doctrine/data-fixtures/tree/2.2.0" }, "funding": [ { @@ -2988,20 +2988,20 @@ "type": "tidelift" } ], - "time": "2025-07-08T17:48:20+00:00" + "time": "2025-10-17T20:06:20+00:00" }, { "name": "doctrine/dbal", - "version": "4.3.3", + "version": "4.3.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "231959669bb2173194c95636eae7f1b41b2a8b19" + "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/231959669bb2173194c95636eae7f1b41b2a8b19", - "reference": "231959669bb2173194c95636eae7f1b41b2a8b19", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc", + "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc", "shasum": "" }, "require": { @@ -3011,15 +3011,15 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "13.0.1", + "doctrine/coding-standard": "14.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "2.1.22", - "phpstan/phpstan-phpunit": "2.0.6", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "2.0.7", "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "11.5.23", - "slevomat/coding-standard": "8.16.2", - "squizlabs/php_codesniffer": "3.13.1", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", "symfony/cache": "^6.3.8|^7.0", "symfony/console": "^5.4|^6.3|^7.0" }, @@ -3078,7 +3078,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.3.3" + "source": "https://github.com/doctrine/dbal/tree/4.3.4" }, "funding": [ { @@ -3094,7 +3094,7 @@ "type": "tidelift" } ], - "time": "2025-09-04T23:52:42+00:00" + "time": "2025-10-09T09:11:36+00:00" }, { "name": "doctrine/deprecations", @@ -3146,20 +3146,21 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.16.2", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "1c10de0fe995f01eca6b073d1c2549ef0b603a7f" + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/1c10de0fe995f01eca6b073d1c2549ef0b603a7f", - "reference": "1c10de0fe995f01eca6b073d1c2549ef0b603a7f", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", + "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95", "shasum": "" }, "require": { "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/deprecations": "^1.0", "doctrine/persistence": "^3.1 || ^4", "doctrine/sql-formatter": "^1.0.1", "php": "^8.1", @@ -3167,7 +3168,6 @@ "symfony/config": "^6.4 || ^7.0", "symfony/console": "^6.4 || ^7.0", "symfony/dependency-injection": "^6.4 || ^7.0", - "symfony/deprecation-contracts": "^2.1 || ^3", "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", "symfony/framework-bundle": "^6.4 || ^7.0", "symfony/service-contracts": "^2.5 || ^3" @@ -3182,14 +3182,13 @@ "require-dev": { "doctrine/annotations": "^1 || ^2", "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^13", - "doctrine/deprecations": "^1.0", + "doctrine/coding-standard": "^14", "doctrine/orm": "^2.17 || ^3.1", "friendsofphp/proxy-manager-lts": "^1.0", "phpstan/phpstan": "2.1.1", "phpstan/phpstan-phpunit": "2.0.3", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^10.5.53", + "phpunit/phpunit": "^10.5.53 || ^12.3.10", "psr/log": "^1.1.4 || ^2.0 || ^3.0", "symfony/doctrine-messenger": "^6.4 || ^7.0", "symfony/expression-language": "^6.4 || ^7.0", @@ -3203,7 +3202,7 @@ "symfony/var-exporter": "^6.4.1 || ^7.0.1", "symfony/web-profiler-bundle": "^6.4 || ^7.0", "symfony/yaml": "^6.4 || ^7.0", - "twig/twig": "^2.13 || ^3.0.4" + "twig/twig": "^2.14.7 || ^3.0.4" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -3248,7 +3247,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.16.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.0" }, "funding": [ { @@ -3264,24 +3263,24 @@ "type": "tidelift" } ], - "time": "2025-09-10T19:14:48+00:00" + "time": "2025-10-11T04:43:27+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.4.2", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9" + "reference": "71c81279ca0e907c3edc718418b93fd63074856c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5a6ac7120c2924c4c070a869d08b11ccf9e277b9", - "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/71c81279ca0e907c3edc718418b93fd63074856c", + "reference": "71c81279ca0e907c3edc718418b93fd63074856c", "shasum": "" }, "require": { - "doctrine/doctrine-bundle": "^2.4", + "doctrine/doctrine-bundle": "^2.4 || ^3.0", "doctrine/migrations": "^3.2", "php": "^7.2 || ^8.0", "symfony/deprecation-contracts": "^2.1 || ^3", @@ -3289,7 +3288,7 @@ }, "require-dev": { "composer/semver": "^3.0", - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^12 || ^14", "doctrine/orm": "^2.6 || ^3", "phpstan/phpstan": "^1.4 || ^2", "phpstan/phpstan-deprecation-rules": "^1 || ^2", @@ -3333,7 +3332,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.2" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.5.0" }, "funding": [ { @@ -3349,7 +3348,7 @@ "type": "tidelift" } ], - "time": "2025-03-11T17:36:26+00:00" + "time": "2025-10-12T17:06:40+00:00" }, { "name": "doctrine/event-manager", @@ -3874,16 +3873,16 @@ }, { "name": "doctrine/persistence", - "version": "4.1.0", + "version": "4.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "dcbdfe4b211ae09478e192289cae7ab0987b29a4" + "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/dcbdfe4b211ae09478e192289cae7ab0987b29a4", - "reference": "dcbdfe4b211ae09478e192289cae7ab0987b29a4", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", + "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", "shasum": "" }, "require": { @@ -3892,11 +3891,11 @@ "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "1.12.7", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "^9.6", + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.58 || ^12", "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0", "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, @@ -3947,7 +3946,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/4.1.0" + "source": "https://github.com/doctrine/persistence/tree/4.1.1" }, "funding": [ { @@ -3963,7 +3962,7 @@ "type": "tidelift" } ], - "time": "2025-08-21T16:00:31+00:00" + "time": "2025-10-16T20:13:18+00:00" }, { "name": "doctrine/sql-formatter", @@ -4022,16 +4021,16 @@ }, { "name": "dompdf/dompdf", - "version": "v3.1.2", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6" + "reference": "baed300e4fb8226359c04395518059a136e2a2e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/b3493e35d31a5e76ec24c3b64a29b0034b2f32a6", - "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/baed300e4fb8226359c04395518059a136e2a2e2", + "reference": "baed300e4fb8226359c04395518059a136e2a2e2", "shasum": "" }, "require": { @@ -4080,9 +4079,9 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v3.1.2" + "source": "https://github.com/dompdf/dompdf/tree/v3.1.3" }, - "time": "2025-09-23T03:06:41+00:00" + "time": "2025-10-14T13:10:17+00:00" }, { "name": "dompdf/php-font-lib", @@ -4761,16 +4760,16 @@ }, { "name": "hshn/base64-encoded-file", - "version": "v5.0.2", + "version": "v5.0.3", "source": { "type": "git", "url": "https://github.com/hshn/base64-encoded-file.git", - "reference": "49e38d27fcf01a2f5b142886d6ef20fa62132a2d" + "reference": "74984c7e69fbed9378dbf1d64e632522cc1b6d95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hshn/base64-encoded-file/zipball/49e38d27fcf01a2f5b142886d6ef20fa62132a2d", - "reference": "49e38d27fcf01a2f5b142886d6ef20fa62132a2d", + "url": "https://api.github.com/repos/hshn/base64-encoded-file/zipball/74984c7e69fbed9378dbf1d64e632522cc1b6d95", + "reference": "74984c7e69fbed9378dbf1d64e632522cc1b6d95", "shasum": "" }, "require": { @@ -4817,9 +4816,9 @@ "description": "Provides handling base64 encoded files, and the integration of symfony/form", "support": { "issues": "https://github.com/hshn/base64-encoded-file/issues", - "source": "https://github.com/hshn/base64-encoded-file/tree/v5.0.2" + "source": "https://github.com/hshn/base64-encoded-file/tree/v5.0.3" }, - "time": "2025-07-06T05:52:34+00:00" + "time": "2025-10-06T10:34:52+00:00" }, { "name": "imagine/imagine", @@ -5504,22 +5503,22 @@ }, { "name": "lcobucci/jwt", - "version": "5.5.0", + "version": "5.6.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "a835af59b030d3f2967725697cf88300f579088e" + "reference": "bb3e9f21e4196e8afc41def81ef649c164bca25e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a835af59b030d3f2967725697cf88300f579088e", - "reference": "a835af59b030d3f2967725697cf88300f579088e", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/bb3e9f21e4196e8afc41def81ef649c164bca25e", + "reference": "bb3e9f21e4196e8afc41def81ef649c164bca25e", "shasum": "" }, "require": { "ext-openssl": "*", "ext-sodium": "*", - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "psr/clock": "^1.0" }, "require-dev": { @@ -5561,7 +5560,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/5.5.0" + "source": "https://github.com/lcobucci/jwt/tree/5.6.0" }, "funding": [ { @@ -5573,7 +5572,7 @@ "type": "patreon" } ], - "time": "2025-01-26T21:29:45+00:00" + "time": "2025-10-17T11:30:53+00:00" }, { "name": "league/commonmark", @@ -5766,16 +5765,16 @@ }, { "name": "league/csv", - "version": "9.25.0", + "version": "9.27.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86" + "reference": "cb491b1ba3c42ff2bcd0113814f4256b42bae845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/f856f532866369fb1debe4e7c5a1db185f40ef86", - "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/cb491b1ba3c42ff2bcd0113814f4256b42bae845", + "reference": "cb491b1ba3c42ff2bcd0113814f4256b42bae845", "shasum": "" }, "require": { @@ -5853,7 +5852,7 @@ "type": "github" } ], - "time": "2025-09-11T08:29:08+00:00" + "time": "2025-10-16T08:22:09+00:00" }, { "name": "league/html-to-markdown", @@ -6267,16 +6266,16 @@ }, { "name": "liip/imagine-bundle", - "version": "2.14.0", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/liip/LiipImagineBundle.git", - "reference": "f80dc13e9a454682b8c2255b3487829d2f8a7fe4" + "reference": "f8c98a5a962806f26571db219412b64266c763d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/liip/LiipImagineBundle/zipball/f80dc13e9a454682b8c2255b3487829d2f8a7fe4", - "reference": "f80dc13e9a454682b8c2255b3487829d2f8a7fe4", + "url": "https://api.github.com/repos/liip/LiipImagineBundle/zipball/f8c98a5a962806f26571db219412b64266c763d8", + "reference": "f8c98a5a962806f26571db219412b64266c763d8", "shasum": "" }, "require": { @@ -6368,9 +6367,9 @@ ], "support": { "issues": "https://github.com/liip/LiipImagineBundle/issues", - "source": "https://github.com/liip/LiipImagineBundle/tree/2.14.0" + "source": "https://github.com/liip/LiipImagineBundle/tree/2.15.0" }, - "time": "2025-09-03T06:33:10+00:00" + "time": "2025-10-09T06:49:28+00:00" }, { "name": "lorenzo/pinky", @@ -6842,16 +6841,16 @@ }, { "name": "nbgrp/onelogin-saml-bundle", - "version": "v2.0.3", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/nbgrp/onelogin-saml-bundle.git", - "reference": "cbf58a8742ee8179dce0547e6f2f826cd19b525f" + "reference": "087402c69ef87e0a34d9b708661deecd00fd190a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nbgrp/onelogin-saml-bundle/zipball/cbf58a8742ee8179dce0547e6f2f826cd19b525f", - "reference": "cbf58a8742ee8179dce0547e6f2f826cd19b525f", + "url": "https://api.github.com/repos/nbgrp/onelogin-saml-bundle/zipball/087402c69ef87e0a34d9b708661deecd00fd190a", + "reference": "087402c69ef87e0a34d9b708661deecd00fd190a", "shasum": "" }, "require": { @@ -6871,7 +6870,7 @@ }, "require-dev": { "doctrine/orm": "^2.3 || ^3", - "phpunit/phpunit": "^11.2", + "phpunit/phpunit": "^11", "symfony/event-dispatcher": "^7" }, "type": "symfony-bundle", @@ -6899,9 +6898,9 @@ ], "support": { "issues": "https://github.com/nbgrp/onelogin-saml-bundle/issues", - "source": "https://github.com/nbgrp/onelogin-saml-bundle/tree/v2.0.3" + "source": "https://github.com/nbgrp/onelogin-saml-bundle/tree/v2.1.0" }, - "time": "2025-09-19T14:08:21+00:00" + "time": "2025-09-26T08:45:17+00:00" }, { "name": "nelexa/zip", @@ -7588,16 +7587,16 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v3.1.1", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "5e9b582660b997de205a84c02a3aac7c060900c9" + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/5e9b582660b997de205a84c02a3aac7c060900c9", - "reference": "5e9b582660b997de205a84c02a3aac7c060900c9", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", "shasum": "" }, "require": { @@ -7653,7 +7652,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2025-09-22T21:00:33+00:00" + "time": "2025-09-24T15:06:41+00:00" }, { "name": "paragonie/random_compat", @@ -7707,16 +7706,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v1.21.2", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "d3043fd10faacb72e9eeb2df4c21a13214b45c33" + "reference": "b938a5c6844d222a26d46a6c7b80291e4cd8cfab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/d3043fd10faacb72e9eeb2df4c21a13214b45c33", - "reference": "d3043fd10faacb72e9eeb2df4c21a13214b45c33", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/b938a5c6844d222a26d46a6c7b80291e4cd8cfab", + "reference": "b938a5c6844d222a26d46a6c7b80291e4cd8cfab", "shasum": "" }, "require": { @@ -7787,9 +7786,9 @@ ], "support": { "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.21.2" + "source": "https://github.com/paragonie/sodium_compat/tree/v1.23.0" }, - "time": "2025-09-19T16:14:19+00:00" + "time": "2025-10-06T08:53:07+00:00" }, { "name": "part-db/exchanger", @@ -10333,16 +10332,16 @@ }, { "name": "symfony/cache", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6" + "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", - "reference": "6621a2bee5373e3e972b2ae5dbedd5ac899d8cb6", + "url": "https://api.github.com/repos/symfony/cache/zipball/bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f", + "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f", "shasum": "" }, "require": { @@ -10411,7 +10410,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.3.2" + "source": "https://github.com/symfony/cache/tree/v7.3.4" }, "funding": [ { @@ -10431,7 +10430,7 @@ "type": "tidelift" } ], - "time": "2025-07-30T17:13:41+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/cache-contracts", @@ -10585,16 +10584,16 @@ }, { "name": "symfony/config", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "faef36e271bbeb74a9d733be4b56419b157762e2" + "reference": "8a09223170046d2cfda3d2e11af01df2c641e961" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/faef36e271bbeb74a9d733be4b56419b157762e2", - "reference": "faef36e271bbeb74a9d733be4b56419b157762e2", + "url": "https://api.github.com/repos/symfony/config/zipball/8a09223170046d2cfda3d2e11af01df2c641e961", + "reference": "8a09223170046d2cfda3d2e11af01df2c641e961", "shasum": "" }, "require": { @@ -10640,7 +10639,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.3.2" + "source": "https://github.com/symfony/config/tree/v7.3.4" }, "funding": [ { @@ -10660,20 +10659,20 @@ "type": "tidelift" } ], - "time": "2025-07-26T13:55:06+00:00" + "time": "2025-09-22T12:46:16+00:00" }, { "name": "symfony/console", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7" + "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", + "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", + "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", "shasum": "" }, "require": { @@ -10738,7 +10737,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.3" + "source": "https://github.com/symfony/console/tree/v7.3.4" }, "funding": [ { @@ -10758,7 +10757,7 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-22T15:31:00+00:00" }, { "name": "symfony/css-selector", @@ -10827,16 +10826,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ab6c38dad5da9b15b1f7afb2f5c5814112e70261" + "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ab6c38dad5da9b15b1f7afb2f5c5814112e70261", - "reference": "ab6c38dad5da9b15b1f7afb2f5c5814112e70261", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/82119812ab0bf3425c1234d413efd1b19bb92ae4", + "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4", "shasum": "" }, "require": { @@ -10887,7 +10886,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.3.3" + "source": "https://github.com/symfony/dependency-injection/tree/v7.3.4" }, "funding": [ { @@ -10907,7 +10906,7 @@ "type": "tidelift" } ], - "time": "2025-08-14T09:54:27+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -10978,16 +10977,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "b371ded46da25415e1a3a7422e4acd2ec34214c5" + "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b371ded46da25415e1a3a7422e4acd2ec34214c5", - "reference": "b371ded46da25415e1a3a7422e4acd2ec34214c5", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/21cd48c34a47a0d0e303a590a67c3450fde55888", + "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888", "shasum": "" }, "require": { @@ -11067,7 +11066,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.3" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.4" }, "funding": [ { @@ -11087,7 +11086,7 @@ "type": "tidelift" } ], - "time": "2025-08-18T13:10:53+00:00" + "time": "2025-09-24T09:56:23+00:00" }, { "name": "symfony/dom-crawler", @@ -11240,16 +11239,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3" + "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", + "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", "shasum": "" }, "require": { @@ -11297,7 +11296,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.3.2" + "source": "https://github.com/symfony/error-handler/tree/v7.3.4" }, "funding": [ { @@ -11317,7 +11316,7 @@ "type": "tidelift" } ], - "time": "2025-07-07T08:17:57+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/event-dispatcher", @@ -11759,16 +11758,16 @@ }, { "name": "symfony/form", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "f151b4a027fa67769268b80111f7fdb63edb5e79" + "reference": "7b3eee0f4d4dfd1ff1be70a27474197330c61736" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/f151b4a027fa67769268b80111f7fdb63edb5e79", - "reference": "f151b4a027fa67769268b80111f7fdb63edb5e79", + "url": "https://api.github.com/repos/symfony/form/zipball/7b3eee0f4d4dfd1ff1be70a27474197330c61736", + "reference": "7b3eee0f4d4dfd1ff1be70a27474197330c61736", "shasum": "" }, "require": { @@ -11836,7 +11835,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.3.3" + "source": "https://github.com/symfony/form/tree/v7.3.4" }, "funding": [ { @@ -11856,20 +11855,20 @@ "type": "tidelift" } ], - "time": "2025-08-18T13:10:53+00:00" + "time": "2025-09-22T15:31:00+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "19ec4ab6be90322ed190e041e2404a976ed22571" + "reference": "b13e7cec5a144c8dba6f4233a2c53c00bc29e140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/19ec4ab6be90322ed190e041e2404a976ed22571", - "reference": "19ec4ab6be90322ed190e041e2404a976ed22571", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/b13e7cec5a144c8dba6f4233a2c53c00bc29e140", + "reference": "b13e7cec5a144c8dba6f4233a2c53c00bc29e140", "shasum": "" }, "require": { @@ -11994,7 +11993,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/v7.3.3" + "source": "https://github.com/symfony/framework-bundle/tree/v7.3.4" }, "funding": [ { @@ -12014,20 +12013,20 @@ "type": "tidelift" } ], - "time": "2025-08-27T07:45:05+00:00" + "time": "2025-09-17T05:51:54+00:00" }, { "name": "symfony/http-client", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019" + "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019", - "reference": "333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019", + "url": "https://api.github.com/repos/symfony/http-client/zipball/4b62871a01c49457cf2a8e560af7ee8a94b87a62", + "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62", "shasum": "" }, "require": { @@ -12094,7 +12093,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.3.3" + "source": "https://github.com/symfony/http-client/tree/v7.3.4" }, "funding": [ { @@ -12114,7 +12113,7 @@ "type": "tidelift" } ], - "time": "2025-08-27T07:45:05+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/http-client-contracts", @@ -12196,16 +12195,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00" + "reference": "c061c7c18918b1b64268771aad04b40be41dd2e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7475561ec27020196c49bb7c4f178d33d7d3dc00", - "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c061c7c18918b1b64268771aad04b40be41dd2e6", + "reference": "c061c7c18918b1b64268771aad04b40be41dd2e6", "shasum": "" }, "require": { @@ -12255,7 +12254,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.3.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.3.4" }, "funding": [ { @@ -12275,20 +12274,20 @@ "type": "tidelift" } ], - "time": "2025-08-20T08:04:18+00:00" + "time": "2025-09-16T08:38:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b" + "reference": "b796dffea7821f035047235e076b60ca2446e3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/72c304de37e1a1cec6d5d12b81187ebd4850a17b", - "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b796dffea7821f035047235e076b60ca2446e3cf", + "reference": "b796dffea7821f035047235e076b60ca2446e3cf", "shasum": "" }, "require": { @@ -12373,7 +12372,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/v7.3.3" + "source": "https://github.com/symfony/http-kernel/tree/v7.3.4" }, "funding": [ { @@ -12393,20 +12392,20 @@ "type": "tidelift" } ], - "time": "2025-08-29T08:23:45+00:00" + "time": "2025-09-27T12:32:17+00:00" }, { "name": "symfony/intl", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "754d5ad02c889e380efc5a74fa3f6cfe56b7454d" + "reference": "e6db84864655885d9dac676a9d7dde0d904fda54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/754d5ad02c889e380efc5a74fa3f6cfe56b7454d", - "reference": "754d5ad02c889e380efc5a74fa3f6cfe56b7454d", + "url": "https://api.github.com/repos/symfony/intl/zipball/e6db84864655885d9dac676a9d7dde0d904fda54", + "reference": "e6db84864655885d9dac676a9d7dde0d904fda54", "shasum": "" }, "require": { @@ -12463,7 +12462,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v7.3.3" + "source": "https://github.com/symfony/intl/tree/v7.3.4" }, "funding": [ { @@ -12483,20 +12482,20 @@ "type": "tidelift" } ], - "time": "2025-08-19T14:06:46+00:00" + "time": "2025-09-08T14:11:30+00:00" }, { "name": "symfony/mailer", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575" + "reference": "ab97ef2f7acf0216955f5845484235113047a31d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/a32f3f45f1990db8c4341d5122a7d3a381c7e575", - "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ab97ef2f7acf0216955f5845484235113047a31d", + "reference": "ab97ef2f7acf0216955f5845484235113047a31d", "shasum": "" }, "require": { @@ -12547,7 +12546,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.3" + "source": "https://github.com/symfony/mailer/tree/v7.3.4" }, "funding": [ { @@ -12567,20 +12566,20 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-09-17T05:51:54+00:00" }, { "name": "symfony/mime", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "url": "https://api.github.com/repos/symfony/mime/zipball/b1b828f69cbaf887fa835a091869e55df91d0e35", + "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35", "shasum": "" }, "require": { @@ -12635,7 +12634,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.2" + "source": "https://github.com/symfony/mime/tree/v7.3.4" }, "funding": [ { @@ -12655,20 +12654,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-09-16T08:38:17+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "6f3745e887659b46a8b7bb5ade8356a41700f095" + "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/6f3745e887659b46a8b7bb5ade8356a41700f095", - "reference": "6f3745e887659b46a8b7bb5ade8356a41700f095", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/7acf2abe23e5019451399ba69fc8ed3d61d4d8f0", + "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0", "shasum": "" }, "require": { @@ -12717,7 +12716,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.3" + "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.4" }, "funding": [ { @@ -12737,7 +12736,7 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-09-24T16:45:39+00:00" }, { "name": "symfony/monolog-bundle", @@ -13882,16 +13881,16 @@ }, { "name": "symfony/process", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1" + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1", + "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", + "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", "shasum": "" }, "require": { @@ -13923,7 +13922,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.3" + "source": "https://github.com/symfony/process/tree/v7.3.4" }, "funding": [ { @@ -13943,7 +13942,7 @@ "type": "tidelift" } ], - "time": "2025-08-18T09:42:54+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/property-access", @@ -14027,16 +14026,16 @@ }, { "name": "symfony/property-info", - "version": "v7.3.1", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970" + "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/90586acbf2a6dd13bee4f09f09111c8bd4773970", - "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970", + "url": "https://api.github.com/repos/symfony/property-info/zipball/7b6db23f23d13ada41e1cb484748a8ec028fbace", + "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace", "shasum": "" }, "require": { @@ -14093,7 +14092,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.3.1" + "source": "https://github.com/symfony/property-info/tree/v7.3.4" }, "funding": [ { @@ -14104,12 +14103,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-27T19:55:54+00:00" + "time": "2025-09-15T13:55:54+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -14270,16 +14273,16 @@ }, { "name": "symfony/routing", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4" + "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "url": "https://api.github.com/repos/symfony/routing/zipball/8dc648e159e9bac02b703b9fbd937f19ba13d07c", + "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c", "shasum": "" }, "require": { @@ -14331,7 +14334,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.3.2" + "source": "https://github.com/symfony/routing/tree/v7.3.4" }, "funding": [ { @@ -14351,20 +14354,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:36:08+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/runtime", - "version": "v7.3.1", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "9516056d432f8acdac9458eb41b80097da7a05c9" + "reference": "3550e2711e30bfa5d808514781cd52d1cc1d9e9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/9516056d432f8acdac9458eb41b80097da7a05c9", - "reference": "9516056d432f8acdac9458eb41b80097da7a05c9", + "url": "https://api.github.com/repos/symfony/runtime/zipball/3550e2711e30bfa5d808514781cd52d1cc1d9e9f", + "reference": "3550e2711e30bfa5d808514781cd52d1cc1d9e9f", "shasum": "" }, "require": { @@ -14414,7 +14417,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v7.3.1" + "source": "https://github.com/symfony/runtime/tree/v7.3.4" }, "funding": [ { @@ -14425,25 +14428,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-13T07:48:40+00:00" + "time": "2025-09-11T15:31:28+00:00" }, { "name": "symfony/security-bundle", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "fbecca9a10af8d886e116f74e860e19b7583689c" + "reference": "f750d9abccbeaa433c56f6a4eb2073166476a75a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/fbecca9a10af8d886e116f74e860e19b7583689c", - "reference": "fbecca9a10af8d886e116f74e860e19b7583689c", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/f750d9abccbeaa433c56f6a4eb2073166476a75a", + "reference": "f750d9abccbeaa433c56f6a4eb2073166476a75a", "shasum": "" }, "require": { @@ -14520,7 +14527,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/v7.3.3" + "source": "https://github.com/symfony/security-bundle/tree/v7.3.4" }, "funding": [ { @@ -14540,20 +14547,20 @@ "type": "tidelift" } ], - "time": "2025-08-06T08:34:58+00:00" + "time": "2025-09-22T15:31:00+00:00" }, { "name": "symfony/security-core", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "4465a3b9cefbaebaeeeb98c2becfdb4b59d22488" + "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/4465a3b9cefbaebaeeeb98c2becfdb4b59d22488", - "reference": "4465a3b9cefbaebaeeeb98c2becfdb4b59d22488", + "url": "https://api.github.com/repos/symfony/security-core/zipball/68b9d3ca57615afde6152a1e1441fa035bea43f8", + "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8", "shasum": "" }, "require": { @@ -14611,7 +14618,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.3.3" + "source": "https://github.com/symfony/security-core/tree/v7.3.4" }, "funding": [ { @@ -14631,7 +14638,7 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-24T14:32:13+00:00" }, { "name": "symfony/security-csrf", @@ -14705,16 +14712,16 @@ }, { "name": "symfony/security-http", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "1bf0dc10f27d4776c47f18f98236c619793a9260" + "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/1bf0dc10f27d4776c47f18f98236c619793a9260", - "reference": "1bf0dc10f27d4776c47f18f98236c619793a9260", + "url": "https://api.github.com/repos/symfony/security-http/zipball/1cf54d0648ebab23bf9b8972617b79f1995e13a9", + "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9", "shasum": "" }, "require": { @@ -14773,7 +14780,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v7.3.3" + "source": "https://github.com/symfony/security-http/tree/v7.3.4" }, "funding": [ { @@ -14793,20 +14800,20 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-09T17:06:44+00:00" }, { "name": "symfony/serializer", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "5608b04d8daaf29432d76ecc618b0fac169c2dfb" + "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/5608b04d8daaf29432d76ecc618b0fac169c2dfb", - "reference": "5608b04d8daaf29432d76ecc618b0fac169c2dfb", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0df5af266c6fe9a855af7db4fea86e13b9ca3ab1", + "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1", "shasum": "" }, "require": { @@ -14876,7 +14883,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/v7.3.3" + "source": "https://github.com/symfony/serializer/tree/v7.3.4" }, "funding": [ { @@ -14896,7 +14903,7 @@ "type": "tidelift" } ], - "time": "2025-08-27T11:34:33+00:00" + "time": "2025-09-15T13:39:02+00:00" }, { "name": "symfony/service-contracts", @@ -15118,16 +15125,16 @@ }, { "name": "symfony/string", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" + "reference": "f96476035142921000338bad71e5247fbc138872" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", + "reference": "f96476035142921000338bad71e5247fbc138872", "shasum": "" }, "require": { @@ -15142,7 +15149,6 @@ }, "require-dev": { "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", @@ -15185,7 +15191,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.3" + "source": "https://github.com/symfony/string/tree/v7.3.4" }, "funding": [ { @@ -15205,20 +15211,20 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-11T14:36:48+00:00" }, { "name": "symfony/translation", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" + "reference": "ec25870502d0c7072d086e8ffba1420c85965174" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", + "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174", "shasum": "" }, "require": { @@ -15285,7 +15291,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.3" + "source": "https://github.com/symfony/translation/tree/v7.3.4" }, "funding": [ { @@ -15305,7 +15311,7 @@ "type": "tidelift" } ], - "time": "2025-08-01T21:02:37+00:00" + "time": "2025-09-07T11:39:36+00:00" }, { "name": "symfony/translation-contracts", @@ -15502,16 +15508,16 @@ }, { "name": "symfony/twig-bundle", - "version": "v7.3.2", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "5d85220df4d8d79e6a9ca57eea6f70004de39657" + "reference": "da5c778a8416fcce5318737c4d944f6fa2bb3f81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/5d85220df4d8d79e6a9ca57eea6f70004de39657", - "reference": "5d85220df4d8d79e6a9ca57eea6f70004de39657", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/da5c778a8416fcce5318737c4d944f6fa2bb3f81", + "reference": "da5c778a8416fcce5318737c4d944f6fa2bb3f81", "shasum": "" }, "require": { @@ -15566,7 +15572,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.3.2" + "source": "https://github.com/symfony/twig-bundle/tree/v7.3.4" }, "funding": [ { @@ -15586,20 +15592,20 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:47:49+00:00" + "time": "2025-09-10T12:00:31+00:00" }, { "name": "symfony/type-info", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "aa64b58ed04517d4d730202dd035895743c23273" + "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/aa64b58ed04517d4d730202dd035895743c23273", - "reference": "aa64b58ed04517d4d730202dd035895743c23273", + "url": "https://api.github.com/repos/symfony/type-info/zipball/d34eaeb57f39c8a9c97eb72a977c423207dfa35b", + "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b", "shasum": "" }, "require": { @@ -15649,7 +15655,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.3.3" + "source": "https://github.com/symfony/type-info/tree/v7.3.4" }, "funding": [ { @@ -15669,7 +15675,7 @@ "type": "tidelift" } ], - "time": "2025-08-28T09:38:04+00:00" + "time": "2025-09-11T15:33:27+00:00" }, { "name": "symfony/uid", @@ -15931,16 +15937,16 @@ }, { "name": "symfony/validator", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "a2f26d7c122393db75a2d41435ad8251250f8bc6" + "reference": "5e29a348b5fac2227b6938a54db006d673bb813a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/a2f26d7c122393db75a2d41435ad8251250f8bc6", - "reference": "a2f26d7c122393db75a2d41435ad8251250f8bc6", + "url": "https://api.github.com/repos/symfony/validator/zipball/5e29a348b5fac2227b6938a54db006d673bb813a", + "reference": "5e29a348b5fac2227b6938a54db006d673bb813a", "shasum": "" }, "require": { @@ -16009,7 +16015,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.3.3" + "source": "https://github.com/symfony/validator/tree/v7.3.4" }, "funding": [ { @@ -16029,20 +16035,20 @@ "type": "tidelift" } ], - "time": "2025-08-27T11:34:33+00:00" + "time": "2025-09-24T06:32:27+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f" + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", + "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb", "shasum": "" }, "require": { @@ -16096,7 +16102,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.4" }, "funding": [ { @@ -16116,20 +16122,20 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "d4dfcd2a822cbedd7612eb6fbd260e46f87b7137" + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/d4dfcd2a822cbedd7612eb6fbd260e46f87b7137", - "reference": "d4dfcd2a822cbedd7612eb6fbd260e46f87b7137", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", + "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", "shasum": "" }, "require": { @@ -16177,7 +16183,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.3.3" + "source": "https://github.com/symfony/var-exporter/tree/v7.3.4" }, "funding": [ { @@ -16197,7 +16203,7 @@ "type": "tidelift" } ], - "time": "2025-08-18T13:10:53+00:00" + "time": "2025-09-11T10:12:26+00:00" }, { "name": "symfony/web-link", @@ -17713,25 +17719,25 @@ "packages-dev": [ { "name": "dama/doctrine-test-bundle", - "version": "v8.3.1", + "version": "v8.4.0", "source": { "type": "git", "url": "https://github.com/dmaicher/doctrine-test-bundle.git", - "reference": "9bc47e02a0d67cbfef6773837249f71e65c95bf6" + "reference": "ce7cd44126c36694e2f2d92c4aedd4fc5b0874f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/9bc47e02a0d67cbfef6773837249f71e65c95bf6", - "reference": "9bc47e02a0d67cbfef6773837249f71e65c95bf6", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/ce7cd44126c36694e2f2d92c4aedd4fc5b0874f2", + "reference": "ce7cd44126c36694e2f2d92c4aedd4fc5b0874f2", "shasum": "" }, "require": { "doctrine/dbal": "^3.3 || ^4.0", - "doctrine/doctrine-bundle": "^2.11.0", + "doctrine/doctrine-bundle": "^2.11.0 || ^3.0", "php": ">= 8.1", "psr/cache": "^2.0 || ^3.0", - "symfony/cache": "^6.4 || ^7.2 || ^8.0", - "symfony/framework-bundle": "^6.4 || ^7.2 || ^8.0" + "symfony/cache": "^6.4 || ^7.3 || ^8.0", + "symfony/framework-bundle": "^6.4 || ^7.3 || ^8.0" }, "conflict": { "phpunit/phpunit": "<10.0" @@ -17740,9 +17746,9 @@ "behat/behat": "^3.0", "friendsofphp/php-cs-fixer": "^3.27", "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "symfony/process": "^6.4 || ^7.2 || ^8.0", - "symfony/yaml": "^6.4 || ^7.2 || ^8.0" + "phpunit/phpunit": "^10.5.57 || ^11.5.41|| ^12.3.14", + "symfony/dotenv": "^6.4 || ^7.3 || ^8.0", + "symfony/process": "^6.4 || ^7.3 || ^8.0" }, "type": "symfony-bundle", "extra": { @@ -17776,27 +17782,27 @@ ], "support": { "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues", - "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.3.1" + "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.4.0" }, - "time": "2025-08-05T17:55:02+00:00" + "time": "2025-10-11T15:24:02+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "4.1.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "a06db6b81ff20a2980bf92063d80c013bb8b4b7c" + "reference": "cd58d7738fe1fea1dbfd3e3f3bb421ee92d45e10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/a06db6b81ff20a2980bf92063d80c013bb8b4b7c", - "reference": "a06db6b81ff20a2980bf92063d80c013bb8b4b7c", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/cd58d7738fe1fea1dbfd3e3f3bb421ee92d45e10", + "reference": "cd58d7738fe1fea1dbfd3e3f3bb421ee92d45e10", "shasum": "" }, "require": { "doctrine/data-fixtures": "^2.0", - "doctrine/doctrine-bundle": "^2.2", + "doctrine/doctrine-bundle": "^2.2 || ^3.0", "doctrine/orm": "^2.14.0 || ^3.0", "doctrine/persistence": "^2.4 || ^3.0 || ^4.0", "php": "^8.1", @@ -17812,7 +17818,7 @@ "doctrine/dbal": "< 3" }, "require-dev": { - "doctrine/coding-standard": "13.0.0", + "doctrine/coding-standard": "14.0.0", "phpstan/phpstan": "2.1.11", "phpunit/phpunit": "^10.5.38 || 11.4.14" }, @@ -17848,7 +17854,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/4.1.0" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/4.2.0" }, "funding": [ { @@ -17864,7 +17870,7 @@ "type": "tidelift" } ], - "time": "2025-03-26T10:56:26+00:00" + "time": "2025-10-12T16:50:54+00:00" }, { "name": "ekino/phpstan-banned-code", @@ -18288,16 +18294,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.28", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "578fa296a166605d97b94091f724f1257185d278" - }, + "version": "2.1.31", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/578fa296a166605d97b94091f724f1257185d278", - "reference": "578fa296a166605d97b94091f724f1257185d278", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96", + "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96", "shasum": "" }, "require": { @@ -18342,20 +18343,20 @@ "type": "github" } ], - "time": "2025-09-19T08:58:49+00:00" + "time": "2025-10-10T14:14:11+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "2.0.6", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "934f5734812341358fc41c44006b30fa00c785f0" + "reference": "5eaf37b87288474051469aee9f937fc9d862f330" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/934f5734812341358fc41c44006b30fa00c785f0", - "reference": "934f5734812341358fc41c44006b30fa00c785f0", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/5eaf37b87288474051469aee9f937fc9d862f330", + "reference": "5eaf37b87288474051469aee9f937fc9d862f330", "shasum": "" }, "require": { @@ -18389,7 +18390,8 @@ "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^9.6.20", "ramsey/uuid": "^4.2", - "symfony/cache": "^5.4" + "symfony/cache": "^5.4", + "symfony/uid": "^5.4 || ^6.4 || ^7.3" }, "type": "phpstan-extension", "extra": { @@ -18412,27 +18414,27 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.6" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.10" }, - "time": "2025-09-10T07:06:30+00:00" + "time": "2025-10-06T10:01:02+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "2.0.6", + "version": "2.0.7", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094" + "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/f9f77efa9de31992a832ff77ea52eb42d675b094", - "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/d6211c46213d4181054b3d77b10a5c5cb0d59538", + "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.0.4" + "phpstan/phpstan": "^2.1.29" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", @@ -18460,9 +18462,9 @@ "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/2.0.6" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.7" }, - "time": "2025-07-21T12:19:29+00:00" + "time": "2025-09-26T11:19:08+00:00" }, { "name": "phpstan/phpstan-symfony", @@ -18872,16 +18874,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.40", + "version": "11.5.42", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4102b2f9250d6dd57d1a1c8c4132b1c744b14b1c" + "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4102b2f9250d6dd57d1a1c8c4132b1c744b14b1c", - "reference": "4102b2f9250d6dd57d1a1c8c4132b1c744b14b1c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c", + "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c", "shasum": "" }, "require": { @@ -18905,7 +18907,7 @@ "sebastian/comparator": "^6.3.2", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.1", + "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", "sebastian/type": "^5.1.3", @@ -18953,7 +18955,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.40" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.42" }, "funding": [ { @@ -18977,25 +18979,25 @@ "type": "tidelift" } ], - "time": "2025-09-23T06:23:40+00:00" + "time": "2025-09-28T12:09:13+00:00" }, { "name": "rector/rector", - "version": "2.1.7", + "version": "2.2.3", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce" + "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/c34cc07c4698f007a20dc5c99ff820089ae413ce", - "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/d27f976a332a87b5d03553c2e6f04adbe5da034f", + "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.18" + "phpstan/phpstan": "^2.1.26" }, "conflict": { "rector/rector-doctrine": "*", @@ -19029,7 +19031,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.1.7" + "source": "https://github.com/rectorphp/rector/tree/2.2.3" }, "funding": [ { @@ -19037,7 +19039,7 @@ "type": "github" } ], - "time": "2025-09-10T11:13:58+00:00" + "time": "2025-10-11T21:50:23+00:00" }, { "name": "roave/security-advisories", @@ -19045,12 +19047,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "f48b3e601515b060334744b4b495f0d6b3cc2e6b" + "reference": "7a8f128281289412092c450a5eb3df5cabbc89e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f48b3e601515b060334744b4b495f0d6b3cc2e6b", - "reference": "f48b3e601515b060334744b4b495f0d6b3cc2e6b", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7a8f128281289412092c450a5eb3df5cabbc89e1", + "reference": "7a8f128281289412092c450a5eb3df5cabbc89e1", "shasum": "" }, "conflict": { @@ -19069,6 +19071,7 @@ "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", "ameos/ameos_tarteaucitron": "<1.2.23", @@ -19092,10 +19095,10 @@ "athlon1600/php-proxy-app": "<=3", "athlon1600/youtube-downloader": "<=4", "austintoddj/canvas": "<=3.4.2", - "auth0/auth0-php": ">=8.0.0.0-beta1,<8.14", - "auth0/login": "<7.17", - "auth0/symfony": "<5.4", - "auth0/wordpress": "<5.3", + "auth0/auth0-php": ">=3.3,<=8.16", + "auth0/login": "<=7.18", + "auth0/symfony": "<=5.4.1", + "auth0/wordpress": "<=5.3", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", @@ -19107,7 +19110,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.1", + "bagisto/bagisto": "<=2.3.7", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.8", @@ -19212,9 +19215,10 @@ "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<=21.0.2", + "dolibarr/dolibarr": "<21.0.3", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", + "drupal-pattern-lab/unified-twig-extensions": "<=0.1", "drupal/admin_audit_trail": "<1.0.5", "drupal/ai": "<1.0.5", "drupal/alogin": "<2.0.6", @@ -19263,7 +19267,7 @@ "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.38|>=3.3,<3.3.39", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.39|>=3.3,<3.3.39", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1|>=5.3.0.0-beta1,<5.3.5", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", "ezsystems/ezplatform-http-cache": "<2.3.16", @@ -19338,6 +19342,7 @@ "gogentooss/samlbase": "<1.2.7", "google/protobuf": "<3.4", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", + "gp247/core": "<1.1.24", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", "grumpydictator/firefly-iii": "<6.1.17", @@ -19356,15 +19361,15 @@ "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.21", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.25|>=5,<5.0.3", "ibexa/admin-ui-assets": ">=4.6.0.0-alpha1,<4.6.21", "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", - "ibexa/fieldtype-richtext": ">=4.6,<4.6.21", + "ibexa/fieldtype-richtext": ">=4.6,<4.6.25|>=5,<5.0.3", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/http-cache": ">=4.6,<4.6.14", "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14", "ibexa/solr": ">=4.5,<4.5.4", - "ibexa/user": ">=4,<4.4.3", + "ibexa/user": ">=4,<4.4.3|>=5,<5.0.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", "ilicmiljan/secure-props": ">=1.2,<1.2.2", @@ -19400,7 +19405,7 @@ "joomla/archive": "<1.1.12|>=2,<2.0.1", "joomla/database": ">=1,<2.2|>=3,<3.4", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", - "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/filter": "<2.0.6|>=3,<3.0.5|==4", "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", "joomla/joomla-cms": "<3.9.12|>=4,<4.4.13|>=5,<5.2.6", @@ -19489,7 +19494,9 @@ "mediawiki/semantic-media-wiki": "<4.0.2", "mehrwert/phpmyadmin": "<3.2", "melisplatform/melis-asset-manager": "<5.0.1", - "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-cms": "<5.3.4", + "melisplatform/melis-cms-slider": "<5.3.1", + "melisplatform/melis-core": "<5.3.11", "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", @@ -19540,6 +19547,7 @@ "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", "novaksolutions/infusionsoft-php-sdk": "<1", + "novosga/novosga": "<=2.2.12", "nukeviet/nukeviet": "<4.5.02", "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", @@ -19554,7 +19562,7 @@ "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", - "open-web-analytics/open-web-analytics": "<1.7.4", + "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", "openmage/magento-lts": "<20.12.3", @@ -19633,6 +19641,7 @@ "prestashop/gamification": "<2.3.2", "prestashop/prestashop": "<8.2.3", "prestashop/productcomments": "<5.0.2", + "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", "prestashop/ps_contactinfo": "<=3.3.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", @@ -19670,7 +19679,7 @@ "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", "rudloff/alltube": "<3.0.3", "rudloff/rtmpdump-bin": "<=2.3.1", - "s-cart/core": "<6.9", + "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", @@ -19742,6 +19751,7 @@ "starcitizentools/citizen-skin": ">=1.9.4,<3.4", "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", + "starcitizenwiki/embedvideo": "<=4", "statamic/cms": "<=5.16", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", @@ -19816,7 +19826,7 @@ "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<=4.0.1", + "thorsten/phpmyfaq": "<=4.0.1|>=4.0.7,<4.0.13", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", @@ -19832,7 +19842,7 @@ "tribalsystems/zenario": "<=9.7.61188", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", - "twbs/bootstrap": "<3.4.1|>=4,<=4.6.2", + "twbs/bootstrap": "<3.4.1|>=4,<4.3.1", "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", @@ -19896,6 +19906,7 @@ "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", "webpa/webpa": "<3.1.2", + "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", @@ -20008,7 +20019,7 @@ "type": "tidelift" } ], - "time": "2025-09-19T18:07:33+00:00" + "time": "2025-10-17T18:06:27+00:00" }, { "name": "sebastian/cli-parser", @@ -20475,16 +20486,16 @@ }, { "name": "sebastian/exporter", - "version": "6.3.1", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "8f67e53d3fcaf53105f95cc14f1630493d0fa2e6" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/8f67e53d3fcaf53105f95cc14f1630493d0fa2e6", - "reference": "8f67e53d3fcaf53105f95cc14f1630493d0fa2e6", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -20541,7 +20552,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { @@ -20561,7 +20572,7 @@ "type": "tidelift" } ], - "time": "2025-09-22T05:34:00+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", @@ -21122,16 +21133,16 @@ }, { "name": "symfony/debug-bundle", - "version": "v7.3.0", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "781acc90f31f5fe18915f9276890864ebbbe3da8" + "reference": "30f922edd53dd85238f1f26dbb68a044109f8f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/781acc90f31f5fe18915f9276890864ebbbe3da8", - "reference": "781acc90f31f5fe18915f9276890864ebbbe3da8", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/30f922edd53dd85238f1f26dbb68a044109f8f0e", + "reference": "30f922edd53dd85238f1f26dbb68a044109f8f0e", "shasum": "" }, "require": { @@ -21173,7 +21184,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v7.3.0" + "source": "https://github.com/symfony/debug-bundle/tree/v7.3.4" }, "funding": [ { @@ -21184,12 +21195,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-04T13:21:13+00:00" + "time": "2025-09-10T12:00:31+00:00" }, { "name": "symfony/maker-bundle", @@ -21286,16 +21301,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "7954e563ed14f924593169f6c4645d58d9d9ac77" + "reference": "ed77a629c13979e051b7000a317966474d566398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/7954e563ed14f924593169f6c4645d58d9d9ac77", - "reference": "7954e563ed14f924593169f6c4645d58d9d9ac77", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/ed77a629c13979e051b7000a317966474d566398", + "reference": "ed77a629c13979e051b7000a317966474d566398", "shasum": "" }, "require": { @@ -21351,7 +21366,7 @@ "testing" ], "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.3.3" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.3.4" }, "funding": [ { @@ -21371,20 +21386,20 @@ "type": "tidelift" } ], - "time": "2025-08-04T15:15:28+00:00" + "time": "2025-09-12T12:18:52+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "6ee224d6e9de787a47622b9ad4880e205ef16ad1" + "reference": "f305fa4add690bb7d6b14ab61f37c3bd061a3dd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6ee224d6e9de787a47622b9ad4880e205ef16ad1", - "reference": "6ee224d6e9de787a47622b9ad4880e205ef16ad1", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/f305fa4add690bb7d6b14ab61f37c3bd061a3dd7", + "reference": "f305fa4add690bb7d6b14ab61f37c3bd061a3dd7", "shasum": "" }, "require": { @@ -21440,7 +21455,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.3" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.4" }, "funding": [ { @@ -21460,7 +21475,7 @@ "type": "tidelift" } ], - "time": "2025-08-19T13:44:55+00:00" + "time": "2025-09-25T08:03:55+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/parameters.yaml b/config/parameters.yaml index 5b40899d..d4fe7581 100644 --- a/config/parameters.yaml +++ b/config/parameters.yaml @@ -8,7 +8,7 @@ parameters: # This is used as workaround for places where we can not access the settings directly (like the 2FA application names) partdb.title: '%env(string:settings:customization:instanceName)%' # The title shown inside of Part-DB (e.g. in the navbar and on homepage) - partdb.locale_menu: ['en', 'de', 'it', 'fr', 'ru', 'ja', 'cs', 'da', 'zh', 'pl'] # The languages that are shown in user drop down menu + partdb.locale_menu: ['en', 'de', 'it', 'fr', 'ru', 'ja', 'cs', 'da', 'zh', 'pl', 'hu'] # The languages that are shown in user drop down menu partdb.default_uri: '%env(string:DEFAULT_URI)%' # The default URI to use for the Part-DB instance (e.g. https://part-db.example.com/). This is used for generating links in emails diff --git a/docs/upgrade/1_to_2.md b/docs/upgrade/1_to_2.md index f5b3b085..c333136a 100644 --- a/docs/upgrade/1_to_2.md +++ b/docs/upgrade/1_to_2.md @@ -48,14 +48,15 @@ The upgrade process works very similar to a normal (minor release) upgrade. 1. Make a backup of your existing Part-DB installation, including the database, data directories and the configuration files and `.env.local` file. The `php bin/console partdb:backup` command can help you with this. 2. Pull the v2 version. For git installation you can do this with `git checkout v2.0.0` (or newer version) -3. Run `composer install --no-dev -o` to update the dependencies. -4. Run `yarn install` and `yarn build` to update the frontend assets. -5. Rund `php bin/console doctrine:migrations:migrate` to update the database schema. -6. Clear the cache with `php bin/console cache:clear`. -7. Open your Part-DB instance in the browser and log in as an admin user. -8. Go to the user or group permissions page, and give yourself (and other administrators) the right to change system settings (under "System" and "Configuration"). -9. You can now go to the settings page (under "System" and "Settings") and check if all settings are correct. -10. Parameters which were previously set via environment variables are greyed out and cannot be changed in the web interface. +3. Remove the `var/cache/` directory inside the Part-DB installation to ensure that no old cache files remain. +4. Run `composer install --no-dev -o` to update the dependencies. +5. Run `yarn install` and `yarn build` to update the frontend assets. +6. Rund `php bin/console doctrine:migrations:migrate` to update the database schema. +7. Clear the cache with `php bin/console cache:clear`. +8. Open your Part-DB instance in the browser and log in as an admin user. +9. Go to the user or group permissions page, and give yourself (and other administrators) the right to change system settings (under "System" and "Configuration"). +10. You can now go to the settings page (under "System" and "Settings") and check if all settings are correct. +11. Parameters which were previously set via environment variables are greyed out and cannot be changed in the web interface. If you want to change them, you must migrate them to the settings interface as described below. ### Docker installation @@ -87,3 +88,15 @@ After the migration run successfully, the contents of your environment variables Go through the environment variables listed by the command and remove them from your environment variable configuration (e.g. `.env.local` file or docker compose file), or just comment them out for now. If you want to keep some environment variables, just leave them as they are, they will still work as before, the migration command only affects the settings stored in the database. + + +## Troubleshooting + +### cache:clear fails: You have requested a non-existent parameter "jbtronics.settings.proxy_dir". +If you receive an error like +``` +In App_KernelProdContainer.php line 2839: +You have requested a non-existent parameter "jbtronics.settings.proxy_dir". +``` +when running `php bin/console cache:clear` or `composer install`. You have to manually delete the `var/cache/` +directory inside your Part-DB installation and try again. diff --git a/package.json b/package.json index 7a3efaa4..f2fbebcd 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "bootbox": "^6.0.0", "bootswatch": "^5.1.3", "bs-custom-file-input": "^1.3.4", - "ckeditor5": "^46.0.0", + "ckeditor5": "^47.0.0", "clipboard": "^2.0.4", "compression-webpack-plugin": "^11.1.0", "datatables.net": "^2.0.0", diff --git a/public/img/calculator/ratio.png b/public/img/calculator/ratio.png deleted file mode 100644 index d6decff3..00000000 Binary files a/public/img/calculator/ratio.png and /dev/null differ diff --git a/public/img/calculator/v1.png b/public/img/calculator/v1.png deleted file mode 100644 index c98d3ad4..00000000 Binary files a/public/img/calculator/v1.png and /dev/null differ diff --git a/public/img/calculator/v2.png b/public/img/calculator/v2.png deleted file mode 100644 index 081386fe..00000000 Binary files a/public/img/calculator/v2.png and /dev/null differ diff --git a/public/img/labels/100.png b/public/img/labels/100.png deleted file mode 100644 index f68a23a9..00000000 Binary files a/public/img/labels/100.png and /dev/null differ diff --git a/public/img/labels/1001.png b/public/img/labels/1001.png deleted file mode 100644 index c87e4ceb..00000000 Binary files a/public/img/labels/1001.png and /dev/null differ diff --git a/public/img/labels/1002.png b/public/img/labels/1002.png deleted file mode 100644 index 68b6594c..00000000 Binary files a/public/img/labels/1002.png and /dev/null differ diff --git a/public/img/labels/1003.png b/public/img/labels/1003.png deleted file mode 100644 index 2abbd616..00000000 Binary files a/public/img/labels/1003.png and /dev/null differ diff --git a/public/img/labels/100R.png b/public/img/labels/100R.png deleted file mode 100644 index 34fb8fa8..00000000 Binary files a/public/img/labels/100R.png and /dev/null differ diff --git a/public/img/labels/101.png b/public/img/labels/101.png deleted file mode 100644 index dd07aa39..00000000 Binary files a/public/img/labels/101.png and /dev/null differ diff --git a/public/img/labels/102.png b/public/img/labels/102.png deleted file mode 100644 index a54e16b7..00000000 Binary files a/public/img/labels/102.png and /dev/null differ diff --git a/public/img/labels/10R2.png b/public/img/labels/10R2.png deleted file mode 100644 index 2b57f7d4..00000000 Binary files a/public/img/labels/10R2.png and /dev/null differ diff --git a/public/img/labels/220.png b/public/img/labels/220.png deleted file mode 100644 index 28ede43d..00000000 Binary files a/public/img/labels/220.png and /dev/null differ diff --git a/public/img/labels/221K.png b/public/img/labels/221K.png deleted file mode 100644 index 1dbb0c61..00000000 Binary files a/public/img/labels/221K.png and /dev/null differ diff --git a/public/img/labels/246-20.png b/public/img/labels/246-20.png deleted file mode 100644 index 590f7c5d..00000000 Binary files a/public/img/labels/246-20.png and /dev/null differ diff --git a/public/img/labels/3F3.png b/public/img/labels/3F3.png deleted file mode 100644 index ce85ae97..00000000 Binary files a/public/img/labels/3F3.png and /dev/null differ diff --git a/public/img/labels/R10.png b/public/img/labels/R10.png deleted file mode 100644 index 60a90182..00000000 Binary files a/public/img/labels/R10.png and /dev/null differ diff --git a/public/img/labels/template-c-elko-alu.png b/public/img/labels/template-c-elko-alu.png deleted file mode 100644 index 24d68d91..00000000 Binary files a/public/img/labels/template-c-elko-alu.png and /dev/null differ diff --git a/public/img/labels/template-c-elko.png b/public/img/labels/template-c-elko.png deleted file mode 100644 index 97e3c1ef..00000000 Binary files a/public/img/labels/template-c-elko.png and /dev/null differ diff --git a/public/img/labels/template-c-tantal.png b/public/img/labels/template-c-tantal.png deleted file mode 100644 index 3e49efee..00000000 Binary files a/public/img/labels/template-c-tantal.png and /dev/null differ diff --git a/public/img/labels/template-l.png b/public/img/labels/template-l.png deleted file mode 100644 index 7e5afd92..00000000 Binary files a/public/img/labels/template-l.png and /dev/null differ diff --git a/public/img/labels/template-r.png b/public/img/labels/template-r.png deleted file mode 100644 index 554d2a08..00000000 Binary files a/public/img/labels/template-r.png and /dev/null differ diff --git a/public/img/partdb/alldatasheet.png b/public/img/partdb/alldatasheet.png deleted file mode 100644 index d7c1d40f..00000000 Binary files a/public/img/partdb/alldatasheet.png and /dev/null differ diff --git a/public/img/partdb/dc.png b/public/img/partdb/dc.png deleted file mode 100644 index 4a9403af..00000000 Binary files a/public/img/partdb/dc.png and /dev/null differ diff --git a/public/img/partdb/dummytn.png b/public/img/partdb/dummytn.png deleted file mode 100644 index e63c9248..00000000 Binary files a/public/img/partdb/dummytn.png and /dev/null differ diff --git a/public/img/partdb/favicon.ico b/public/img/partdb/favicon.ico deleted file mode 100644 index 1d838794..00000000 Binary files a/public/img/partdb/favicon.ico and /dev/null differ diff --git a/public/img/partdb/file_all.svg b/public/img/partdb/file_all.svg deleted file mode 100644 index bb4b4248..00000000 --- a/public/img/partdb/file_all.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/img/partdb/file_dc.svg b/public/img/partdb/file_dc.svg deleted file mode 100644 index f0039881..00000000 --- a/public/img/partdb/file_dc.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - DC - diff --git a/public/img/partdb/file_google.svg b/public/img/partdb/file_google.svg deleted file mode 100644 index 20ea96bf..00000000 --- a/public/img/partdb/file_google.svg +++ /dev/null @@ -1,5 +0,0 @@ - - -google - - diff --git a/public/img/partdb/file_octo.svg b/public/img/partdb/file_octo.svg deleted file mode 100644 index 307439a5..00000000 --- a/public/img/partdb/file_octo.svg +++ /dev/null @@ -1,5 +0,0 @@ - - -cog - - diff --git a/public/img/partdb/file_reichelt.svg b/public/img/partdb/file_reichelt.svg deleted file mode 100644 index 488dafaa..00000000 --- a/public/img/partdb/file_reichelt.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/public/img/partdb/help.png b/public/img/partdb/help.png deleted file mode 100644 index 7cb04978..00000000 Binary files a/public/img/partdb/help.png and /dev/null differ diff --git a/public/img/partdb/partdb.png b/public/img/partdb/partdb.png deleted file mode 100644 index 53f51afb..00000000 Binary files a/public/img/partdb/partdb.png and /dev/null differ diff --git a/public/img/partdb/reichelt.png b/public/img/partdb/reichelt.png deleted file mode 100644 index fcfcfd49..00000000 Binary files a/public/img/partdb/reichelt.png and /dev/null differ diff --git a/public/img/partdb/template-pdf.png b/public/img/partdb/template-pdf.png deleted file mode 100644 index 211bf5a4..00000000 Binary files a/public/img/partdb/template-pdf.png and /dev/null differ diff --git a/src/Controller/InfoProviderController.php b/src/Controller/InfoProviderController.php index dae8213e..b79c307c 100644 --- a/src/Controller/InfoProviderController.php +++ b/src/Controller/InfoProviderController.php @@ -25,6 +25,7 @@ namespace App\Controller; use App\Entity\Parts\Manufacturer; use App\Entity\Parts\Part; +use App\Exceptions\OAuthReconnectRequiredException; use App\Form\InfoProviderSystem\PartSearchType; use App\Services\InfoProviderSystem\ExistingPartFinder; use App\Services\InfoProviderSystem\PartInfoRetriever; @@ -175,8 +176,11 @@ class InfoProviderController extends AbstractController $this->addFlash('error',$e->getMessage()); //Log the exception $exceptionLogger->error('Error during info provider search: ' . $e->getMessage(), ['exception' => $e]); + } catch (OAuthReconnectRequiredException $e) { + $this->addFlash('error', t('info_providers.search.error.oauth_reconnect', ['%provider%' => $e->getProviderName()])); } + // modify the array to an array of arrays that has a field for a matching local Part // the advantage to use that format even when we don't look for local parts is that we // always work with the same interface diff --git a/src/Controller/PartListsController.php b/src/Controller/PartListsController.php index 8ea218f4..808b0c5d 100644 --- a/src/Controller/PartListsController.php +++ b/src/Controller/PartListsController.php @@ -36,6 +36,7 @@ use App\Exceptions\InvalidRegexException; use App\Form\Filters\PartFilterType; use App\Services\Parts\PartsTableActionHandler; use App\Services\Trees\NodesListBuilder; +use App\Settings\BehaviorSettings\SidebarSettings; use App\Settings\BehaviorSettings\TableSettings; use Doctrine\DBAL\Exception\DriverException; use Doctrine\ORM\EntityManagerInterface; @@ -56,11 +57,21 @@ class PartListsController extends AbstractController private readonly NodesListBuilder $nodesListBuilder, private readonly DataTableFactory $dataTableFactory, private readonly TranslatorInterface $translator, - private readonly TableSettings $tableSettings + private readonly TableSettings $tableSettings, + private readonly SidebarSettings $sidebarSettings, ) { } + /** + * Gets the filter operator to use by default (INCLUDING_CHILDREN or =) + * @return string + */ + private function getFilterOperator(): string + { + return $this->sidebarSettings->dataStructureNodesTableIncludeChildren ? 'INCLUDING_CHILDREN' : '='; + } + #[Route(path: '/table/action', name: 'table_action', methods: ['POST'])] public function tableAction(Request $request, PartsTableActionHandler $actionHandler): Response { @@ -203,7 +214,7 @@ class PartListsController extends AbstractController return $this->showListWithFilter($request, 'parts/lists/category_list.html.twig', function (PartFilter $filter) use ($category) { - $filter->category->setOperator('INCLUDING_CHILDREN')->setValue($category); + $filter->category->setOperator($this->getFilterOperator())->setValue($category); }, function (FormInterface $filterForm) { $this->disableFormFieldAfterCreation($filterForm->get('category')->get('value')); }, [ @@ -221,7 +232,7 @@ class PartListsController extends AbstractController return $this->showListWithFilter($request, 'parts/lists/footprint_list.html.twig', function (PartFilter $filter) use ($footprint) { - $filter->footprint->setOperator('INCLUDING_CHILDREN')->setValue($footprint); + $filter->footprint->setOperator($this->getFilterOperator())->setValue($footprint); }, function (FormInterface $filterForm) { $this->disableFormFieldAfterCreation($filterForm->get('footprint')->get('value')); }, [ @@ -239,7 +250,7 @@ class PartListsController extends AbstractController return $this->showListWithFilter($request, 'parts/lists/manufacturer_list.html.twig', function (PartFilter $filter) use ($manufacturer) { - $filter->manufacturer->setOperator('INCLUDING_CHILDREN')->setValue($manufacturer); + $filter->manufacturer->setOperator($this->getFilterOperator())->setValue($manufacturer); }, function (FormInterface $filterForm) { $this->disableFormFieldAfterCreation($filterForm->get('manufacturer')->get('value')); }, [ @@ -257,7 +268,7 @@ class PartListsController extends AbstractController return $this->showListWithFilter($request, 'parts/lists/store_location_list.html.twig', function (PartFilter $filter) use ($storelocation) { - $filter->storelocation->setOperator('INCLUDING_CHILDREN')->setValue($storelocation); + $filter->storelocation->setOperator($this->getFilterOperator())->setValue($storelocation); }, function (FormInterface $filterForm) { $this->disableFormFieldAfterCreation($filterForm->get('storelocation')->get('value')); }, [ @@ -275,7 +286,7 @@ class PartListsController extends AbstractController return $this->showListWithFilter($request, 'parts/lists/supplier_list.html.twig', function (PartFilter $filter) use ($supplier) { - $filter->supplier->setOperator('INCLUDING_CHILDREN')->setValue($supplier); + $filter->supplier->setOperator($this->getFilterOperator())->setValue($supplier); }, function (FormInterface $filterForm) { $this->disableFormFieldAfterCreation($filterForm->get('supplier')->get('value')); }, [ diff --git a/src/DataTables/Filters/Constraints/TextConstraint.php b/src/DataTables/Filters/Constraints/TextConstraint.php index 31b12a5e..c6a6fe19 100644 --- a/src/DataTables/Filters/Constraints/TextConstraint.php +++ b/src/DataTables/Filters/Constraints/TextConstraint.php @@ -96,14 +96,15 @@ class TextConstraint extends AbstractConstraint //The CONTAINS, LIKE, STARTS and ENDS operators use the LIKE operator, but we have to build the value string differently $like_value = null; + $escaped_value = str_replace(['%', '_'], ['\%', '\_'], $this->value); if ($this->operator === 'LIKE') { - $like_value = $this->value; + $like_value = $this->value; //Here we do not escape anything, as the user may provide % and _ wildcards } elseif ($this->operator === 'STARTS') { - $like_value = $this->value . '%'; + $like_value = $escaped_value . '%'; } elseif ($this->operator === 'ENDS') { - $like_value = '%' . $this->value; + $like_value = '%' . $escaped_value; } elseif ($this->operator === 'CONTAINS') { - $like_value = '%' . $this->value . '%'; + $like_value = '%' . $escaped_value . '%'; } if ($like_value !== null) { diff --git a/src/DataTables/Filters/PartSearchFilter.php b/src/DataTables/Filters/PartSearchFilter.php index 60832b26..aa8c20f4 100644 --- a/src/DataTables/Filters/PartSearchFilter.php +++ b/src/DataTables/Filters/PartSearchFilter.php @@ -144,6 +144,8 @@ class PartSearchFilter implements FilterInterface if ($this->regex) { $queryBuilder->setParameter('search_query', $this->keyword); } else { + //Escape % and _ characters in the keyword + $this->keyword = str_replace(['%', '_'], ['\%', '\_'], $this->keyword); $queryBuilder->setParameter('search_query', '%' . $this->keyword . '%'); } } diff --git a/src/Doctrine/Functions/ILike.php b/src/Doctrine/Functions/ILike.php index 5246220a..ff2d2163 100644 --- a/src/Doctrine/Functions/ILike.php +++ b/src/Doctrine/Functions/ILike.php @@ -56,7 +56,6 @@ class ILike extends FunctionNode { $platform = $sqlWalker->getConnection()->getDatabasePlatform(); - // if ($platform instanceof AbstractMySQLPlatform || $platform instanceof SQLitePlatform) { $operator = 'LIKE'; } elseif ($platform instanceof PostgreSQLPlatform) { @@ -66,6 +65,12 @@ class ILike extends FunctionNode throw new \RuntimeException('Platform ' . gettype($platform) . ' does not support case insensitive like expressions.'); } - return '(' . $this->value->dispatch($sqlWalker) . ' ' . $operator . ' ' . $this->expr->dispatch($sqlWalker) . ')'; + $escape = ""; + if ($platform instanceof SQLitePlatform) { + //SQLite needs ESCAPE explicitly defined backslash as escape character + $escape = " ESCAPE '\\'"; + } + + return '(' . $this->value->dispatch($sqlWalker) . ' ' . $operator . ' ' . $this->expr->dispatch($sqlWalker) . $escape . ')'; } -} \ No newline at end of file +} diff --git a/src/Entity/Parts/PartTraits/ProjectTrait.php b/src/Entity/Parts/PartTraits/ProjectTrait.php index 45719377..7e1962d3 100644 --- a/src/Entity/Parts/PartTraits/ProjectTrait.php +++ b/src/Entity/Parts/PartTraits/ProjectTrait.php @@ -15,7 +15,7 @@ trait ProjectTrait /** * @var Collection $project_bom_entries */ - #[ORM\OneToMany(mappedBy: 'part', targetEntity: ProjectBOMEntry::class, cascade: ['remove'], orphanRemoval: true)] + #[ORM\OneToMany(targetEntity: ProjectBOMEntry::class, mappedBy: 'part')] protected Collection $project_bom_entries; /** diff --git a/src/EntityListeners/PartProjectBOMEntryUnlinkListener.php b/src/EntityListeners/PartProjectBOMEntryUnlinkListener.php new file mode 100644 index 00000000..08a93f76 --- /dev/null +++ b/src/EntityListeners/PartProjectBOMEntryUnlinkListener.php @@ -0,0 +1,59 @@ +. + */ + +declare(strict_types=1); + + +namespace App\EntityListeners; + +use App\Entity\Parts\Part; +use Doctrine\Bundle\DoctrineBundle\Attribute\AsEntityListener; +use Doctrine\ORM\Event\PreRemoveEventArgs; + +/** + * If an part is deleted, this listener makes sure that all ProjectBOMEntries that reference this part, are updated + * to not reference the part anymore, but instead store the part name in the name field. + */ +#[AsEntityListener(event: "preRemove", entity: Part::class)] +class PartProjectBOMEntryUnlinkListener +{ + public function preRemove(Part $part, PreRemoveEventArgs $event): void + { + // Iterate over all ProjectBOMEntries that use this part and put the part name into the name field + foreach ($part->getProjectBomEntries() as $bom_entry) { + $old_name = $bom_entry->getName(); + if ($old_name === null || trim($old_name) === '') { + $bom_entry->setName($part->getName()); + } else { + $bom_entry->setName($old_name . ' (' . $part->getName() . ')'); + } + + $old_comment = $bom_entry->getComment(); + if ($old_comment === null || trim($old_comment) === '') { + $bom_entry->setComment('Part was deleted: ' . $part->getName()); + } else { + $bom_entry->setComment($old_comment . "\n\n Part was deleted: " . $part->getName()); + } + + //Remove the part reference + $bom_entry->setPart(null); + } + } +} diff --git a/src/Exceptions/OAuthReconnectRequiredException.php b/src/Exceptions/OAuthReconnectRequiredException.php new file mode 100644 index 00000000..97abb19f --- /dev/null +++ b/src/Exceptions/OAuthReconnectRequiredException.php @@ -0,0 +1,48 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Exceptions; + +use Throwable; + +class OAuthReconnectRequiredException extends \RuntimeException +{ + private string $providerName = "unknown"; + + public function __construct(string $message = "You need to reconnect the OAuth connection for this provider!", int $code = 0, ?Throwable $previous = null) + { + parent::__construct($message, $code, $previous); + } + + public static function forProvider(string $providerName): self + { + $exception = new self("You need to reconnect the OAuth connection for the provider '$providerName'!"); + $exception->providerName = $providerName; + return $exception; + } + + public function getProviderName(): string + { + return $this->providerName; + } +} diff --git a/src/Form/Type/LanguageMenuEntriesType.php b/src/Form/Type/LanguageMenuEntriesType.php new file mode 100644 index 00000000..a3bba77f --- /dev/null +++ b/src/Form/Type/LanguageMenuEntriesType.php @@ -0,0 +1,57 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Form\Type; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\LanguageType; +use Symfony\Component\Form\Extension\Core\Type\LocaleType; +use Symfony\Component\Intl\Languages; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class LanguageMenuEntriesType extends AbstractType +{ + public function __construct(#[Autowire(param: 'partdb.locale_menu')] private readonly array $preferred_languages) + { + + } + + public function getParent(): string + { + return LanguageType::class; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $choices = []; + foreach ($this->preferred_languages as $lang_code) { + $choices[Languages::getName($lang_code)] = $lang_code; + } + + $resolver->setDefaults([ + 'choice_loader' => null, + 'choices' => $choices, + ]); + } +} diff --git a/src/Services/Formatters/SIFormatter.php b/src/Services/Formatters/SIFormatter.php index a6325987..b83501fa 100644 --- a/src/Services/Formatters/SIFormatter.php +++ b/src/Services/Formatters/SIFormatter.php @@ -38,6 +38,11 @@ class SIFormatter */ public function getMagnitude(float $value): int { + //Check for zero, as log10(0) is undefined/gives -infinity, which leads to casting issues in PHP8.5+ + if (0.0 === $value) { + return 0; + } + return (int) floor(log10(abs($value))); } diff --git a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php index d09f1d05..a655a0df 100644 --- a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php +++ b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php @@ -221,7 +221,7 @@ final class DTOtoEntityConverter $attachment = $this->convertFile($image, $image_type); $attachments_grouped[$attachment->getName()][] = $attachment; - if (count($attachments_grouped[$attachment->getName()] ?? []) > 1) { + if (count($attachments_grouped[$attachment->getName()]) > 1) { $attachment->setName($attachment->getName() . ' (' . (count($attachments_grouped[$attachment->getName()]) + 1) . ')'); } @@ -236,7 +236,7 @@ final class DTOtoEntityConverter $attachment = $this->convertFile($datasheet, $datasheet_type); $attachments_grouped[$attachment->getName()][] = $attachment; - if (count($attachments_grouped[$attachment->getName()] ?? []) > 1) { + if (count($attachments_grouped[$attachment->getName()]) > 1) { $attachment->setName($attachment->getName() . ' (' . (count($attachments_grouped[$attachment->getName()])) . ')'); } @@ -357,4 +357,4 @@ final class DTOtoEntityConverter return $tmp; } -} \ No newline at end of file +} diff --git a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php index 51f460e4..423b5244 100644 --- a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem\Providers; use App\Entity\Parts\ManufacturingStatus; +use App\Exceptions\OAuthReconnectRequiredException; use App\Services\InfoProviderSystem\DTOs\FileDTO; use App\Services\InfoProviderSystem\DTOs\ParameterDTO; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; @@ -117,12 +118,22 @@ class DigikeyProvider implements InfoProviderInterface ]; //$response = $this->digikeyClient->request('POST', '/Search/v3/Products/Keyword', [ - $response = $this->digikeyClient->request('POST', '/products/v4/search/keyword', [ - 'json' => $request, - 'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME) - ]); + try { + $response = $this->digikeyClient->request('POST', '/products/v4/search/keyword', [ + 'json' => $request, + 'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME) + ]); + + $response_array = $response->toArray(); + } catch (\InvalidArgumentException $exception) { + //Check if the exception was caused by an invalid or expired token + if (str_contains($exception->getMessage(), 'access_token')) { + throw OAuthReconnectRequiredException::forProvider($this->getProviderKey()); + } + + throw $exception; + } - $response_array = $response->toArray(); $result = []; @@ -150,9 +161,18 @@ class DigikeyProvider implements InfoProviderInterface public function getDetails(string $id): PartDetailDTO { - $response = $this->digikeyClient->request('GET', '/products/v4/search/' . urlencode($id) . '/productdetails', [ - 'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME) - ]); + try { + $response = $this->digikeyClient->request('GET', '/products/v4/search/' . urlencode($id) . '/productdetails', [ + 'auth_bearer' => $this->authTokenManager->getAlwaysValidTokenString(self::OAUTH_APP_NAME) + ]); + } catch (\InvalidArgumentException $exception) { + //Check if the exception was caused by an invalid or expired token + if (str_contains($exception->getMessage(), 'access_token')) { + throw OAuthReconnectRequiredException::forProvider($this->getProviderKey()); + } + + throw $exception; + } $response_array = $response->toArray(); $product = $response_array['Product']; diff --git a/src/Services/ProjectSystem/ProjectBuildHelper.php b/src/Services/ProjectSystem/ProjectBuildHelper.php index 269c7e4c..a541c29d 100644 --- a/src/Services/ProjectSystem/ProjectBuildHelper.php +++ b/src/Services/ProjectSystem/ProjectBuildHelper.php @@ -31,9 +31,9 @@ use App\Services\Parts\PartLotWithdrawAddHelper; /** * @see \App\Tests\Services\ProjectSystem\ProjectBuildHelperTest */ -class ProjectBuildHelper +final readonly class ProjectBuildHelper { - public function __construct(private readonly PartLotWithdrawAddHelper $withdraw_add_helper) + public function __construct(private PartLotWithdrawAddHelper $withdraw_add_helper) { } @@ -63,20 +63,37 @@ class ProjectBuildHelper */ public function getMaximumBuildableCount(Project $project): int { + $bom_entries = $project->getBomEntries(); + if ($bom_entries->isEmpty()) { + return 0; + } $maximum_buildable_count = PHP_INT_MAX; - foreach ($project->getBomEntries() as $bom_entry) { + foreach ($bom_entries as $bom_entry) { //Skip BOM entries without a part (as we can not determine that) if (!$bom_entry->isPartBomEntry()) { continue; } - //The maximum buildable count for the whole project is the minimum of all BOM entries $maximum_buildable_count = min($maximum_buildable_count, $this->getMaximumBuildableCountForBOMEntry($bom_entry)); } - return $maximum_buildable_count; } + /** + * Returns the maximum buildable amount of the given project as string, based on the stock of the used parts in the BOM. + * If the maximum buildable count is infinite, the string '∞' is returned. + * @param Project $project + * @return string + */ + public function getMaximumBuildableCountAsString(Project $project): string + { + $max_count = $this->getMaximumBuildableCount($project); + if ($max_count === PHP_INT_MAX) { + return '∞'; + } + return (string) $max_count; + } + /** * Checks if the given project can be built with the current stock. * This means that the maximum buildable count is greater or equal than the requested $number_of_projects diff --git a/src/Settings/AppSettings.php b/src/Settings/AppSettings.php index 1695638a..42831d08 100644 --- a/src/Settings/AppSettings.php +++ b/src/Settings/AppSettings.php @@ -26,7 +26,7 @@ namespace App\Settings; use App\Settings\BehaviorSettings\BehaviorSettings; use App\Settings\InfoProviderSystem\InfoProviderSettings; use App\Settings\MiscSettings\MiscSettings; -use App\Settings\SystemSettings\AttachmentsSettings; +use App\Settings\SystemSettings\SystemSettings; use Jbtronics\SettingsBundle\Settings\EmbeddedSettings; use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsTrait; @@ -49,4 +49,4 @@ class AppSettings #[EmbeddedSettings()] public ?MiscSettings $miscSettings = null; -} \ No newline at end of file +} diff --git a/src/Settings/BehaviorSettings/BehaviorSettings.php b/src/Settings/BehaviorSettings/BehaviorSettings.php index 1251a097..3053073f 100644 --- a/src/Settings/BehaviorSettings/BehaviorSettings.php +++ b/src/Settings/BehaviorSettings/BehaviorSettings.php @@ -26,8 +26,9 @@ namespace App\Settings\BehaviorSettings; use Jbtronics\SettingsBundle\Settings\EmbeddedSettings; use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Translation\TranslatableMessage as TM; -#[Settings] +#[Settings(label: new TM("settings.behavior"))] class BehaviorSettings { use SettingsTrait; @@ -40,4 +41,4 @@ class BehaviorSettings #[EmbeddedSettings] public ?PartInfoSettings $partInfo = null; -} \ No newline at end of file +} diff --git a/src/Settings/BehaviorSettings/SidebarSettings.php b/src/Settings/BehaviorSettings/SidebarSettings.php index 1266fa47..a1ff6985 100644 --- a/src/Settings/BehaviorSettings/SidebarSettings.php +++ b/src/Settings/BehaviorSettings/SidebarSettings.php @@ -73,4 +73,11 @@ class SidebarSettings */ #[SettingsParameter(label: new TM("settings.behavior.sidebar.rootNodeRedirectsToNewEntity"))] public bool $rootNodeRedirectsToNewEntity = false; -} \ No newline at end of file + + /** + * @var bool Whether to include child nodes in the data structure nodes table, or only show the selected node's parts. + */ + #[SettingsParameter(label: new TM("settings.behavior.sidebar.data_structure_nodes_table_include_children"), + description: new TM("settings.behavior.sidebar.data_structure_nodes_table_include_children.help"))] + public bool $dataStructureNodesTableIncludeChildren = true; +} diff --git a/src/Settings/InfoProviderSystem/InfoProviderSettings.php b/src/Settings/InfoProviderSystem/InfoProviderSettings.php index c223bd88..e6e258f5 100644 --- a/src/Settings/InfoProviderSystem/InfoProviderSettings.php +++ b/src/Settings/InfoProviderSystem/InfoProviderSettings.php @@ -27,8 +27,9 @@ use Jbtronics\SettingsBundle\Settings\EmbeddedSettings; use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Translation\TranslatableMessage as TM; -#[Settings()] +#[Settings(label: new TM("settings.ips"))] class InfoProviderSettings { use SettingsTrait; diff --git a/src/Settings/MiscSettings/MiscSettings.php b/src/Settings/MiscSettings/MiscSettings.php index b8a3a73f..1c304d4a 100644 --- a/src/Settings/MiscSettings/MiscSettings.php +++ b/src/Settings/MiscSettings/MiscSettings.php @@ -25,8 +25,9 @@ namespace App\Settings\MiscSettings; use Jbtronics\SettingsBundle\Settings\EmbeddedSettings; use Jbtronics\SettingsBundle\Settings\Settings; +use Symfony\Component\Translation\TranslatableMessage as TM; -#[Settings] +#[Settings(label: new TM("settings.misc"))] class MiscSettings { #[EmbeddedSettings] @@ -34,4 +35,4 @@ class MiscSettings #[EmbeddedSettings] public ?ExchangeRateSettings $exchangeRate = null; -} \ No newline at end of file +} diff --git a/src/Settings/SystemSettings/LocalizationSettings.php b/src/Settings/SystemSettings/LocalizationSettings.php index 434a4e69..7c83d1ef 100644 --- a/src/Settings/SystemSettings/LocalizationSettings.php +++ b/src/Settings/SystemSettings/LocalizationSettings.php @@ -23,9 +23,12 @@ declare(strict_types=1); namespace App\Settings\SystemSettings; +use App\Form\Type\LanguageMenuEntriesType; use App\Form\Type\LocaleSelectType; use App\Settings\SettingsIcon; use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\ParameterTypes\ArrayType; +use Jbtronics\SettingsBundle\ParameterTypes\StringType; use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; @@ -60,4 +63,14 @@ class LocalizationSettings envVar: "string:BASE_CURRENCY", envVarMode: EnvVarMode::OVERWRITE )] public string $baseCurrency = 'EUR'; -} \ No newline at end of file + + #[SettingsParameter(type: ArrayType::class, + label: new TM("settings.system.localization.language_menu_entries"), + description: new TM("settings.system.localization.language_menu_entries.description"), + options: ['type' => StringType::class], + formType: LanguageMenuEntriesType::class, + formOptions: ['multiple' => true, 'required' => false, 'ordered' => true], + )] + #[Assert\All([new Assert\Locale()])] + public array $languageMenuEntries = []; +} diff --git a/src/Settings/SystemSettings.php b/src/Settings/SystemSettings/SystemSettings.php similarity index 82% rename from src/Settings/SystemSettings.php rename to src/Settings/SystemSettings/SystemSettings.php index 83d00afc..71dd963d 100644 --- a/src/Settings/SystemSettings.php +++ b/src/Settings/SystemSettings/SystemSettings.php @@ -21,17 +21,13 @@ declare(strict_types=1); -namespace App\Settings; +namespace App\Settings\SystemSettings; -use App\Settings\SystemSettings\AttachmentsSettings; -use App\Settings\SystemSettings\CustomizationSettings; -use App\Settings\SystemSettings\HistorySettings; -use App\Settings\SystemSettings\LocalizationSettings; -use App\Settings\SystemSettings\PrivacySettings; use Jbtronics\SettingsBundle\Settings\EmbeddedSettings; use Jbtronics\SettingsBundle\Settings\Settings; +use Symfony\Component\Translation\TranslatableMessage as TM; -#[Settings] +#[Settings(label: new TM("settings.system"))] class SystemSettings { #[EmbeddedSettings()] @@ -48,4 +44,4 @@ class SystemSettings #[EmbeddedSettings()] public ?HistorySettings $history = null; -} \ No newline at end of file +} diff --git a/src/Twig/FormatExtension.php b/src/Twig/FormatExtension.php index 76628ccd..46313aaf 100644 --- a/src/Twig/FormatExtension.php +++ b/src/Twig/FormatExtension.php @@ -82,7 +82,7 @@ final class FormatExtension extends AbstractExtension public function formatBytes(int $bytes, int $precision = 2): string { $size = ['B','kB','MB','GB','TB','PB','EB','ZB','YB']; - $factor = floor((strlen((string) $bytes) - 1) / 3); + $factor = (int) floor((strlen((string) $bytes) - 1) / 3); //We use the real (10 based) SI prefix here return sprintf("%.{$precision}f", $bytes / (1000 ** $factor)) . ' ' . @$size[$factor]; } diff --git a/templates/_turbo_control.html.twig b/templates/_turbo_control.html.twig index 4c178038..90ae8d9a 100644 --- a/templates/_turbo_control.html.twig +++ b/templates/_turbo_control.html.twig @@ -22,9 +22,14 @@
- {% for locale in locale_menu %} + {% set locales = settings_instance('localization').languageMenuEntries %} + {% if locales is empty %} + {% set locales = locale_menu %} + {% endif %} + + {% for locale in locales %} {{ locale|language_name }} ({{ locale|upper }}) {% endfor %} -
\ No newline at end of file + diff --git a/templates/base.html.twig b/templates/base.html.twig index ee79549b..58cccec5 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -66,12 +66,6 @@ {% block javascripts %} {{ encore_entry_script_tags('app') }} {{ encore_entry_script_tags('webauthn_tfa') }} - - {# load translation files for ckeditor #} - {% set two_chars_locale = app.request.locale|default("en")|slice(0,2) %} - {% if two_chars_locale != "en" %} - - {% endif %} {% endblock %} diff --git a/templates/form/permission_layout.html.twig b/templates/form/permission_layout.html.twig index 166147b4..747208dd 100644 --- a/templates/form/permission_layout.html.twig +++ b/templates/form/permission_layout.html.twig @@ -70,18 +70,20 @@ {% endif %} {% if show_presets %} + {# This hidden field is there to ensure that none of the presets is submitted, if a user presses enter #} +
@@ -110,4 +112,4 @@ {% endfor %}
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/helper.twig b/templates/helper.twig index bd1d2aa7..66268a96 100644 --- a/templates/helper.twig +++ b/templates/helper.twig @@ -214,11 +214,11 @@ {% endmacro %} {% macro parameters_table(parameters) %} - +
- + @@ -240,4 +240,4 @@ {% else %} {{ datetime|format_datetime }} {% endif %} -{% endmacro %} \ No newline at end of file +{% endmacro %} diff --git a/templates/label_system/dialog.html.twig b/templates/label_system/dialog.html.twig index 037b549e..b9149aa3 100644 --- a/templates/label_system/dialog.html.twig +++ b/templates/label_system/dialog.html.twig @@ -10,6 +10,9 @@ {% block card_content %} {{ form_start(form) }} + {# Default submit to use when pressing enter. #} + +
{% trans %}specifications.property{% endtrans %}{% trans %}specifications.symbol{% endtrans %}{% trans %}specifications.symbol{% endtrans %} {% trans %}specifications.value{% endtrans %}