diff --git a/.docker/symfony.conf b/.docker/symfony.conf
index 952407e7..1527286c 100644
--- a/.docker/symfony.conf
+++ b/.docker/symfony.conf
@@ -28,7 +28,7 @@
PassEnv APP_ENV APP_DEBUG APP_SECRET
PassEnv TRUSTED_PROXIES TRUSTED_HOSTS LOCK_DSN
PassEnv DATABASE_URL ENFORCE_CHANGE_COMMENTS_FOR
- PassEnv DEFAULT_LANG DEFAULT_TIMEZONE BASE_CURRENCY INSTANCE_NAME ALLOW_ATTACHMENT_DOWNLOADS USE_GRAVATAR MAX_ATTACHMENT_FILE_SIZE DEFAULT_URI
+ PassEnv DEFAULT_LANG DEFAULT_TIMEZONE BASE_CURRENCY INSTANCE_NAME ALLOW_ATTACHMENT_DOWNLOADS USE_GRAVATAR MAX_ATTACHMENT_FILE_SIZE DEFAULT_URI CHECK_FOR_UPDATES
PassEnv MAILER_DSN ALLOW_EMAIL_PW_RESET EMAIL_SENDER_EMAIL EMAIL_SENDER_NAME
PassEnv HISTORY_SAVE_CHANGED_FIELDS HISTORY_SAVE_CHANGED_DATA HISTORY_SAVE_REMOVED_DATA HISTORY_SAVE_NEW_DATA
PassEnv ERROR_PAGE_ADMIN_EMAIL ERROR_PAGE_SHOW_HELP
diff --git a/.env b/.env
index 7b6e2625..9947522e 100644
--- a/.env
+++ b/.env
@@ -44,6 +44,9 @@ DEFAULT_URI="https://partdb.changeme.invalid/"
# Leave this empty, to make all change reasons optional
ENFORCE_CHANGE_COMMENTS_FOR=""
+# Disable that if you do not want that Part-DB connects to GitHub to check for available updates, or if your server can not connect to the internet
+CHECK_FOR_UPDATES=1
+
###################################################################################
# Email settings
###################################################################################
diff --git a/VERSION b/VERSION
index de023c91..bd8bf882 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.7.0-dev
+1.7.0
diff --git a/assets/controllers/elements/datatables/datatables_controller.js b/assets/controllers/elements/datatables/datatables_controller.js
index df0dbbfc..c53db751 100644
--- a/assets/controllers/elements/datatables/datatables_controller.js
+++ b/assets/controllers/elements/datatables/datatables_controller.js
@@ -65,8 +65,13 @@ export default class extends Controller {
localStorage.setItem( this.getStateSaveKey(), JSON.stringify(data) );
}
- stateLoadCallback(settings) {
- const data = JSON.parse( localStorage.getItem(this.getStateSaveKey()) );
+ stateLoadCallback() {
+ const json = localStorage.getItem(this.getStateSaveKey());
+ if(json === null || json === undefined) {
+ return null;
+ }
+
+ const data = JSON.parse(json);
if (data) {
//Do not save the start value (current page), as we want to always start at the first page on a page reload
@@ -90,6 +95,19 @@ export default class extends Controller {
//Add url info, as the one available in the history is not enough, as Turbo may have not changed it yet
settings.url = this.element.dataset.dtUrl;
+ //Add initial_order info to the settings, so that the order on the initial page load is the one saved in the state
+ const saved_state = this.stateLoadCallback();
+ if (saved_state !== null) {
+ const raw_order = saved_state.order;
+
+ settings.initial_order = raw_order.map((order) => {
+ return {
+ column: order[0],
+ dir: order[1]
+ }
+ });
+ }
+
let options = {
colReorder: true,
responsive: true,
@@ -221,4 +239,16 @@ export default class extends Controller {
return this.element.dataset.select ?? false;
}
+ invertSelection() {
+ //Do nothing if the datatable is not selectable
+ if(!this.isSelectable()) {
+ return;
+ }
+
+ //Invert the selected rows on the datatable
+ const selected_rows = this._dt.rows({selected: true});
+ this._dt.rows().select();
+ selected_rows.deselect();
+ }
+
}
diff --git a/assets/controllers/pages/dont_check_quantity_checkbox_controller.js b/assets/controllers/pages/dont_check_quantity_checkbox_controller.js
new file mode 100644
index 00000000..2abd3d77
--- /dev/null
+++ b/assets/controllers/pages/dont_check_quantity_checkbox_controller.js
@@ -0,0 +1,65 @@
+/*
+ * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
+ *
+ * Copyright (C) 2019 - 2022 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 {Controller} from "@hotwired/stimulus";
+
+/**
+ * This controller is used on a checkbox, which toggles the max value of all number input fields
+ */
+export default class extends Controller {
+
+ _checkbox;
+
+ getCheckbox() {
+ if (this._checkbox) {
+ return this._checkbox;
+ }
+
+ //Find the checkbox inside the controller element
+ this._checkbox = this.element.querySelector('input[type="checkbox"]');
+ return this._checkbox;
+ }
+
+ connect() {
+ //Add event listener to the checkbox
+ this.getCheckbox().addEventListener('change', this.toggleInputLimits.bind(this));
+ }
+
+ toggleInputLimits() {
+ //Find all input fields with the data-toggle-input-limits-target="max"
+ const inputFields = document.querySelectorAll("input[type='number']");
+
+ inputFields.forEach((inputField) => {
+ //Ensure that the input field has either a max or a data-max attribute
+ if (!inputField.hasAttribute('max') && !inputField.hasAttribute('data-max')) {
+ return;
+ }
+
+ //If the checkbox is checked, rename the max attribute to data-max
+ if (this.getCheckbox().checked) {
+ inputField.setAttribute('data-max', inputField.getAttribute('max'));
+ inputField.removeAttribute('max');
+ } else {
+ //If the checkbox is not checked, rename the data-max attribute back to max
+ inputField.setAttribute('max', inputField.getAttribute('data-max'));
+ inputField.removeAttribute('data-max');
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/assets/css/app/tables.css b/assets/css/app/tables.css
index 276272b7..bc097726 100644
--- a/assets/css/app/tables.css
+++ b/assets/css/app/tables.css
@@ -91,7 +91,7 @@ th.select-checkbox {
/** Fix datatables select-checkbox position */
table.dataTable tr.selected td.select-checkbox:after
{
- margin-top: -25px !important;
+ margin-top: -20px !important;
}
diff --git a/assets/js/lib/datatables.js b/assets/js/lib/datatables.js
index 99675ae1..8c76d89d 100644
--- a/assets/js/lib/datatables.js
+++ b/assets/js/lib/datatables.js
@@ -47,7 +47,8 @@
method: config.method,
data: {
_dt: config.name,
- _init: true
+ _init: true,
+ order: config.initial_order ?? undefined,
}
}).done(function(data) {
var baseState;
diff --git a/composer.json b/composer.json
index ae3f1d3c..4711a111 100644
--- a/composer.json
+++ b/composer.json
@@ -99,7 +99,7 @@
"phpstan/phpstan-strict-rules": "^1.5",
"phpstan/phpstan-symfony": "^1.1.7",
"psalm/plugin-symfony": "^v5.0.1",
- "rector/rector": "^0.17.0",
+ "rector/rector": "^0.18.0",
"roave/security-advisories": "dev-latest",
"symfony/browser-kit": "6.3.*",
"symfony/css-selector": "6.3.*",
@@ -108,7 +108,7 @@
"symfony/phpunit-bridge": "6.3.*",
"symfony/stopwatch": "6.3.*",
"symfony/web-profiler-bundle": "6.3.*",
- "symplify/easy-coding-standard": "^11.0",
+ "symplify/easy-coding-standard": "^12.0",
"vimeo/psalm": "^5.6.0"
},
"suggest": {
diff --git a/composer.lock b/composer.lock
index fa777e8a..d8c07dab 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": "1a2a25bc47002e077096b2aceaee7c7f",
+ "content-hash": "33a669a1ec6b3bb4a92afc79355492fc",
"packages": [
{
"name": "api-platform/core",
@@ -851,16 +851,16 @@
},
{
"name": "doctrine/data-fixtures",
- "version": "1.6.6",
+ "version": "1.6.7",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
- "reference": "4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4"
+ "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4",
- "reference": "4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4",
+ "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/ae4e845decbe177348fdbecd04331f4fb96aa301",
+ "reference": "ae4e845decbe177348fdbecd04331f4fb96aa301",
"shasum": ""
},
"require": {
@@ -870,14 +870,14 @@
},
"conflict": {
"doctrine/dbal": "<2.13",
- "doctrine/orm": "<2.12",
+ "doctrine/orm": "<2.14",
"doctrine/phpcr-odm": "<1.3.0"
},
"require-dev": {
"doctrine/coding-standard": "^11.0",
"doctrine/dbal": "^2.13 || ^3.0",
"doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
- "doctrine/orm": "^2.12",
+ "doctrine/orm": "^2.14",
"ext-sqlite3": "*",
"phpstan/phpstan": "^1.5",
"phpunit/phpunit": "^8.5 || ^9.5 || ^10.0",
@@ -913,7 +913,7 @@
],
"support": {
"issues": "https://github.com/doctrine/data-fixtures/issues",
- "source": "https://github.com/doctrine/data-fixtures/tree/1.6.6"
+ "source": "https://github.com/doctrine/data-fixtures/tree/1.6.7"
},
"funding": [
{
@@ -929,20 +929,20 @@
"type": "tidelift"
}
],
- "time": "2023-04-20T13:08:54+00:00"
+ "time": "2023-08-17T21:15:33+00:00"
},
{
"name": "doctrine/dbal",
- "version": "3.6.5",
+ "version": "3.6.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf"
+ "reference": "63646ffd71d1676d2f747f871be31b7e921c7864"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/96d5a70fd91efdcec81fc46316efc5bf3da17ddf",
- "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864",
+ "reference": "63646ffd71d1676d2f747f871be31b7e921c7864",
"shasum": ""
},
"require": {
@@ -958,10 +958,11 @@
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.1",
- "phpstan/phpstan": "1.10.21",
+ "phpstan/phpstan": "1.10.29",
"phpstan/phpstan-strict-rules": "^1.5",
"phpunit/phpunit": "9.6.9",
"psalm/plugin-phpunit": "0.18.4",
+ "slevomat/coding-standard": "8.13.1",
"squizlabs/php_codesniffer": "3.7.2",
"symfony/cache": "^5.4|^6.0",
"symfony/console": "^4.4|^5.4|^6.0",
@@ -1025,7 +1026,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.6.5"
+ "source": "https://github.com/doctrine/dbal/tree/3.6.6"
},
"funding": [
{
@@ -1041,7 +1042,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-17T09:15:50+00:00"
+ "time": "2023-08-17T05:38:17+00:00"
},
{
"name": "doctrine/deprecations",
@@ -1092,16 +1093,16 @@
},
{
"name": "doctrine/doctrine-bundle",
- "version": "2.10.1",
+ "version": "2.10.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
- "reference": "f9d59c90b6f525dfc2a2064a695cb56e0ab40311"
+ "reference": "f28b1f78de3a2938ff05cfe751233097624cc756"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f9d59c90b6f525dfc2a2064a695cb56e0ab40311",
- "reference": "f9d59c90b6f525dfc2a2064a695cb56e0ab40311",
+ "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f28b1f78de3a2938ff05cfe751233097624cc756",
+ "reference": "f28b1f78de3a2938ff05cfe751233097624cc756",
"shasum": ""
},
"require": {
@@ -1188,7 +1189,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineBundle/issues",
- "source": "https://github.com/doctrine/DoctrineBundle/tree/2.10.1"
+ "source": "https://github.com/doctrine/DoctrineBundle/tree/2.10.2"
},
"funding": [
{
@@ -1204,7 +1205,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-28T07:47:41+00:00"
+ "time": "2023-08-06T09:31:40+00:00"
},
{
"name": "doctrine/doctrine-migrations-bundle",
@@ -1725,16 +1726,16 @@
},
{
"name": "doctrine/orm",
- "version": "2.16.0",
+ "version": "2.16.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
- "reference": "495cd06b9a630f9c38a21ceb249ed008edbe8414"
+ "reference": "597a63a86ca8c5f9d1ec2dc74fe3d1269d43434a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/orm/zipball/495cd06b9a630f9c38a21ceb249ed008edbe8414",
- "reference": "495cd06b9a630f9c38a21ceb249ed008edbe8414",
+ "url": "https://api.github.com/repos/doctrine/orm/zipball/597a63a86ca8c5f9d1ec2dc74fe3d1269d43434a",
+ "reference": "597a63a86ca8c5f9d1ec2dc74fe3d1269d43434a",
"shasum": ""
},
"require": {
@@ -1763,14 +1764,14 @@
"doctrine/annotations": "^1.13 || ^2",
"doctrine/coding-standard": "^9.0.2 || ^12.0",
"phpbench/phpbench": "^0.16.10 || ^1.0",
- "phpstan/phpstan": "~1.4.10 || 1.10.25",
+ "phpstan/phpstan": "~1.4.10 || 1.10.28",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
"psr/log": "^1 || ^2 || ^3",
"squizlabs/php_codesniffer": "3.7.2",
"symfony/cache": "^4.4 || ^5.4 || ^6.0",
"symfony/var-exporter": "^4.4 || ^5.4 || ^6.2",
"symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0",
- "vimeo/psalm": "4.30.0 || 5.13.1"
+ "vimeo/psalm": "4.30.0 || 5.14.1"
},
"suggest": {
"ext-dom": "Provides support for XSD validation for XML mapping files",
@@ -1820,9 +1821,9 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
- "source": "https://github.com/doctrine/orm/tree/2.16.0"
+ "source": "https://github.com/doctrine/orm/tree/2.16.1"
},
- "time": "2023-08-01T12:07:04+00:00"
+ "time": "2023-08-09T13:05:08+00:00"
},
{
"name": "doctrine/persistence",
@@ -2690,16 +2691,16 @@
},
{
"name": "guzzlehttp/promises",
- "version": "2.0.0",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6"
+ "reference": "111166291a0f8130081195ac4556a5587d7f1b5d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
- "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d",
+ "reference": "111166291a0f8130081195ac4556a5587d7f1b5d",
"shasum": ""
},
"require": {
@@ -2753,7 +2754,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.0.0"
+ "source": "https://github.com/guzzle/promises/tree/2.0.1"
},
"funding": [
{
@@ -2769,20 +2770,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-21T13:50:22+00:00"
+ "time": "2023-08-03T15:11:55+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.5.0",
+ "version": "2.6.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "b635f279edd83fc275f822a1188157ffea568ff6"
+ "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
- "reference": "b635f279edd83fc275f822a1188157ffea568ff6",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
+ "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
"shasum": ""
},
"require": {
@@ -2869,7 +2870,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.5.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.6.0"
},
"funding": [
{
@@ -2885,7 +2886,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-17T16:11:26+00:00"
+ "time": "2023-08-03T15:06:02+00:00"
},
{
"name": "imagine/imagine",
@@ -4406,16 +4407,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.16.0",
+ "version": "v4.17.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "19526a33fb561ef417e822e85f08a00db4059c17"
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17",
- "reference": "19526a33fb561ef417e822e85f08a00db4059c17",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
"shasum": ""
},
"require": {
@@ -4456,22 +4457,22 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
},
- "time": "2023-06-25T14:52:30+00:00"
+ "time": "2023-08-13T19:53:39+00:00"
},
{
"name": "nikolaposa/version",
- "version": "4.1.0",
+ "version": "4.1.1",
"source": {
"type": "git",
"url": "https://github.com/nikolaposa/version.git",
- "reference": "0aada6b801962c084ae465f7569397dc2186b6a7"
+ "reference": "f6bdd64be914940529b843a67335d6386d980cec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikolaposa/version/zipball/0aada6b801962c084ae465f7569397dc2186b6a7",
- "reference": "0aada6b801962c084ae465f7569397dc2186b6a7",
+ "url": "https://api.github.com/repos/nikolaposa/version/zipball/f6bdd64be914940529b843a67335d6386d980cec",
+ "reference": "f6bdd64be914940529b843a67335d6386d980cec",
"shasum": ""
},
"require": {
@@ -4488,7 +4489,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "4.1.x-dev"
}
},
"autoload": {
@@ -4517,9 +4518,9 @@
],
"support": {
"issues": "https://github.com/nikolaposa/version/issues",
- "source": "https://github.com/nikolaposa/version/tree/4.1.0"
+ "source": "https://github.com/nikolaposa/version/tree/4.1.1"
},
- "time": "2020-12-12T10:47:10+00:00"
+ "time": "2023-08-04T17:13:40+00:00"
},
{
"name": "nyholm/nsa",
@@ -5649,16 +5650,16 @@
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.7.2",
+ "version": "1.7.3",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "b2fe4d22a5426f38e014855322200b97b5362c0d"
+ "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b2fe4d22a5426f38e014855322200b97b5362c0d",
- "reference": "b2fe4d22a5426f38e014855322200b97b5362c0d",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
+ "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
"shasum": ""
},
"require": {
@@ -5701,22 +5702,22 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.2"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3"
},
- "time": "2023-05-30T18:13:47+00:00"
+ "time": "2023-08-12T11:01:26+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.23.0",
+ "version": "1.23.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "a2b24135c35852b348894320d47b3902a94bc494"
+ "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a2b24135c35852b348894320d47b3902a94bc494",
- "reference": "a2b24135c35852b348894320d47b3902a94bc494",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/846ae76eef31c6d7790fac9bc399ecee45160b26",
+ "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26",
"shasum": ""
},
"require": {
@@ -5748,9 +5749,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.23.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.23.1"
},
- "time": "2023-07-23T22:17:56+00:00"
+ "time": "2023-08-03T16:32:59+00:00"
},
{
"name": "psr/cache",
@@ -6570,7 +6571,7 @@
},
{
"name": "scheb/2fa-backup-code",
- "version": "v6.8.0",
+ "version": "v6.9.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-backup-code.git",
@@ -6613,22 +6614,22 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-backup-code/tree/v6.8.0"
+ "source": "https://github.com/scheb/2fa-backup-code/tree/v6.9.0"
},
"time": "2022-12-10T15:20:09+00:00"
},
{
"name": "scheb/2fa-bundle",
- "version": "v6.8.0",
+ "version": "v6.9.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-bundle.git",
- "reference": "4f8e9e87f90cf50c72b0857ea2b88453cf1d2446"
+ "reference": "98fee6bf6ce17514d8f3772d4c7f86e6f7595a85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/4f8e9e87f90cf50c72b0857ea2b88453cf1d2446",
- "reference": "4f8e9e87f90cf50c72b0857ea2b88453cf1d2446",
+ "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/98fee6bf6ce17514d8f3772d4c7f86e6f7595a85",
+ "reference": "98fee6bf6ce17514d8f3772d4c7f86e6f7595a85",
"shasum": ""
},
"require": {
@@ -6680,13 +6681,13 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-bundle/tree/v6.8.0"
+ "source": "https://github.com/scheb/2fa-bundle/tree/v6.9.0"
},
- "time": "2023-01-26T18:47:22+00:00"
+ "time": "2023-08-05T11:13:58+00:00"
},
{
"name": "scheb/2fa-google-authenticator",
- "version": "v6.8.0",
+ "version": "v6.9.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-google-authenticator.git",
@@ -6731,13 +6732,13 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-google-authenticator/tree/v6.8.0"
+ "source": "https://github.com/scheb/2fa-google-authenticator/tree/v6.9.0"
},
"time": "2022-12-10T15:20:09+00:00"
},
{
"name": "scheb/2fa-trusted-device",
- "version": "v6.8.0",
+ "version": "v6.9.0",
"source": {
"type": "git",
"url": "https://github.com/scheb/2fa-trusted-device.git",
@@ -6782,7 +6783,7 @@
"two-step"
],
"support": {
- "source": "https://github.com/scheb/2fa-trusted-device/tree/v6.8.0"
+ "source": "https://github.com/scheb/2fa-trusted-device/tree/v6.9.0"
},
"time": "2023-04-01T11:20:00+00:00"
},
@@ -8587,16 +8588,16 @@
},
{
"name": "symfony/flex",
- "version": "v2.3.1",
+ "version": "v2.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
- "reference": "3c9c3424efdafe33e0e3cfb5e87e50b34711fedf"
+ "reference": "9c402af768c6c9f8126a9ffa192ecf7c16581e35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/flex/zipball/3c9c3424efdafe33e0e3cfb5e87e50b34711fedf",
- "reference": "3c9c3424efdafe33e0e3cfb5e87e50b34711fedf",
+ "url": "https://api.github.com/repos/symfony/flex/zipball/9c402af768c6c9f8126a9ffa192ecf7c16581e35",
+ "reference": "9c402af768c6c9f8126a9ffa192ecf7c16581e35",
"shasum": ""
},
"require": {
@@ -8632,7 +8633,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
- "source": "https://github.com/symfony/flex/tree/v2.3.1"
+ "source": "https://github.com/symfony/flex/tree/v2.3.3"
},
"funding": [
{
@@ -8648,7 +8649,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-27T07:38:25+00:00"
+ "time": "2023-08-04T09:02:35+00:00"
},
{
"name": "symfony/form",
@@ -14151,16 +14152,16 @@
},
{
"name": "web-token/jwt-core",
- "version": "3.2.7",
+ "version": "3.2.8",
"source": {
"type": "git",
"url": "https://github.com/web-token/jwt-core.git",
- "reference": "db58b6ebbe1a7d5869688e989b1cf110c6ab888f"
+ "reference": "2bc6e99a60910d0f495682acd8b23d3eef9865a3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/web-token/jwt-core/zipball/db58b6ebbe1a7d5869688e989b1cf110c6ab888f",
- "reference": "db58b6ebbe1a7d5869688e989b1cf110c6ab888f",
+ "url": "https://api.github.com/repos/web-token/jwt-core/zipball/2bc6e99a60910d0f495682acd8b23d3eef9865a3",
+ "reference": "2bc6e99a60910d0f495682acd8b23d3eef9865a3",
"shasum": ""
},
"require": {
@@ -14215,7 +14216,7 @@
"symfony"
],
"support": {
- "source": "https://github.com/web-token/jwt-core/tree/3.2.7"
+ "source": "https://github.com/web-token/jwt-core/tree/3.2.8"
},
"funding": [
{
@@ -14223,11 +14224,11 @@
"type": "patreon"
}
],
- "time": "2023-02-02T17:35:17+00:00"
+ "time": "2023-08-23T09:49:09+00:00"
},
{
"name": "web-token/jwt-signature",
- "version": "3.2.7",
+ "version": "3.2.8",
"source": {
"type": "git",
"url": "https://github.com/web-token/jwt-signature.git",
@@ -14292,7 +14293,7 @@
"symfony"
],
"support": {
- "source": "https://github.com/web-token/jwt-signature/tree/3.2.7"
+ "source": "https://github.com/web-token/jwt-signature/tree/3.2.8"
},
"funding": [
{
@@ -15386,16 +15387,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.10.26",
+ "version": "1.10.30",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "5d660cbb7e1b89253a47147ae44044f49832351f"
+ "reference": "2910afdd3fe33e5afd71c09f3fb0d0845b48c410"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5d660cbb7e1b89253a47147ae44044f49832351f",
- "reference": "5d660cbb7e1b89253a47147ae44044f49832351f",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2910afdd3fe33e5afd71c09f3fb0d0845b48c410",
+ "reference": "2910afdd3fe33e5afd71c09f3fb0d0845b48c410",
"shasum": ""
},
"require": {
@@ -15444,20 +15445,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-19T12:44:37+00:00"
+ "time": "2023-08-22T13:48:25+00:00"
},
{
"name": "phpstan/phpstan-doctrine",
- "version": "1.3.40",
+ "version": "1.3.42",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-doctrine.git",
- "reference": "f741919a720af6f84249abc62befeb15eee7bc88"
+ "reference": "e4678fa1055bfd7fad052506b422aeae35fc6f63"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/f741919a720af6f84249abc62befeb15eee7bc88",
- "reference": "f741919a720af6f84249abc62befeb15eee7bc88",
+ "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/e4678fa1055bfd7fad052506b422aeae35fc6f63",
+ "reference": "e4678fa1055bfd7fad052506b422aeae35fc6f63",
"shasum": ""
},
"require": {
@@ -15485,8 +15486,8 @@
"nesbot/carbon": "^2.49",
"nikic/php-parser": "^4.13.2",
"php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.3.13",
+ "phpstan/phpstan-strict-rules": "^1.5.1",
"phpunit/phpunit": "^9.5.10",
"ramsey/uuid-doctrine": "^1.5.0",
"symfony/cache": "^4.4.35"
@@ -15512,9 +15513,9 @@
"description": "Doctrine extensions for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-doctrine/issues",
- "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.40"
+ "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.3.42"
},
- "time": "2023-05-11T11:26:04+00:00"
+ "time": "2023-08-09T08:21:24+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
@@ -15703,16 +15704,16 @@
},
{
"name": "rector/rector",
- "version": "0.17.7",
+ "version": "0.18.0",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "0e76101aa329911b7fec43106aac5843a978b209"
+ "reference": "758ada29b5c80d933f906735d3026520390a2a1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/0e76101aa329911b7fec43106aac5843a978b209",
- "reference": "0e76101aa329911b7fec43106aac5843a978b209",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/758ada29b5c80d933f906735d3026520390a2a1d",
+ "reference": "758ada29b5c80d933f906735d3026520390a2a1d",
"shasum": ""
},
"require": {
@@ -15729,11 +15730,6 @@
"bin/rector"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "0.15-dev"
- }
- },
"autoload": {
"files": [
"bootstrap.php"
@@ -15752,7 +15748,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/0.17.7"
+ "source": "https://github.com/rectorphp/rector/tree/0.18.0"
},
"funding": [
{
@@ -15760,7 +15756,7 @@
"type": "github"
}
],
- "time": "2023-07-23T20:44:23+00:00"
+ "time": "2023-08-17T12:53:22+00:00"
},
{
"name": "roave/security-advisories",
@@ -15768,17 +15764,17 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
- "reference": "69dafab8a5dffa4d6a4d6dab1ebadf48aca449c7"
+ "reference": "9160fb2612003a99a28abbd588519d5ab3a77024"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/69dafab8a5dffa4d6a4d6dab1ebadf48aca449c7",
- "reference": "69dafab8a5dffa4d6a4d6dab1ebadf48aca449c7",
+ "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9160fb2612003a99a28abbd588519d5ab3a77024",
+ "reference": "9160fb2612003a99a28abbd588519d5ab3a77024",
"shasum": ""
},
"conflict": {
"3f/pygmentize": "<1.2",
- "admidio/admidio": "<4.2.10",
+ "admidio/admidio": "<4.2.11",
"adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3",
"aheinze/cockpit": "<2.2",
"aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5",
@@ -15799,9 +15795,10 @@
"arc/web": "<3",
"area17/twill": "<1.2.5|>=2,<2.5.3",
"artesaos/seotools": "<0.17.2",
- "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99",
+ "asymmetricrypt/asymmetricrypt": "<9.9.99",
"athlon1600/php-proxy": "<=5.1",
"athlon1600/php-proxy-app": "<=3",
+ "austintoddj/canvas": "<=3.4.2",
"automad/automad": "<1.8",
"awesome-support/awesome-support": "<=6.0.7",
"aws/aws-sdk-php": ">=3,<3.2.1",
@@ -15817,7 +15814,7 @@
"baserproject/basercms": "<4.7.5",
"bassjobsen/bootstrap-3-typeahead": ">4.0.2",
"bigfork/silverstripe-form-capture": ">=3,<3.1.1",
- "billz/raspap-webgui": "<2.8.9",
+ "billz/raspap-webgui": "<=2.9.2",
"bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3",
"bmarshall511/wordpress_zero_spam": "<5.2.13",
"bolt/bolt": "<3.7.2",
@@ -15831,40 +15828,41 @@
"bugsnag/bugsnag-laravel": ">=2,<2.0.2",
"bytefury/crater": "<6.0.2",
"cachethq/cachet": "<2.5.1",
- "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10|= 1.3.7|>=4.1,<4.1.4",
+ "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10",
"cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10",
"cardgate/magento2": "<2.0.33",
"cardgate/woocommerce": "<=3.1.15",
"cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
"cartalyst/sentry": "<=2.1.6",
"catfan/medoo": "<1.7.5",
- "centreon/centreon": "<22.10-beta.1",
+ "centreon/centreon": "<22.10.0.0-beta1",
"cesnet/simplesamlphp-module-proxystatistics": "<3.1",
- "cockpit-hq/cockpit": "<2.6",
+ "chriskacerguis/codeigniter-restserver": "<=2.7.1",
+ "cockpit-hq/cockpit": "<=2.6.3",
"codeception/codeception": "<3.1.3|>=4,<4.1.22",
- "codeigniter/framework": "<=3.0.6",
+ "codeigniter/framework": "<3.1.9",
"codeigniter4/framework": "<4.3.5",
- "codeigniter4/shield": "<1-beta.4|= 1.0.0-beta",
+ "codeigniter4/shield": "<1.0.0.0-beta4",
"codiad/codiad": "<=2.8.4",
- "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5",
- "concrete5/concrete5": "<9.2|>= 9.0.0RC1, < 9.1.3",
+ "composer/composer": "<1.10.26|>=2,<2.2.12|>=2.3,<2.3.5",
+ "concrete5/concrete5": "<9.2",
"concrete5/core": "<8.5.8|>=9,<9.1",
"contao-components/mediaelement": ">=2.14.2,<2.21.1",
"contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4",
"contao/core": ">=2,<3.5.39",
- "contao/core-bundle": "<4.9.42|>=4.10,<4.13.28|>=5,<5.1.10|= 4.10.0",
+ "contao/core-bundle": "<4.9.42|>=4.10,<4.13.28|>=5,<5.1.10",
"contao/listing-bundle": ">=4,<4.4.8",
"contao/managed-edition": "<=1.5",
"cosenary/instagram": "<=2.3",
- "craftcms/cms": "<=4.4.9|>= 4.0.0-RC1, < 4.4.12|>= 4.0.0-RC1, <= 4.4.5|>= 4.0.0-RC1, <= 4.4.6|>= 4.0.0-RC1, < 4.4.6|>= 4.0.0-RC1, < 4.3.7|>= 4.0.0-RC1, < 4.2.1",
- "croogo/croogo": "<3.0.7",
+ "craftcms/cms": "<=4.4.14",
+ "croogo/croogo": "<4",
"cuyz/valinor": "<0.12",
"czproject/git-php": "<4.0.3",
"darylldoyle/safe-svg": "<1.9.10",
"datadog/dd-trace": ">=0.30,<0.30.2",
"david-garcia/phpwhois": "<=4.3.1",
"dbrisinajumi/d2files": "<1",
- "dcat/laravel-admin": "<=2.1.3-beta",
+ "dcat/laravel-admin": "<=2.1.3.0-beta",
"derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
"derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1",
"desperado/xml-bundle": "<=0.1.7",
@@ -15878,14 +15876,14 @@
"doctrine/mongodb-odm": ">=1,<1.0.2",
"doctrine/mongodb-odm-bundle": ">=2,<3.0.1",
"doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4",
- "dolibarr/dolibarr": "<17.0.1|= 12.0.5|>= 3.3.beta1, < 13.0.2",
- "dompdf/dompdf": "<2.0.2|= 2.0.2",
+ "dolibarr/dolibarr": "<17.0.1",
+ "dompdf/dompdf": "<2.0.2|==2.0.2",
"drupal/core": ">=7,<7.96|>=8,<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8",
- "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4",
+ "drupal/drupal": ">=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4",
"dweeves/magmi": "<=0.7.24",
"ecodev/newsletter": "<=4",
"ectouch/ectouch": "<=2.7.2",
- "elefant/cms": "<1.3.13",
+ "elefant/cms": "<2.0.7",
"elgg/elgg": "<3.3.24|>=4,<4.0.5",
"encore/laravel-admin": "<=1.8.19",
"endroid/qr-code-bundle": "<3.4.2",
@@ -15893,26 +15891,26 @@
"erusev/parsedown": "<1.7.2",
"ether/logs": "<3.0.4",
"exceedone/exment": "<4.4.3|>=5,<5.0.3",
- "exceedone/laravel-admin": "= 3.0.0|<2.2.3",
- "ezsystems/demobundle": ">=5.4,<5.4.6.1",
+ "exceedone/laravel-admin": "<2.2.3|==3",
+ "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev",
"ezsystems/ez-support-tools": ">=2.2,<2.2.3",
- "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1",
- "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1",
+ "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.26",
"ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1",
- "ezsystems/ezplatform-graphql": ">=1-rc.1,<1.0.13|>=2-beta.1,<2.3.12",
- "ezsystems/ezplatform-kernel": "<1.2.5.1|>=1.3,<1.3.26",
+ "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12",
+ "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.26",
"ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8",
- "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1",
+ "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev",
"ezsystems/ezplatform-user": ">=1,<1.0.1",
- "ezsystems/ezpublish-kernel": "<6.13.8.2|>=7,<7.5.30",
- "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1",
+ "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.30",
+ "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1",
"ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3",
- "ezsystems/repository-forms": ">=2.3,<2.3.2.1|>=2.5,<2.5.15",
+ "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15",
"ezyang/htmlpurifier": "<4.1.1",
"facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2",
- "facturascripts/facturascripts": "<=2022.8",
+ "facturascripts/facturascripts": "<=2022.08",
"feehi/cms": "<=2.1.1",
"feehi/feehicms": "<=2.1.1",
"fenom/fenom": "<=2.12.1",
@@ -15920,13 +15918,13 @@
"firebase/php-jwt": "<6",
"fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2",
"fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6",
- "flarum/core": "<1.7",
- "flarum/framework": "<=0.1-beta.7.1",
+ "flarum/core": "<1.8",
+ "flarum/framework": "<1.8",
"flarum/mentions": "<1.6.3",
- "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15",
- "flarum/tags": "<=0.1-beta.13",
+ "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15",
+ "flarum/tags": "<=0.1.0.0-beta13",
"fluidtypo3/vhs": "<5.1.1",
- "fof/byobu": ">=0.3-beta.2,<1.1.7",
+ "fof/byobu": ">=0.3.0.0-beta2,<1.1.7",
"fof/upload": "<1.2.3",
"fooman/tcpdf": "<6.2.22",
"forkcms/forkcms": "<5.11.1",
@@ -15944,11 +15942,12 @@
"gaoming13/wechat-php-sdk": "<=1.10.2",
"genix/cms": "<=1.1.11",
"getgrav/grav": "<=1.7.42.1",
- "getkirby/cms": "= 3.8.0|<3.5.8.2|>=3.6,<3.6.6.2|>=3.7,<3.7.5.1",
+ "getkirby/cms": "<3.5.8.3-dev|>=3.6,<3.6.6.3-dev|>=3.7,<3.7.5.2-dev|>=3.8,<3.8.4.1-dev|>=3.9,<3.9.6",
"getkirby/kirby": "<=2.5.12",
"getkirby/panel": "<2.5.14",
"getkirby/starterkit": "<=3.7.0.2",
"gilacms/gila": "<=1.11.4",
+ "gleez/cms": "<=1.2",
"globalpayments/php-sdk": "<2",
"gogentooss/samlbase": "<1.2.7",
"google/protobuf": "<3.15",
@@ -15960,7 +15959,7 @@
"guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5",
"haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2",
"harvesthq/chosen": "<1.8.7",
- "helloxz/imgurl": "= 2.31|<=2.31",
+ "helloxz/imgurl": "<=2.31",
"hhxsv5/laravel-s": "<3.7.36",
"hillelcoren/invoice-ninja": "<5.3.35",
"himiklab/yii2-jqgrid-widget": "<1.0.8",
@@ -15991,12 +15990,13 @@
"jackalope/jackalope-doctrine-dbal": "<1.7.4",
"james-heinrich/getid3": "<1.9.21",
"jasig/phpcas": "<1.3.3",
+ "jcbrand/converse.js": "<3.3.3",
"joomla/archive": "<1.1.12|>=2,<2.0.1",
"joomla/filesystem": "<1.6.2|>=2,<2.0.1",
"joomla/filter": "<1.4.4|>=2,<2.0.1",
"joomla/framework": ">=2.5.4,<=3.8.12",
"joomla/input": ">=2,<2.0.2",
- "joomla/joomla-cms": ">=3,<3.9.12",
+ "joomla/joomla-cms": "<3.9.12",
"joomla/session": "<1.3.1",
"joyqi/hyper-down": "<=2.4.27",
"jsdecena/laracom": "<2.0.9",
@@ -16009,23 +16009,24 @@
"kitodo/presentation": "<3.2.3|>=3.3,<3.3.4",
"klaviyo/magento2-extension": ">=1,<3",
"knplabs/knp-snappy": "<1.4.2",
+ "kohana/core": "<3.3.3",
"krayin/laravel-crm": "<1.2.2",
"kreait/firebase-php": ">=3.2,<3.8.1",
"la-haute-societe/tcpdf": "<6.2.22",
- "laminas/laminas-diactoros": "<2.18.1|>=2.24,<2.24.2|>=2.25,<2.25.2|= 2.23.0|= 2.22.0|= 2.21.0|= 2.20.0|= 2.19.0",
+ "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2",
"laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1",
"laminas/laminas-http": "<2.14.2",
"laravel/fortify": "<1.11.1",
"laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75",
"laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10",
"latte/latte": "<2.10.8",
- "lavalite/cms": "= 9.0.0|<=9",
+ "lavalite/cms": "<=9",
"lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5",
"league/commonmark": "<0.18.3",
"league/flysystem": "<1.1.4|>=2,<2.1.1",
- "league/oauth2-server": ">=8.3.2,<8.5.3",
+ "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3",
"lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3",
- "librenms/librenms": "<22.10",
+ "librenms/librenms": "<2017.08.18",
"liftkit/database": "<2.13.2",
"limesurvey/limesurvey": "<3.27.19",
"livehelperchat/livehelperchat": "<=3.91",
@@ -16033,15 +16034,15 @@
"lms/routes": "<2.1.1",
"localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2",
"luyadev/yii-helpers": "<1.2.1",
- "magento/community-edition": "= 2.4.0|<=2.4",
- "magento/magento1ce": "<1.9.4.3",
- "magento/magento1ee": ">=1,<1.14.4.3",
- "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2",
+ "magento/community-edition": "<=2.4",
+ "magento/magento1ce": "<1.9.4.3-dev",
+ "magento/magento1ee": ">=1,<1.14.4.3-dev",
+ "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2",
"maikuolan/phpmussel": ">=1,<1.6",
"mantisbt/mantisbt": "<=2.25.5",
"marcwillmann/turn": "<0.3.3",
"matyhtf/framework": "<3.0.6",
- "mautic/core": "<4.3|= 2.13.1",
+ "mautic/core": "<4.3",
"mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35",
"mediawiki/matomo": "<2.4.3",
"melisplatform/melis-asset-manager": "<5.0.1",
@@ -16049,20 +16050,20 @@
"melisplatform/melis-front": "<5.0.1",
"mezzio/mezzio-swoole": "<3.7|>=4,<4.3",
"mgallegos/laravel-jqgrid": "<=1.3",
- "microweber/microweber": "<=1.3.4|= 1.1.18",
+ "microweber/microweber": "<=1.3.4",
"miniorange/miniorange-saml": "<1.4.3",
"mittwald/typo3_forum": "<1.2.1",
"mobiledetect/mobiledetectlib": "<2.8.32",
- "modx/revolution": "<2.8|<= 2.8.3-pl",
+ "modx/revolution": "<=2.8.3.0-patch",
"mojo42/jirafeau": "<4.4",
"monolog/monolog": ">=1.8,<1.12",
- "moodle/moodle": "<4.2-rc.2|= 3.4.3|= 3.5|= 3.7|= 3.9|= 3.8|= 4.2.0|= 3.11",
+ "moodle/moodle": "<4.2.0.0-RC2-dev|==4.2",
"movim/moxl": ">=0.8,<=0.10",
"mpdf/mpdf": "<=7.1.7",
"mustache/mustache": ">=2,<2.14.1",
"namshi/jose": "<2.2",
"neoan3-apps/template": "<1.1.1",
- "neorazorx/facturascripts": "<2022.4",
+ "neorazorx/facturascripts": "<2022.04",
"neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6",
"neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3",
"neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2",
@@ -16073,13 +16074,13 @@
"nilsteampassnet/teampass": "<3.0.10",
"notrinos/notrinos-erp": "<=0.7",
"noumo/easyii": "<=0.9",
- "nukeviet/nukeviet": "<4.5.2",
+ "nukeviet/nukeviet": "<4.5.02",
"nyholm/psr7": "<1.6.1",
"nystudio107/craft-seomatic": "<3.4.12",
"nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1",
"october/backend": "<1.1.2",
- "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469",
- "october/october": "<1.0.466|>=2.1,<2.1.12",
+ "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1",
+ "october/october": "<=3.4.4",
"october/rain": "<1.0.472|>=1.1,<1.1.2",
"october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66",
"onelogin/php-saml": "<2.10.4",
@@ -16089,13 +16090,14 @@
"openid/php-openid": "<2.3",
"openmage/magento-lts": "<19.4.22|>=20,<20.0.19",
"opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2",
- "orchid/platform": ">=9,<9.4.4|>=14-alpha.4,<14.5",
+ "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5",
"oro/commerce": ">=4.1,<5.0.6",
"oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7",
"oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8",
+ "oxid-esales/oxideshop-ce": "<4.5",
"packbackbooks/lti-1-3-php-library": "<5",
"padraic/humbug_get_contents": "<1.1.2",
- "pagarme/pagarme-php": ">=0,<3",
+ "pagarme/pagarme-php": "<3",
"pagekit/pagekit": "<=1.0.18",
"paragonie/random_compat": "<2",
"passbolt/passbolt_api": "<2.11",
@@ -16124,33 +16126,35 @@
"phpxmlrpc/phpxmlrpc": "<4.9.2",
"pi/pi": "<=2.5",
"pimcore/admin-ui-classic-bundle": "<1.0.3",
- "pimcore/customer-management-framework-bundle": "<3.4.1",
+ "pimcore/customer-management-framework-bundle": "<3.4.2",
"pimcore/data-hub": "<1.2.4",
"pimcore/perspective-editor": "<1.5.1",
- "pimcore/pimcore": "<10.6.4",
+ "pimcore/pimcore": "<10.6.8",
"pixelfed/pixelfed": "<=0.11.4",
"pocketmine/bedrock-protocol": "<8.0.2",
- "pocketmine/pocketmine-mp": "<4.22.3|>=5,<5.2.1|< 4.18.0-ALPHA2|>= 4.0.0-BETA5, < 4.4.2",
+ "pocketmine/pocketmine-mp": "<4.22.3|>=5,<5.2.1",
"pressbooks/pressbooks": "<5.18",
"prestashop/autoupgrade": ">=4,<4.10.1",
"prestashop/blockwishlist": ">=2,<2.1.1",
"prestashop/contactform": ">=1.0.1,<4.3",
"prestashop/gamification": "<2.3.2",
- "prestashop/prestashop": "<8.0.4",
+ "prestashop/prestashop": "<=8.1",
"prestashop/productcomments": "<5.0.2",
"prestashop/ps_emailsubscription": "<2.6.1",
"prestashop/ps_facetedsearch": "<3.4.1",
"prestashop/ps_linklist": "<3.1",
"privatebin/privatebin": "<1.4",
"processwire/processwire": "<=3.0.200",
- "propel/propel": ">=2-alpha.1,<=2-alpha.7",
+ "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7",
"propel/propel1": ">=1,<=1.7.1",
"pterodactyl/panel": "<1.7",
+ "ptheofan/yii2-statemachine": ">=2",
"ptrofimov/beanstalk_console": "<1.7.14",
"pusher/pusher-php-server": "<2.2.1",
- "pwweb/laravel-core": "<=0.3.6-beta",
+ "pwweb/laravel-core": "<=0.3.6.0-beta",
"pyrocms/pyrocms": "<=3.9.1",
"rainlab/debugbar-plugin": "<3.1",
+ "rainlab/user-plugin": "<=1.4.5",
"rankmath/seo-by-rank-math": "<=1.0.95",
"rap2hpoutre/laravel-log-viewer": "<0.13",
"react/http": ">=0.7,<1.9",
@@ -16164,7 +16168,7 @@
"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.7.11|>=1.8,<1.8.9",
- "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11",
+ "scheb/two-factor-bundle": "<3.26|>=4,<4.11",
"sensiolabs/connect": "<4.2.3",
"serluck/phpwhois": "<=4.2.6",
"sfroemken/url_redirect": "<=1.2.1",
@@ -16177,13 +16181,13 @@
"shopxo/shopxo": "<2.2.6",
"showdoc/showdoc": "<2.10.4",
"silverstripe-australia/advancedreports": ">=1,<=2",
- "silverstripe/admin": "<1.12.7",
+ "silverstripe/admin": "<1.13.6",
"silverstripe/assets": ">=1,<1.11.1",
"silverstripe/cms": "<4.11.3",
"silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1",
"silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
- "silverstripe/framework": "<4.12.5",
- "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3|= 4.0.0-alpha1",
+ "silverstripe/framework": "<4.13.14|>=5,<5.0.13",
+ "silverstripe/graphql": "<3.5.2|>=4.0.0.0-alpha1,<4.0.0.0-alpha2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3",
"silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1",
"silverstripe/recipe-cms": ">=4.5,<4.5.3",
"silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1",
@@ -16194,7 +16198,7 @@
"silverstripe/userforms": "<3",
"silverstripe/versioned-admin": ">=1,<1.11.1",
"simple-updates/phpwhois": "<=1",
- "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4",
+ "simplesamlphp/saml2": "<1.15.4|>=2,<2.3.8|>=3,<3.1.4",
"simplesamlphp/simplesamlphp": "<1.18.6",
"simplesamlphp/simplesamlphp-module-infocard": "<1.0.1",
"simplesamlphp/simplesamlphp-module-openid": "<1",
@@ -16204,8 +16208,9 @@
"sjbr/sr-freecap": "<=2.5.2",
"slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1",
"slim/slim": "<2.6",
+ "slub/slub-events": "<3.0.3",
"smarty/smarty": "<3.1.48|>=4,<4.3.1",
- "snipe/snipe-it": "<=6.0.14|>= 6.0.0-RC-1, <= 6.0.0-RC-5",
+ "snipe/snipe-it": "<=6.0.14",
"socalnick/scn-social-auth": "<1.15.2",
"socialiteproviders/steam": "<1.1",
"spatie/browsershot": "<3.57.4",
@@ -16213,14 +16218,14 @@
"spoon/library": "<1.4.1",
"spoonity/tcpdf": "<6.2.22",
"squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1",
- "ssddanbrown/bookstack": "<22.2.3",
+ "ssddanbrown/bookstack": "<22.02.3",
"statamic/cms": "<4.10",
- "stormpath/sdk": ">=0,<9.9.99",
+ "stormpath/sdk": "<9.9.99",
"studio-42/elfinder": "<2.1.62",
"subhh/libconnect": "<7.0.8|>=8,<8.1",
"subrion/cms": "<=4.2.1",
"sukohi/surpass": "<1",
- "sulu/sulu": "= 2.4.0-RC1|<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8",
+ "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10",
"sumocoders/framework-user-bundle": "<1.4",
"swag/paypal": "<5.4.4",
"swiftmailer/swiftmailer": ">=4,<5.4.5",
@@ -16239,7 +16244,7 @@
"symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
"symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4",
"symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1",
- "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3|= 6.0.3|= 5.4.3|= 5.3.14",
+ "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3",
"symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7",
"symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6",
"symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
@@ -16257,27 +16262,28 @@
"symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8",
"symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2",
"symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12",
- "symfony/symfony": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6",
+ "symfony/symfony": "<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6",
"symfony/translation": ">=2,<2.0.17",
"symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
"symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8",
"symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4",
"symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7",
- "t3/dce": ">=2.2,<2.6.2",
+ "t3/dce": "<0.11.5|>=2.2,<2.6.2",
"t3g/svg-sanitizer": "<1.0.3",
"tastyigniter/tastyigniter": "<3.3",
"tcg/voyager": "<=1.4",
"tecnickcom/tcpdf": "<6.2.22",
"terminal42/contao-tablelookupwizard": "<3.3.5",
"thelia/backoffice-default-template": ">=2.1,<2.1.2",
- "thelia/thelia": ">=2.1-beta.1,<2.1.3",
+ "thelia/thelia": ">=2.1,<2.1.3",
"theonedemon/phpwhois": "<=4.2.5",
"thinkcmf/thinkcmf": "<=5.1.7",
- "thorsten/phpmyfaq": "<3.2-beta.2",
+ "thorsten/phpmyfaq": "<3.2.0.0-beta2",
+ "tikiwiki/tiki-manager": "<=17.1",
"tinymce/tinymce": "<5.10.7|>=6,<6.3.1",
"tinymighty/wiki-seo": "<1.2.2",
- "titon/framework": ">=0,<9.9.99",
- "tobiasbg/tablepress": "<= 2.0-RC1",
+ "titon/framework": "<9.9.99",
+ "tobiasbg/tablepress": "<=2.0.0.0-RC1",
"topthink/framework": "<6.0.14",
"topthink/think": "<=6.1.1",
"topthink/thinkphp": "<=3.2.3",
@@ -16286,10 +16292,12 @@
"truckersmp/phpwhois": "<=4.3.1",
"ttskch/pagination-service-provider": "<1",
"twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3",
- "typo3/cms": "<2.0.5|>=3,<3.0.3|>=6.2,<=6.2.38|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2",
+ "typo3/cms": "<8.7.38|>=9,<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2",
"typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1",
"typo3/cms-core": "<8.7.51|>=9,<9.5.42|>=10,<10.4.39|>=11,<11.5.30|>=12,<12.4.4",
+ "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1",
"typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1",
+ "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30",
"typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6",
"typo3/html-sanitizer": ">=1,<1.5.1|>=2,<2.1.2",
"typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3",
@@ -16305,8 +16313,9 @@
"verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4",
"vova07/yii2-fileapi-widget": "<0.1.9",
"vrana/adminer": "<4.8.1",
+ "waldhacker/hcaptcha": "<2.1.2",
"wallabag/tcpdf": "<6.2.22",
- "wallabag/wallabag": "<=2.5.4",
+ "wallabag/wallabag": "<=2.6.2",
"wanglelecc/laracms": "<=1.0.3",
"web-auth/webauthn-framework": ">=3.3,<3.3.4",
"webbuilders-group/silverstripe-kapost-bridge": "<0.4",
@@ -16341,7 +16350,7 @@
"yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6",
"yoast-seo-for-typo3/yoast_seo": "<7.2.3",
"yourls/yourls": "<=1.8.2",
- "zencart/zencart": "<1.5.8",
+ "zencart/zencart": "<=1.5.7.0-beta",
"zendesk/zendesk_api_client_php": "<2.2.11",
"zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3",
"zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2",
@@ -16363,7 +16372,7 @@
"zendframework/zendframework": "<=3",
"zendframework/zendframework1": "<1.12.20",
"zendframework/zendopenid": ">=2,<2.0.2",
- "zendframework/zendxml": ">=1,<1.0.1",
+ "zendframework/zendxml": "<1.0.1",
"zenstruck/collection": "<0.2.1",
"zetacomponents/mail": "<1.8.2",
"zf-commons/zfc-user": "<1.2.2",
@@ -16407,7 +16416,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-25T19:04:12+00:00"
+ "time": "2023-08-23T09:04:12+00:00"
},
{
"name": "sebastian/diff",
@@ -17006,16 +17015,16 @@
},
{
"name": "symplify/easy-coding-standard",
- "version": "11.5.0",
+ "version": "12.0.6",
"source": {
"type": "git",
"url": "https://github.com/easy-coding-standard/easy-coding-standard.git",
- "reference": "1d2400f7bfe92e3754ce71f0782f2c0521bade3d"
+ "reference": "7372622f5d9126ec50b0923d7eb6b778fac575a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/1d2400f7bfe92e3754ce71f0782f2c0521bade3d",
- "reference": "1d2400f7bfe92e3754ce71f0782f2c0521bade3d",
+ "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/7372622f5d9126ec50b0923d7eb6b778fac575a5",
+ "reference": "7372622f5d9126ec50b0923d7eb6b778fac575a5",
"shasum": ""
},
"require": {
@@ -17048,7 +17057,7 @@
],
"support": {
"issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues",
- "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/11.5.0"
+ "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.0.6"
},
"funding": [
{
@@ -17060,20 +17069,20 @@
"type": "github"
}
],
- "time": "2023-06-21T06:26:15+00:00"
+ "time": "2023-07-25T17:12:00+00:00"
},
{
"name": "vimeo/psalm",
- "version": "5.14.1",
+ "version": "5.15.0",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
- "reference": "b9d355e0829c397b9b3b47d0c0ed042a8a70284d"
+ "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/b9d355e0829c397b9b3b47d0c0ed042a8a70284d",
- "reference": "b9d355e0829c397b9b3b47d0c0ed042a8a70284d",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/5c774aca4746caf3d239d9c8cadb9f882ca29352",
+ "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352",
"shasum": ""
},
"require": {
@@ -17101,6 +17110,9 @@
"symfony/console": "^4.1.6 || ^5.0 || ^6.0",
"symfony/filesystem": "^5.4 || ^6.0"
},
+ "conflict": {
+ "nikic/php-parser": "4.17.0"
+ },
"provide": {
"psalm/psalm": "self.version"
},
@@ -17164,9 +17176,9 @@
],
"support": {
"issues": "https://github.com/vimeo/psalm/issues",
- "source": "https://github.com/vimeo/psalm/tree/5.14.1"
+ "source": "https://github.com/vimeo/psalm/tree/5.15.0"
},
- "time": "2023-08-01T05:16:55+00:00"
+ "time": "2023-08-20T23:07:30+00:00"
}
],
"aliases": [
diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml
index 05dc5d0e..a61fddc6 100644
--- a/config/packages/framework.yaml
+++ b/config/packages/framework.yaml
@@ -4,6 +4,9 @@ framework:
csrf_protection: true
handle_all_throwables: true
+ # We set this header by ourself, so we can disable it here
+ disallow_search_engine_index: false
+
# Must be set to true, to enable the change of HTTP method via _method parameter, otherwise our delete routines does not work anymore
# TODO: Rework delete routines to work without _method parameter as it is not recommended anymore (see https://github.com/symfony/symfony/issues/45278)
http_method_override: true
diff --git a/config/parameters.yaml b/config/parameters.yaml
index 4baf2fa7..84a07ab9 100644
--- a/config/parameters.yaml
+++ b/config/parameters.yaml
@@ -23,7 +23,7 @@ parameters:
partdb.users.use_gravatar: '%env(bool:USE_GRAVATAR)%' # Set to false, if no Gravatar images should be used for user profiles.
partdb.users.email_pw_reset: '%env(bool:ALLOW_EMAIL_PW_RESET)%' # Config if users are able, to reset their password by email. By default this enabled, when a mail server is configured.
- partdb.check_for_updates: true # Set to false, if Part-DB should not contact the GitHub API to check for updates
+ partdb.check_for_updates: '%env(bool:CHECK_FOR_UPDATES)' # Set to false, if Part-DB should not contact the GitHub API to check for updates
######################################################################################################################
# Mail settings
diff --git a/docs/configuration.md b/docs/configuration.md
index c0f00933..7dae3923 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -36,6 +36,7 @@ The following configuration options can only be changed by the server administra
* `datastructure_edit`: Edit operation of a existing datastructure (e.g. category, manufacturer, ...)
* `datastructure_delete`: Delete operation of a existing datastructure (e.g. category, manufacturer, ...)
* `datastructure_create`: Creation of a new datastructure (e.g. category, manufacturer, ...)
+* `CHECK_FOR_UPDATES` (default `1`): Set this to 0, if you do not want Part-DB to connect to GitHub to check for new versions, or if your server can not connect to the internet.
### E-Mail settings
* `MAILER_DSN`: You can configure the mail provider which should be used for email delivery (see https://symfony.com/doc/current/components/mailer.html for full documentation). If you just want to use an SMTP mail account, you can use the following syntax `MAILER_DSN=smtp://user:password@smtp.mailserver.invalid:587`
diff --git a/docs/installation/installation_guide-debian.md b/docs/installation/installation_guide-debian.md
index 11bddc03..598e04af 100644
--- a/docs/installation/installation_guide-debian.md
+++ b/docs/installation/installation_guide-debian.md
@@ -101,7 +101,7 @@ The basic configuration of Part-DB is done by a `.env.local` file in the main di
cp .env .env.local
```
-In your `.env.local` you can configure Part-DB according to your wishes. A full list of configuration options can be found [here]({% link configuration.md %}.
+In your `.env.local` you can configure Part-DB according to your wishes. A full list of configuration options can be found [here](../configuration.md).
Other configuration options like the default language or default currency can be found in `config/parameters.yaml`.
Please check that the `partdb.default_currency` value in `config/parameters.yaml` matches your mainly used currency, as this can not be changed after creating price informations.
diff --git a/docs/usage/information_provider_system.md b/docs/usage/information_provider_system.md
index b1a69187..eee66818 100644
--- a/docs/usage/information_provider_system.md
+++ b/docs/usage/information_provider_system.md
@@ -77,13 +77,15 @@ Part-DB caches the search results internally, so if you have searched for a part
Following env configuration options are available:
* `PROVIDER_OCTOPART_CLIENT_ID`: The client ID you got from Nexar (mandatory)
-* `PROVIDER_OCTOPART_CLIENT_SECRET`: The client secret you got from Nexar (mandatory)
+* `PROVIDER_OCTOPART_SECRET`: The client secret you got from Nexar (mandatory)
* `PROVIDER_OCTOPART_CURRENCY`: The currency you want to get prices in if available (optional, 3 letter ISO-code, default: `EUR`). If an offer is only available in a certain currency,
Part-DB will save the prices in their native currency, and you can use Part-DB currency conversion feature to convert it to your preferred currency.
* `PROVIDER_OCOTPART_COUNTRY`: The country you want to get prices in if available (optional, 2 letter ISO-code, default: `DE`). To get correct prices, you have to set this and the currency setting to the correct value.
* `PROVIDER_OCTOPART_SEARCH_LIMIT`: The maximum number of results to return per search (optional, default: `10`). This affects how quickly your monthly limit is used up.
* `PROVIDER_OCTOPART_ONLY_AUTHORIZED_SELLERS`: If set to `true`, only offers from [authorized sellers](https://octopart.com/authorized) will be returned (optional, default: `false`).
+**Attention**: If you change the octopart clientID after you have already used the provider, you have to remove the OAuth token in the Part-DB database. Remove the entry in the table `oauth_tokens` with the name `ip_octopart_oauth`.
+
### Digi-Key
The Digi-Key provider uses the [Digi-Key API](https://developer.digikey.com/) to search for parts and getting shopping information from [Digi-Key](https://www.digikey.com/).
To use it you have to create an account at Digi-Key and get an API key on the [Digi-Key API page](https://developer.digikey.com/).
@@ -137,4 +139,4 @@ To reduce the number of API calls against the providers, the results are cached:
* The product details are cached for 4 days
If you need a fresh result, you can clear the cache by running `php .\bin\console cache:pool:clear info_provider.cache` on the command line.
-The default `php bin/console cache:clear` also clears the result cache, as it clears all caches.
\ No newline at end of file
+The default `php bin/console cache:clear` also clears the result cache, as it clears all caches.
diff --git a/docs/usage/tips_tricks.md b/docs/usage/tips_tricks.md
index 81a31ec1..01ebe33f 100644
--- a/docs/usage/tips_tricks.md
+++ b/docs/usage/tips_tricks.md
@@ -72,4 +72,11 @@ See the configuration reference for more information.
## Personal stocks and stock locations
For makerspaces and universities with a lot of users, where each user can have his own stock, which only he should be able to access, you can assign
-the user as "owner" of a part lot. This way, only him is allowed to add or remove parts from this lot.
\ No newline at end of file
+the user as "owner" of a part lot. This way, only him is allowed to add or remove parts from this lot.
+
+## Update notfications
+Part-DB can show you a notification that there is a newer version than currently installed available. The notification will be shown on the homepage and the server info page.
+It is only be shown to users which has the `Show available Part-DB updates` permission.
+
+For the notification to work, Part-DB queries the GitHub API every 2 days to check for new releases. No data is sent to GitHub besides the metadata required for the connection (so the public IP address of your computer running Part-DB).
+If you don't want Part-DB to query the GitHub API, or if your server can not reach the internet, you can disable the update notifications by setting the `CHECK_FOR_UPDATES` option to `false`.
\ No newline at end of file
diff --git a/package.json b/package.json
index 2e328866..e89a2015 100644
--- a/package.json
+++ b/package.json
@@ -30,38 +30,38 @@
"build": "encore production --progress"
},
"dependencies": {
- "@ckeditor/ckeditor5-alignment": "^38.0.1",
- "@ckeditor/ckeditor5-autoformat": "^38.0.1",
- "@ckeditor/ckeditor5-basic-styles": "^38.0.1",
- "@ckeditor/ckeditor5-block-quote": "^38.0.1",
- "@ckeditor/ckeditor5-code-block": "^38.0.1",
- "@ckeditor/ckeditor5-dev-utils": "^38.0.1",
- "@ckeditor/ckeditor5-dev-webpack-plugin": "^31.1.13",
- "@ckeditor/ckeditor5-editor-classic": "^38.0.1",
- "@ckeditor/ckeditor5-essentials": "^38.0.1",
- "@ckeditor/ckeditor5-find-and-replace": "^38.0.1",
- "@ckeditor/ckeditor5-font": "^38.0.1",
- "@ckeditor/ckeditor5-heading": "^38.0.1",
- "@ckeditor/ckeditor5-highlight": "^38.0.1",
- "@ckeditor/ckeditor5-horizontal-line": "^38.0.1",
- "@ckeditor/ckeditor5-html-embed": "^38.0.1",
- "@ckeditor/ckeditor5-html-support": "^38.0.1",
- "@ckeditor/ckeditor5-image": "^38.0.1",
- "@ckeditor/ckeditor5-indent": "^38.0.1",
- "@ckeditor/ckeditor5-link": "^38.0.1",
- "@ckeditor/ckeditor5-list": "^38.0.1",
- "@ckeditor/ckeditor5-markdown-gfm": "^38.0.1",
- "@ckeditor/ckeditor5-media-embed": "^38.0.1",
- "@ckeditor/ckeditor5-paragraph": "^38.0.1",
- "@ckeditor/ckeditor5-paste-from-office": "^38.0.1",
- "@ckeditor/ckeditor5-remove-format": "^38.0.1",
- "@ckeditor/ckeditor5-source-editing": "^38.0.1",
- "@ckeditor/ckeditor5-special-characters": "^38.0.1",
- "@ckeditor/ckeditor5-table": "^38.0.1",
- "@ckeditor/ckeditor5-theme-lark": "^38.0.1",
- "@ckeditor/ckeditor5-upload": "^38.0.1",
- "@ckeditor/ckeditor5-watchdog": "^38.0.1",
- "@ckeditor/ckeditor5-word-count": "^38.0.1",
+ "@ckeditor/ckeditor5-alignment": "^39.0.1",
+ "@ckeditor/ckeditor5-autoformat": "^39.0.1",
+ "@ckeditor/ckeditor5-basic-styles": "^39.0.1",
+ "@ckeditor/ckeditor5-block-quote": "^39.0.1",
+ "@ckeditor/ckeditor5-code-block": "^39.0.1",
+ "@ckeditor/ckeditor5-dev-translations": "^38.4.0",
+ "@ckeditor/ckeditor5-dev-utils": "^38.4.0",
+ "@ckeditor/ckeditor5-editor-classic": "^39.0.1",
+ "@ckeditor/ckeditor5-essentials": "^39.0.1",
+ "@ckeditor/ckeditor5-find-and-replace": "^39.0.1",
+ "@ckeditor/ckeditor5-font": "^39.0.1",
+ "@ckeditor/ckeditor5-heading": "^39.0.1",
+ "@ckeditor/ckeditor5-highlight": "^39.0.1",
+ "@ckeditor/ckeditor5-horizontal-line": "^39.0.1",
+ "@ckeditor/ckeditor5-html-embed": "^39.0.1",
+ "@ckeditor/ckeditor5-html-support": "^39.0.1",
+ "@ckeditor/ckeditor5-image": "^39.0.1",
+ "@ckeditor/ckeditor5-indent": "^39.0.1",
+ "@ckeditor/ckeditor5-link": "^39.0.1",
+ "@ckeditor/ckeditor5-list": "^39.0.1",
+ "@ckeditor/ckeditor5-markdown-gfm": "^39.0.1",
+ "@ckeditor/ckeditor5-media-embed": "^39.0.1",
+ "@ckeditor/ckeditor5-paragraph": "^39.0.1",
+ "@ckeditor/ckeditor5-paste-from-office": "^39.0.1",
+ "@ckeditor/ckeditor5-remove-format": "^39.0.1",
+ "@ckeditor/ckeditor5-source-editing": "^39.0.1",
+ "@ckeditor/ckeditor5-special-characters": "^39.0.1",
+ "@ckeditor/ckeditor5-table": "^39.0.1",
+ "@ckeditor/ckeditor5-theme-lark": "^39.0.1",
+ "@ckeditor/ckeditor5-upload": "^39.0.1",
+ "@ckeditor/ckeditor5-watchdog": "^39.0.1",
+ "@ckeditor/ckeditor5-word-count": "^39.0.1",
"@jbtronics/bs-treeview": "^1.0.1",
"@zxcvbn-ts/core": "^3.0.2",
"@zxcvbn-ts/language-common": "^3.0.3",
@@ -81,13 +81,13 @@
"datatables.net-responsive-bs5": "^2.2.3",
"datatables.net-select-bs5": "^1.2.7",
"dompurify": "^3.0.3",
- "emoji.json": "^14.0.0",
+ "emoji.json": "^15.0.0",
"exports-loader": "^3.0.0",
"html5-qrcode": "^2.2.1",
"json-formatter-js": "^2.3.4",
"jszip": "^3.2.0",
"katex": "^0.16.0",
- "marked": "^5.1.0",
+ "marked": "^7.0.4",
"marked-gfm-heading-id": "^3.0.4",
"marked-mangle": "^1.0.1",
"pdfmake": "^0.2.2",
diff --git a/src/Controller/HomepageController.php b/src/Controller/HomepageController.php
index f946d133..66fd248e 100644
--- a/src/Controller/HomepageController.php
+++ b/src/Controller/HomepageController.php
@@ -49,6 +49,8 @@ class HomepageController extends AbstractController
public function homepage(Request $request, GitVersionInfo $versionInfo, EntityManagerInterface $entityManager,
UpdateAvailableManager $updateAvailableManager): Response
{
+ $this->denyAccessUnlessGranted('HAS_ACCESS_PERMISSIONS');
+
if ($this->isGranted('@tools.lastActivity')) {
$table = $this->dataTable->createFromType(
LogDataTable::class,
diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php
index 3adfda5c..0537fd6a 100644
--- a/src/Controller/PartController.php
+++ b/src/Controller/PartController.php
@@ -160,7 +160,7 @@ class PartController extends AbstractController
public function new(Request $request, EntityManagerInterface $em, TranslatorInterface $translator,
AttachmentSubmitHandler $attachmentSubmitHandler, ProjectBuildPartHelper $projectBuildPartHelper,
#[MapEntity(mapping: ['id' => 'id'])] ?Part $part = null,
- #[MapEntity(mapping: ['id' => 'project_id'])] ?Project $project = null): Response
+ #[MapEntity(mapping: ['project_id' => 'id'])] ?Project $project = null): Response
{
if ($part instanceof Part) {
diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php
index 9332b6d3..d5190b97 100644
--- a/src/Controller/UserController.php
+++ b/src/Controller/UserController.php
@@ -46,6 +46,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
#[Route(path: '/user')]
class UserController extends BaseAdminController
@@ -79,7 +80,8 @@ class UserController extends BaseAdminController
*/
#[Route(path: '/{id}/edit/{timestamp}', requirements: ['id' => '\d+'], name: 'user_edit')]
#[Route(path: '/{id}/', requirements: ['id' => '\d+'])]
- public function edit(User $entity, Request $request, EntityManagerInterface $em, PermissionPresetsHelper $permissionPresetsHelper, PermissionSchemaUpdater $permissionSchemaUpdater, ?string $timestamp = null): Response
+ public function edit(User $entity, Request $request, EntityManagerInterface $em, PermissionPresetsHelper $permissionPresetsHelper,
+ PermissionSchemaUpdater $permissionSchemaUpdater, ValidatorInterface $validator, ?string $timestamp = null): Response
{
//Do an upgrade of the permission schema if needed (so the user can see the permissions a user get on next request (even if it was not done yet)
$permissionSchemaUpdater->userUpgradeSchemaRecursively($entity);
@@ -108,7 +110,7 @@ class UserController extends BaseAdminController
$this->addFlash('success', 'user.edit.reset_success');
} else {
- $this->addFlash('danger', 'csfr_invalid');
+ $this->addFlash('error', 'csfr_invalid');
}
}
@@ -120,15 +122,25 @@ class UserController extends BaseAdminController
$permissionPresetsHelper->applyPreset($entity, $preset);
- $em->flush();
+ //Ensure that the user is valid after applying the preset
+ $errors = $validator->validate($entity);
+ if (count($errors) > 0) {
+ $this->addFlash('error', 'validator.noLockout');
+ //Refresh the entity to remove the changes
+ $em->refresh($entity);
+ } else {
+ $em->flush();
- $this->addFlash('success', 'user.edit.permission_success');
+ $this->addFlash('success', 'user.edit.permission_success');
- //We need to stop the execution here, or our permissions changes will be overwritten by the form values
- return $this->redirectToRoute('user_edit', ['id' => $entity->getID()]);
+ //We need to stop the execution here, or our permissions changes will be overwritten by the form values
+ return $this->redirectToRoute('user_edit', ['id' => $entity->getID()]);
+ }
+
+
+ } else {
+ $this->addFlash('error', 'csfr_invalid');
}
-
- $this->addFlash('danger', 'csfr_invalid');
}
return $this->_edit($entity, $request, $em, $timestamp);
diff --git a/src/EventListener/DisallowSearchEngineIndexingRequestListener.php b/src/EventListener/DisallowSearchEngineIndexingRequestListener.php
new file mode 100644
index 00000000..a1d3304e
--- /dev/null
+++ b/src/EventListener/DisallowSearchEngineIndexingRequestListener.php
@@ -0,0 +1,55 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\EventListener;
+
+use Symfony\Component\DependencyInjection\Attribute\Autowire;
+use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
+use Symfony\Component\HttpKernel\Event\RequestEvent;
+use Symfony\Component\HttpKernel\Event\ResponseEvent;
+
+#[AsEventListener]
+class DisallowSearchEngineIndexingRequestListener
+{
+ private const HEADER_NAME = 'X-Robots-Tag';
+
+ private readonly bool $enabled;
+
+ public function __construct(#[Autowire(param: 'partdb.demo_mode')] bool $demo_mode)
+ {
+ // Disable this listener in demo mode
+ $this->enabled = !$demo_mode;
+ }
+
+ public function __invoke(ResponseEvent $event): void
+ {
+ //Skip if disabled
+ if (!$this->enabled) {
+ return;
+ }
+
+ if (!$event->getResponse()->headers->has(self::HEADER_NAME)) {
+ $event->getResponse()->headers->set(self::HEADER_NAME, 'noindex');
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Form/ProjectSystem/ProjectBuildType.php b/src/Form/ProjectSystem/ProjectBuildType.php
index 82489471..3fdc491f 100644
--- a/src/Form/ProjectSystem/ProjectBuildType.php
+++ b/src/Form/ProjectSystem/ProjectBuildType.php
@@ -62,6 +62,15 @@ class ProjectBuildType extends AbstractType implements DataMapperInterface
'disabled' => !$this->security->isGranted('@parts_stock.withdraw'),
]);
+ $builder->add('dontCheckQuantity', CheckboxType::class, [
+ 'label' => 'project.build.dont_check_quantity',
+ 'help' => 'project.build.dont_check_quantity.help',
+ 'required' => false,
+ 'attr' => [
+ 'data-controller' => 'pages--dont-check-quantity-checkbox'
+ ]
+ ]);
+
$builder->add('comment', TextType::class, [
'label' => 'part.info.withdraw_modal.comment',
'help' => 'part.info.withdraw_modal.comment.hint',
@@ -124,6 +133,7 @@ class ProjectBuildType extends AbstractType implements DataMapperInterface
}
$forms['comment']->setData($data->getComment());
+ $forms['dontCheckQuantity']->setData($data->isDontCheckQuantity());
$forms['addBuildsToBuildsPart']->setData($data->getAddBuildsToBuildsPart());
if (isset($forms['buildsPartLot'])) {
$forms['buildsPartLot']->setData($data->getBuildsPartLot());
@@ -150,6 +160,8 @@ class ProjectBuildType extends AbstractType implements DataMapperInterface
}
$data->setComment($forms['comment']->getData());
+ $data->setDontCheckQuantity($forms['dontCheckQuantity']->getData());
+
if (isset($forms['buildsPartLot'])) {
$lot = $forms['buildsPartLot']->getData();
if (!$lot) { //When the user selected "Create new lot", create a new lot
diff --git a/src/Helpers/Projects/ProjectBuildRequest.php b/src/Helpers/Projects/ProjectBuildRequest.php
index 36035744..c2c2ad90 100644
--- a/src/Helpers/Projects/ProjectBuildRequest.php
+++ b/src/Helpers/Projects/ProjectBuildRequest.php
@@ -47,6 +47,8 @@ final class ProjectBuildRequest
private bool $add_build_to_builds_part = false;
+ private bool $dont_check_quantity = false;
+
/**
* @param Project $project The project that should be build
* @param int $number_of_builds The number of builds that should be created
@@ -283,4 +285,26 @@ final class ProjectBuildRequest
{
return $this->number_of_builds;
}
+
+ /**
+ * If Set to true, the given withdraw amounts are used without any checks for requirements.
+ * @return bool
+ */
+ public function isDontCheckQuantity(): bool
+ {
+ return $this->dont_check_quantity;
+ }
+
+ /**
+ * Set to true, the given withdraw amounts are used without any checks for requirements.
+ * @param bool $dont_check_quantity
+ * @return $this
+ */
+ public function setDontCheckQuantity(bool $dont_check_quantity): ProjectBuildRequest
+ {
+ $this->dont_check_quantity = $dont_check_quantity;
+ return $this;
+ }
+
+
}
diff --git a/src/Security/Voter/HasAccessPermissionsVoter.php b/src/Security/Voter/HasAccessPermissionsVoter.php
new file mode 100644
index 00000000..3ea6dd36
--- /dev/null
+++ b/src/Security/Voter/HasAccessPermissionsVoter.php
@@ -0,0 +1,45 @@
+.
+ */
+
+declare(strict_types=1);
+
+
+namespace App\Security\Voter;
+
+use App\Entity\UserSystem\User;
+
+/**
+ * This voter implements a virtual role, which can be used if the user has any permission set to allowed.
+ * We use this to restrict access to the homepage.
+ */
+class HasAccessPermissionsVoter extends ExtendedVoter
+{
+ public const ROLE = "HAS_ACCESS_PERMISSIONS";
+
+ protected function voteOnUser(string $attribute, $subject, User $user): bool
+ {
+ return $this->resolver->hasAnyPermissionSetToAllowInherited($user);
+ }
+
+ protected function supports(string $attribute, mixed $subject): bool
+ {
+ return $attribute === self::ROLE;
+ }
+}
\ No newline at end of file
diff --git a/src/Services/ImportExportSystem/PartKeeprImporter/PKDatastructureImporter.php b/src/Services/ImportExportSystem/PartKeeprImporter/PKDatastructureImporter.php
index d53566c0..4f9acbca 100644
--- a/src/Services/ImportExportSystem/PartKeeprImporter/PKDatastructureImporter.php
+++ b/src/Services/ImportExportSystem/PartKeeprImporter/PKDatastructureImporter.php
@@ -265,8 +265,7 @@ class PKDatastructureImporter
{
$count = $this->importElementsWithCategory($data, Storelocation::class, 'storagelocation');
- //Footprints have both attachments and images
- $this->importAttachments($data, 'storagelocationimage', Storelocation::class, 'footprint_id', StorelocationAttachment::class);
+ $this->importAttachments($data, 'storagelocationimage', Storelocation::class, 'storageLocation_id', StorelocationAttachment::class);
return $count;
}
diff --git a/src/Services/System/UpdateAvailableManager.php b/src/Services/System/UpdateAvailableManager.php
index 8d9bacac..31cb3266 100644
--- a/src/Services/System/UpdateAvailableManager.php
+++ b/src/Services/System/UpdateAvailableManager.php
@@ -23,7 +23,9 @@ declare(strict_types=1);
namespace App\Services\System;
+use Psr\Log\LoggerInterface;
use Shivas\VersioningBundle\Service\VersionManagerInterface;
+use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\Cache\ItemInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
@@ -41,7 +43,8 @@ class UpdateAvailableManager
public function __construct(private readonly HttpClientInterface $httpClient,
private readonly CacheInterface $updateCache, private readonly VersionManagerInterface $versionManager,
- private readonly bool $check_for_updates)
+ private readonly bool $check_for_updates, private readonly LoggerInterface $logger,
+ #[Autowire(param: 'kernel.debug')] private readonly bool $is_dev_mode)
{
}
@@ -107,17 +110,34 @@ class UpdateAvailableManager
return $this->updateCache->get(self::CACHE_KEY, function (ItemInterface $item) {
$item->expiresAfter(self::CACHE_TTL);
- $response = $this->httpClient->request('GET', self::API_URL);
- $result = $response->toArray();
- $tag_name = $result['tag_name'];
+ try {
+ $response = $this->httpClient->request('GET', self::API_URL);
+ $result = $response->toArray();
+ $tag_name = $result['tag_name'];
- // Remove the leading 'v' from the tag name
- $version = substr($tag_name, 1);
+ // Remove the leading 'v' from the tag name
+ $version = substr($tag_name, 1);
- return [
- 'version' => $version,
- 'url' => $result['html_url'],
- ];
+ return [
+ 'version' => $version,
+ 'url' => $result['html_url'],
+ ];
+ } catch (\Exception $e) {
+ //When we are in dev mode, throw the exception, otherwise just silently log it
+ if ($this->is_dev_mode) {
+ throw $e;
+ }
+
+ //In the case of an error, try it again after half of the cache time
+ $item->expiresAfter(self::CACHE_TTL / 2);
+
+ $this->logger->error('Checking for updates failed: ' . $e->getMessage());
+
+ return [
+ 'version' => '0.0.1',
+ 'url' => 'update-checking-error'
+ ];
+ }
});
}
}
\ No newline at end of file
diff --git a/src/Services/UserSystem/PermissionManager.php b/src/Services/UserSystem/PermissionManager.php
index fa591a91..a995dad7 100644
--- a/src/Services/UserSystem/PermissionManager.php
+++ b/src/Services/UserSystem/PermissionManager.php
@@ -271,6 +271,27 @@ class PermissionManager
}
}
+ /**
+ * This function checks if the given user has any permission set to allow, either directly or inherited.
+ * @param User $user
+ * @return bool
+ */
+ public function hasAnyPermissionSetToAllowInherited(User $user): bool
+ {
+ //Iterate over all permissions
+ foreach ($this->permission_structure['perms'] as $perm_key => $permission) {
+ //Iterate over all operations of the permission
+ foreach ($permission['operations'] as $op_key => $op) {
+ //Check if the user has the permission set to allow
+ if ($this->inherit($user, $perm_key, $op_key) === true) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
protected function generatePermissionStructure()
{
$cache = new ConfigCache($this->cache_file, $this->kernel_debug_enabled);
diff --git a/src/Validator/Constraints/ProjectSystem/ValidProjectBuildRequestValidator.php b/src/Validator/Constraints/ProjectSystem/ValidProjectBuildRequestValidator.php
index e5de07d2..2d59e648 100644
--- a/src/Validator/Constraints/ProjectSystem/ValidProjectBuildRequestValidator.php
+++ b/src/Validator/Constraints/ProjectSystem/ValidProjectBuildRequestValidator.php
@@ -69,12 +69,12 @@ class ValidProjectBuildRequestValidator extends ConstraintValidator
->addViolation();
}
- if ($withdraw_sum > $needed_amount) {
+ if ($withdraw_sum > $needed_amount && $value->isDontCheckQuantity() === false) {
$this->buildViolationForLot($lot, 'validator.project_build.lot_bigger_than_needed')
->addViolation();
}
- if ($withdraw_sum < $needed_amount) {
+ if ($withdraw_sum < $needed_amount && $value->isDontCheckQuantity() === false) {
$this->buildViolationForLot($lot, 'validator.project_build.lot_smaller_than_needed')
->addViolation();
}
diff --git a/templates/components/datatables.macro.html.twig b/templates/components/datatables.macro.html.twig
index dadfad69..9c88e461 100644
--- a/templates/components/datatables.macro.html.twig
+++ b/templates/components/datatables.macro.html.twig
@@ -32,6 +32,8 @@
{# #}
+
{% trans with {'%count%': ''} %}part_list.action.part_count{% endtrans %}
@@ -75,7 +77,7 @@
{# This is left empty, as this will be filled by Javascript #}
-
+
{{ form_row(form.addBuildsToBuildsPart) }}
{% if form.buildsPartLot is defined %}
diff --git a/tests/Services/UserSystem/PermissionManagerTest.php b/tests/Services/UserSystem/PermissionManagerTest.php
index d9c694fe..b24801df 100644
--- a/tests/Services/UserSystem/PermissionManagerTest.php
+++ b/tests/Services/UserSystem/PermissionManagerTest.php
@@ -31,15 +31,12 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class PermissionManagerTest extends WebTestCase
{
- protected $user_withoutGroup;
+ protected ?User $user_withoutGroup = null;
- protected $user;
- protected $group;
+ protected ?User $user = null;
+ protected ?Group $group = null;
- /**
- * @var PermissionManager
- */
- protected $service;
+ protected ?PermissionManager $service = null;
protected function setUp(): void
{
@@ -294,4 +291,34 @@ class PermissionManagerTest extends WebTestCase
$this->assertTrue($this->service->dontInherit($user, 'parts', 'edit'));
$this->assertTrue($this->service->dontInherit($user, 'categories', 'read'));
}
+
+ public function testHasAnyPermissionSetToAllowInherited(): void
+ {
+ //For empty user this should return false
+ $user = new User();
+ $this->assertFalse($this->service->hasAnyPermissionSetToAllowInherited($user));
+
+ //If all permissions are set to false this should return false
+ $this->service->setAllPermissions($user, false);
+ $this->assertFalse($this->service->hasAnyPermissionSetToAllowInherited($user));
+
+ //If all permissions are set to null this should return false
+ $this->service->setAllPermissions($user, null);
+ $this->assertFalse($this->service->hasAnyPermissionSetToAllowInherited($user));
+
+ //If all permissions are set to true this should return true
+ $this->service->setAllPermissions($user, true);
+ $this->assertTrue($this->service->hasAnyPermissionSetToAllowInherited($user));
+
+ //The test data should return true
+ $this->assertTrue($this->service->hasAnyPermissionSetToAllowInherited($this->user));
+ $this->assertTrue($this->service->hasAnyPermissionSetToAllowInherited($this->user_withoutGroup));
+
+ //Create a user with a group
+ $user = new User();
+ $user->setGroup($this->group);
+ //This should return true
+ $this->assertTrue($this->service->hasAnyPermissionSetToAllowInherited($user));
+
+ }
}
diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf
index 0da88fab..b2fa9e31 100644
--- a/translations/messages.de.xlf
+++ b/translations/messages.de.xlf
@@ -11575,5 +11575,29 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön
Quelle
+
+
+ update_manager.new_version_available.title
+ Neue Version verfügbar
+
+
+
+
+ update_manager.new_version_available.text
+ Eine neue Version von Part-DB ist verfügbar. Mehr Informationen gibt es hier
+
+
+
+
+ update_manager.new_version_available.only_administrators_can_see
+ Nur Administratoren können diese Nachricht sehen.
+
+
+
+
+ perm.system.show_available_updates
+ Verfügbare Part-DB Updates anzeigen
+
+
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf
index 7771601e..c55baaad 100644
--- a/translations/messages.en.xlf
+++ b/translations/messages.en.xlf
@@ -731,10 +731,10 @@
user.edit.tfa.disable_tfa_message
- all active two-factor authentication methods of the user and delete the backup codes!
-
-The user will have to set up all two-factor authentication methods again and print new backup codes!