From d8796989a259ea0e1923b5b56f05acf8ac4f6bd9 Mon Sep 17 00:00:00 2001 From: Dominik Schwind Date: Fri, 9 Aug 2024 16:09:24 +0200 Subject: [PATCH] Version 1.0.5 changes * Search input field improved * Creation of new folders and collections improved * Admin backend improvements --- ...view-collection-autocomplete_controller.ts | 41 ++ .../controllers/assetview_controller.ts | 18 +- .../clear-input-button_controller.ts | 35 ++ app/assets/styles/components/input.scss | 4 + app/assets/styles/components/search-form.scss | 33 ++ app/composer.lock | 445 +++++++++--------- app/package.json | 2 +- .../Admin/RegistrationCodeController.php | 20 +- .../Controller/Admin/WorkspaceController.php | 20 +- .../Controller/Workspace/FileController.php | 4 +- .../Utility/SortFilterPaginateArguments.php | 4 +- app/src/Form/File/EditType.php | 69 ++- app/src/Repository/UserRepository.php | 8 +- .../Service/File/FilePaginationHandler.php | 4 +- app/src/Service/User/UserHandler.php | 9 +- app/src/Service/User/UserHandlerInterface.php | 6 +- app/templates/admin/index.html.twig | 1 + .../admin/registration_code/show.html.twig | 41 ++ app/templates/admin/users/index.html.twig | 26 +- app/templates/admin/workspace.html.twig | 30 +- app/templates/components/SearchForm.html.twig | 12 +- app/templates/workspace/file/view.html.twig | 4 +- app/translations/messages+intl-icu.de.yml | 4 + app/translations/messages+intl-icu.en.yml | 4 + app/translations/validators.de.yml | 6 + app/translations/validators.en.yml | 6 + app/tsconfig.json | 5 +- 27 files changed, 578 insertions(+), 283 deletions(-) create mode 100644 app/assets/controllers/assetview-collection-autocomplete_controller.ts create mode 100644 app/assets/controllers/clear-input-button_controller.ts diff --git a/app/assets/controllers/assetview-collection-autocomplete_controller.ts b/app/assets/controllers/assetview-collection-autocomplete_controller.ts new file mode 100644 index 0000000..4ab50eb --- /dev/null +++ b/app/assets/controllers/assetview-collection-autocomplete_controller.ts @@ -0,0 +1,41 @@ +import {Controller} from '@hotwired/stimulus'; +import TomSelect from 'tom-select'; +import {TomOptions} from 'tom-select/dist/types/types'; + +let collectionSelect:TomSelect | null = null; +let collectionSelectOptions:TomOptions | null = null; + +export default class extends Controller { + initialize() { + this._onConnect = this._onConnect.bind(this); + this._onAddCollection = this._onAddCollection.bind(this); + } + + connect() { + // eslint-disable-next-line @typescript-eslint/unbound-method + this.element.addEventListener('autocomplete:connect', this._onConnect); + // eslint-disable-next-line @typescript-eslint/unbound-method + this.element.addEventListener('assetviewAddCollection', this._onAddCollection); + } + + disconnect() { + // eslint-disable-next-line @typescript-eslint/unbound-method + this.element.removeEventListener('autocomplete:connect', this._onConnect); + // eslint-disable-next-line @typescript-eslint/unbound-method + this.element.removeEventListener('assetviewAddCollection', this._onAddCollection); + } + + _onAddCollection(event) { + if (!collectionSelect || !collectionSelectOptions) { + return; + } + collectionSelect.addOption(event.detail.option); + collectionSelect.refreshOptions(); + collectionSelect.addItem(event.detail.slug); + } + + _onConnect(event) { + collectionSelect = event.detail.tomSelect; + collectionSelectOptions = event.detail.options; + } +} diff --git a/app/assets/controllers/assetview_controller.ts b/app/assets/controllers/assetview_controller.ts index dc93d6c..eca391c 100644 --- a/app/assets/controllers/assetview_controller.ts +++ b/app/assets/controllers/assetview_controller.ts @@ -25,6 +25,9 @@ export default class extends Controller { 'collectionSelect', ]; + private hasCategoryFormTarget: boolean; + private hasCollectionFormTarget: boolean; + connect() { hotkeys('esc', (event) => this.close(event)); hotkeys('right,arrowright', () => this.navigateNext()); @@ -78,16 +81,19 @@ export default class extends Controller { if (response.data.body) { const option = new Option(response.data.body.title, response.data.body.slug); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore if (this.hasCategoryFormTarget && currentForm === this.categoryFormTarget) { this.categorySelectTarget.append(option); this.categorySelectTarget.value = response.data.body.slug; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore } else if (this.hasCollectionFormTarget && currentForm === this.collectionFormTarget) { - option.selected = true; - this.collectionSelectTarget.insertBefore(option, this.collectionSelectTarget.firstChild); + // option.selected = true; + // this.collectionSelectTarget.insertBefore(option, this.collectionSelectTarget.firstChild); + + this.collectionSelectTarget.dispatchEvent( + new CustomEvent( + 'assetviewAddCollection', + {detail: {title: response.data.body.title, slug: response.data.body.slug, option}}, + ), + ); } if (response.data.message) { diff --git a/app/assets/controllers/clear-input-button_controller.ts b/app/assets/controllers/clear-input-button_controller.ts new file mode 100644 index 0000000..297face --- /dev/null +++ b/app/assets/controllers/clear-input-button_controller.ts @@ -0,0 +1,35 @@ +import {Controller} from '@hotwired/stimulus'; + +export default class extends Controller { + declare readonly buttonTarget: HTMLButtonElement; + declare readonly inputTarget: HTMLInputElement; + + static targets = ['button', 'input']; + + connect() { + if (!('content' in document.createElement('template'))) { + return; + } + + const template: HTMLTemplateElement | null = document.querySelector('#clear-input-button'); + const clone: Node | undefined = template?.content.cloneNode(true); + + if (clone === undefined) { + return; + } + + this.element.appendChild(clone); + this.buttonTarget.addEventListener('click', () => { + this.inputTarget.value = ''; + this.inputTarget.focus(); + this.element.classList.remove('is-touched'); + }); + this.inputTarget.addEventListener('input', (event) => { + if ((event.target as HTMLInputElement)?.value && !this.element.classList.contains('is-touched')) { + this.element.classList.add('is-touched'); + } else if (!(event.target as HTMLInputElement)?.value && this.element.classList.contains('is-touched')) { + this.element.classList.remove('is-touched'); + } + }); + } +} diff --git a/app/assets/styles/components/input.scss b/app/assets/styles/components/input.scss index 7d16374..4a3f128 100644 --- a/app/assets/styles/components/input.scss +++ b/app/assets/styles/components/input.scss @@ -209,6 +209,10 @@ input[type="file"]::file-selector-button { border-radius: border-radius(m); } + .ts-wrapper.multi & { + padding: 0.5rem 1rem; + } + .ts-wrapper.multi.has-items & { padding: 0.5rem; } diff --git a/app/assets/styles/components/search-form.scss b/app/assets/styles/components/search-form.scss index a6eb5b0..48f24eb 100644 --- a/app/assets/styles/components/search-form.scss +++ b/app/assets/styles/components/search-form.scss @@ -1,4 +1,6 @@ .search-form { + $this: &; + position: relative; display: inline-flex; align-items: center; @@ -51,8 +53,39 @@ background-size: 14px; } + body:not(.no-js) & { + &::-webkit-search-cancel-button{ + display: none; + } + } + &:focus { outline: none; } } + + &__clear { + @include button-reset; + + & { + display: block; + height: 24px; + width: 24px; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAn0lEQVR42u3UMQrDMBBEUZ9WfQqDmm22EaTyjRMHAlM5K+Y7lb0wnUZPIKHlnutOa+25Z4D++MRBX98MD1V/trSppLKHqj9TTBWKcoUqffbUcbBBEhTjBOV4ja4l4OIAZThEOV6jHO8ARXD+gPPvKMABinGOrnu6gTNUawrcQKNCAQ7QeTxORzle3+sDfjJpPCqhJh7GixZq4rHcc9l5A9qZ+WeBhgEuAAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-size: 14px; + cursor: pointer; + visibility: hidden; + pointer-events: none; + background-position: center; + border-radius: 50%; + flex: 0 0 1.5rem; + } + + #{$this}.is-touched:hover &, + #{$this}.is-touched:focus-within & { + visibility: visible; + pointer-events: all; + } + } } diff --git a/app/composer.lock b/app/composer.lock index e92485d..8ccde73 100644 --- a/app/composer.lock +++ b/app/composer.lock @@ -2308,16 +2308,16 @@ }, { "name": "nelmio/api-doc-bundle", - "version": "v4.28.0", + "version": "v4.29.0", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "684391a5fab4bdfac752560d3483d0f7109448a5" + "reference": "c9523906023e61351f03dbab8d077173f5ec4883" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/684391a5fab4bdfac752560d3483d0f7109448a5", - "reference": "684391a5fab4bdfac752560d3483d0f7109448a5", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/c9523906023e61351f03dbab8d077173f5ec4883", + "reference": "c9523906023e61351f03dbab8d077173f5ec4883", "shasum": "" }, "require": { @@ -2418,9 +2418,15 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioApiDocBundle/issues", - "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.28.0" + "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.29.0" }, - "time": "2024-06-19T14:37:45+00:00" + "funding": [ + { + "url": "https://github.com/DjordyKoert", + "type": "github" + } + ], + "time": "2024-07-22T08:40:00+00:00" }, { "name": "overblog/graphql-bundle", @@ -3146,16 +3152,16 @@ }, { "name": "symfony/cache", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae" + "reference": "8ac37acee794372f9732fe8a61a8221f6762148e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/e933e1d947ffb88efcdd34a2bd51561cab7deaae", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae", + "url": "https://api.github.com/repos/symfony/cache/zipball/8ac37acee794372f9732fe8a61a8221f6762148e", + "reference": "8ac37acee794372f9732fe8a61a8221f6762148e", "shasum": "" }, "require": { @@ -3223,7 +3229,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.2" + "source": "https://github.com/symfony/cache/tree/v7.1.3" }, "funding": [ { @@ -3239,7 +3245,7 @@ "type": "tidelift" } ], - "time": "2024-06-11T13:32:38+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/cache-contracts", @@ -3468,16 +3474,16 @@ }, { "name": "symfony/console", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { @@ -3541,7 +3547,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.2" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -3557,20 +3563,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6e108cded928bdafaf1da3fabe30dd5af20e36b9" + "reference": "8126f0be4ff984e4db0140e60917900a53facb49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6e108cded928bdafaf1da3fabe30dd5af20e36b9", - "reference": "6e108cded928bdafaf1da3fabe30dd5af20e36b9", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8126f0be4ff984e4db0140e60917900a53facb49", + "reference": "8126f0be4ff984e4db0140e60917900a53facb49", "shasum": "" }, "require": { @@ -3621,7 +3627,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.1.2" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.3" }, "funding": [ { @@ -3637,7 +3643,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-07-26T07:35:39+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3708,16 +3714,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "9fc4bebf69f00d4ebb12ee904d808b496035e2f6" + "reference": "b526822483124b62ff3cda14237418408f444e4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/9fc4bebf69f00d4ebb12ee904d808b496035e2f6", - "reference": "9fc4bebf69f00d4ebb12ee904d808b496035e2f6", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b526822483124b62ff3cda14237418408f444e4d", + "reference": "b526822483124b62ff3cda14237418408f444e4d", "shasum": "" }, "require": { @@ -3796,7 +3802,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.2" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.3" }, "funding": [ { @@ -3812,7 +3818,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/doctrine-messenger", @@ -3888,16 +3894,16 @@ }, { "name": "symfony/dotenv", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "efa715ec40c098f2fba62444f4fd75d0d4248ede" + "reference": "a26be30fd61678dab694a18a85084cea7673bbf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/efa715ec40c098f2fba62444f4fd75d0d4248ede", - "reference": "efa715ec40c098f2fba62444f4fd75d0d4248ede", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/a26be30fd61678dab694a18a85084cea7673bbf3", + "reference": "a26be30fd61678dab694a18a85084cea7673bbf3", "shasum": "" }, "require": { @@ -3942,7 +3948,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.1.1" + "source": "https://github.com/symfony/dotenv/tree/v7.1.3" }, "funding": [ { @@ -3958,20 +3964,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-09T19:36:07+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { @@ -4017,7 +4023,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.1.2" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -4033,7 +4039,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", @@ -4323,16 +4329,16 @@ }, { "name": "symfony/finder", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" + "reference": "717c6329886f32dc65e27461f80f2a465412fdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", + "reference": "717c6329886f32dc65e27461f80f2a465412fdca", "shasum": "" }, "require": { @@ -4367,7 +4373,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.1" + "source": "https://github.com/symfony/finder/tree/v7.1.3" }, "funding": [ { @@ -4383,7 +4389,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-24T07:08:44+00:00" }, { "name": "symfony/flex", @@ -4452,16 +4458,16 @@ }, { "name": "symfony/form", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "b23a44f0edaceb8d70b0e7f8937feae81e6dede5" + "reference": "11df2e2e142161824eb341e96cbb3c56c3bb57dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/b23a44f0edaceb8d70b0e7f8937feae81e6dede5", - "reference": "b23a44f0edaceb8d70b0e7f8937feae81e6dede5", + "url": "https://api.github.com/repos/symfony/form/zipball/11df2e2e142161824eb341e96cbb3c56c3bb57dc", + "reference": "11df2e2e142161824eb341e96cbb3c56c3bb57dc", "shasum": "" }, "require": { @@ -4529,7 +4535,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.1.1" + "source": "https://github.com/symfony/form/tree/v7.1.3" }, "funding": [ { @@ -4545,20 +4551,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-19T08:30:01+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "54a84f49658e2e87167396b2259a55e55e11f4a2" + "reference": "a32ec544bd501eb4619eb977860ad3076ee55061" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/54a84f49658e2e87167396b2259a55e55e11f4a2", - "reference": "54a84f49658e2e87167396b2259a55e55e11f4a2", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a32ec544bd501eb4619eb977860ad3076ee55061", + "reference": "a32ec544bd501eb4619eb977860ad3076ee55061", "shasum": "" }, "require": { @@ -4676,7 +4682,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.1.2" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.3" }, "funding": [ { @@ -4692,20 +4698,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T13:24:34+00:00" }, { "name": "symfony/http-client", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "90ace27d17ccc9afc6f7ec0081e8529fb0e29425" + "reference": "b79858aa7a051ea791b0d50269a234a0b50cb231" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/90ace27d17ccc9afc6f7ec0081e8529fb0e29425", - "reference": "90ace27d17ccc9afc6f7ec0081e8529fb0e29425", + "url": "https://api.github.com/repos/symfony/http-client/zipball/b79858aa7a051ea791b0d50269a234a0b50cb231", + "reference": "b79858aa7a051ea791b0d50269a234a0b50cb231", "shasum": "" }, "require": { @@ -4770,7 +4776,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.1.2" + "source": "https://github.com/symfony/http-client/tree/v7.1.3" }, "funding": [ { @@ -4786,7 +4792,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/http-client-contracts", @@ -4868,16 +4874,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa" + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", "shasum": "" }, "require": { @@ -4925,7 +4931,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.1.1" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" }, "funding": [ { @@ -4941,20 +4947,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6" + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", "shasum": "" }, "require": { @@ -5039,7 +5045,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.1.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" }, "funding": [ { @@ -5055,7 +5061,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T13:13:31+00:00" + "time": "2024-07-26T14:58:15+00:00" }, { "name": "symfony/intl", @@ -5291,16 +5297,16 @@ }, { "name": "symfony/messenger", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "8cafca5f0fade46acf4a6b32b2d5e495f798a56b" + "reference": "604e182a7758ceea35921a8ad5dd492a6e13bae4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/8cafca5f0fade46acf4a6b32b2d5e495f798a56b", - "reference": "8cafca5f0fade46acf4a6b32b2d5e495f798a56b", + "url": "https://api.github.com/repos/symfony/messenger/zipball/604e182a7758ceea35921a8ad5dd492a6e13bae4", + "reference": "604e182a7758ceea35921a8ad5dd492a6e13bae4", "shasum": "" }, "require": { @@ -5357,7 +5363,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v7.1.2" + "source": "https://github.com/symfony/messenger/tree/v7.1.3" }, "funding": [ { @@ -5373,7 +5379,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-09T19:36:07+00:00" }, { "name": "symfony/mime", @@ -6399,16 +6405,16 @@ }, { "name": "symfony/process", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", + "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", "shasum": "" }, "require": { @@ -6440,7 +6446,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.1" + "source": "https://github.com/symfony/process/tree/v7.1.3" }, "funding": [ { @@ -6456,7 +6462,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:44:47+00:00" }, { "name": "symfony/property-access", @@ -6536,16 +6542,16 @@ }, { "name": "symfony/property-info", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16" + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/d7b91e4aa07e822a9b935fc29a7254c12d502f16", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16", + "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", "shasum": "" }, "require": { @@ -6600,7 +6606,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.2" + "source": "https://github.com/symfony/property-info/tree/v7.1.3" }, "funding": [ { @@ -6616,20 +6622,20 @@ "type": "tidelift" } ], - "time": "2024-06-26T07:21:35+00:00" + "time": "2024-07-26T07:36:36+00:00" }, { "name": "symfony/routing", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0" + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", "shasum": "" }, "require": { @@ -6681,7 +6687,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.1" + "source": "https://github.com/symfony/routing/tree/v7.1.3" }, "funding": [ { @@ -6697,7 +6703,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/runtime", @@ -6860,16 +6866,16 @@ }, { "name": "symfony/security-bundle", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "a6746372202512d2c75ba9bdbc36e15022a56c42" + "reference": "4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/a6746372202512d2c75ba9bdbc36e15022a56c42", - "reference": "a6746372202512d2c75ba9bdbc36e15022a56c42", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad", + "reference": "4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad", "shasum": "" }, "require": { @@ -6918,7 +6924,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/yaml": "^6.4|^7.0", "twig/twig": "^3.0.4", - "web-token/jwt-library": "^3.3.2" + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "symfony-bundle", "autoload": { @@ -6946,7 +6952,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.1.2" + "source": "https://github.com/symfony/security-bundle/tree/v7.1.3" }, "funding": [ { @@ -6962,20 +6968,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:35:32+00:00" + "time": "2024-07-26T07:24:20+00:00" }, { "name": "symfony/security-core", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "d615960211a11913e70f8576e5c38cd05d90ec3f" + "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/d615960211a11913e70f8576e5c38cd05d90ec3f", - "reference": "d615960211a11913e70f8576e5c38cd05d90ec3f", + "url": "https://api.github.com/repos/symfony/security-core/zipball/aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", + "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", "shasum": "" }, "require": { @@ -7032,7 +7038,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.2" + "source": "https://github.com/symfony/security-core/tree/v7.1.3" }, "funding": [ { @@ -7048,7 +7054,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/security-csrf", @@ -7120,16 +7126,16 @@ }, { "name": "symfony/security-http", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "e9dc3ef093dac3d4982fcd96002525aa7a1d6989" + "reference": "19f07b6530dbb82017c38ee7582b154f5c42b179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/e9dc3ef093dac3d4982fcd96002525aa7a1d6989", - "reference": "e9dc3ef093dac3d4982fcd96002525aa7a1d6989", + "url": "https://api.github.com/repos/symfony/security-http/zipball/19f07b6530dbb82017c38ee7582b154f5c42b179", + "reference": "19f07b6530dbb82017c38ee7582b154f5c42b179", "shasum": "" }, "require": { @@ -7160,7 +7166,7 @@ "symfony/routing": "^6.4|^7.0", "symfony/security-csrf": "^6.4|^7.0", "symfony/translation": "^6.4|^7.0", - "web-token/jwt-library": "^3.3.2" + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "library", "autoload": { @@ -7188,7 +7194,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v7.1.2" + "source": "https://github.com/symfony/security-http/tree/v7.1.3" }, "funding": [ { @@ -7204,20 +7210,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T07:24:20+00:00" }, { "name": "symfony/serializer", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d2077674aaaff02a95f290de512aa358947e6bbe" + "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d2077674aaaff02a95f290de512aa358947e6bbe", - "reference": "d2077674aaaff02a95f290de512aa358947e6bbe", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09", + "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09", "shasum": "" }, "require": { @@ -7285,7 +7291,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.1.2" + "source": "https://github.com/symfony/serializer/tree/v7.1.3" }, "funding": [ { @@ -7301,7 +7307,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T07:42:43+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/service-contracts", @@ -7519,16 +7525,16 @@ }, { "name": "symfony/string", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { @@ -7586,7 +7592,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.2" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -7602,20 +7608,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3" + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", + "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", "shasum": "" }, "require": { @@ -7680,7 +7686,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.1" + "source": "https://github.com/symfony/translation/tree/v7.1.3" }, "funding": [ { @@ -7696,7 +7702,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/translation-contracts", @@ -8303,16 +8309,16 @@ }, { "name": "symfony/validator", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7" + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/bed12b7d5bd4dac452db5fa6203331c876b489e7", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7", + "url": "https://api.github.com/repos/symfony/validator/zipball/ba711a6cfc008544dad059abb3c1d997f1472237", + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237", "shasum": "" }, "require": { @@ -8380,7 +8386,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.2" + "source": "https://github.com/symfony/validator/tree/v7.1.3" }, "funding": [ { @@ -8396,20 +8402,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d" + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5857c57c6b4b86524c08cf4f4bc95327270a816d", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", "shasum": "" }, "require": { @@ -8463,7 +8469,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.2" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" }, "funding": [ { @@ -8479,7 +8485,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/var-exporter", @@ -9179,16 +9185,16 @@ }, { "name": "zircote/swagger-php", - "version": "4.10.4", + "version": "4.10.6", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "88895afcfaac955ed061489a2b19a431bf58b3e2" + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/88895afcfaac955ed061489a2b19a431bf58b3e2", - "reference": "88895afcfaac955ed061489a2b19a431bf58b3e2", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e462ff5269ea0ec91070edd5d51dc7215bdea3b6", + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6", "shasum": "" }, "require": { @@ -9254,9 +9260,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.10.4" + "source": "https://github.com/zircote/swagger-php/tree/4.10.6" }, - "time": "2024-07-10T02:06:32+00:00" + "time": "2024-07-26T03:04:43+00:00" } ], "packages-dev": [ @@ -9835,16 +9841,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.7", + "version": "1.11.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d" + "reference": "e370bcddadaede0c1716338b262346f40d296f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82", + "reference": "e370bcddadaede0c1716338b262346f40d296f82", "shasum": "" }, "require": { @@ -9889,25 +9895,25 @@ "type": "github" } ], - "time": "2024-07-06T11:17:41+00:00" + "time": "2024-08-01T16:25:18+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "1.4.5", + "version": "1.4.8", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "c87ee295de7573d9c015c492693e7af7f8cd85dc" + "reference": "fa497c5cf8a3f9cd3db8cb4033daf5244793d3e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/c87ee295de7573d9c015c492693e7af7f8cd85dc", - "reference": "c87ee295de7573d9c015c492693e7af7f8cd85dc", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/fa497c5cf8a3f9cd3db8cb4033daf5244793d3e1", + "reference": "fa497c5cf8a3f9cd3db8cb4033daf5244793d3e1", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.11" + "phpstan/phpstan": "^1.11.7" }, "conflict": { "doctrine/collections": "<1.0", @@ -9959,9 +9965,9 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.4.5" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.4.8" }, - "time": "2024-07-02T17:02:12+00:00" + "time": "2024-07-16T11:31:01+00:00" }, { "name": "phpstan/phpstan-phpunit", @@ -10017,22 +10023,22 @@ }, { "name": "phpstan/phpstan-symfony", - "version": "1.4.5", + "version": "1.4.6", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-symfony.git", - "reference": "1bd7c339f622dfb5a1a97dcaf1a862734eabfa1d" + "reference": "e909a075d69e0d4db262ac3407350ae2c6b6ab5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/1bd7c339f622dfb5a1a97dcaf1a862734eabfa1d", - "reference": "1bd7c339f622dfb5a1a97dcaf1a862734eabfa1d", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/e909a075d69e0d4db262ac3407350ae2c6b6ab5f", + "reference": "e909a075d69e0d4db262ac3407350ae2c6b6ab5f", "shasum": "" }, "require": { "ext-simplexml": "*", "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.11" + "phpstan/phpstan": "^1.11.7" }, "conflict": { "symfony/framework-bundle": "<3.0" @@ -10083,9 +10089,9 @@ "description": "Symfony Framework extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-symfony/issues", - "source": "https://github.com/phpstan/phpstan-symfony/tree/1.4.5" + "source": "https://github.com/phpstan/phpstan-symfony/tree/1.4.6" }, - "time": "2024-06-26T12:19:42+00:00" + "time": "2024-07-16T11:48:54+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10511,16 +10517,16 @@ }, { "name": "rector/rector", - "version": "1.2.0", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65" + "reference": "044e6364017882d1e346da8690eeabc154da5495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/2fa387553db22b6f9bcccf5ff16f2c2c18a52a65", - "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/044e6364017882d1e346da8690eeabc154da5495", + "reference": "044e6364017882d1e346da8690eeabc154da5495", "shasum": "" }, "require": { @@ -10558,7 +10564,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.2.0" + "source": "https://github.com/rectorphp/rector/tree/1.2.2" }, "funding": [ { @@ -10566,7 +10572,7 @@ "type": "github" } ], - "time": "2024-07-01T14:24:45+00:00" + "time": "2024-07-25T07:44:34+00:00" }, { "name": "roave/security-advisories", @@ -10574,17 +10580,17 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "fc38d77fa25d52b7da4c00962fa4189549c60e16" + "reference": "ee27abe60d541524cca97592ac68119cab33afce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/fc38d77fa25d52b7da4c00962fa4189549c60e16", - "reference": "fc38d77fa25d52b7da4c00962fa4189549c60e16", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ee27abe60d541524cca97592ac68119cab33afce", + "reference": "ee27abe60d541524cca97592ac68119cab33afce", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.2.13", + "admidio/admidio": "<4.3.10", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", @@ -10616,12 +10622,13 @@ "athlon1600/php-proxy": "<=5.1", "athlon1600/php-proxy-app": "<=3", "austintoddj/canvas": "<=3.4.2", - "automad/automad": "<=1.10.9", + "auth0/wordpress": "<=4.6", + "automad/automad": "<=2.0.0.0-alpha5", "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<3.288.1", "azuracast/azuracast": "<0.18.3", - "backdrop/backdrop": "<1.24.2", + "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", "backpack/crud": "<3.4.9", "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", "badaso/core": "<2.7", @@ -10636,7 +10643,7 @@ "bcosca/fatfree": "<3.7.2", "bedita/bedita": "<4", "bigfork/silverstripe-form-capture": ">=3,<3.1.1", - "billz/raspap-webgui": "<2.9.5", + "billz/raspap-webgui": "<=3.1.4", "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", "blueimp/jquery-file-upload": "==6.4.4", "bmarshall511/wordpress_zero_spam": "<5.2.13", @@ -10686,7 +10693,7 @@ "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<4.6.2", + "craftcms/cms": "<4.6.2|>=5.0.0.0-beta1,<=5.2.2", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", @@ -10739,7 +10746,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.26", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", @@ -10784,7 +10791,7 @@ "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1,<1.3.5", "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", - "friendsofsymfony1/symfony1": ">=1.1,<1.15.19", + "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", @@ -10822,7 +10829,7 @@ "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", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", "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/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/post-install": "<=1.0.4", @@ -10907,7 +10914,7 @@ "magento/core": "<=1.9.4.5", "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", + "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", "magneto/core": "<1.9.4.4-dev", "maikuolan/phpmussel": ">=1,<1.6", "mainwp/mainwp": "<=4.4.3.3", @@ -10978,9 +10985,9 @@ "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", - "opencart/opencart": "<=3.0.3.9|>=4", + "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.5", + "openmage/magento-lts": "<20.10.1", "opensolutions/vimbadmin": "<=3.0.15", "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", @@ -10990,6 +10997,7 @@ "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", + "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", "oxid-esales/oxideshop-ce": "<4.5", "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", "packbackbooks/lti-1-3-php-library": "<5", @@ -11031,7 +11039,7 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<=1.4.2", + "pimcore/admin-ui-classic-bundle": "<=1.5.1", "pimcore/customer-management-framework-bundle": "<4.0.6", "pimcore/data-hub": "<1.2.4", "pimcore/demo": "<10.3", @@ -11055,7 +11063,7 @@ "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", - "processwire/processwire": "<=3.0.210", + "processwire/processwire": "<=3.0.229", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.11.6", @@ -11104,11 +11112,12 @@ "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.13.39|>=5,<5.1.11", + "silverstripe/framework": "<5.2.16", "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.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", + "silverstripe/reports": "<5.2.3", "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", "silverstripe/subsites": ">=2,<2.6.1", @@ -11141,7 +11150,7 @@ "ssddanbrown/bookstack": "<24.05.1", "statamic/cms": "<4.46|>=5.3,<5.6.2", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<2.1.62", + "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", @@ -11157,7 +11166,7 @@ "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2|>=1.12.0.0-alpha1,<1.12.16|>=1.13.0.0-alpha1,<1.13.1", + "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", "symbiote/silverstripe-multivaluefield": ">=3,<3.1", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-seed": "<6.0.3", @@ -11216,11 +11225,12 @@ "topthink/framework": "<6.0.17|>=6.1,<6.1.5|>=8,<8.0.4", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3", - "torrentpier/torrentpier": "<=2.4.1", + "torrentpier/torrentpier": "<=2.4.3", "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", "tribalsystems/zenario": "<9.5.60602", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", + "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", "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.24|>=10,<=10.4.13|>=11,<=11.1", @@ -11258,7 +11268,8 @@ "wallabag/tcpdf": "<6.2.22", "wallabag/wallabag": "<2.6.7", "wanglelecc/laracms": "<=1.0.3", - "web-auth/webauthn-framework": ">=3.3,<3.3.4", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", + "web-auth/webauthn-lib": ">=4.5,<4.9", "web-feet/coastercms": "==5.5", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", @@ -11374,7 +11385,7 @@ "type": "tidelift" } ], - "time": "2024-07-10T17:04:19+00:00" + "time": "2024-08-01T22:04:46+00:00" }, { "name": "sebastian/cli-parser", @@ -12707,16 +12718,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8" + "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e823122d31935eb711e2767c31f3d71cb0b87fb1", + "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1", "shasum": "" }, "require": { @@ -12769,7 +12780,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.2" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.3" }, "funding": [ { @@ -12785,20 +12796,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "82b22245d9f3ef8ccb1d55d4e8ade8bc3885c302" + "reference": "b9357f73d2c14dcd36783a67386f510654828668" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/82b22245d9f3ef8ccb1d55d4e8ade8bc3885c302", - "reference": "82b22245d9f3ef8ccb1d55d4e8ade8bc3885c302", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/b9357f73d2c14dcd36783a67386f510654828668", + "reference": "b9357f73d2c14dcd36783a67386f510654828668", "shasum": "" }, "require": { @@ -12850,7 +12861,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.2" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.3" }, "funding": [ { @@ -12866,7 +12877,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "theseer/tokenizer", diff --git a/app/package.json b/app/package.json index c707891..d1aede7 100644 --- a/app/package.json +++ b/app/package.json @@ -16,7 +16,6 @@ "regenerator-runtime": "^0.14.1", "sass": "^1.77.7", "sass-loader": "^14.2.1", - "tom-select": "^2.3.1", "ts-loader": "^9.5.1", "typescript": "^5.5.3", "webpack": "^5.92.1", @@ -32,6 +31,7 @@ "build": "encore production --progress" }, "dependencies": { + "tom-select": "^2.3.1", "@hotwired/stimulus": "^3.2.2", "@symfony/stimulus-bridge": "^3.2.2", "@uppy/core": "^4.0.0", diff --git a/app/src/Controller/Admin/RegistrationCodeController.php b/app/src/Controller/Admin/RegistrationCodeController.php index cb9f3c1..969b501 100644 --- a/app/src/Controller/Admin/RegistrationCodeController.php +++ b/app/src/Controller/Admin/RegistrationCodeController.php @@ -2,11 +2,14 @@ namespace App\Controller\Admin; +use App\Dto\Utility\DefaultRequestValues; use App\Entity\RegistrationCode; use App\Entity\User; use App\Enum\UserRole; use App\Form\Admin\RegistrationCodeType; use App\Repository\RegistrationCodeRepository; +use App\Service\User\UserHandlerInterface; +use App\Util\RequestArgumentHelper; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -51,10 +54,23 @@ public function new(Request $request, EntityManagerInterface $entityManager): Re } #[Route('/{id}', name: 'show', methods: ['GET'])] - public function show(RegistrationCode $registrationCode): Response - { + public function show( + RegistrationCode $registrationCode, + UserHandlerInterface $userHandler, + Request $request + ): Response { + $arguments = RequestArgumentHelper::extractArguments( + request: $request, + defaultValues: new DefaultRequestValues(limit: 100) + ); + $users = $userHandler->filterAndPaginateUsers( + $arguments, + $registrationCode + ); + return $this->render('admin/registration_code/show.html.twig', [ 'registration_code' => $registrationCode, + 'users' => $users, ]); } diff --git a/app/src/Controller/Admin/WorkspaceController.php b/app/src/Controller/Admin/WorkspaceController.php index ed1a5ea..9fa26d5 100644 --- a/app/src/Controller/Admin/WorkspaceController.php +++ b/app/src/Controller/Admin/WorkspaceController.php @@ -6,11 +6,17 @@ use App\Dto\Admin\Form\WorkspaceEdit; use App\Dto\Utility\DefaultRequestValues; +use App\Dto\Utility\SortFilterPaginateArguments; use App\Entity\Workspace; +use App\Enum\FileType; use App\Enum\FlashType; use App\Enum\UserRole; use App\Enum\WorkspaceStatus; +use App\Exception\FileHandlerException; use App\Form\Admin\WorkspaceEditType; +use App\Service\File\FilePaginationHandlerInterface; +use App\Service\File\Filter\ChoiceFilter; +use App\Service\File\Filter\FileTypeFilter; use App\Service\User\MembershipHandlerInterface; use App\Service\Workspace\WorkspaceHandlerInterface; use App\Util\Paginator\PaginatorException; @@ -27,6 +33,7 @@ class WorkspaceController extends AbstractAdminController { /** * @throws PaginatorException + * @throws FileHandlerException */ #[Route('/{workspace}', name: 'index')] public function index( @@ -34,7 +41,8 @@ public function index( Request $request, WorkspaceHandlerInterface $workspaceHandler, TranslatorInterface $translator, - MembershipHandlerInterface $membershipHandler + MembershipHandlerInterface $membershipHandler, + FilePaginationHandlerInterface $filePaginationHandler, ): Response { $edit = (new WorkspaceEdit()) ->setStatus( @@ -60,9 +68,19 @@ public function index( sortFilterPaginateArguments: $arguments, ); + $files = $filePaginationHandler->filterAndPaginateFiles( + $workspace, + new SortFilterPaginateArguments(page: 1, limit: 5), + [ + new ChoiceFilter(['deletedAt', 'isNull']), + new FileTypeFilter(FileType::ASSET), + ] + ); + return $this->render('admin/workspace.html.twig', [ 'workspace' => $workspace, 'memberships' => $memberships, + 'files' => $files, 'form' => $form->createView(), ]); } diff --git a/app/src/Controller/Workspace/FileController.php b/app/src/Controller/Workspace/FileController.php index 592cc52..3f85d04 100644 --- a/app/src/Controller/Workspace/FileController.php +++ b/app/src/Controller/Workspace/FileController.php @@ -215,7 +215,7 @@ public function newFolder(string $filename, CategoryHandlerInterface $categoryHa $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $category = $categoryHandler->createCategory($create, $workspace, $user, $file); - $message = sprintf($this->translator->trans('file.updateSuccess'), $file->getFilename()); + $message = sprintf($this->translator->trans('file.addFolderSuccess'), $file->getFilename()); if ($request->isXmlHttpRequest()) { return $this->json( @@ -267,7 +267,7 @@ public function newCollection(string $filename, CollectionHandlerInterface $coll $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $collection = $collectionHandler->createCollection($create, $workspace, $user, $file); - $message = sprintf($this->translator->trans('file.updateSuccess'), $file->getFilename()); + $message = sprintf($this->translator->trans('file.newCollectionSuccess'), $file->getFilename()); if ($request->isXmlHttpRequest()) { return $this->json( diff --git a/app/src/Dto/Utility/SortFilterPaginateArguments.php b/app/src/Dto/Utility/SortFilterPaginateArguments.php index 4530093..25d74bb 100644 --- a/app/src/Dto/Utility/SortFilterPaginateArguments.php +++ b/app/src/Dto/Utility/SortFilterPaginateArguments.php @@ -16,10 +16,10 @@ * @param string[] $uploadedBy */ public function __construct( - private SortParam $sort, + private SortParam $sort = SortParam::UPLOADED_DESC, private int $page = 1, private int $limit = 30, - private ?ViewParam $view = null, + private ?ViewParam $view = ViewParam::VIEW_GRID, private ?string $search = null, private array $mimeTypes = [], private array $tags = [], diff --git a/app/src/Form/File/EditType.php b/app/src/Form/File/EditType.php index 5e5caad..a5a4efb 100644 --- a/app/src/Form/File/EditType.php +++ b/app/src/Form/File/EditType.php @@ -102,44 +102,43 @@ public function buildForm(FormBuilderInterface $builder, array $options): void 'disabled' => !$canEdit, ], ]); - if ([] !== $collectionChoices) { - $builder - ->add('assetCollections', ChoiceType::class, [ - 'label' => 'label.collections', - 'placeholder' => 'label.select', - 'choices' => $collectionChoices, - 'required' => false, - 'multiple' => true, - 'attr' => [ - 'readonly' => !$canEdit, - ], - 'autocomplete' => true, - ]); - $builder->get('assetCollections') - ->addModelTransformer( - new CallbackTransformer( - function ($assetCollections) { - $pickedCollections = []; - /** @var AssetCollection $collection */ - foreach ($assetCollections as $collection) { - $pickedCollections[] = $collection->getId(); - } + $builder + ->add('assetCollections', ChoiceType::class, [ + 'label' => 'label.collections', + 'placeholder' => 'label.select', + 'choices' => $collectionChoices, + 'required' => false, + 'multiple' => true, + 'attr' => [ + 'readonly' => !$canEdit, + 'data-controller' => 'assetview-collection-autocomplete', + ], + 'autocomplete' => true, + ]); + $builder->get('assetCollections') + ->addModelTransformer( + new CallbackTransformer( + function ($assetCollections) { + $pickedCollections = []; + /** @var AssetCollection $collection */ + foreach ($assetCollections as $collection) { + $pickedCollections[] = $collection->getId(); + } - return $pickedCollections; - }, - function (array $selection) use ($collections): array { - $pickedCollections = []; - foreach ($collections as $collection) { - if (in_array($collection->getId(), $selection, true)) { - $pickedCollections[] = $collection; - } + return $pickedCollections; + }, + function (array $selection) use ($collections): array { + $pickedCollections = []; + foreach ($collections as $collection) { + if (in_array($collection->getId(), $selection, true)) { + $pickedCollections[] = $collection; } - - return $pickedCollections; } - ) - ); - } + + return $pickedCollections; + } + ) + ); } public function configureOptions(OptionsResolver $resolver): void diff --git a/app/src/Repository/UserRepository.php b/app/src/Repository/UserRepository.php index 81d6090..932894e 100644 --- a/app/src/Repository/UserRepository.php +++ b/app/src/Repository/UserRepository.php @@ -2,6 +2,7 @@ namespace App\Repository; +use App\Entity\RegistrationCode; use App\Entity\User; use App\Entity\Workspace; use App\Enum\SortParam; @@ -92,11 +93,16 @@ public function findForAutocomplete(array $ids, ?string $query, int $limit): arr return $result; } - public function getUserQuery(SortParam $sortParam): Query + public function getUserQuery(SortParam $sortParam, ?RegistrationCode $registrationCode = null): Query { $qb = $this->createQueryBuilder('u') ->orderBy($this->getOrderBy($sortParam)); + if ($registrationCode instanceof RegistrationCode) { + $qb->andWhere('u.registrationCode = :registrationCode') + ->setParameter('registrationCode', $registrationCode); + } + return $qb->getQuery(); } diff --git a/app/src/Service/File/FilePaginationHandler.php b/app/src/Service/File/FilePaginationHandler.php index e373453..bb764ee 100644 --- a/app/src/Service/File/FilePaginationHandler.php +++ b/app/src/Service/File/FilePaginationHandler.php @@ -76,7 +76,9 @@ public function filterAndPaginateFiles( $files = $this->fileRepository->filterFiles($scope, $filters); $query = $this->fileRepository->sortFiles($files, $orderBy); - return $this->paginator->paginate( + $paginator = clone $this->paginator; + + return $paginator->paginate( query: $query, page: $sortFilterPaginateArguments->getPage(), limit: $sortFilterPaginateArguments->getLimit() diff --git a/app/src/Service/User/UserHandler.php b/app/src/Service/User/UserHandler.php index 7152f19..4df6f43 100644 --- a/app/src/Service/User/UserHandler.php +++ b/app/src/Service/User/UserHandler.php @@ -9,6 +9,7 @@ use App\Dto\User\Interface\NameRequestInterface; use App\Dto\User\Interface\UsernameRequestInterface; use App\Dto\Utility\SortFilterPaginateArguments; +use App\Entity\RegistrationCode; use App\Entity\User; use App\Entity\Workspace; use App\Enum\UserAction; @@ -124,10 +125,12 @@ public function getWorkspaceUserUploadCounts(Workspace $workspace, bool $cached /** * @throws PaginatorException */ - public function filterAndPaginateUsers(SortFilterPaginateArguments $sortFilterPaginateArguments): Paginator - { + public function filterAndPaginateUsers( + SortFilterPaginateArguments $sortFilterPaginateArguments, + ?RegistrationCode $registrationCode = null + ): Paginator { return $this->paginator->paginate( - query: $this->userRepository->getUserQuery($sortFilterPaginateArguments->getSort()), + query: $this->userRepository->getUserQuery($sortFilterPaginateArguments->getSort(), $registrationCode), page: $sortFilterPaginateArguments->getPage(), limit: $sortFilterPaginateArguments->getLimit() ); diff --git a/app/src/Service/User/UserHandlerInterface.php b/app/src/Service/User/UserHandlerInterface.php index e9de647..497e1f2 100644 --- a/app/src/Service/User/UserHandlerInterface.php +++ b/app/src/Service/User/UserHandlerInterface.php @@ -9,6 +9,7 @@ use App\Dto\User\Interface\NameRequestInterface; use App\Dto\User\Interface\UsernameRequestInterface; use App\Dto\Utility\SortFilterPaginateArguments; +use App\Entity\RegistrationCode; use App\Entity\User; use App\Entity\Workspace; use App\Exception\UserHandlerException; @@ -31,7 +32,10 @@ public function changeUsername(UsernameRequestInterface $action): void; public function changeLocale(LocaleRequestChangeInterface $action): void; - public function filterAndPaginateUsers(SortFilterPaginateArguments $sortFilterPaginateArguments): Paginator; + public function filterAndPaginateUsers( + SortFilterPaginateArguments $sortFilterPaginateArguments, + ?RegistrationCode $registrationCode = null + ): Paginator; public function adminUpdateUser(User $userToEdit, UserEdit $edit, User $user): void; diff --git a/app/templates/admin/index.html.twig b/app/templates/admin/index.html.twig index 353a5c8..3a56c50 100644 --- a/app/templates/admin/index.html.twig +++ b/app/templates/admin/index.html.twig @@ -25,6 +25,7 @@ {% endfor %} + {% include 'partials/_pagination.html.twig' with {'pages': workspaces.pages, 'page': workspaces.page, 'classicPagination': true} %} {% endblock %} diff --git a/app/templates/admin/registration_code/show.html.twig b/app/templates/admin/registration_code/show.html.twig index 7eb0122..3ea1ae3 100644 --- a/app/templates/admin/registration_code/show.html.twig +++ b/app/templates/admin/registration_code/show.html.twig @@ -39,4 +39,45 @@ edit {{ include('admin/registration_code/_delete_form.html.twig') }} + + {% if users.total > 0 %} +
+ + + + + + + + + + + {% for user in users.items %} + + + + + + + {% endfor %} + +
{{ 'admin.user.emailadress'|trans }}{{ 'admin.user.name'|trans }}{{ 'admin.user.username'|trans }}{{ 'admin.user.workspace'|trans }}
{{ user.email|default }}{{ user.name|default }}{{ user.username|default }} + {% if user.memberships.count|default(0) > 0 %} + + {% endif %} +
+
+ {% include 'partials/_pagination.html.twig' with {'pages': users.pages, 'page': users.page, 'classicPagination': true} %} + {% endif %} {% endblock %} diff --git a/app/templates/admin/users/index.html.twig b/app/templates/admin/users/index.html.twig index 43c79d7..60d35a9 100644 --- a/app/templates/admin/users/index.html.twig +++ b/app/templates/admin/users/index.html.twig @@ -14,6 +14,7 @@ {{ 'admin.user.registeredAt'|trans }} {{ 'admin.user.status'|trans }} {{ 'admin.user.notice'|trans }} + {{ 'admin.user.registrationCode'|trans }} @@ -22,20 +23,37 @@ {{ user.id }} {{ user.name }} ({{ user.username }} / {{ user.email }}) - {% if user.lastUsedWorkspace %} - - {{ user.lastUsedWorkspace.slug }} / {{ user.lastUsedWorkspace.name }} - + {% if user.memberships.count|default(0) > 0 %} + {% endif %} {{ user|daminikRole }} {{ user.createdAt|format_datetime('short', 'none') }} {{ user.status }} {{ user.adminNotice }} + + {% if user.registrationCode %} + + {{ user.registrationCode.code }} + + {% endif %} + {% endfor %} + {% include 'partials/_pagination.html.twig' with {'pages': users.pages, 'page': users.page, 'classicPagination': true} %} {% endblock %} diff --git a/app/templates/admin/workspace.html.twig b/app/templates/admin/workspace.html.twig index 3e7ea48..4f7a3ab 100644 --- a/app/templates/admin/workspace.html.twig +++ b/app/templates/admin/workspace.html.twig @@ -27,8 +27,36 @@ - {% include 'partials/_pagination.html.twig' with {'pages': memberships.pages, 'page': memberships.page} %} + {% include 'partials/_pagination.html.twig' with {'pages': memberships.pages, 'page': memberships.page, 'classicPagination': true} %} {% endif %} + {% if files.total > 0 %} +
+ + + {% for file in files.items %} + + + + + + + {% endfor %} + +
+ {{ file.filename }} + + {{ file.filename }} + + + {{ file.uploader.name }} + ({{ file.uploader.username }}) + + + {{ file.createdAt|format_datetime }} +
+
{% endif %} {% endblock %} diff --git a/app/templates/components/SearchForm.html.twig b/app/templates/components/SearchForm.html.twig index 337c6e7..1e27b8e 100644 --- a/app/templates/components/SearchForm.html.twig +++ b/app/templates/components/SearchForm.html.twig @@ -10,8 +10,16 @@ {% endif %} {{ form_end(searchForm) }} {% else %} -
- {{ form_widget(searchForm.s, {'attr': {'form': 'filters-form'}}) }} +
+ {{ form_widget(searchForm.s, {'attr': {'form': 'filters-form', 'data-clear-input-button-target': 'input'}}) }} +
{% endif %}
diff --git a/app/templates/workspace/file/view.html.twig b/app/templates/workspace/file/view.html.twig index 3120429..24fc394 100644 --- a/app/templates/workspace/file/view.html.twig +++ b/app/templates/workspace/file/view.html.twig @@ -131,7 +131,7 @@ {{ form_help(form.category) }} - {% if form.assetCollections is defined %} +{# {% if form.assetCollections is defined %}#}
{{ form_label(form.assetCollections) }} @@ -143,7 +143,7 @@ {{ form_widget(form.assetCollections, {'attr': {'class': 'multiselect', 'data-assetview-target': 'collectionSelect'}}) }} {{ form_help(form.assetCollections) }}
- {% endif %} +{# {% endif %}#} {% include 'partials/_file-dates-table.html.twig' %} diff --git a/app/translations/messages+intl-icu.de.yml b/app/translations/messages+intl-icu.de.yml index d2f2858..e4728cc 100644 --- a/app/translations/messages+intl-icu.de.yml +++ b/app/translations/messages+intl-icu.de.yml @@ -63,6 +63,7 @@ base: backToApp: 'Zurück zur App' cancel: Abbrechen apply: Anwenden + clearInput: 'Feld leeren' invites: invite: Einladen inviteInstruction: '(Um einen neuen Einladungslink zu generieren, kannst du einfach das Formular ohne E-Mail Adresse abschicken.)' @@ -96,6 +97,8 @@ registration: noAccountYet: 'Du hast noch keinen Account? Jetzt registrieren' file: updateSuccess: 'Die Datei %s wurde erfolgreich aktualisiert.' + addFolderSuccess: 'Die Datei %s wurde erfolgreich verschoben.' + newCollectionSuccess: 'Die Datei %s wurde erfolgreich der Kollektion zugewiesen.' accessDenied: 'Zugriff verweigert.' tryAgainCsrf: 'Bitte noch einmal versuchen. (CSRF-Token)' deletedSuccess: 'Die Datei %s wurde erfolgreich gelöscht.' @@ -240,6 +243,7 @@ admin: role: Rolle actions: Aktionen registeredAt: 'Registriert am' + registrationCode: 'Registrierungscode' message: user: lastOwner: 'Der Workspace braucht mindestens einen Besitzer.' diff --git a/app/translations/messages+intl-icu.en.yml b/app/translations/messages+intl-icu.en.yml index 4270a5f..8f3ae69 100644 --- a/app/translations/messages+intl-icu.en.yml +++ b/app/translations/messages+intl-icu.en.yml @@ -63,6 +63,7 @@ base: select: Select cancel: Cancel apply: Apply + clearInput: 'Clear input' invites: invite: Invite inviteInstruction: '(Generate new invite link: submit form without email address.)' @@ -96,6 +97,8 @@ registration: noAccountYet: 'You do not have an account, yet? Why not register' file: updateSuccess: 'The file %s has been successfully updated.' + addFolderSuccess: 'The file %s has been moved to the folder.' + newCollectionSuccess: 'The file %s has been added to the collection.' accessDenied: 'Access Denied.' tryAgainCsrf: 'Please try again. (CSRF-Token)' deletedSuccess: 'File %s successfully deleted' @@ -240,6 +243,7 @@ admin: role: Role actions: Actions registeredAt: 'Registered at' + registrationCode: 'Registration Code' message: user: lastOwner: 'The workspace needs at least one owner' diff --git a/app/translations/validators.de.yml b/app/translations/validators.de.yml index a68d59a..d881f87 100644 --- a/app/translations/validators.de.yml +++ b/app/translations/validators.de.yml @@ -24,11 +24,17 @@ ' It should have {{ limit }} character or less': '|This value is too long': ' It should have {{ limit }} characters or less.': 'Diese Zeichenkette ist zu lang. Sie sollte höchstens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu lang. Sie sollte höchstens {{ limit }} Zeichen haben.' + ' It should contain one word': + '|This value is too long': + ' It should contain {{ max }} words or less.': 'Dieser Wert ist zu lang. Er darf maximal aus einem Wort bestehen.|Dieser Wert ist zu lang. Er darf maximal {{ max }} Wörter enthalten.' 'This value should be {{ limit }} or more.': 'Dieser Wert sollte größer oder gleich {{ limit }} sein.' 'This value is too short': ' It should have {{ limit }} character or more': '|This value is too short': ' It should have {{ limit }} characters or more.': 'Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.|Diese Zeichenkette ist zu kurz. Sie sollte mindestens {{ limit }} Zeichen haben.' + ' It should contain at least one word': + '|This value is too short': + ' It should contain at least {{ min }} words.': 'Dieser Wert ist zu kurz. Er muss aus mindestens einem Wort bestehen.|Dieser Wert ist zu kurz. Er muss mindestens {{ min }} Wörter enthalten.' 'This value should not be blank.': 'Dieser Wert sollte nicht leer sein.' 'This value should not be null.': 'Dieser Wert sollte nicht null sein.' 'This value should be null.': 'Dieser Wert sollte null sein.' diff --git a/app/translations/validators.en.yml b/app/translations/validators.en.yml index a4a6ba3..2c55716 100644 --- a/app/translations/validators.en.yml +++ b/app/translations/validators.en.yml @@ -24,11 +24,17 @@ ' It should have {{ limit }} character or less': '|This value is too long': ' It should have {{ limit }} characters or less.': 'This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.' + ' It should contain one word': + '|This value is too long': + ' It should contain {{ max }} words or less.': 'This value is too long. It should contain one word.|This value is too long. It should contain {{ max }} words or less.' 'This value should be {{ limit }} or more.': 'This value should be {{ limit }} or more.' 'This value is too short': ' It should have {{ limit }} character or more': '|This value is too short': ' It should have {{ limit }} characters or more.': 'This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.' + ' It should contain at least one word': + '|This value is too short': + ' It should contain at least {{ min }} words.': 'This value is too short. It should contain at least one word.|This value is too short. It should contain at least {{ min }} words.' 'This value should not be blank.': 'This value should not be blank.' 'This value should not be null.': 'This value should not be null.' 'This value should be null.': 'This value should be null.' diff --git a/app/tsconfig.json b/app/tsconfig.json index da35a53..0bad406 100644 --- a/app/tsconfig.json +++ b/app/tsconfig.json @@ -25,10 +25,11 @@ "noUnusedParameters": true, "incremental": true, "noFallthroughCasesInSwitch": true, - "noImplicitThis": false + "noImplicitThis": false, + "strictPropertyInitialization": false }, "include": [ "assets/**/*" ], "exclude": ["node_modules", "build"] -} \ No newline at end of file +}