diff --git a/.github/ISSUE_TEMPLATE/pw-clp-request.md b/.github/ISSUE_TEMPLATE/pw-clp-request.md index 76fe9cc1527..11d040cac61 100644 --- a/.github/ISSUE_TEMPLATE/pw-clp-request.md +++ b/.github/ISSUE_TEMPLATE/pw-clp-request.md @@ -25,6 +25,15 @@ Help desk ticket: - [ ] Name of submitter (if applicable) Submitter: +- Campaign title: +- Who the editor(s) will be for the Campaign Landing Page and any appropriate stakeholders for awareness: +- The goals/outcomes you are looking to achieve with the campaign: +- Outcome success measurement & how it will be measured (note: "Page views" is not a generally accepted success measurement): +- Target Audience(s): +- Campaign start/end dates: +- Is this a seasonal campaign? +- If not: when campaign ends, should campaign page be archived or redirected? +- If redirected, where should it redirect? ## Acceptance criteria diff --git a/.github/workflows/actions-metrics.yml b/.github/workflows/actions-metrics.yml index 6054149c832..74ac8979a09 100644 --- a/.github/workflows/actions-metrics.yml +++ b/.github/workflows/actions-metrics.yml @@ -11,7 +11,7 @@ jobs: timeout-minutes: 10 steps: - name: Send GitHub Actions metrics to DataDog - uses: int128/datadog-actions-metrics@6c6a657047c0452b33ec3c254009c331e47c1370 # v1.64.0 + uses: int128/datadog-actions-metrics@12d225bf2f764e5103a994157c1316df39dc3fae # v1.68.0 with: datadog-api-key: ${{ secrets.DATADOG_API_KEY }} collect-job-metrics: true diff --git a/.github/workflows/tugboat-pr-closed.yml b/.github/workflows/tugboat-pr-closed.yml index 26501bbe2a6..fe8e7da6176 100644 --- a/.github/workflows/tugboat-pr-closed.yml +++ b/.github/workflows/tugboat-pr-closed.yml @@ -14,7 +14,7 @@ jobs: name: Delete Tugboat Preview steps: - name: Restore Preview ID - uses: actions/cache/restore@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 + uses: actions/cache/restore@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.3 with: path: .tugboat_preview.txt key: ${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }} diff --git a/.github/workflows/tugboat-pr-opened.yml b/.github/workflows/tugboat-pr-opened.yml index 1bc92b76207..25ec18f294e 100644 --- a/.github/workflows/tugboat-pr-opened.yml +++ b/.github/workflows/tugboat-pr-opened.yml @@ -39,7 +39,7 @@ jobs: key: `${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }}`, }); - name: Save Preview ID - uses: actions/cache/save@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 + uses: actions/cache/save@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.3 with: path: .tugboat_preview.txt key: ${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }} diff --git a/.github/workflows/tugboat-pr-updated.yml b/.github/workflows/tugboat-pr-updated.yml index 1e0adb4461c..44adbe87ec2 100644 --- a/.github/workflows/tugboat-pr-updated.yml +++ b/.github/workflows/tugboat-pr-updated.yml @@ -14,7 +14,7 @@ jobs: name: Rebuild Tugboat Preview steps: - name: Restore Preview ID - uses: actions/cache/restore@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 + uses: actions/cache/restore@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.3 with: path: .tugboat_preview.txt key: ${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }} diff --git a/.github/workflows/tugboat-refresh-cache-responder.yml b/.github/workflows/tugboat-refresh-cache-responder.yml index 9186df928af..1e87d3d9856 100644 --- a/.github/workflows/tugboat-refresh-cache-responder.yml +++ b/.github/workflows/tugboat-refresh-cache-responder.yml @@ -11,7 +11,7 @@ jobs: if: ${{ github.event.label.name == 'refresh-tugboat-cache' }} steps: - name: Refresh Preview ID - uses: actions/cache/restore@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 + uses: actions/cache/restore@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.3 with: path: .tugboat_preview.txt key: ${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }} diff --git a/READMES/devops/tugboat.md b/READMES/devops/tugboat.md index bb0ab10c4e4..c2446d76153 100644 --- a/READMES/devops/tugboat.md +++ b/READMES/devops/tugboat.md @@ -33,3 +33,23 @@ Can only update CPU and memory at a project level, not repository level. 1. `tugboat ls 5fd3b8ee7b465711575722d5 -j | grep memory` # Get current limit 1. `tugboat update 5fd3b8ee7b465711575722d5 memory=16384` # Set limit to 16GB 1. `tugboat ls 5fd3b8ee7b465711575722d5 -j | grep memory` # Verify new limit + +## Tugboat Crisis Intervention + +### Overload + +**Symptoms**: Tugboat is slow, requests to Tugboat dashboard return 502/504 status codes, previews disappear and reappear, etc. + +**Diagnosis**: Tugboat might be overloaded; too many previews might be running simultaneously. + +**Verification**: + +1. Log into the Tugboat server (`ssm-session utility tugboat auto`). +2. Check system load and free memory (e.g. `top`). +3. If load is incredibly high, and available memory is very low, then the Tugboat server might be dealing with too many open previews. + +**Remediation**: + +1. Close unused previews in the CMS/Pull Requests project. Target older previews and those corresponding to closed/merged PRs; these should be closed automatically, but there may be issues somewhere in the system that impair communication and cause these to remain open. +2. Suspend older previews. This normally happens automatically (for Pull Request-based previews that haven't been touched in some period of time), but a flurry of previews might have been created inadvertently. +3. Consider upscaling the Tugboat server or migrating to an alternative architecture. diff --git a/READMES/user_management.md b/READMES/user_management.md index a5b6a2a0852..4701188e8c3 100644 --- a/READMES/user_management.md +++ b/READMES/user_management.md @@ -18,7 +18,7 @@ To resolve this issue: To import users: -1. go to [the import page](https://prod.cms.va.gov/migrate_source_ui) +1. go to [the import page](https://prod.cms.va.gov/admin/content/migrate_source_ui)) 1. Select "User Import (supports csv)" from the **Migrations** dropdown 1. Upload a CSV file in the following format: ``` diff --git a/composer.json b/composer.json index 7dd19e59c55..59d526e6295 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ "composer/installers": "^2.2", "consolidation/site-process": "^5.2", "cweagans/composer-patches": "^1.7", - "datadog/dd-trace": "^0.96.0", + "datadog/dd-trace": "^0.97.0", "dealerdirect/phpcodesniffer-composer-installer": "0.7.2", "drupal/address": "^1.4", "drupal/admin_feedback": "^2.2", @@ -34,6 +34,7 @@ "drupal/block_content_permissions": "^1.6", "drupal/cer": "^5.0@beta", "drupal/change_labels": "dev-3326097-remove-dependency-on-drupal-autoservices#7f92f90b456ac2f394dd434257e39e1d9b3086eb", + "drupal/clientside_validation": "^4.0", "drupal/ckeditor_abbreviation": "^4.0@alpha", "drupal/coder": "^8.3", "drupal/codit_menu_tools": "^1.0@alpha", @@ -48,9 +49,8 @@ "drupal/consumers": "^1.17.0", "drupal/content_lock": "^2.3", "drupal/content_model_documentation": "^1.0.19", - "drupal/core": "10.1.7 as 9.5", - "drupal/core-composer-scaffold": "10.1.7 as 9.5", - "drupal/core-recommended": "10.1.7 as 9.5", + "drupal/core-composer-scaffold": "^10.2.0", + "drupal/core-recommended": "^10.2.0", "drupal/crop": "^2.0", "drupal/csv_serialization": "^4.0", "drupal/ctools_block": "^4.0", @@ -98,7 +98,7 @@ "drupal/hierarchy_manager": "^3.0", "drupal/hms_field": "^2.0", "drupal/hook_event_dispatcher": "^4.0@beta", - "drupal/ief_table_view_mode": "^2.1", + "drupal/ief_table_view_mode": "^3.0", "drupal/image_style_warmer": "^1.2@RC", "drupal/image_widget_crop": "^2.2", "drupal/jsonapi_extras": "^3.19", @@ -193,7 +193,7 @@ "drupal/views_local_tasks": "^1.0", "drupal/workbench_access": "^2.0", "drupal/workbench_menu_access": "^2.0", - "drush/drush": "^11", + "drush/drush": "^12", "easyrdf/easyrdf": "1.1.1 as 0.9.1", "geocoder-php/mapbox-provider": "^1.3", "gitonomy/gitlib": "^1.2", @@ -204,6 +204,7 @@ "mikey179/vfsstream": "^1.6", "mnsami/composer-custom-directory-installer": "^2.0", "npm-asset/dropzone": "^5.5", + "npm-asset/jquery-validation": "^1.17", "npm-asset/yarn": "1.19.1", "oomphinc/composer-installers-extender": "^2.0", "orakili/composer-drupal-info-file-patch-helper": "*", @@ -221,7 +222,7 @@ "symfony/phpunit-bridge": "^5.1", "symfony/process": "^6.3", "symfony/routing": "^6.3", - "va-gov/content-build": "^0.0.3417", + "va-gov/content-build": "^0.0.3427", "vlucas/phpdotenv": "^5.3", "webflo/drupal-finder": "^1.0.0", "webmozart/path-util": "^2.3", @@ -366,6 +367,9 @@ "3200122 - Remove delete hook": "https://www.drupal.org/files/issues/2021-02-24/delete-hook-added-in-dev-causes-test-failures.patch", "3254663 - Notice: Undefined index: target_bundles on Drupal\\cer\\Entity\\CorrespondingReference->synchronizeCorrespondingField()": "https://www.drupal.org/files/issues/2022-02-14/prevent-undefined-index-3254663-6.patch" }, + "drupal/clientside_validation": { + "2949540 - Allow specific form ids for clientside validation": "https://www.drupal.org/files/issues/2023-10-27/2949540-31.patch" + }, "drupal/consumer_image_styles": { "3301224 - Follow-up: Very slow JSON:API responses when images are stored on AWS bucket": "https://www.drupal.org/files/issues/2023-02-07/3301224-9.patch" }, @@ -385,10 +389,10 @@ "2767243 - Create a theme suggestion for taxonomy terms by view mode": "https://www.drupal.org/files/issues/core-theme-suggestion-for-taxonomy-view-modes-2767243-14.patch", "2775665 - MenuLinkContent updateLink function generates a PHP Warning for override-able keys that are not present in the loaded entity": "https://www.drupal.org/files/issues/2021-09-17/updateLink-2775665-14.patch", "Claro claro_preprocess_input()": "patches/drupal-core-claro_preprocess_input.patch", - "1156338 - Fixed maximum number of field values, but use «add more» similar to when cardinality «unlimited» is used": "https://www.drupal.org/files/issues/2022-01-27/drupal-fix-limited-cardinality-fields-1156338-23.patch", + "1156338 - Fixed maximum number of field values, but use «add more» similar to when cardinality «unlimited» is used": "https://www.drupal.org/files/issues/2023-12-20/1156338-31.patch", "2942404 - Contentinfo landmark" : "https://www.drupal.org/files/issues/2023-06-30/2942404-messages-should-have-role-status.patch", "3047110 - Add workflow to taxonomy" : "https://www.drupal.org/files/issues/2023-04-14/3047110-45.patch", - "3106205 - Length of menu_tree.url and menu_tree.route_param_key are too short (255 characters)": "https://www.drupal.org/files/issues/2023-05-24/3106205-length-menu-tree-too-short.patch", + "3106205 - Length of menu_tree.url and menu_tree.route_param_key are too short (255 characters)": "https://www.drupal.org/files/issues/2024-01-02/3106205-length-menu-tree-too-short-48.patch", "3333401 - Pager h4 cause accessibility flag on many pages": "https://www.drupal.org/files/issues/2023-11-01/3333401-64.patch", "3382759 - Add multiple workflow content moderation filter to Views.": "https://www.drupal.org/files/issues/2023-08-24/3382759-8.patch", "3241295 - CKEditor 5 isn't respecting field widgets row settings": "https://www.drupal.org/files/issues/2023-11-14/3241295-d10.1.6-114.patch", @@ -443,8 +447,7 @@ }, "drupal/inline_entity_form": { "3226473 - Opt-in system delete.": "https://www.drupal.org/files/issues/2023-03-28/3226473-opt-in-system-delete-2.patch", - "3061620 - Cancel closes all forms": "https://www.drupal.org/files/issues/2022-07-21/inline_entity_form-close-only-forms-where-close-clicked-3061620-13.patch", - "3311501 - Add label to weight select field for accessibility": "https://www.drupal.org/files/issues/2022-09-23/Adding_labels_to_weight_selects_for_accessibility.patch" + "3061620 - Cancel closes all forms": "https://www.drupal.org/files/issues/2022-07-21/inline_entity_form-close-only-forms-where-close-clicked-3061620-13.patch" }, "drupal/jsonapi_menu_items": { "3276561 - Add support for the Menu Item Extras module": "https://www.drupal.org/files/issues/2022-08-01/3276561-05-menu_item_extras_support.patch" @@ -503,7 +506,8 @@ }, "drupal/smart_date": { "3260965 - Undefined index: #value": "https://www.drupal.org/files/issues/2022-01-27/smart_date_undefined_value_in_validation.patch", - "3385720 - Implement errorElement() in Widgets": "https://www.drupal.org/files/issues/2023-09-08/smart_date-implement-errorelement-3385720-3.patch" + "3385720 - Implement errorElement() in Widgets": "https://www.drupal.org/files/issues/2023-09-08/smart_date-implement-errorelement-3385720-3.patch", + "3413612 - The repeat end date should not be allowed to come before the start time": "https://www.drupal.org/files/issues/2024-01-11/smart_date-repeat-end-date-3413612-0.patch" }, "drupal/tablefield": { "3100109 - 0 string value in cell throws empty error": "https://www.drupal.org/files/issues/2019-12-10/0-value-throwing-empty-error.patch", diff --git a/composer.lock b/composer.lock index 566767364a9..38b81fca252 100644 --- a/composer.lock +++ b/composer.lock @@ -4,35 +4,35 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dd7a8b38039836aeebdc472d433eaf95", + "content-hash": "26320bc610a7b624865efbbf2f06c0b2", "packages": [ { "name": "asm89/stack-cors", - "version": "v2.1.1", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/asm89/stack-cors.git", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" + "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/50f57105bad3d97a43ec4a485eb57daf347eafea", + "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "symfony/http-foundation": "^4|^5|^6", - "symfony/http-kernel": "^4|^5|^6" + "php": "^7.3|^8.0", + "symfony/http-foundation": "^5.3|^6|^7", + "symfony/http-kernel": "^5.3|^6|^7" }, "require-dev": { - "phpunit/phpunit": "^7|^9", + "phpunit/phpunit": "^9", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" } }, "autoload": { @@ -58,9 +58,9 @@ ], "support": { "issues": "https://github.com/asm89/stack-cors/issues", - "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" + "source": "https://github.com/asm89/stack-cors/tree/v2.2.0" }, - "time": "2022-01-18T09:12:03+00:00" + "time": "2023-11-14T13:51:46+00:00" }, { "name": "bjeavons/zxcvbn-php", @@ -122,7 +122,7 @@ "version": "v4.1.0", "source": { "type": "git", - "url": "https://github.com/fengyuanchen/cropper.git", + "url": "git@github.com:fengyuanchen/cropper.git", "reference": "617d9bdb8688cc4edb3b03bc49a04b83c7facbe7" }, "dist": { @@ -195,49 +195,48 @@ }, { "name": "chi-teck/drupal-code-generator", - "version": "2.6.2", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/Chi-teck/drupal-code-generator.git", - "reference": "22ed1cc02dc47814e8239de577da541e9b9bd980" + "reference": "56da9209b24a5a5b5d27bec9e523f02bdd101770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/22ed1cc02dc47814e8239de577da541e9b9bd980", - "reference": "22ed1cc02dc47814e8239de577da541e9b9bd980", + "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/56da9209b24a5a5b5d27bec9e523f02bdd101770", + "reference": "56da9209b24a5a5b5d27bec9e523f02bdd101770", "shasum": "" }, "require": { "ext-json": "*", - "php": ">=7.4", - "psr/log": "^1.1 || ^2.0 || ^3.0", - "symfony/console": "^4.4.15 || ^5.1 || ^6.0", - "symfony/filesystem": "^4.4 || ^5.1 || ^6", - "symfony/polyfill-php80": "^1.23", - "symfony/string": "^5.1 || ^6", - "twig/twig": "^2.14.11 || ^3.1" + "php": ">=8.1.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^3.0", + "symfony/console": "^6.3", + "symfony/dependency-injection": "^6.3.2", + "symfony/filesystem": "^6.3", + "symfony/string": "^6.3", + "twig/twig": "^3.4" }, "conflict": { "squizlabs/php_codesniffer": "<3.6" }, "require-dev": { - "chi-teck/drupal-coder-extension": "^1.2", - "drupal/coder": "^8.3.14", + "chi-teck/drupal-coder-extension": "^2.0.0-alpha4", + "drupal/coder": "8.3.22", + "drupal/core": "10.1.x-dev", + "ext-simplexml": "*", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.4", - "squizlabs/php_codesniffer": "^3.5", - "symfony/var-dumper": "^5.2 || ^6.0", - "symfony/yaml": "^5.2 || ^6.0" + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "symfony/var-dumper": "^6.3", + "symfony/yaml": "^6.3", + "vimeo/psalm": "^5.14.0" }, "bin": [ "bin/dcg" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "psr-4": { "DrupalCodeGenerator\\": "src" @@ -250,9 +249,9 @@ "description": "Drupal code generator", "support": { "issues": "https://github.com/Chi-teck/drupal-code-generator/issues", - "source": "https://github.com/Chi-teck/drupal-code-generator/tree/2.6.2" + "source": "https://github.com/Chi-teck/drupal-code-generator/tree/3.3.0" }, - "time": "2022-11-11T15:34:04+00:00" + "time": "2023-10-21T12:57:05+00:00" }, { "name": "clue/stream-filter", @@ -531,16 +530,16 @@ }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { @@ -590,9 +589,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { @@ -608,20 +607,20 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2023-08-31T09:50:34+00:00" }, { "name": "consolidation/annotated-command", - "version": "4.9.1", + "version": "4.9.2", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "e01152f698eff4cb5df3ebfe5e097ef335dbd3c9" + "reference": "b5255dcbee1de95036185062a103dabc622224de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e01152f698eff4cb5df3ebfe5e097ef335dbd3c9", - "reference": "e01152f698eff4cb5df3ebfe5e097ef335dbd3c9", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/b5255dcbee1de95036185062a103dabc622224de", + "reference": "b5255dcbee1de95036185062a103dabc622224de", "shasum": "" }, "require": { @@ -662,9 +661,9 @@ "description": "Initialize Symfony Console commands from annotated command class methods.", "support": { "issues": "https://github.com/consolidation/annotated-command/issues", - "source": "https://github.com/consolidation/annotated-command/tree/4.9.1" + "source": "https://github.com/consolidation/annotated-command/tree/4.9.2" }, - "time": "2023-05-20T04:19:01+00:00" + "time": "2023-12-26T14:30:50+00:00" }, { "name": "consolidation/config", @@ -1176,16 +1175,16 @@ }, { "name": "datadog/dd-trace", - "version": "0.96.0", + "version": "0.97.0", "source": { "type": "git", "url": "https://github.com/DataDog/dd-trace-php.git", - "reference": "96ce8786574a1cc1f0fbcf8570a5b9025cdabca9" + "reference": "e76850105e99ba5d5b36697b3e4553ee70cfdae9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DataDog/dd-trace-php/zipball/96ce8786574a1cc1f0fbcf8570a5b9025cdabca9", - "reference": "96ce8786574a1cc1f0fbcf8570a5b9025cdabca9", + "url": "https://api.github.com/repos/DataDog/dd-trace-php/zipball/e76850105e99ba5d5b36697b3e4553ee70cfdae9", + "reference": "e76850105e99ba5d5b36697b3e4553ee70cfdae9", "shasum": "" }, "require": { @@ -1274,9 +1273,9 @@ ], "support": { "issues": "https://github.com/DataDog/dd-trace-php/issues", - "source": "https://github.com/DataDog/dd-trace-php/tree/0.96.0" + "source": "https://github.com/DataDog/dd-trace-php/tree/0.97.0" }, - "time": "2023-12-19T09:26:52+00:00" + "time": "2024-01-18T10:15:17+00:00" }, { "name": "davedevelopment/stiphle", @@ -2593,17 +2592,17 @@ }, { "name": "drupal/animated_gif", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/animated_gif.git", - "reference": "2.0.3" + "reference": "2.0.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/animated_gif-2.0.3.zip", - "reference": "2.0.3", - "shasum": "44c3ef0f8b6c0a1d39dc1715013c1f9071938397" + "url": "https://ftp.drupal.org/files/projects/animated_gif-2.0.4.zip", + "reference": "2.0.4", + "shasum": "157277d80d0c9b3a1b25f712bea7e1b9b9227e1e" }, "require": { "drupal/core": "^9.3 || ^10" @@ -2611,8 +2610,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.3", - "datestamp": "1682278376", + "version": "2.0.4", + "datestamp": "1700934453", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2990,6 +2989,68 @@ "issues": "http://drupal.org/project/issues/ckeditor_abbreviation" } }, + { + "name": "drupal/clientside_validation", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/clientside_validation.git", + "reference": "4.0.2" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/clientside_validation-4.0.2.zip", + "reference": "4.0.2", + "shasum": "bfaf0fa81d645427c1b3ccfd2d5e493a10b7f483" + }, + "require": { + "drupal/core": "^9.4 || ^10.0", + "php": ">=7.4.0" + }, + "require-dev": { + "drupal/clientside_validation_demo": "*", + "drupal/clientside_validation_jquery": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "4.0.2", + "datestamp": "1676011269", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "attiks", + "homepage": "https://www.drupal.org/user/105002" + }, + { + "name": "Jelle_S", + "homepage": "https://www.drupal.org/user/829198" + }, + { + "name": "joseph.olstad", + "homepage": "https://www.drupal.org/user/1321830" + }, + { + "name": "nikunjkotecha", + "homepage": "https://www.drupal.org/user/694082" + } + ], + "description": "This module adds clientside validation", + "homepage": "https://www.drupal.org/project/clientside_validation", + "support": { + "source": "https://git.drupalcode.org/project/clientside_validation", + "issues": "https://drupal.org/project/issues/clientside_validation" + } + }, { "name": "drupal/coder", "version": "8.3.22", @@ -3767,16 +3828,16 @@ }, { "name": "drupal/core", - "version": "10.1.7", + "version": "10.2.2", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "54415049a721ede65318e3980b402af59bc35913" + "reference": "fc9abad1ab687635a5eddec00aa1a5f2a29a23bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/54415049a721ede65318e3980b402af59bc35913", - "reference": "54415049a721ede65318e3980b402af59bc35913", + "url": "https://api.github.com/repos/drupal/core/zipball/fc9abad1ab687635a5eddec00aa1a5f2a29a23bd", + "reference": "fc9abad1ab687635a5eddec00aa1a5f2a29a23bd", "shasum": "" }, "require": { @@ -3806,23 +3867,26 @@ "php": ">=8.1.0", "psr/log": "^3.0", "sebastian/diff": "^4", - "symfony/console": "^6.3", - "symfony/dependency-injection": "^6.3", - "symfony/event-dispatcher": "^6.3", - "symfony/http-foundation": "^6.3", - "symfony/http-kernel": "^6.3", - "symfony/mime": "^6.3", + "symfony/console": "^6.4", + "symfony/dependency-injection": "^6.4", + "symfony/event-dispatcher": "^6.4", + "symfony/filesystem": "^6.4", + "symfony/finder": "^6.4", + "symfony/http-foundation": "^6.4", + "symfony/http-kernel": "^6.4", + "symfony/mailer": "^6.4", + "symfony/mime": "^6.4", "symfony/polyfill-iconv": "^1.26", - "symfony/process": "^6.3", - "symfony/psr-http-message-bridge": "^2.1", - "symfony/routing": "^6.3", - "symfony/serializer": "^6.3", - "symfony/validator": "^6.3", - "symfony/yaml": "^6.3", + "symfony/process": "^6.4", + "symfony/psr-http-message-bridge": "^2.1|^6.4", + "symfony/routing": "^6.4", + "symfony/serializer": "^6.4", + "symfony/validator": "^6.4", + "symfony/yaml": "^6.4", "twig/twig": "^3.5.0" }, "conflict": { - "drush/drush": "<8.1.10" + "drush/drush": "<12.4.3" }, "replace": { "drupal/core-annotation": "self.version", @@ -3921,22 +3985,22 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/10.1.7" + "source": "https://github.com/drupal/core/tree/10.2.2" }, - "time": "2023-12-06T09:22:56+00:00" + "time": "2024-01-16T21:10:58+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "10.1.7", + "version": "10.2.2", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", - "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445" + "reference": "97bd91856535a354e9b1b815f0957893e26b6622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/6a2d817ccb59fdb7e6b3720a1478b0d00b475445", - "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445", + "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/97bd91856535a354e9b1b815f0957893e26b6622", + "reference": "97bd91856535a354e9b1b815f0957893e26b6622", "shasum": "" }, "require": { @@ -3971,76 +4035,80 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/10.1.7" + "source": "https://github.com/drupal/core-composer-scaffold/tree/10.2.2" }, - "time": "2023-11-15T23:23:43+00:00" + "time": "2023-11-15T23:23:28+00:00" }, { "name": "drupal/core-recommended", - "version": "10.1.7", + "version": "10.2.2", "source": { "type": "git", "url": "https://github.com/drupal/core-recommended.git", - "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e" + "reference": "d8cb769d86449af5ad763f3517c7f3c0e226ed60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-recommended/zipball/e4726a4a0173a4b9acdac8cab5d4009d6085fd2e", - "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/d8cb769d86449af5ad763f3517c7f3c0e226ed60", + "reference": "d8cb769d86449af5ad763f3517c7f3c0e226ed60", "shasum": "" }, "require": { - "asm89/stack-cors": "~v2.1.1", - "composer/semver": "~3.3.2", + "asm89/stack-cors": "~v2.2.0", + "composer/semver": "~3.4.0", "doctrine/annotations": "~1.14.3", - "doctrine/deprecations": "~v1.1.1", + "doctrine/deprecations": "~1.1.2", "doctrine/lexer": "~2.1.0", - "drupal/core": "10.1.7", - "egulias/email-validator": "~4.0.1", - "guzzlehttp/guzzle": "~7.7.0", - "guzzlehttp/psr7": "~2.5.0", - "masterminds/html5": "~2.8.0", + "drupal/core": "10.2.2", + "egulias/email-validator": "~4.0.2", + "guzzlehttp/guzzle": "~7.8.1", + "guzzlehttp/promises": "~2.0.2", + "guzzlehttp/psr7": "~2.6.2", + "masterminds/html5": "~2.8.1", "mck89/peast": "~v1.15.4", "pear/archive_tar": "~1.4.14", "pear/console_getopt": "~v1.4.3", - "pear/pear-core-minimal": "~v1.10.13", + "pear/pear-core-minimal": "~v1.10.14", "pear/pear_exception": "~v1.0.2", "psr/cache": "~3.0.0", "psr/container": "~2.0.2", "psr/event-dispatcher": "~1.0.0", - "psr/http-client": "~1.0.2", + "psr/http-client": "~1.0.3", "psr/http-factory": "~1.0.2", "psr/log": "~3.0.0", "ralouphie/getallheaders": "~3.0.3", "sebastian/diff": "~4.0.5", - "symfony/console": "~v6.3.0", - "symfony/dependency-injection": "~v6.3.0", - "symfony/deprecation-contracts": "~v3.3.0", - "symfony/error-handler": "~v6.3.0", - "symfony/event-dispatcher": "~v6.3.0", - "symfony/event-dispatcher-contracts": "~v3.3.0", - "symfony/http-foundation": "~v6.3.0", - "symfony/http-kernel": "~v6.3.0", - "symfony/mime": "~v6.3.0", - "symfony/polyfill-ctype": "~v1.27.0", - "symfony/polyfill-iconv": "~v1.27.0", - "symfony/polyfill-intl-grapheme": "~v1.27.0", - "symfony/polyfill-intl-idn": "~v1.27.0", - "symfony/polyfill-intl-normalizer": "~v1.27.0", - "symfony/polyfill-mbstring": "~v1.27.0", - "symfony/polyfill-php83": "~v1.27.0", - "symfony/process": "~v6.3.0", - "symfony/psr-http-message-bridge": "~v2.2.0", - "symfony/routing": "~v6.3.0", - "symfony/serializer": "~v6.3.0", - "symfony/service-contracts": "~v3.3.0", - "symfony/string": "~v6.3.0", - "symfony/translation-contracts": "~v3.3.0", - "symfony/validator": "~v6.3.0", - "symfony/var-dumper": "~v6.3.0", - "symfony/var-exporter": "~v6.3.0", - "symfony/yaml": "~v6.3.0", - "twig/twig": "~v3.6.0" + "symfony/console": "~v6.4.1", + "symfony/dependency-injection": "~v6.4.1", + "symfony/deprecation-contracts": "~v3.4.0", + "symfony/error-handler": "~v6.4.0", + "symfony/event-dispatcher": "~v6.4.0", + "symfony/event-dispatcher-contracts": "~v3.4.0", + "symfony/filesystem": "~v6.4.0", + "symfony/finder": "~v6.4.0", + "symfony/http-foundation": "~v6.4.0", + "symfony/http-kernel": "~v6.4.1", + "symfony/mailer": "~v6.4.0", + "symfony/mime": "~v6.4.0", + "symfony/polyfill-ctype": "~v1.28.0", + "symfony/polyfill-iconv": "~v1.28.0", + "symfony/polyfill-intl-grapheme": "~v1.28.0", + "symfony/polyfill-intl-idn": "~v1.28.0", + "symfony/polyfill-intl-normalizer": "~v1.28.0", + "symfony/polyfill-mbstring": "~v1.28.0", + "symfony/polyfill-php83": "~v1.28.0", + "symfony/process": "~v6.4.0", + "symfony/psr-http-message-bridge": "~v6.4.0", + "symfony/routing": "~v6.4.1", + "symfony/serializer": "~v6.4.1", + "symfony/service-contracts": "~v3.4.0", + "symfony/string": "~v6.4.0", + "symfony/translation-contracts": "~v3.4.0", + "symfony/validator": "~v6.4.0", + "symfony/var-dumper": "~v6.4.0", + "symfony/var-exporter": "~v6.4.1", + "symfony/yaml": "~v6.4.0", + "twig/twig": "~v3.8.0" }, "conflict": { "webflo/drupal-core-strict": "*" @@ -4052,25 +4120,25 @@ ], "description": "Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.", "support": { - "source": "https://github.com/drupal/core-recommended/tree/10.1.7" + "source": "https://github.com/drupal/core-recommended/tree/10.2.2" }, - "time": "2023-12-06T09:22:56+00:00" + "time": "2024-01-16T21:10:58+00:00" }, { "name": "drupal/core_event_dispatcher", - "version": "3.3.4", + "version": "4.0.0-rc1", "require": { - "drupal/core": "^9.3", + "drupal/core": "^9.3 || ^10", "drupal/hook_event_dispatcher": "*" }, "type": "metapackage", "extra": { "drupal": { - "version": "3.3.4", - "datestamp": "1691759682", + "version": "4.0.0-rc1", + "datestamp": "1691676068", "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" + "status": "not-covered", + "message": "RC releases are not covered by Drupal security advisories." } } }, @@ -4385,17 +4453,17 @@ }, { "name": "drupal/danse", - "version": "2.3.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/danse.git", - "reference": "2.3.0" + "reference": "2.3.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/danse-2.3.0.zip", - "reference": "2.3.0", - "shasum": "202b5ec257177bb9e93aaa74f400a4b8581e7dbf" + "url": "https://ftp.drupal.org/files/projects/danse-2.3.1.zip", + "reference": "2.3.1", + "shasum": "cf98e448b2564fdc61991b971548e67685c48c6f" }, "require": { "drupal/core": "^10 || ^11", @@ -4408,8 +4476,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.3.0", - "datestamp": "1702473774", + "version": "2.3.1", + "datestamp": "1703759808", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5500,17 +5568,17 @@ }, { "name": "drupal/entity_reference_revisions", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", - "reference": "8.x-1.10" + "reference": "8.x-1.11" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.10.zip", - "reference": "8.x-1.10", - "shasum": "edd23b91c4a34db65ea22c4db54b7458edc7513b" + "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.11.zip", + "reference": "8.x-1.11", + "shasum": "de21cbb0d8a0344dc3496addcad4ed536747cec5" }, "require": { "drupal/core": "^9 || ^10" @@ -5521,8 +5589,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.10", - "datestamp": "1660664712", + "version": "8.x-1.11", + "datestamp": "1705140721", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6173,19 +6241,19 @@ }, { "name": "drupal/field_event_dispatcher", - "version": "3.3.4", + "version": "4.0.0-rc1", "require": { - "drupal/core": "^9.3", + "drupal/core": "^9.3 || ^10", "drupal/hook_event_dispatcher": "*" }, "type": "metapackage", "extra": { "drupal": { - "version": "3.3.4", - "datestamp": "1691759682", + "version": "4.0.0-rc1", + "datestamp": "1691676068", "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" + "status": "not-covered", + "message": "RC releases are not covered by Drupal security advisories." } } }, @@ -6504,17 +6572,17 @@ }, { "name": "drupal/geocoder", - "version": "4.17.0", + "version": "4.20.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/geocoder.git", - "reference": "8.x-4.17" + "reference": "8.x-4.20" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/geocoder-8.x-4.17.zip", - "reference": "8.x-4.17", - "shasum": "15d197d1fd76b30999721fbbe820c880103e2acd" + "url": "https://ftp.drupal.org/files/projects/geocoder-8.x-4.20.zip", + "reference": "8.x-4.20", + "shasum": "1bf5ff7082e64f55128032b61c7333fd611c5347" }, "require": { "davedevelopment/stiphle": "^0.9.2", @@ -6559,8 +6627,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-4.17", - "datestamp": "1703116289", + "version": "8.x-4.20", + "datestamp": "1706097387", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6601,27 +6669,31 @@ }, { "name": "drupal/geofield", - "version": "1.56.0", + "version": "1.57.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/geofield.git", - "reference": "8.x-1.56" + "reference": "8.x-1.57" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/geofield-8.x-1.56.zip", - "reference": "8.x-1.56", - "shasum": "edcb25304edb860d0fe907b8aa2dc73b6fc83f39" + "url": "https://ftp.drupal.org/files/projects/geofield-8.x-1.57.zip", + "reference": "8.x-1.57", + "shasum": "17155834e7abe78b5710907d1f2897f3a01c5702" }, "require": { "drupal/core": "^8.8 || ^9 || ^10", "itamair/geophp": "^1.3" }, + "require-dev": { + "drupal/diff": "^1.1", + "drupal/feeds": "^3.0@beta" + }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.56", - "datestamp": "1698017493", + "version": "8.x-1.57", + "datestamp": "1701039529", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6894,7 +6966,7 @@ }, { "name": "drupal/graphql_core", - "version": "3.3.0", + "version": "3.4.0", "require": { "drupal/core": "^9 || ^10", "drupal/graphql": "*" @@ -6902,8 +6974,8 @@ "type": "metapackage", "extra": { "drupal": { - "version": "8.x-3.3", - "datestamp": "1694177393", + "version": "8.x-3.4", + "datestamp": "1699463394", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -7284,27 +7356,27 @@ }, { "name": "drupal/ief_table_view_mode", - "version": "2.3.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/ief_table_view_mode.git", - "reference": "8.x-2.3" + "reference": "3.0.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ief_table_view_mode-8.x-2.3.zip", - "reference": "8.x-2.3", - "shasum": "8f5f2d38745a7654ce72b311f0333478fa7f2aeb" + "url": "https://ftp.drupal.org/files/projects/ief_table_view_mode-3.0.0.zip", + "reference": "3.0.0", + "shasum": "4a434bbe8ccebffa6dd3efcd818bfd5667b6f571" }, "require": { - "drupal/core": "^8.7.7 || ^9 || ^10", - "drupal/inline_entity_form": "^1.0" + "drupal/core": "^9 || ^10", + "drupal/inline_entity_form": "^1.0 || ^2.0 || ^3.0" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.3", - "datestamp": "1671410068", + "version": "3.0.0", + "datestamp": "1705614692", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -7459,17 +7531,17 @@ }, { "name": "drupal/inline_entity_form", - "version": "1.0.0-rc15", + "version": "3.0.0-rc19", "source": { "type": "git", "url": "https://git.drupalcode.org/project/inline_entity_form.git", - "reference": "8.x-1.0-rc15" + "reference": "3.0.0-rc19" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/inline_entity_form-8.x-1.0-rc15.zip", - "reference": "8.x-1.0-rc15", - "shasum": "7702801f7e599956fc3d10cff8257809f53ac3ec" + "url": "https://ftp.drupal.org/files/projects/inline_entity_form-3.0.0-rc19.zip", + "reference": "3.0.0-rc19", + "shasum": "d8976940dd3f85412ba5e274af15fbcdd22ee27a" }, "require": { "drupal/core": "^8.8 || ^9 || ^10", @@ -7481,8 +7553,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.0-rc15", - "datestamp": "1678126675", + "version": "3.0.0-rc19", + "datestamp": "1704729077", "security-coverage": { "status": "not-covered", "message": "RC releases are not covered by Drupal security advisories." @@ -9249,12 +9321,12 @@ "homepage": "https://www.drupal.org/user/57511" }, { - "name": "Grayside", - "homepage": "https://www.drupal.org/user/346868" + "name": "bluegeek9", + "homepage": "https://www.drupal.org/user/1286304" }, { - "name": "itamar", - "homepage": "https://www.drupal.org/user/1757910" + "name": "Grayside", + "homepage": "https://www.drupal.org/user/346868" }, { "name": "jhedstrom", @@ -10586,17 +10658,17 @@ }, { "name": "drupal/paragraphs", - "version": "1.16.0", + "version": "1.17.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/paragraphs.git", - "reference": "8.x-1.16" + "reference": "8.x-1.17" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.16.zip", - "reference": "8.x-1.16", - "shasum": "48f60810fd8086a52d56e84af8b212cce7a270e8" + "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.17.zip", + "reference": "8.x-1.17", + "shasum": "81c05f6a1eb59ab957c9ac97b2e79d6c9837bd72" }, "require": { "drupal/core": "^9.3 || ^10", @@ -10611,7 +10683,7 @@ "drupal/inline_entity_form": "1.x-dev", "drupal/paragraphs-paragraphs_library": "*", "drupal/replicate": "1.x-dev", - "drupal/search_api": "1.x-dev", + "drupal/search_api": "^1", "drupal/search_api_db": "*" }, "suggest": { @@ -10620,8 +10692,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.16", - "datestamp": "1694007797", + "version": "8.x-1.17", + "datestamp": "1705234146", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10723,17 +10795,17 @@ }, { "name": "drupal/paragraphs_features", - "version": "2.0.0-beta3", + "version": "2.0.0-beta4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/paragraphs_features.git", - "reference": "2.0.0-beta3" + "reference": "2.0.0-beta4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs_features-2.0.0-beta3.zip", - "reference": "2.0.0-beta3", - "shasum": "b040ba0048101f578752050bc55cc039939a649c" + "url": "https://ftp.drupal.org/files/projects/paragraphs_features-2.0.0-beta4.zip", + "reference": "2.0.0-beta4", + "shasum": "c3137491ba5f73e8395d9c2178beac3a10e33f7d" }, "require": { "drupal/core": "^9.2 || ^10", @@ -10745,8 +10817,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.0-beta3", - "datestamp": "1692697161", + "version": "2.0.0-beta4", + "datestamp": "1705329204", "security-coverage": { "status": "not-covered", "message": "Beta releases are not covered by Drupal security advisories." @@ -12038,17 +12110,17 @@ }, { "name": "drupal/simple_oauth", - "version": "5.2.4", + "version": "5.2.5", "source": { "type": "git", "url": "https://git.drupalcode.org/project/simple_oauth.git", - "reference": "5.2.4" + "reference": "5.2.5" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/simple_oauth-5.2.4.zip", - "reference": "5.2.4", - "shasum": "19e6a7842855aa1ea1d632e91cceaba29d21a515" + "url": "https://ftp.drupal.org/files/projects/simple_oauth-5.2.5.zip", + "reference": "5.2.5", + "shasum": "3517d07e4896a32eddda7446b85a2afa945321a2" }, "require": { "drupal/consumers": "^1.14", @@ -12064,8 +12136,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "5.2.4", - "datestamp": "1697698824", + "version": "5.2.5", + "datestamp": "1700206902", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -12540,17 +12612,17 @@ }, { "name": "drupal/subrequests", - "version": "3.0.7", + "version": "3.0.10", "source": { "type": "git", "url": "https://git.drupalcode.org/project/subrequests.git", - "reference": "3.0.7" + "reference": "3.0.10" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/subrequests-3.0.7.zip", - "reference": "3.0.7", - "shasum": "f78f5a382583007b8844fc26b9f4ba7b58f9fa3d" + "url": "https://ftp.drupal.org/files/projects/subrequests-3.0.10.zip", + "reference": "3.0.10", + "shasum": "52d176f5fc813f7a11dbb42e4aaf654a9232e4c0" }, "require": { "drupal/core": "^8 || ^9 || ^10", @@ -12562,8 +12634,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.7", - "datestamp": "1682600732", + "version": "3.0.10", + "datestamp": "1703173149", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -13510,33 +13582,33 @@ }, { "name": "drupal/views_bulk_operations", - "version": "4.2.5", + "version": "4.2.6", "source": { "type": "git", "url": "https://git.drupalcode.org/project/views_bulk_operations.git", - "reference": "4.2.5" + "reference": "4.2.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.2.5.zip", - "reference": "4.2.5", - "shasum": "220479c5187b1619d5703f64c6f8c272afecf897" + "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.2.6.zip", + "reference": "4.2.6", + "shasum": "20c6f77c0cebda75edfa570a8dc53fb133d6283a" }, "require": { "drupal/core": "^9.4 || ^10", "php": ">=7.4.0" }, "require-dev": { - "drush/drush": "^11" + "drush/drush": "^12" }, "suggest": { - "drush/drush": "^10 || ^11" + "drush/drush": "^11 || ^12" }, "type": "drupal-module", "extra": { "drupal": { - "version": "4.2.5", - "datestamp": "1691066184", + "version": "4.2.6", + "datestamp": "1704281842", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -13850,57 +13922,55 @@ }, { "name": "drush/drush", - "version": "11.6.0", + "version": "12.4.3", "source": { "type": "git", "url": "https://github.com/drush-ops/drush.git", - "reference": "f301df5dec8d2aacb03d3e01e0ffc6d98e10ae78" + "reference": "8245acede57ecc62a90aa0f19ff3b29e5f11f971" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/f301df5dec8d2aacb03d3e01e0ffc6d98e10ae78", - "reference": "f301df5dec8d2aacb03d3e01e0ffc6d98e10ae78", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/8245acede57ecc62a90aa0f19ff3b29e5f11f971", + "reference": "8245acede57ecc62a90aa0f19ff3b29e5f11f971", "shasum": "" }, "require": { - "chi-teck/drupal-code-generator": "^2.4", + "chi-teck/drupal-code-generator": "^3.0", + "composer-runtime-api": "^2.2", "composer/semver": "^1.4 || ^3", - "consolidation/annotated-command": "^4.8.2", - "consolidation/config": "^2", - "consolidation/filter-via-dot-access-data": "^2", - "consolidation/robo": "^3.0.9 || ^4.0.1", - "consolidation/site-alias": "^3.1.6 || ^4", - "consolidation/site-process": "^4.1.3 || ^5", - "enlightn/security-checker": "^1", + "consolidation/annotated-command": "^4.9.1", + "consolidation/config": "^2.1.2", + "consolidation/filter-via-dot-access-data": "^2.0.2", + "consolidation/output-formatters": "^4.3.2", + "consolidation/robo": "^4.0.6", + "consolidation/site-alias": "^4", + "consolidation/site-process": "^5.2.0", "ext-dom": "*", - "guzzlehttp/guzzle": "^6.5 || ^7.0", - "league/container": "^3.4 || ^4", - "php": ">=7.4", + "grasmash/yaml-cli": "^3.1", + "guzzlehttp/guzzle": "^7.0", + "league/container": "^4", + "php": ">=8.1", "psy/psysh": "~0.11", - "symfony/event-dispatcher": "^4.0 || ^5.0 || ^6.0", - "symfony/filesystem": "^4.4 || ^5.4 || ^6.1", - "symfony/finder": "^4.0 || ^5 || ^6", - "symfony/polyfill-php80": "^1.23", - "symfony/var-dumper": "^4.0 || ^5.0 || ^6.0", - "symfony/yaml": "^4.0 || ^5.0 || ^6.0", + "symfony/event-dispatcher": "^6", + "symfony/filesystem": "^6.1", + "symfony/finder": "^6", + "symfony/var-dumper": "^6.0", + "symfony/yaml": "^6.0", "webflo/drupal-finder": "^1.2" }, "conflict": { - "drupal/core": "< 9.2", + "drupal/core": "< 10.0", "drupal/migrate_run": "*", "drupal/migrate_tools": "<= 5" }, "require-dev": { - "composer/installers": "^1.7", + "composer/installers": "^2", "cweagans/composer-patches": "~1.0", - "david-garcia/phpwhois": "4.3.0", - "drupal/core-recommended": "^9 || ^10", + "drupal/core-recommended": "^10", "drupal/semver_example": "2.3.0", - "phpunit/phpunit": ">=7.5.20", + "phpunit/phpunit": "^9", "rector/rector": "^0.12", - "squizlabs/php_codesniffer": "^3.6", - "vlucas/phpdotenv": "^2.4", - "yoast/phpunit-polyfills": "^0.2.0" + "squizlabs/php_codesniffer": "^3.7" }, "bin": [ "drush" @@ -13982,8 +14052,9 @@ "support": { "forum": "http://drupal.stackexchange.com/questions/tagged/drush", "issues": "https://github.com/drush-ops/drush/issues", + "security": "https://github.com/drush-ops/drush/security/advisories", "slack": "https://drupal.slack.com/messages/C62H9CWQM", - "source": "https://github.com/drush-ops/drush/tree/11.6.0" + "source": "https://github.com/drush-ops/drush/tree/12.4.3" }, "funding": [ { @@ -13991,7 +14062,7 @@ "type": "github" } ], - "time": "2023-06-06T18:46:18+00:00" + "time": "2023-11-16T22:57:24+00:00" }, { "name": "e0ipso/shaper", @@ -14181,88 +14252,22 @@ ], "time": "2023-10-06T06:47:41+00:00" }, - { - "name": "enlightn/security-checker", - "version": "v1.10.0", - "source": { - "type": "git", - "url": "https://github.com/enlightn/security-checker.git", - "reference": "196bacc76e7a72a63d0e1220926dbb190272db97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/enlightn/security-checker/zipball/196bacc76e7a72a63d0e1220926dbb190272db97", - "reference": "196bacc76e7a72a63d0e1220926dbb190272db97", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/guzzle": "^6.3|^7.0", - "php": ">=5.6", - "symfony/console": "^3.4|^4|^5|^6", - "symfony/finder": "^3|^4|^5|^6", - "symfony/process": "^3.4|^4|^5|^6", - "symfony/yaml": "^3.4|^4|^5|^6" - }, - "require-dev": { - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^2.18|^3.0", - "phpunit/phpunit": "^5.5|^6|^7|^8|^9" - }, - "bin": [ - "security-checker" - ], - "type": "library", - "autoload": { - "psr-4": { - "Enlightn\\SecurityChecker\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paras Malhotra", - "email": "paras@laravel-enlightn.com" - }, - { - "name": "Miguel Piedrafita", - "email": "soy@miguelpiedrafita.com" - } - ], - "description": "A PHP dependency vulnerabilities scanner based on the Security Advisories Database.", - "keywords": [ - "package", - "php", - "scanner", - "security", - "security advisories", - "vulnerability scanner" - ], - "support": { - "issues": "https://github.com/enlightn/security-checker/issues", - "source": "https://github.com/enlightn/security-checker/tree/v1.10.0" - }, - "time": "2022-02-21T22:40:16+00:00" - }, { "name": "ezyang/htmlpurifier", - "version": "v4.16.0", + "version": "v4.17.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", - "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -14304,9 +14309,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" }, - "time": "2022-09-18T07:06:19+00:00" + "time": "2023-11-17T15:01:25+00:00" }, { "name": "galbar/jsonpath", @@ -14362,16 +14367,16 @@ }, { "name": "geocoder-php/common-http", - "version": "dev-master", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/geocoder-php/php-common-http.git", - "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9" + "reference": "d8c22a66120daed35ba8017467bc1ebfec28a63e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/15629fd7bf771f525282ad1b60d2106bcf630ce9", - "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9", + "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/d8c22a66120daed35ba8017467bc1ebfec28a63e", + "reference": "d8c22a66120daed35ba8017467bc1ebfec28a63e", "shasum": "" }, "require": { @@ -14388,7 +14393,6 @@ "phpunit/phpunit": "^9.5", "symfony/stopwatch": "~2.5 || ~5.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -14421,7 +14425,7 @@ "support": { "source": "https://github.com/geocoder-php/php-common-http/tree/4.6.0" }, - "time": "2023-07-31T20:07:24+00:00" + "time": "2023-12-28T10:51:54+00:00" }, { "name": "geocoder-php/mapbox-provider", @@ -14706,34 +14710,30 @@ }, { "name": "gitonomy/gitlib", - "version": "v1.3.8", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/gitonomy/gitlib.git", - "reference": "9fea656e75ad6e3452feb2cac46a6c1239cd7f74" + "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/9fea656e75ad6e3452feb2cac46a6c1239cd7f74", - "reference": "9fea656e75ad6e3452feb2cac46a6c1239cd7f74", + "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/2c7fbbd9814178474d0bb1b6292701cb4ab508f9", + "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9", "shasum": "" }, "require": { "ext-pcre": "*", - "php": "^5.6 || ^7.0 || ^8.0", + "php": "^8.0", "symfony/polyfill-mbstring": "^1.7", - "symfony/process": "^3.4 || ^4.4 || ^5.0 || ^6.0" + "symfony/process": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { "ext-fileinfo": "*", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.20 || ^9.5.9", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.20 || ^9.5.9", "psr/log": "^1.0" }, - "suggest": { - "ext-fileinfo": "Required to determine the mimetype of a blob", - "psr/log": "Required to use loggers for reporting of execution" - }, "type": "library", "autoload": { "psr-4": { @@ -14769,7 +14769,7 @@ "description": "Library for accessing git", "support": { "issues": "https://github.com/gitonomy/gitlib/issues", - "source": "https://github.com/gitonomy/gitlib/tree/v1.3.8" + "source": "https://github.com/gitonomy/gitlib/tree/v1.4.0" }, "funding": [ { @@ -14777,7 +14777,7 @@ "type": "tidelift" } ], - "time": "2023-05-11T08:29:06+00:00" + "time": "2023-12-20T13:02:08+00:00" }, { "name": "graham-campbell/result-type", @@ -14893,24 +14893,80 @@ }, "time": "2022-05-10T13:14:49+00:00" }, + { + "name": "grasmash/yaml-cli", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-cli.git", + "reference": "00f3fd775f6abbfacd44432f1999c3c3b02791f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/yaml-cli/zipball/00f3fd775f6abbfacd44432f1999c3c3b02791f0", + "reference": "00f3fd775f6abbfacd44432f1999c3c3b02791f0", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3", + "php": ">=8.0", + "symfony/console": "^6", + "symfony/filesystem": "^6", + "symfony/yaml": "^6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.0" + }, + "bin": [ + "bin/yaml-cli" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\YamlCli\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "A command line tool for reading and manipulating yaml files.", + "support": { + "issues": "https://github.com/grasmash/yaml-cli/issues", + "source": "https://github.com/grasmash/yaml-cli/tree/3.1.0" + }, + "time": "2022-05-09T20:22:34+00:00" + }, { "name": "guzzlehttp/guzzle", - "version": "7.7.1", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "085b026db54d4b5012f727c80c9958e8b8cbc454" + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/085b026db54d4b5012f727c80c9958e8b8cbc454", - "reference": "085b026db54d4b5012f727c80c9958e8b8cbc454", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -14919,11 +14975,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -15001,7 +15057,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.7.1" + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" }, "funding": [ { @@ -15017,7 +15073,7 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:02:06+00:00" + "time": "2023-12-03T20:35:24+00:00" }, { "name": "guzzlehttp/promises", @@ -15104,16 +15160,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.5.1", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a0b3a03e8e8005257fbc408ce5f0fd0a8274dc7f" + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a0b3a03e8e8005257fbc408ce5f0fd0a8274dc7f", - "reference": "a0b3a03e8e8005257fbc408ce5f0fd0a8274dc7f", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", "shasum": "" }, "require": { @@ -15127,9 +15183,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -15200,7 +15256,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.1" + "source": "https://github.com/guzzle/psr7/tree/2.6.2" }, "funding": [ { @@ -15216,7 +15272,7 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:02:42+00:00" + "time": "2023-12-03T20:05:35+00:00" }, { "name": "http-interop/http-factory-guzzle", @@ -15278,16 +15334,16 @@ }, { "name": "itamair/geophp", - "version": "1.5", + "version": "1.6", "source": { "type": "git", "url": "https://github.com/itamair/geoPHP.git", - "reference": "645f3262ebaa7443d58910207c65f386c733f614" + "reference": "f210e37ab3d4706b7e8cfe3183fec2f5be8a85e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/itamair/geoPHP/zipball/645f3262ebaa7443d58910207c65f386c733f614", - "reference": "645f3262ebaa7443d58910207c65f386c733f614", + "url": "https://api.github.com/repos/itamair/geoPHP/zipball/f210e37ab3d4706b7e8cfe3183fec2f5be8a85e6", + "reference": "f210e37ab3d4706b7e8cfe3183fec2f5be8a85e6", "shasum": "" }, "require-dev": { @@ -15318,9 +15374,9 @@ "description": "GeoPHP is a open-source native PHP library for doing geometry operations. It is written entirely in PHP and can therefore run on shared hosts. It can read and write a wide variety of formats: WKT (including EWKT), WKB (including EWKB), GeoJSON, KML, GPX, GeoRSS). It works with all Simple-Feature geometries (Point, LineString, Polygon, GeometryCollection etc.) and can be used to get centroids, bounding-boxes, area, and a wide variety of other useful information.", "homepage": "https://github.com/itamair/geoPHP", "support": { - "source": "https://github.com/itamair/geoPHP/tree/1.5" + "source": "https://github.com/itamair/geoPHP/tree/1.6" }, - "time": "2023-04-26T23:16:44+00:00" + "time": "2023-12-23T23:28:59+00:00" }, { "name": "jean85/pretty-package-versions", @@ -15631,16 +15687,16 @@ }, { "name": "laminas/laminas-stdlib", - "version": "3.18.0", + "version": "3.19.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf" + "reference": "6a192dd0882b514e45506f533b833b623b78fff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf", - "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/6a192dd0882b514e45506f533b833b623b78fff3", + "reference": "6a192dd0882b514e45506f533b833b623b78fff3", "shasum": "" }, "require": { @@ -15651,10 +15707,10 @@ }, "require-dev": { "laminas/laminas-coding-standard": "^2.5", - "phpbench/phpbench": "^1.2.14", - "phpunit/phpunit": "^10.3.3", + "phpbench/phpbench": "^1.2.15", + "phpunit/phpunit": "^10.5.8", "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.15.0" + "vimeo/psalm": "^5.20.0" }, "type": "library", "autoload": { @@ -15686,7 +15742,7 @@ "type": "community_bridge" } ], - "time": "2023-09-19T10:15:21+00:00" + "time": "2024-01-19T12:39:49+00:00" }, { "name": "laminas/laminas-text", @@ -16194,16 +16250,16 @@ }, { "name": "league/uri", - "version": "7.3.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "36743c3961bb82bf93da91917b6bced0358a8d45" + "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/36743c3961bb82bf93da91917b6bced0358a8d45", - "reference": "36743c3961bb82bf93da91917b6bced0358a8d45", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bf414ba956d902f5d98bf9385fcf63954f09dce5", + "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5", "shasum": "" }, "require": { @@ -16272,7 +16328,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.3.0" + "source": "https://github.com/thephpleague/uri/tree/7.4.0" }, "funding": [ { @@ -16280,20 +16336,20 @@ "type": "github" } ], - "time": "2023-09-09T17:21:43+00:00" + "time": "2023-12-01T06:24:25+00:00" }, { "name": "league/uri-interfaces", - "version": "7.3.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "c409b60ed2245ff94c965a8c798a60166db53361" + "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c409b60ed2245ff94c965a8c798a60166db53361", - "reference": "c409b60ed2245ff94c965a8c798a60166db53361", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/bd8c487ec236930f7bbc42b8d374fa882fbba0f3", + "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3", "shasum": "" }, "require": { @@ -16356,7 +16412,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.3.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.0" }, "funding": [ { @@ -16364,7 +16420,7 @@ "type": "github" } ], - "time": "2023-09-09T17:21:43+00:00" + "time": "2023-11-24T15:40:42+00:00" }, { "name": "masterminds/html5", @@ -16535,21 +16591,21 @@ }, { "name": "mglaman/phpstan-drupal", - "version": "1.2.4", + "version": "1.2.6", "source": { "type": "git", "url": "https://github.com/mglaman/phpstan-drupal.git", - "reference": "57b2cc67fb4416e8484db37a3d8502ac8fb3c0d6" + "reference": "ba8678f8cbea42cc41022c21751004eb677cf5a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/57b2cc67fb4416e8484db37a3d8502ac8fb3c0d6", - "reference": "57b2cc67fb4416e8484db37a3d8502ac8fb3c0d6", + "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/ba8678f8cbea42cc41022c21751004eb677cf5a4", + "reference": "ba8678f8cbea42cc41022c21751004eb677cf5a4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^1.10.1", + "phpstan/phpstan": "^1.10.56", "phpstan/phpstan-deprecation-rules": "^1.1.4", "symfony/finder": "^4.2 || ^5.0 || ^6.0 || ^7.0", "symfony/yaml": "^4.2|| ^5.0 || ^6.0 || ^7.0", @@ -16619,7 +16675,7 @@ "description": "Drupal extension and rules for PHPStan", "support": { "issues": "https://github.com/mglaman/phpstan-drupal/issues", - "source": "https://github.com/mglaman/phpstan-drupal/tree/1.2.4" + "source": "https://github.com/mglaman/phpstan-drupal/tree/1.2.6" }, "funding": [ { @@ -16635,7 +16691,7 @@ "type": "tidelift" } ], - "time": "2023-11-14T22:47:32+00:00" + "time": "2024-01-16T00:42:10+00:00" }, { "name": "michelf/php-markdown", @@ -17004,16 +17060,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", "shasum": "" }, "require": { @@ -17054,9 +17110,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2023-12-10T21:03:43+00:00" }, { "name": "npm-asset/dropzone", @@ -17070,6 +17126,18 @@ "MIT" ] }, + { + "name": "npm-asset/jquery-validation", + "version": "1.20.0", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/jquery-validation/-/jquery-validation-1.20.0.tgz" + }, + "type": "npm-asset", + "license": [ + "MIT" + ] + }, { "name": "npm-asset/yarn", "version": "1.19.1", @@ -17744,16 +17812,16 @@ }, { "name": "php-http/cache-plugin", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/php-http/cache-plugin.git", - "reference": "6bf9fbf66193f61d90c2381b75eb1fa0202fd314" + "reference": "b3e6c25d89ee5e4ac82115ed23b21ba87986d614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/6bf9fbf66193f61d90c2381b75eb1fa0202fd314", - "reference": "6bf9fbf66193f61d90c2381b75eb1fa0202fd314", + "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/b3e6c25d89ee5e4ac82115ed23b21ba87986d614", + "reference": "b3e6c25d89ee5e4ac82115ed23b21ba87986d614", "shasum": "" }, "require": { @@ -17761,7 +17829,7 @@ "php-http/client-common": "^1.9 || ^2.0", "php-http/message-factory": "^1.0", "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" @@ -17792,9 +17860,9 @@ ], "support": { "issues": "https://github.com/php-http/cache-plugin/issues", - "source": "https://github.com/php-http/cache-plugin/tree/1.8.0" + "source": "https://github.com/php-http/cache-plugin/tree/1.8.1" }, - "time": "2023-04-28T10:56:55+00:00" + "time": "2023-11-21T08:52:56+00:00" }, { "name": "php-http/client-common", @@ -18244,16 +18312,16 @@ }, { "name": "php-http/promise", - "version": "1.2.1", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/php-http/promise.git", - "reference": "44a67cb59f708f826f3bec35f22030b3edb90119" + "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/44a67cb59f708f826f3bec35f22030b3edb90119", - "reference": "44a67cb59f708f826f3bec35f22030b3edb90119", + "url": "https://api.github.com/repos/php-http/promise/zipball/2916a606d3b390f4e9e8e2b8dd68581508be0f07", + "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07", "shasum": "" }, "require": { @@ -18290,9 +18358,9 @@ ], "support": { "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.2.1" + "source": "https://github.com/php-http/promise/tree/1.3.0" }, - "time": "2023-11-08T12:57:08+00:00" + "time": "2024-01-04T18:49:48+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -18406,16 +18474,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc", + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc", "shasum": "" }, "require": { @@ -18458,9 +18526,9 @@ "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.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.0" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-01-11T11:49:22+00:00" }, { "name": "phpmailer/phpmailer", @@ -18840,16 +18908,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.55", + "version": "1.10.57", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "9a88f9d18ddf4cf54c922fbeac16c4cb164c5949" + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9a88f9d18ddf4cf54c922fbeac16c4cb164c5949", - "reference": "9a88f9d18ddf4cf54c922fbeac16c4cb164c5949", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1627b1d03446904aaa77593f370c5201d2ecc34e", + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e", "shasum": "" }, "require": { @@ -18898,7 +18966,7 @@ "type": "tidelift" } ], - "time": "2024-01-08T12:32:40+00:00" + "time": "2024-01-24T11:51:34+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -18950,23 +19018,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.29", + "version": "9.2.30", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089", + "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -19016,7 +19084,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30" }, "funding": [ { @@ -19024,7 +19092,7 @@ "type": "github" } ], - "time": "2023-09-19T04:57:46+00:00" + "time": "2023-12-22T06:47:57+00:00" }, { "name": "phpunit/php-file-iterator", @@ -19269,16 +19337,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.15", + "version": "9.6.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" + "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3767b2c56ce02d01e3491046f33466a1ae60a37f", + "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f", "shasum": "" }, "require": { @@ -19352,7 +19420,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.16" }, "funding": [ { @@ -19368,7 +19436,7 @@ "type": "tidelift" } ], - "time": "2023-12-01T16:55:19+00:00" + "time": "2024-01-19T07:03:14+00:00" }, { "name": "politsin/jquery-ui-touch-punch", @@ -19868,25 +19936,25 @@ }, { "name": "psy/psysh", - "version": "v0.11.22", + "version": "v0.12.0", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" + "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", - "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d", + "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" @@ -19897,8 +19965,7 @@ "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ "bin/psysh" @@ -19906,7 +19973,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-0.11": "0.11.x-dev" + "dev-main": "0.12.x-dev" }, "bamarni-bin": { "bin-links": false, @@ -19942,9 +20009,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.0" }, - "time": "2023-10-14T21:56:36+00:00" + "time": "2023-12-20T15:28:09+00:00" }, { "name": "querypath/querypath", @@ -20321,20 +20388,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -20366,7 +20433,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -20374,7 +20441,7 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", @@ -20648,20 +20715,20 @@ }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -20693,7 +20760,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -20701,7 +20768,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -21419,16 +21486,16 @@ }, { "name": "simplesamlphp/simplesamlphp-assets-base", - "version": "v2.1.6", + "version": "v2.1.8", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp-assets-base.git", - "reference": "ab7fdad861877ab439860ec5f77727ff2dc99327" + "reference": "16ce8123311b93af783858eccf7ce01eceded84e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-assets-base/zipball/ab7fdad861877ab439860ec5f77727ff2dc99327", - "reference": "ab7fdad861877ab439860ec5f77727ff2dc99327", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-assets-base/zipball/16ce8123311b93af783858eccf7ce01eceded84e", + "reference": "16ce8123311b93af783858eccf7ce01eceded84e", "shasum": "" }, "require": { @@ -21449,9 +21516,9 @@ "description": "Assets for the SimpleSAMLphp main repository", "support": { "issues": "https://github.com/simplesamlphp/simplesamlphp-assets-base/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-assets-base/tree/v2.1.6" + "source": "https://github.com/simplesamlphp/simplesamlphp-assets-base/tree/v2.1.8" }, - "time": "2023-10-26T09:03:43+00:00" + "time": "2023-12-24T00:59:54+00:00" }, { "name": "simshaun/recurr", @@ -21637,16 +21704,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.8.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7" + "reference": "14f5fff1e64118595db5408e946f3a22c75807f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5805f7a4e4958dbb5e944ef1e6edae0a303765e7", - "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/14f5fff1e64118595db5408e946f3a22c75807f7", + "reference": "14f5fff1e64118595db5408e946f3a22c75807f7", "shasum": "" }, "require": { @@ -21656,11 +21723,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -21713,7 +21780,7 @@ "type": "open_collective" } ], - "time": "2023-12-08T12:32:31+00:00" + "time": "2024-01-11T20:47:48+00:00" }, { "name": "steverhoades/oauth2-openid-connect-server", @@ -21891,16 +21958,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.0", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a" + "reference": "14a75869bbb41cb35bc5d9d322473928c6f3f978" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/ac2d25f97b17eec6e19760b6b9962a4f7c44356a", - "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a", + "url": "https://api.github.com/repos/symfony/cache/zipball/14a75869bbb41cb35bc5d9d322473928c6f3f978", + "reference": "14a75869bbb41cb35bc5d9d322473928c6f3f978", "shasum": "" }, "require": { @@ -21967,7 +22034,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.0" + "source": "https://github.com/symfony/cache/tree/v6.4.2" }, "funding": [ { @@ -21983,7 +22050,7 @@ "type": "tidelift" } ], - "time": "2023-11-24T19:28:07+00:00" + "time": "2023-12-29T15:34:34+00:00" }, { "name": "symfony/cache-contracts", @@ -22138,16 +22205,16 @@ }, { "name": "symfony/console", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ca73e92b0ab86d3c5347f58ec6d822cce6ded1b0" + "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ca73e92b0ab86d3c5347f58ec6d822cce6ded1b0", - "reference": "ca73e92b0ab86d3c5347f58ec6d822cce6ded1b0", + "url": "https://api.github.com/repos/symfony/console/zipball/0254811a143e6bc6c8deea08b589a7e68a37f625", + "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625", "shasum": "" }, "require": { @@ -22155,7 +22222,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -22169,12 +22236,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -22208,7 +22279,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.11" + "source": "https://github.com/symfony/console/tree/v6.4.2" }, "funding": [ { @@ -22224,20 +22295,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T14:03:40+00:00" + "time": "2023-12-10T16:15:48+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "891c195b2aa6beed145adf2c9cf0dcbdb58f71b4" + "reference": "226ea431b1eda6f0d9f5a4b278757171960bb195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/891c195b2aa6beed145adf2c9cf0dcbdb58f71b4", - "reference": "891c195b2aa6beed145adf2c9cf0dcbdb58f71b4", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/226ea431b1eda6f0d9f5a4b278757171960bb195", + "reference": "226ea431b1eda6f0d9f5a4b278757171960bb195", "shasum": "" }, "require": { @@ -22245,7 +22316,7 @@ "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10" + "symfony/var-exporter": "^6.2.10|^7.0" }, "conflict": { "ext-psr": "<1.1|>=2", @@ -22259,9 +22330,9 @@ "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1", - "symfony/expression-language": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.1|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -22289,7 +22360,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/v6.3.11" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.2" }, "funding": [ { @@ -22305,11 +22376,11 @@ "type": "tidelift" } ], - "time": "2023-12-28T19:16:47+00:00" + "time": "2023-12-28T19:16:56+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -22356,7 +22427,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -22443,30 +22514,31 @@ }, { "name": "symfony/error-handler", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1f69476b64fb47105c06beef757766c376b548c4" + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1f69476b64fb47105c06beef757766c376b548c4", - "reference": "1f69476b64fb47105c06beef757766c376b548c4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -22497,7 +22569,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/v6.3.5" + "source": "https://github.com/symfony/error-handler/tree/v6.4.0" }, "funding": [ { @@ -22513,20 +22585,20 @@ "type": "tidelift" } ], - "time": "2023-09-12T06:57:20+00:00" + "time": "2023-10-18T09:43:34+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4b4738c49f4dc2f6cf750301c7781dd0d715c0b8" + "reference": "e95216850555cd55e71b857eb9d6c2674124603a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4b4738c49f4dc2f6cf750301c7781dd0d715c0b8", - "reference": "4b4738c49f4dc2f6cf750301c7781dd0d715c0b8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e95216850555cd55e71b857eb9d6c2674124603a", + "reference": "e95216850555cd55e71b857eb9d6c2674124603a", "shasum": "" }, "require": { @@ -22543,13 +22615,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -22577,7 +22649,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.11" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.2" }, "funding": [ { @@ -22593,11 +22665,11 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:16:07+00:00" + "time": "2023-12-27T22:16:42+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -22653,7 +22725,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -22800,34 +22872,34 @@ }, { "name": "symfony/framework-bundle", - "version": "v6.3.9", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda" + "reference": "c26a221e0462027d1f9d4a802ed63f8ab07a43d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f83d20092e98c3ae8b5874b8f0787546c5c61cda", - "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c26a221e0462027d1f9d4a802ed63f8ab07a43d0", + "reference": "c26a221e0462027d1f9d4a802ed63f8ab07a43d0", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", "php": ">=8.1", - "symfony/cache": "^5.4|^6.0", - "symfony/config": "^6.1", - "symfony/dependency-injection": "^6.3.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.1", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-foundation": "^6.3", - "symfony/http-kernel": "^6.3", + "symfony/error-handler": "^6.1|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4", "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^5.4|^6.0" + "symfony/routing": "^6.4|^7.0" }, "conflict": { "doctrine/annotations": "<1.13.1", @@ -22835,67 +22907,71 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/asset": "<5.4", + "symfony/asset-mapper": "<6.4", "symfony/clock": "<6.3", - "symfony/console": "<5.4", - "symfony/dom-crawler": "<6.3", + "symfony/console": "<5.4|>=7.0", + "symfony/dom-crawler": "<6.4", "symfony/dotenv": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<6.3", "symfony/lock": "<5.4", "symfony/mailer": "<5.4", "symfony/messenger": "<6.3", - "symfony/mime": "<6.2", + "symfony/mime": "<6.4", "symfony/property-access": "<5.4", "symfony/property-info": "<5.4", + "symfony/scheduler": "<6.4", "symfony/security-core": "<5.4", "symfony/security-csrf": "<5.4", - "symfony/serializer": "<6.3", + "symfony/serializer": "<6.4", "symfony/stopwatch": "<5.4", - "symfony/translation": "<6.2.8", + "symfony/translation": "<6.4", "symfony/twig-bridge": "<5.4", "symfony/twig-bundle": "<5.4", - "symfony/validator": "<6.3", - "symfony/web-profiler-bundle": "<5.4", - "symfony/workflow": "<5.4" + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/workflow": "<6.4" }, "require-dev": { "doctrine/annotations": "^1.13.1|^2", "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.4|^6.0", - "symfony/asset-mapper": "^6.3", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/console": "^5.4.9|^6.0.9", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dom-crawler": "^6.3", - "symfony/dotenv": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/form": "^5.4|^6.0", - "symfony/html-sanitizer": "^6.1", - "symfony/http-client": "^6.3", - "symfony/lock": "^5.4|^6.0", - "symfony/mailer": "^5.4|^6.0", - "symfony/messenger": "^6.3", - "symfony/mime": "^6.2", - "symfony/notifier": "^5.4|^6.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^5.4|^6.0|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/console": "^5.4.9|^6.0.9|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/form": "^5.4|^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0", + "symfony/http-client": "^6.3|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/mailer": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.3|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/notifier": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/rate-limiter": "^5.4|^6.0", - "symfony/scheduler": "^6.3", - "symfony/security-bundle": "^5.4|^6.0", - "symfony/semaphore": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/string": "^5.4|^6.0", - "symfony/translation": "^6.2.8", - "symfony/twig-bundle": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/web-link": "^5.4|^6.0", - "symfony/workflow": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0", + "symfony/scheduler": "^6.4|^7.0", + "symfony/security-bundle": "^5.4|^6.0|^7.0", + "symfony/semaphore": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/string": "^5.4|^6.0|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0", "twig/twig": "^2.10|^3.0" }, "type": "symfony-bundle", @@ -22924,7 +23000,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.3.9" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.2" }, "funding": [ { @@ -22940,20 +23016,20 @@ "type": "tidelift" } ], - "time": "2023-11-24T10:25:33+00:00" + "time": "2023-12-29T15:34:34+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "63a2041d055f17cdbd454838e2fbb822e2abc266" + "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/63a2041d055f17cdbd454838e2fbb822e2abc266", - "reference": "63a2041d055f17cdbd454838e2fbb822e2abc266", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/172d807f9ef3fc3fbed8377cc57c20d389269271", + "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271", "shasum": "" }, "require": { @@ -22968,12 +23044,12 @@ "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -23001,7 +23077,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.11" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.2" }, "funding": [ { @@ -23017,29 +23093,29 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:16:07+00:00" + "time": "2023-12-27T22:16:42+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9e9966d27dfe612898ffb3c507a1db2f29faefd1" + "reference": "13e8387320b5942d0dc408440c888e2d526efef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9e9966d27dfe612898ffb3c507a1db2f29faefd1", - "reference": "9e9966d27dfe612898ffb3c507a1db2f29faefd1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/13e8387320b5942d0dc408440c888e2d526efef4", + "reference": "13e8387320b5942d0dc408440c888e2d526efef4", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.3.4", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -23047,7 +23123,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3.4", + "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -23057,7 +23133,7 @@ "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.4", "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, @@ -23066,26 +23142,26 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3.4", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4.5|^6.0.5", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/var-exporter": "^6.2", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, "type": "library", @@ -23114,7 +23190,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.11" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.2" }, "funding": [ { @@ -23130,20 +23206,20 @@ "type": "tidelift" } ], - "time": "2023-12-30T13:09:13+00:00" + "time": "2023-12-30T15:31:44+00:00" }, { "name": "symfony/intl", - "version": "v6.4.0", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "41d16f0294b9ca6e5540728580c65cfa3848fbf5" + "reference": "4f45148f7eb984ef12b1f7e123205ab904828839" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/41d16f0294b9ca6e5540728580c65cfa3848fbf5", - "reference": "41d16f0294b9ca6e5540728580c65cfa3848fbf5", + "url": "https://api.github.com/repos/symfony/intl/zipball/4f45148f7eb984ef12b1f7e123205ab904828839", + "reference": "4f45148f7eb984ef12b1f7e123205ab904828839", "shasum": "" }, "require": { @@ -23196,7 +23272,87 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.0" + "source": "https://github.com/symfony/intl/tree/v6.4.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-12-26T18:38:00+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "6da89e5c9202f129717a770a03183fb140720168" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/6da89e5c9202f129717a770a03183fb140720168", + "reference": "6da89e5c9202f129717a770a03183fb140720168", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.4.2" }, "funding": [ { @@ -23212,20 +23368,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:12:08+00:00" + "time": "2023-12-19T09:12:31+00:00" }, { "name": "symfony/mime", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", "shasum": "" }, "require": { @@ -23239,16 +23395,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" + "symfony/serializer": "<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "~6.2.13|^6.3.2" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", "autoload": { @@ -23280,7 +23436,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.5" + "source": "https://github.com/symfony/mime/tree/v6.4.0" }, "funding": [ { @@ -23296,7 +23452,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T06:59:36+00:00" + "time": "2023-10-17T11:49:05+00:00" }, { "name": "symfony/options-resolver", @@ -23367,16 +23523,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v5.4.26", + "version": "v5.4.34", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "d04639b395e25efa4260fc5b12a9fa1eafb38a64" + "reference": "b3f772189bfc52e870233a040e888fc3b64c2a22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/d04639b395e25efa4260fc5b12a9fa1eafb38a64", - "reference": "d04639b395e25efa4260fc5b12a9fa1eafb38a64", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/b3f772189bfc52e870233a040e888fc3b64c2a22", + "reference": "b3f772189bfc52e870233a040e888fc3b64c2a22", "shasum": "" }, "require": { @@ -23430,7 +23586,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.26" + "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.34" }, "funding": [ { @@ -23446,20 +23602,20 @@ "type": "tidelift" } ], - "time": "2023-07-12T15:44:31+00:00" + "time": "2023-12-18T14:56:06+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -23474,7 +23630,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23512,7 +23668,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -23528,20 +23684,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "927013f3aac555983a5059aada98e1907d842695" + "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", - "reference": "927013f3aac555983a5059aada98e1907d842695", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1", + "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1", "shasum": "" }, "require": { @@ -23556,7 +23712,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23595,7 +23751,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.0" }, "funding": [ { @@ -23611,20 +23767,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -23636,7 +23792,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23676,7 +23832,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -23692,7 +23848,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-icu", @@ -23783,16 +23939,16 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { @@ -23806,7 +23962,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23850,7 +24006,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" }, "funding": [ { @@ -23866,20 +24022,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:30:37+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -23891,7 +24047,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23934,7 +24090,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -23950,20 +24106,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -23978,7 +24134,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -24017,7 +24173,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -24033,7 +24189,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php72", @@ -24275,16 +24431,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", "shasum": "" }, "require": { @@ -24294,7 +24450,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -24307,7 +24463,10 @@ ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" - } + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -24332,7 +24491,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" }, "funding": [ { @@ -24348,20 +24507,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-08-16T06:22:46+00:00" }, { "name": "symfony/process", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0a4e8fac947b0f1720b0f634a13a2273cc4cc1ad" + "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0a4e8fac947b0f1720b0f634a13a2273cc4cc1ad", - "reference": "0a4e8fac947b0f1720b0f634a13a2273cc4cc1ad", + "url": "https://api.github.com/repos/symfony/process/zipball/c4b1ef0bc80533d87a2e969806172f1c2a980241", + "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241", "shasum": "" }, "require": { @@ -24393,7 +24552,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.11" + "source": "https://github.com/symfony/process/tree/v6.4.2" }, "funding": [ { @@ -24409,7 +24568,7 @@ "type": "tidelift" } ], - "time": "2023-12-02T12:48:42+00:00" + "time": "2023-12-22T16:42:54+00:00" }, { "name": "symfony/property-access", @@ -24490,34 +24649,34 @@ }, { "name": "symfony/property-info", - "version": "v6.3.9", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729" + "reference": "288be71bae2ebc88676f5d3a03d23f70b278fcc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/664ae7ad443d7cc591ff3e15496b954e4cefe729", - "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729", + "url": "https://api.github.com/repos/symfony/property-info/zipball/288be71bae2ebc88676f5d3a03d23f70b278fcc1", + "reference": "288be71bae2ebc88676f5d3a03d23f70b278fcc1", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/serializer": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4|^2", "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -24553,7 +24712,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.3.9" + "source": "https://github.com/symfony/property-info/tree/v6.4.0" }, "funding": [ { @@ -24569,46 +24728,42 @@ "type": "tidelift" } ], - "time": "2023-11-24T11:57:32+00:00" + "time": "2023-11-25T16:57:46+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.2.0", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "28a732c05bbad801304ad5a5c674cf2970508993" + "reference": "d32f5898f163266230182432b877ab7623ff252d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/28a732c05bbad801304ad5a5c674cf2970508993", - "reference": "28a732c05bbad801304ad5a5c674cf2970508993", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/d32f5898f163266230182432b877ab7623ff252d", + "reference": "d32f5898f163266230182432b877ab7623ff252d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0", - "symfony/http-foundation": "^5.4 || ^6.0" + "php": ">=8.1", + "psr/http-message": "^1.0|^2.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0" + }, + "conflict": { + "php-http/discovery": "<1.15", + "symfony/http-kernel": "<6.2" }, "require-dev": { "nyholm/psr7": "^1.1", - "psr/log": "^1.1 || ^2 || ^3", - "symfony/browser-kit": "^5.4 || ^6.0", - "symfony/config": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/framework-bundle": "^5.4 || ^6.0", - "symfony/http-kernel": "^5.4 || ^6.0", - "symfony/phpunit-bridge": "^6.2" - }, - "suggest": { - "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + "php-http/discovery": "^1.15", + "psr/log": "^1.1.4|^2|^3", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/framework-bundle": "^6.2|^7.0", + "symfony/http-kernel": "^6.2|^7.0" }, "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-main": "2.2-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Bridge\\PsrHttpMessage\\": "" @@ -24628,11 +24783,11 @@ }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], "description": "PSR HTTP message bridge", - "homepage": "http://symfony.com", + "homepage": "https://symfony.com", "keywords": [ "http", "http-message", @@ -24640,8 +24795,7 @@ "psr-7" ], "support": { - "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.2.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.2" }, "funding": [ { @@ -24657,20 +24811,20 @@ "type": "tidelift" } ], - "time": "2023-04-21T08:40:19+00:00" + "time": "2023-12-28T07:55:26+00:00" }, { "name": "symfony/routing", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "5f1b4eb8e7b7d8487389bd774fb76f51dba57452" + "reference": "98eab13a07fddc85766f1756129c69f207ffbc21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5f1b4eb8e7b7d8487389bd774fb76f51dba57452", - "reference": "5f1b4eb8e7b7d8487389bd774fb76f51dba57452", + "url": "https://api.github.com/repos/symfony/routing/zipball/98eab13a07fddc85766f1756129c69f207ffbc21", + "reference": "98eab13a07fddc85766f1756129c69f207ffbc21", "shasum": "" }, "require": { @@ -24686,11 +24840,11 @@ "require-dev": { "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -24724,7 +24878,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.11" + "source": "https://github.com/symfony/routing/tree/v6.4.2" }, "funding": [ { @@ -24740,20 +24894,20 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:20:22+00:00" + "time": "2023-12-29T15:34:34+00:00" }, { "name": "symfony/serializer", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "83a2e5ec60dddfb227b28ef9bffb7da073e50cfc" + "reference": "f87ea9d7bfd4cf2f7b72be554607e6c96e6664af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/83a2e5ec60dddfb227b28ef9bffb7da073e50cfc", - "reference": "83a2e5ec60dddfb227b28ef9bffb7da073e50cfc", + "url": "https://api.github.com/repos/symfony/serializer/zipball/f87ea9d7bfd4cf2f7b72be554607e6c96e6664af", + "reference": "f87ea9d7bfd4cf2f7b72be554607e6c96e6664af", "shasum": "" }, "require": { @@ -24769,28 +24923,32 @@ "symfony/property-access": "<5.4", "symfony/property-info": "<5.4.24|>=6,<6.2.11", "symfony/uid": "<5.4", + "symfony/validator": "<6.4", "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "symfony/cache": "^5.4|^6.0", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/form": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4.24|^6.2.11", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0", - "symfony/var-exporter": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "seld/jsonlint": "^1.10", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/form": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4.24|^6.2.11|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -24818,7 +24976,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.3.11" + "source": "https://github.com/symfony/serializer/tree/v6.4.2" }, "funding": [ { @@ -24834,25 +24992,25 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:20:22+00:00" + "time": "2023-12-29T15:34:34+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -24900,7 +25058,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -24916,20 +25074,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/string", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "6a4b1e7b315cf420c814c8e29d8af1e96ae4b674" + "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6a4b1e7b315cf420c814c8e29d8af1e96ae4b674", - "reference": "6a4b1e7b315cf420c814c8e29d8af1e96ae4b674", + "url": "https://api.github.com/repos/symfony/string/zipball/7cb80bc10bfcdf6b5492741c0b9357dac66940bc", + "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc", "shasum": "" }, "require": { @@ -24943,11 +25101,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -24986,7 +25144,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.11" + "source": "https://github.com/symfony/string/tree/v6.4.2" }, "funding": [ { @@ -25002,20 +25160,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T14:03:40+00:00" + "time": "2023-12-10T16:15:48+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "06450585bf65e978026bda220cdebca3f867fde7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", + "reference": "06450585bf65e978026bda220cdebca3f867fde7", "shasum": "" }, "require": { @@ -25064,7 +25222,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" }, "funding": [ { @@ -25080,20 +25238,20 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/validator", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "e35e841744bc8d3c54ffd35f06e22e02b36d6209" + "reference": "15fe2c6ed815b06b6b8636d8ba3ef9807ee1a75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/e35e841744bc8d3c54ffd35f06e22e02b36d6209", - "reference": "e35e841744bc8d3c54ffd35f06e22e02b36d6209", + "url": "https://api.github.com/repos/symfony/validator/zipball/15fe2c6ed815b06b6b8636d8ba3ef9807ee1a75c", + "reference": "15fe2c6ed815b06b6b8636d8ba3ef9807ee1a75c", "shasum": "" }, "require": { @@ -25118,21 +25276,21 @@ "require-dev": { "doctrine/annotations": "^1.13|^2", "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^5.4|^6.0", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -25160,7 +25318,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.3.11" + "source": "https://github.com/symfony/validator/tree/v6.4.2" }, "funding": [ { @@ -25176,20 +25334,20 @@ "type": "tidelift" } ], - "time": "2023-12-29T16:33:47+00:00" + "time": "2023-12-29T16:34:12+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "376d3c652c17c33d88db7a7e2e5288ecf3e327dc" + "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/376d3c652c17c33d88db7a7e2e5288ecf3e327dc", - "reference": "376d3c652c17c33d88db7a7e2e5288ecf3e327dc", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", + "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", "shasum": "" }, "require": { @@ -25202,10 +25360,11 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, "bin": [ @@ -25244,7 +25403,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.11" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.2" }, "funding": [ { @@ -25260,27 +25419,28 @@ "type": "tidelift" } ], - "time": "2023-12-28T15:37:35+00:00" + "time": "2023-12-28T19:16:56+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.3.11", + "version": "v6.4.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "a8a93f02c528066a3ee66ed823dff839b602e1c1" + "reference": "5fe9a0021b8d35e67d914716ec8de50716a68e7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a8a93f02c528066a3ee66ed823dff839b602e1c1", - "reference": "a8a93f02c528066a3ee66ed823dff839b602e1c1", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5fe9a0021b8d35e67d914716ec8de50716a68e7e", + "reference": "5fe9a0021b8d35e67d914716ec8de50716a68e7e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -25318,7 +25478,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.11" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.2" }, "funding": [ { @@ -25334,20 +25494,20 @@ "type": "tidelift" } ], - "time": "2023-12-26T12:32:59+00:00" + "time": "2023-12-27T08:18:35+00:00" }, { "name": "symfony/yaml", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92" + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3493af8a8dad7fa91c77fa473ba23ecd95334a92", - "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4f9237a1bb42455d609e6687d2613dde5b41a587", + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587", "shasum": "" }, "require": { @@ -25359,7 +25519,7 @@ "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -25390,7 +25550,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.8" + "source": "https://github.com/symfony/yaml/tree/v6.4.0" }, "funding": [ { @@ -25406,7 +25566,7 @@ "type": "tidelift" } ], - "time": "2023-11-06T10:58:05+00:00" + "time": "2023-11-06T11:00:25+00:00" }, { "name": "theseer/tokenizer", @@ -25630,26 +25790,27 @@ }, { "name": "twig/twig", - "version": "v3.6.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd" + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd", - "reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.22" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" }, "type": "library", "autoload": { @@ -25685,7 +25846,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.6.1" + "source": "https://github.com/twigphp/Twig/tree/v3.8.0" }, "funding": [ { @@ -25697,20 +25858,20 @@ "type": "tidelift" } ], - "time": "2023-06-08T12:52:13+00:00" + "time": "2023-11-21T18:54:41+00:00" }, { "name": "va-gov/content-build", - "version": "v0.0.3417", + "version": "v0.0.3427", "source": { "type": "git", "url": "https://github.com/department-of-veterans-affairs/content-build.git", - "reference": "62ce570e4c1a240c46381ca02a635ea191aa82ec" + "reference": "d98e082265882b311383cb6a0b83ef6cf6d72f42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/62ce570e4c1a240c46381ca02a635ea191aa82ec", - "reference": "62ce570e4c1a240c46381ca02a635ea191aa82ec", + "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/d98e082265882b311383cb6a0b83ef6cf6d72f42", + "reference": "d98e082265882b311383cb6a0b83ef6cf6d72f42", "shasum": "" }, "type": "node-project", @@ -25737,9 +25898,9 @@ "description": "Front-end for VA.gov. This repository contains the code that generates the www.va.gov website. It contains a Metalsmith static site builder that uses a Drupal CMS for content. This file is here to publish releases to https://packagist.org/packages/va-gov/content-build, so that the CMS CI system can install it and update it using standard composer processes, and so that we can run tests across both systems. See https://github.com/department-of-veterans-affairs/va.gov-cms for the CMS repo, and stand by for more documentation.", "support": { "issues": "https://github.com/department-of-veterans-affairs/content-build/issues", - "source": "https://github.com/department-of-veterans-affairs/content-build/tree/v0.0.3417" + "source": "https://github.com/department-of-veterans-affairs/content-build/tree/v0.0.3427" }, - "time": "2024-01-08T21:06:54+00:00" + "time": "2024-01-24T17:14:58+00:00" }, { "name": "vlucas/phpdotenv", @@ -26697,24 +26858,6 @@ } ], "aliases": [ - { - "package": "drupal/core", - "version": "10.1.7.0", - "alias": "9.5", - "alias_normalized": "9.5.0.0" - }, - { - "package": "drupal/core-composer-scaffold", - "version": "10.1.7.0", - "alias": "9.5", - "alias_normalized": "9.5.0.0" - }, - { - "package": "drupal/core-recommended", - "version": "10.1.7.0", - "alias": "9.5", - "alias_normalized": "9.5.0.0" - }, { "package": "easyrdf/easyrdf", "version": "1.1.1.0", @@ -26734,6 +26877,7 @@ "drupal/entity_block": 10, "drupal/entity_clone": 15, "drupal/entity_diff_ui": 15, + "drupal/entity_field_fetch": 10, "drupal/entity_reference_hierarchy": 10, "drupal/entity_reference_validators": 15, "drupal/entity_route_context": 5, diff --git a/config/sync/clientside_validation.settings.yml b/config/sync/clientside_validation.settings.yml new file mode 100644 index 00000000000..4814ea29e3c --- /dev/null +++ b/config/sync/clientside_validation.settings.yml @@ -0,0 +1,4 @@ +_core: + default_config_hash: GfA9lmRURupNRAARLoOTo1Ihq1-M3ktT0sKSjUcL2sw +enable_all_forms: true +enabled_forms: { } diff --git a/config/sync/clientside_validation_jquery.settings.yml b/config/sync/clientside_validation_jquery.settings.yml new file mode 100644 index 00000000000..1c68f90ce1d --- /dev/null +++ b/config/sync/clientside_validation_jquery.settings.yml @@ -0,0 +1,6 @@ +_core: + default_config_hash: 3YUV4RQQ4k8drO7uzYJ7lNc5Az0iDAH5YW8KbZVxjeY +use_cdn: false +cdn_base_url: 'https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/' +validate_all_ajax_forms: 2 +force_validate_on_blur: 0 diff --git a/config/sync/core.entity_form_display.media.image.default.yml b/config/sync/core.entity_form_display.media.image.default.yml index 1b2576ac170..ed14648e9b3 100644 --- a/config/sync/core.entity_form_display.media.image.default.yml +++ b/config/sync/core.entity_form_display.media.image.default.yml @@ -8,9 +8,10 @@ dependencies: - field.field.media.image.field_media_submission_guideline - field.field.media.image.field_owner - field.field.media.image.image - - image.style.3_2_medium_thumbnail + - image.style.full_content_width - media.type.image module: + - change_labels - field_group - image_widget_crop - markup @@ -47,6 +48,7 @@ content: maxlength: 300 counter_position: after js_prevent_submit: true + count_only_mode: false count_html_characters: true textcount_status_message: 'Characters Remaining: @remaining_count' third_party_settings: { } @@ -68,14 +70,23 @@ content: region: content settings: progress_indicator: throbber - preview_image_style: 3_2_medium_thumbnail + preview_image_style: full_content_width crop_preview_image_style: crop_thumbnail - crop_list: { } + crop_list: + - '2_1' + - '2_3' + - '3_2' + - '7_2' + - freeform + - original + - square crop_types_required: { } warn_multiple_usages: false show_crop_area: true show_default_crop: true - third_party_settings: { } + third_party_settings: + change_labels: + remove_label: '' name: type: string_textfield weight: 1 @@ -84,6 +95,11 @@ content: size: 60 placeholder: '' third_party_settings: { } + translation: + weight: 10 + region: content + settings: { } + third_party_settings: { } hidden: created: true field_media_in_library: true diff --git a/config/sync/core.entity_form_display.node.centralized_content.default.yml b/config/sync/core.entity_form_display.node.centralized_content.default.yml index 11f5fad9fb2..ed66f4ecbd9 100644 --- a/config/sync/core.entity_form_display.node.centralized_content.default.yml +++ b/config/sync/core.entity_form_display.node.centralized_content.default.yml @@ -71,7 +71,7 @@ content: counter_position: after js_prevent_submit: true count_html_characters: false - textcount_status_message: 'Maxlength: @maxlength
Used: @current_length
Remaining: @remaining_count' + textcount_status_message: '@remaining_count characters remaining' third_party_settings: allowed_formats: hide_help: '0' diff --git a/config/sync/core.entity_form_display.node.health_care_local_facility.default.yml b/config/sync/core.entity_form_display.node.health_care_local_facility.default.yml index d8b3a76b70a..55a7e6fcc40 100644 --- a/config/sync/core.entity_form_display.node.health_care_local_facility.default.yml +++ b/config/sync/core.entity_form_display.node.health_care_local_facility.default.yml @@ -15,6 +15,7 @@ dependencies: - field.field.node.health_care_local_facility.field_location_services - field.field.node.health_care_local_facility.field_main_location - field.field.node.health_care_local_facility.field_media + - field.field.node.health_care_local_facility.field_mental_health_contact_phon - field.field.node.health_care_local_facility.field_mental_health_phone - field.field.node.health_care_local_facility.field_meta_tags - field.field.node.health_care_local_facility.field_mobile @@ -30,7 +31,6 @@ dependencies: - workflows.workflow.editorial module: - address - - allowed_formats - content_moderation - field_group - geofield @@ -49,7 +49,7 @@ third_party_settings: label: 'Section settings' region: content parent_name: '' - weight: 8 + weight: 9 format_type: details_sidebar format_settings: classes: '' @@ -65,7 +65,7 @@ third_party_settings: label: 'Editorial Workflow' region: content parent_name: '' - weight: 9 + weight: 10 format_type: fieldset format_settings: classes: '' @@ -78,7 +78,7 @@ third_party_settings: label: '"Prepare for your visit"' region: content parent_name: '' - weight: 6 + weight: 7 format_type: details format_settings: classes: '' @@ -119,7 +119,7 @@ third_party_settings: label: 'Social Media' region: content parent_name: '' - weight: 5 + weight: 6 format_type: fieldset format_settings: classes: '' @@ -158,6 +158,7 @@ third_party_settings: group_locations_and_contact_info: children: - group_facility_data_from_vast + - field_mental_health_contact_phon label: 'Locations and contact information' region: content parent_name: '' @@ -204,7 +205,7 @@ third_party_settings: label: 'COVID-19 health protection guidelines' region: hidden parent_name: '' - weight: 19 + weight: 21 format_type: html_element format_settings: classes: '' @@ -246,6 +247,7 @@ content: maxlength: 300 counter_position: after js_prevent_submit: false + count_only_mode: false count_html_characters: false textcount_status_message: '@remaining_count characters remaining' third_party_settings: { } @@ -280,12 +282,13 @@ content: maxlength: 600 counter_position: after js_prevent_submit: false + count_only_mode: false count_html_characters: false textcount_status_message: '@remaining_count characters remaining' third_party_settings: { } field_last_saved_by_an_editor: type: datetime_timestamp - weight: 10 + weight: 11 region: content settings: { } third_party_settings: { } @@ -315,6 +318,13 @@ content: settings: media_types: { } third_party_settings: { } + field_mental_health_contact_phon: + type: telephone_default + weight: 21 + region: content + settings: + placeholder: '' + third_party_settings: { } field_mental_health_phone: type: telephone_default weight: 28 @@ -333,7 +343,8 @@ content: type: office_hours_default weight: 29 region: content - settings: { } + settings: + collapsed: false third_party_settings: { } field_operating_status_facility: type: options_buttons @@ -351,6 +362,7 @@ content: maxlength: 300 counter_position: after js_prevent_submit: true + count_only_mode: false count_html_characters: true textcount_status_message: '@remaining_count characters remaining' third_party_settings: { } @@ -386,7 +398,7 @@ content: third_party_settings: { } path: type: path - weight: 7 + weight: 8 region: content settings: { } third_party_settings: { } @@ -401,6 +413,7 @@ content: maxlength: 150 counter_position: after js_prevent_submit: false + count_only_mode: false count_html_characters: true textcount_status_message: '@remaining_count characters remaining' third_party_settings: { } diff --git a/config/sync/core.entity_form_display.node.health_care_local_facility.inline_entity_form.yml b/config/sync/core.entity_form_display.node.health_care_local_facility.inline_entity_form.yml index e8f2e84b497..bb8face28e3 100644 --- a/config/sync/core.entity_form_display.node.health_care_local_facility.inline_entity_form.yml +++ b/config/sync/core.entity_form_display.node.health_care_local_facility.inline_entity_form.yml @@ -16,6 +16,7 @@ dependencies: - field.field.node.health_care_local_facility.field_location_services - field.field.node.health_care_local_facility.field_main_location - field.field.node.health_care_local_facility.field_media + - field.field.node.health_care_local_facility.field_mental_health_contact_phon - field.field.node.health_care_local_facility.field_mental_health_phone - field.field.node.health_care_local_facility.field_meta_tags - field.field.node.health_care_local_facility.field_mobile @@ -150,6 +151,7 @@ hidden: field_location_services: true field_main_location: true field_media: true + field_mental_health_contact_phon: true field_mental_health_phone: true field_meta_tags: true field_mobile: true diff --git a/config/sync/core.entity_form_display.node.health_care_region_page.default.yml b/config/sync/core.entity_form_display.node.health_care_region_page.default.yml index f72aca1fde6..5a013764e5f 100644 --- a/config/sync/core.entity_form_display.node.health_care_region_page.default.yml +++ b/config/sync/core.entity_form_display.node.health_care_region_page.default.yml @@ -26,7 +26,7 @@ dependencies: - field.field.node.health_care_region_page.field_vamc_system_official_name - field.field.node.health_care_region_page.field_youtube - node.type.health_care_region_page - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - content_moderation - field_group diff --git a/config/sync/core.entity_form_display.node.locations_listing.default.yml b/config/sync/core.entity_form_display.node.locations_listing.default.yml index ca779bc2759..dfd98c48821 100644 --- a/config/sync/core.entity_form_display.node.locations_listing.default.yml +++ b/config/sync/core.entity_form_display.node.locations_listing.default.yml @@ -10,7 +10,7 @@ dependencies: - field.field.node.locations_listing.field_meta_tags - field.field.node.locations_listing.field_office - node.type.locations_listing - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - allow_only_one - content_moderation diff --git a/config/sync/core.entity_form_display.node.vamc_operating_status_and_alerts.default.yml b/config/sync/core.entity_form_display.node.vamc_operating_status_and_alerts.default.yml index 44714eca67e..d48cf3b36e5 100644 --- a/config/sync/core.entity_form_display.node.vamc_operating_status_and_alerts.default.yml +++ b/config/sync/core.entity_form_display.node.vamc_operating_status_and_alerts.default.yml @@ -14,7 +14,7 @@ dependencies: - field.field.node.vamc_operating_status_and_alerts.field_office - field.field.node.vamc_operating_status_and_alerts.field_operating_status_emerg_inf - node.type.vamc_operating_status_and_alerts - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - allow_only_one - content_moderation diff --git a/config/sync/core.entity_form_display.node.vamc_system_billing_insurance.default.yml b/config/sync/core.entity_form_display.node.vamc_system_billing_insurance.default.yml index 47f11523595..2eeb0bdbaab 100644 --- a/config/sync/core.entity_form_display.node.vamc_system_billing_insurance.default.yml +++ b/config/sync/core.entity_form_display.node.vamc_system_billing_insurance.default.yml @@ -17,7 +17,7 @@ dependencies: - field.field.node.vamc_system_billing_insurance.field_phone_number - field.field.node.vamc_system_billing_insurance.field_service_name_and_descripti - node.type.vamc_system_billing_insurance - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - allow_only_one - content_moderation diff --git a/config/sync/core.entity_form_display.node.vamc_system_medical_records_offi.default.yml b/config/sync/core.entity_form_display.node.vamc_system_medical_records_offi.default.yml index 2a3cc6f5153..bf5bfece834 100644 --- a/config/sync/core.entity_form_display.node.vamc_system_medical_records_offi.default.yml +++ b/config/sync/core.entity_form_display.node.vamc_system_medical_records_offi.default.yml @@ -21,7 +21,7 @@ dependencies: - field.field.node.vamc_system_medical_records_offi.field_service_name_and_descripti - field.field.node.vamc_system_medical_records_offi.field_vamc_med_records_mailing - node.type.vamc_system_medical_records_offi - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - address - allow_only_one diff --git a/config/sync/core.entity_form_display.node.vamc_system_policies_page.default.yml b/config/sync/core.entity_form_display.node.vamc_system_policies_page.default.yml index f0e1275d33a..8cf2c8fe1bd 100644 --- a/config/sync/core.entity_form_display.node.vamc_system_policies_page.default.yml +++ b/config/sync/core.entity_form_display.node.vamc_system_policies_page.default.yml @@ -15,7 +15,7 @@ dependencies: - field.field.node.vamc_system_policies_page.field_vamc_other_policies - field.field.node.vamc_system_policies_page.field_vamc_visitation_policy - node.type.vamc_system_policies_page - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - allow_only_one - content_moderation diff --git a/config/sync/core.entity_form_display.node.vamc_system_register_for_care.default.yml b/config/sync/core.entity_form_display.node.vamc_system_register_for_care.default.yml index 5f48b5cdade..67262f7c825 100644 --- a/config/sync/core.entity_form_display.node.vamc_system_register_for_care.default.yml +++ b/config/sync/core.entity_form_display.node.vamc_system_register_for_care.default.yml @@ -14,7 +14,7 @@ dependencies: - field.field.node.vamc_system_register_for_care.field_office - field.field.node.vamc_system_register_for_care.field_service_name_and_descripti - node.type.vamc_system_register_for_care - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - allow_only_one - content_moderation diff --git a/config/sync/core.entity_form_display.node.vamc_system_va_police.default.yml b/config/sync/core.entity_form_display.node.vamc_system_va_police.default.yml index 7f38f10b754..dbd802eb5c2 100644 --- a/config/sync/core.entity_form_display.node.vamc_system_va_police.default.yml +++ b/config/sync/core.entity_form_display.node.vamc_system_va_police.default.yml @@ -15,7 +15,7 @@ dependencies: - field.field.node.vamc_system_va_police.field_office - field.field.node.vamc_system_va_police.field_phone_numbers_paragraph - node.type.vamc_system_va_police - - workflows.workflow.editorial + - workflows.workflow.restricted_archive module: - allow_only_one - change_labels diff --git a/config/sync/core.entity_view_display.node.health_care_local_facility.default.yml b/config/sync/core.entity_view_display.node.health_care_local_facility.default.yml index a1ddf0e5699..8a2ea63cebb 100644 --- a/config/sync/core.entity_view_display.node.health_care_local_facility.default.yml +++ b/config/sync/core.entity_view_display.node.health_care_local_facility.default.yml @@ -15,6 +15,7 @@ dependencies: - field.field.node.health_care_local_facility.field_location_services - field.field.node.health_care_local_facility.field_main_location - field.field.node.health_care_local_facility.field_media + - field.field.node.health_care_local_facility.field_mental_health_contact_phon - field.field.node.health_care_local_facility.field_mental_health_phone - field.field.node.health_care_local_facility.field_meta_tags - field.field.node.health_care_local_facility.field_mobile @@ -94,6 +95,7 @@ third_party_settings: group_locations_and_contact_info: children: - group_facility_data_from_vast + - field_mental_health_contact_phon label: 'Locations and contact information' parent_name: '' region: content @@ -155,7 +157,7 @@ content: label: above settings: { } third_party_settings: { } - weight: 17 + weight: 16 region: content field_description: type: string @@ -200,7 +202,7 @@ content: third_party_settings: { } weight: 0 region: content - field_mental_health_phone: + field_mental_health_contact_phon: type: telephone_link label: inline settings: @@ -208,6 +210,14 @@ content: third_party_settings: { } weight: 20 region: content + field_mental_health_phone: + type: telephone_link + label: inline + settings: + title: '' + third_party_settings: { } + weight: 19 + region: content field_mobile: type: boolean label: inline @@ -216,7 +226,7 @@ content: format_custom_false: '' format_custom_true: '' third_party_settings: { } - weight: 19 + weight: 18 region: content field_office_hours: type: office_hours @@ -249,7 +259,7 @@ content: schema: enabled: false third_party_settings: { } - weight: 21 + weight: 20 region: content field_operating_status_facility: type: list_default @@ -271,14 +281,14 @@ content: settings: title: '' third_party_settings: { } - weight: 18 + weight: 17 region: content field_timezone: type: basic_string label: above settings: { } third_party_settings: { } - weight: 22 + weight: 21 region: content flag_email_node: settings: { } diff --git a/config/sync/core.entity_view_display.node.health_care_local_facility.external_content.yml b/config/sync/core.entity_view_display.node.health_care_local_facility.external_content.yml index 166c5fe7a6e..c148f6326ce 100644 --- a/config/sync/core.entity_view_display.node.health_care_local_facility.external_content.yml +++ b/config/sync/core.entity_view_display.node.health_care_local_facility.external_content.yml @@ -16,6 +16,7 @@ dependencies: - field.field.node.health_care_local_facility.field_location_services - field.field.node.health_care_local_facility.field_main_location - field.field.node.health_care_local_facility.field_media + - field.field.node.health_care_local_facility.field_mental_health_contact_phon - field.field.node.health_care_local_facility.field_mental_health_phone - field.field.node.health_care_local_facility.field_meta_tags - field.field.node.health_care_local_facility.field_mobile @@ -219,7 +220,6 @@ content: grouped: false show_closed: all closed_format: Closed - all_day_format: 'All day open' separator: days: '
' grouped_days: ' - ' @@ -230,11 +230,6 @@ content: position: '' open_text: 'Currently open!' closed_text: 'Currently closed' - exceptions: - title: 'Exception hours' - restrict_exceptions_to_num_days: 7 - date_format: long - all_day_format: 'All day open' timezone_field: '' office_hours_first_day: '' schema: @@ -273,6 +268,7 @@ hidden: field_location_services: true field_main_location: true field_media: true + field_mental_health_contact_phon: true field_meta_tags: true field_meta_title: true field_operating_status_facility: true diff --git a/config/sync/core.entity_view_display.node.health_care_local_facility.ief_table.yml b/config/sync/core.entity_view_display.node.health_care_local_facility.ief_table.yml index d978097d787..54d54c1bd56 100644 --- a/config/sync/core.entity_view_display.node.health_care_local_facility.ief_table.yml +++ b/config/sync/core.entity_view_display.node.health_care_local_facility.ief_table.yml @@ -16,6 +16,7 @@ dependencies: - field.field.node.health_care_local_facility.field_location_services - field.field.node.health_care_local_facility.field_main_location - field.field.node.health_care_local_facility.field_media + - field.field.node.health_care_local_facility.field_mental_health_contact_phon - field.field.node.health_care_local_facility.field_mental_health_phone - field.field.node.health_care_local_facility.field_meta_tags - field.field.node.health_care_local_facility.field_mobile @@ -119,6 +120,7 @@ hidden: field_local_health_care_service_: true field_location_services: true field_main_location: true + field_mental_health_contact_phon: true field_mental_health_phone: true field_meta_tags: true field_mobile: true diff --git a/config/sync/core.entity_view_display.node.health_care_local_facility.teaser.yml b/config/sync/core.entity_view_display.node.health_care_local_facility.teaser.yml index 23950b24f12..45398d62610 100644 --- a/config/sync/core.entity_view_display.node.health_care_local_facility.teaser.yml +++ b/config/sync/core.entity_view_display.node.health_care_local_facility.teaser.yml @@ -16,6 +16,7 @@ dependencies: - field.field.node.health_care_local_facility.field_location_services - field.field.node.health_care_local_facility.field_main_location - field.field.node.health_care_local_facility.field_media + - field.field.node.health_care_local_facility.field_mental_health_contact_phon - field.field.node.health_care_local_facility.field_mental_health_phone - field.field.node.health_care_local_facility.field_meta_tags - field.field.node.health_care_local_facility.field_mobile @@ -95,6 +96,7 @@ hidden: field_location_services: true field_main_location: true field_media: true + field_mental_health_contact_phon: true field_mental_health_phone: true field_meta_tags: true field_mobile: true diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index 67e9b284032..d7ad4a2d381 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -24,6 +24,8 @@ module: change_labels: 0 ckeditor5: 0 ckeditor_abbreviation: 0 + clientside_validation: 0 + clientside_validation_jquery: 0 codit_menu_tools: 0 components: 0 computed_breadcrumbs: 0 diff --git a/config/sync/field.field.node.health_care_local_facility.field_mental_health_contact_phon.yml b/config/sync/field.field.node.health_care_local_facility.field_mental_health_contact_phon.yml new file mode 100644 index 00000000000..f62a8a60d62 --- /dev/null +++ b/config/sync/field.field.node.health_care_local_facility.field_mental_health_contact_phon.yml @@ -0,0 +1,25 @@ +uuid: 85b46732-b695-42f5-be09-413287698196 +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_mental_health_contact_phon + - node.type.health_care_local_facility + module: + - telephone + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false +id: node.health_care_local_facility.field_mental_health_contact_phon +field_name: field_mental_health_contact_phon +entity_type: node +bundle: health_care_local_facility +label: 'Mental health contact phone number' +description: 'Enter the number Veterans should call to access mental health services at your facility, for example 202-555-1234, ext. 23. If your facility doesn''t offer these services, enter the most appropriate system number. This number will be displayed everywhere your facility appears across VA.gov. View guidelines for editing VAMC facilities (opens in a new tab)' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: telephone diff --git a/config/sync/field.field.node.health_care_local_facility.field_mental_health_phone.yml b/config/sync/field.field.node.health_care_local_facility.field_mental_health_phone.yml index bb2fc3160a5..ff107baf8ee 100644 --- a/config/sync/field.field.node.health_care_local_facility.field_mental_health_phone.yml +++ b/config/sync/field.field.node.health_care_local_facility.field_mental_health_phone.yml @@ -7,11 +7,15 @@ dependencies: - node.type.health_care_local_facility module: - telephone + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: node.health_care_local_facility.field_mental_health_phone field_name: field_mental_health_phone entity_type: node bundle: health_care_local_facility -label: 'Mental Health Phone' +label: 'Mental health phone number' description: '' required: false translatable: false diff --git a/config/sync/field.field.node.health_care_local_facility.field_phone_number.yml b/config/sync/field.field.node.health_care_local_facility.field_phone_number.yml index 0859ff7da1e..45b797bbb9e 100644 --- a/config/sync/field.field.node.health_care_local_facility.field_phone_number.yml +++ b/config/sync/field.field.node.health_care_local_facility.field_phone_number.yml @@ -7,11 +7,15 @@ dependencies: - node.type.health_care_local_facility module: - telephone + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: node.health_care_local_facility.field_phone_number field_name: field_phone_number entity_type: node bundle: health_care_local_facility -label: 'Phone Number' +label: 'Phone number' description: '' required: false translatable: false diff --git a/config/sync/field.field.node.vba_facility.field_banner_types_description.yml b/config/sync/field.field.node.vba_facility.field_banner_types_description.yml index f111a20eb3d..54465c6f514 100644 --- a/config/sync/field.field.node.vba_facility.field_banner_types_description.yml +++ b/config/sync/field.field.node.vba_facility.field_banner_types_description.yml @@ -24,6 +24,6 @@ default_value: default_value_callback: '' settings: markup: - value: "

Two types of Banner alerts are supported:

\r\n\r\n
    \r\n\t
  1. Informational alerts: These are used to provide helpful information or call attention to an announcement.
  2. \r\n\t
  3. Warning alertsP These are used to warn a user and call out negative consequences. Warning alerts are necessary when something has gone wrong.
  4. \r\n
\r\n

You can read more about these banner types on the site in the VA Design System (opens in a new window), or learn how to create them in the CMS in the Knowledge Base (opens in a new window).

" + value: "

Two types of Banner alerts are supported:

\r\n\r\n
    \r\n\t
  1. Informational alerts: These are used to provide helpful information or call attention to an announcement.
  2. \r\n\t
  3. Warning alerts: These are used to warn a user and call out negative consequences. Warning alerts are necessary when something has gone wrong.
  4. \r\n
\r\n

You can read more about these banner types on the site in the VA Design System (opens in a new window), or learn how to create them in the CMS in the Knowledge Base (opens in a new window).

" format: rich_text field_type: markup diff --git a/config/sync/field.field.paragraph.audience_topics.field_markup.yml b/config/sync/field.field.paragraph.audience_topics.field_markup.yml index 7bf6f6d5144..f514c78b771 100644 --- a/config/sync/field.field.paragraph.audience_topics.field_markup.yml +++ b/config/sync/field.field.paragraph.audience_topics.field_markup.yml @@ -20,6 +20,6 @@ default_value: default_value_callback: '' settings: markup: - value: "

Select tags for your article (minimum of 1, max of 4).
\r\nTags allow users to see more articles for that tag.
\r\nSelect one to four tags that are most relevant for this article.
\r\nYou can select a combination of Topics and Audiences.

\r\n" + value: "

Select tags for your article.
\r\nTags allow users to see more articles for that tag.
\r\nYou can select a combination of Topics and Audiences.

\r\n" format: rich_text field_type: markup diff --git a/config/sync/field.storage.node.field_mental_health_contact_phon.yml b/config/sync/field.storage.node.field_mental_health_contact_phon.yml new file mode 100644 index 00000000000..a32d2da3892 --- /dev/null +++ b/config/sync/field.storage.node.field_mental_health_contact_phon.yml @@ -0,0 +1,19 @@ +uuid: 0b19fe89-c843-4663-a729-1244f4931208 +langcode: en +status: true +dependencies: + module: + - node + - telephone +id: node.field_mental_health_contact_phon +field_name: field_mental_health_contact_phon +entity_type: node +type: telephone +settings: { } +module: telephone +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/config/sync/field.storage.paragraph.field_topics.yml b/config/sync/field.storage.paragraph.field_topics.yml index 98341fe1906..b7fc49f3dc5 100644 --- a/config/sync/field.storage.paragraph.field_topics.yml +++ b/config/sync/field.storage.paragraph.field_topics.yml @@ -13,7 +13,7 @@ settings: target_type: taxonomy_term module: core locked: false -cardinality: 4 +cardinality: -1 translatable: true indexes: { } persist_with_no_fields: false diff --git a/config/sync/next.settings.yml b/config/sync/next.settings.yml index 6a6d3d95484..d5cb9d91d41 100644 --- a/config/sync/next.settings.yml +++ b/config/sync/next.settings.yml @@ -8,5 +8,5 @@ site_previewer_configuration: sync_route_skip_routes: '' preview_url_generator: simple_oauth preview_url_generator_configuration: - secret_expiration: 300 + secret_expiration: 86400 debug: false diff --git a/config/sync/views.view.user_admin_people.yml b/config/sync/views.view.user_admin_people.yml index 971377b471a..955be03908c 100644 --- a/config/sync/views.view.user_admin_people.yml +++ b/config/sync/views.view.user_admin_people.yml @@ -1466,7 +1466,7 @@ display: type: timestamp settings: date_format: custom - custom_date_format: 'F j, Y, g:ia' + custom_date_format: 'Y-m-d H:i:s' timezone: '' tooltip: date_format: '' @@ -1477,6 +1477,7 @@ display: past_format: '@interval ago' granularity: 2 refresh: 60 + description: '' group_column: value group_columns: { } group_rows: true @@ -1501,7 +1502,7 @@ display: exclude: false alter: alter_text: true - text: "{% if access__value %}\r\n {{ access__value|format_date('custom', 'F j, Y, g:ia') }}\r\n{% else %}\r\n Never\r\n{% endif %}" + text: "{% if access__value %}\r\n {{ access__value|format_date('custom', 'Y-m-d H:i:s') }}\r\n{% else %}\r\n Never\r\n{% endif %}" make_link: false path: '' absolute: false @@ -2006,7 +2007,7 @@ display: type: timestamp settings: date_format: custom - custom_date_format: 'F j, Y, g:ia' + custom_date_format: 'Y-m-d H:i:s' timezone: '' tooltip: date_format: '' @@ -2042,7 +2043,7 @@ display: exclude: false alter: alter_text: true - text: "{% if access__value %}\r\n {{ access__value|format_date('custom', 'F j, Y, g:ia') }}\r\n{% else %}\r\n Never\r\n{% endif %}" + text: "{% if access__value %}\r\n {{ access__value|format_date('custom', 'Y-m-d H:i:s') }}\r\n{% else %}\r\n Never\r\n{% endif %}" make_link: false path: '' absolute: false diff --git a/config/sync/workflows.workflow.editorial.yml b/config/sync/workflows.workflow.editorial.yml index 1cba2486a1f..8f2215978c5 100644 --- a/config/sync/workflows.workflow.editorial.yml +++ b/config/sync/workflows.workflow.editorial.yml @@ -20,11 +20,9 @@ dependencies: - node.type.health_care_local_facility - node.type.health_care_local_health_service - node.type.health_care_region_detail_page - - node.type.health_care_region_page - node.type.health_services_listing - node.type.landing_page - node.type.leadership_listing - - node.type.locations_listing - node.type.media_list_images - node.type.media_list_videos - node.type.nca_facility @@ -44,12 +42,6 @@ dependencies: - node.type.support_resources_detail_page - node.type.support_service - node.type.va_form - - node.type.vamc_operating_status_and_alerts - - node.type.vamc_system_billing_insurance - - node.type.vamc_system_medical_records_offi - - node.type.vamc_system_policies_page - - node.type.vamc_system_register_for_care - - node.type.vamc_system_va_police - node.type.vba_facility_service - node.type.vet_center - node.type.vet_center_cap @@ -161,11 +153,9 @@ type_settings: - health_care_local_facility - health_care_local_health_service - health_care_region_detail_page - - health_care_region_page - health_services_listing - landing_page - leadership_listing - - locations_listing - media_list_images - media_list_videos - nca_facility @@ -185,12 +175,6 @@ type_settings: - support_resources_detail_page - support_service - va_form - - vamc_operating_status_and_alerts - - vamc_system_billing_insurance - - vamc_system_medical_records_offi - - vamc_system_policies_page - - vamc_system_register_for_care - - vamc_system_va_police - vba_facility_service - vet_center - vet_center_cap diff --git a/config/sync/workflows.workflow.restricted_archive.yml b/config/sync/workflows.workflow.restricted_archive.yml index 71d33174fda..731793da067 100644 --- a/config/sync/workflows.workflow.restricted_archive.yml +++ b/config/sync/workflows.workflow.restricted_archive.yml @@ -3,7 +3,15 @@ langcode: en status: true dependencies: config: + - node.type.health_care_region_page + - node.type.locations_listing - node.type.service_region + - node.type.vamc_operating_status_and_alerts + - node.type.vamc_system_billing_insurance + - node.type.vamc_system_medical_records_offi + - node.type.vamc_system_policies_page + - node.type.vamc_system_register_for_care + - node.type.vamc_system_va_police - node.type.vba_facility module: - content_moderation @@ -91,6 +99,14 @@ type_settings: weight: 2 entity_types: node: + - health_care_region_page + - locations_listing - service_region + - vamc_operating_status_and_alerts + - vamc_system_billing_insurance + - vamc_system_medical_records_offi + - vamc_system_policies_page + - vamc_system_register_for_care + - vamc_system_va_police - vba_facility default_moderation_state: draft diff --git a/docroot/design-system/components/input/input.scss b/docroot/design-system/components/input/input.scss index 50cc01ec0df..9ab24f9452a 100644 --- a/docroot/design-system/components/input/input.scss +++ b/docroot/design-system/components/input/input.scss @@ -23,5 +23,6 @@ } .form-item--error-message { - color: var(--va-red-bright); + color: var(--va-red-dark); + margin: 5px 0; } diff --git a/docroot/design-system/components/tokens/_variables.scss b/docroot/design-system/components/tokens/_variables.scss index a86e64bfa49..fbbc25b89c2 100644 --- a/docroot/design-system/components/tokens/_variables.scss +++ b/docroot/design-system/components/tokens/_variables.scss @@ -95,7 +95,7 @@ --color-absolutezero-hover: var(--va-blue-dark); --color-absolutezero-active: var(--va-blue-darker); --color-sunglow: var(--va-gold-med); - --color-maximumred: var(--va-red-bright); + --color-maximumred: var(--va-red-dark); --color-lightninggreen: var(--va-green); --color-lightgray: var(--va-gray-lighter); --color-whitesmoke: var(--va-gray-lightest); diff --git a/docroot/modules/custom/va_gov_backend/js/audience_topics.es6.js b/docroot/modules/custom/va_gov_backend/js/audience_topics.es6.js index 048866247fa..83aacc69d79 100644 --- a/docroot/modules/custom/va_gov_backend/js/audience_topics.es6.js +++ b/docroot/modules/custom/va_gov_backend/js/audience_topics.es6.js @@ -3,80 +3,6 @@ */ (($, Drupal) => { - /** - * Ensure that a maximum of 4 tags + audiences may be selected. - */ - function enforceMaximumNumberOfTags() { - // Get the total number of tags selected in the Topics fields. - let total = $('div[id^="edit-field-tags-0-subform-field-topics"]').find( - "input:checked" - ).length; - - // Prevent showing the Beneficiaries field if we already have 4 topic tags. - if (total >= 4) { - $( - 'select[id^="edit-field-tags-0-subform-field-audience-selection"]' - ).attr("disabled", true); - $("div.form-item-field-tags-0-subform-field-audience-selection").addClass( - "form-disabled" - ); - - $( - 'div[id^="edit-field-tags-0-subform-field-audience-beneficiares-none"]' - ).attr("checked", true); - $( - 'div[id^="edit-field-tags-0-subform-field-non-beneficiares-none"]' - ).attr("checked", true); - - $( - 'div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]' - ).hide(); - $( - 'div[id^="edit-field-tags-0-subform-field-audience-beneficiares-wrapper"]' - ).hide(); - $('select[id^="edit-field-tags-0-subform-field-audience-selection"]').val( - "_none" - ); - } else { - $( - 'select[id^="edit-field-tags-0-subform-field-audience-selection"]' - ).attr("disabled", false); - $( - "div.form-item-field-tags-0-subform-field-audience-selection" - ).removeClass("form-disabled"); - } - // Find out if there is a Beneficiary/Non-beneficiary term selected and increase the total if so. - let audienceSelected = $( - 'div[id^="edit-field-tags-0-subform-field-audience-beneficiares-wrapper"]' - ).find( - 'input:not([id^="edit-field-tags-0-subform-field-audience-beneficiares-none"]):checked' - ).length; - if ( - $( - 'select[id^="edit-field-tags-0-subform-field-audience-selection"]' - ).val() === "non-beneficiaries" - ) { - audienceSelected = $( - 'div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]' - ).find( - 'input:not([id^="edit-field-tags-0-subform-field-non-beneficiares-none"]):checked' - ).length; - } - - total += audienceSelected; - - if (total >= 4) { - // If a total of four or more tags have been selected, prevent the user from selecting more. - $('div[id^="edit-field-tags-0-subform-field-topics"]') - .find("input[type=checkbox]:not(:checked)") - .attr("disabled", true); - } else { - // Otherwise, ensure that more tags may be selected. - $('div[id^="edit-field-tags-0-subform-field-topics"]') - .find("input[type=checkbox]") - .attr("disabled", false); - } - } Drupal.behaviors.vaGovAudienceTopics = { attach() { @@ -123,8 +49,6 @@ .parent() .hide(); - // Enforce tag selection rules. - enforceMaximumNumberOfTags(); // React when the tags fieldset changes. $("fieldset#edit-group-tags").change(() => { const selection = $( @@ -174,8 +98,6 @@ true ); } - // Enforce tag selection rules. - enforceMaximumNumberOfTags(); }); }, }; diff --git a/docroot/modules/custom/va_gov_backend/js/audience_topics.js b/docroot/modules/custom/va_gov_backend/js/audience_topics.js index 072751aa81b..730bbd9ef2a 100644 --- a/docroot/modules/custom/va_gov_backend/js/audience_topics.js +++ b/docroot/modules/custom/va_gov_backend/js/audience_topics.js @@ -4,40 +4,7 @@ * https://www.drupal.org/node/2815083 * @preserve **/ - (function ($, Drupal) { - function enforceMaximumNumberOfTags() { - var total = $('div[id^="edit-field-tags-0-subform-field-topics"]').find("input:checked").length; - - if (total >= 4) { - $('select[id^="edit-field-tags-0-subform-field-audience-selection"]').attr("disabled", true); - $("div.form-item-field-tags-0-subform-field-audience-selection").addClass("form-disabled"); - - $('div[id^="edit-field-tags-0-subform-field-audience-beneficiares-none"]').attr("checked", true); - $('div[id^="edit-field-tags-0-subform-field-non-beneficiares-none"]').attr("checked", true); - - $('div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]').hide(); - $('div[id^="edit-field-tags-0-subform-field-audience-beneficiares-wrapper"]').hide(); - $('select[id^="edit-field-tags-0-subform-field-audience-selection"]').val("_none"); - } else { - $('select[id^="edit-field-tags-0-subform-field-audience-selection"]').attr("disabled", false); - $("div.form-item-field-tags-0-subform-field-audience-selection").removeClass("form-disabled"); - } - - var audienceSelected = $('div[id^="edit-field-tags-0-subform-field-audience-beneficiares-wrapper"]').find('input:not([id^="edit-field-tags-0-subform-field-audience-beneficiares-none"]):checked').length; - if ($('select[id^="edit-field-tags-0-subform-field-audience-selection"]').val() === "non-beneficiaries") { - audienceSelected = $('div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]').find('input:not([id^="edit-field-tags-0-subform-field-non-beneficiares-none"]):checked').length; - } - - total += audienceSelected; - - if (total >= 4) { - $('div[id^="edit-field-tags-0-subform-field-topics"]').find("input[type=checkbox]:not(:checked)").attr("disabled", true); - } else { - $('div[id^="edit-field-tags-0-subform-field-topics"]').find("input[type=checkbox]").attr("disabled", false); - } - } - Drupal.behaviors.vaGovAudienceTopics = { attach: function attach() { if ($('div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]').find('input:not([id^="edit-field-tags-0-subform-field-non-beneficiares-none"]):checked').length) { @@ -49,36 +16,26 @@ $('div[id^="edit-field-tags-0-subform-field-audience-beneficiares-wrapper"]').show(); $('div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]').hide(); } - $("#edit-group-tags > legend").addClass("form-required"); - $('input[id^="edit-field-tags-0-subform-field-audience-beneficiares-none"]').parent().hide(); $('input[id^="edit-field-tags-0-subform-field-non-beneficiares-none"]').parent().hide(); - - enforceMaximumNumberOfTags(); - $("fieldset#edit-group-tags").change(function () { var selection = $('select[id^="edit-field-tags-0-subform-field-audience-selection"]').val(); - $('fieldset#edit-group-tags input[type="radio"]').attr("checked", false); $('div[id^="edit-field-tags-0-subform-field-audience-beneficiares-wrapper"]').hide(); $('div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]').hide(); if (selection === "beneficiaries") { $('div[id^="edit-field-tags-0-subform-field-audience-beneficiares-wrapper"]').show(); - $("#edit-field-tags-0-subform-field-non-beneficiares-none").attr("checked", true); } if (selection === "non-beneficiaries") { $('div[id^="edit-field-tags-0-subform-field-non-beneficiares-wrapper"]').show(); - $("#edit-field-tags-0-subform-field-audience-beneficiares-none").attr("checked", true); } if (selection === "_none") { $("#edit-field-tags-0-subform-field-non-beneficiares-none").attr("checked", true); $("#edit-field-tags-0-subform-field-audience-beneficiares-none").attr("checked", true); } - - enforceMaximumNumberOfTags(); }); } }; diff --git a/docroot/modules/custom/va_gov_backend/src/EventSubscriber/ThemeEventSubscriber.php b/docroot/modules/custom/va_gov_backend/src/EventSubscriber/ThemeEventSubscriber.php index d3b8ab3f77e..70de2485279 100644 --- a/docroot/modules/custom/va_gov_backend/src/EventSubscriber/ThemeEventSubscriber.php +++ b/docroot/modules/custom/va_gov_backend/src/EventSubscriber/ThemeEventSubscriber.php @@ -7,9 +7,6 @@ use Drupal\core_event_dispatcher\Event\Theme\ThemeSuggestionsAlterEvent; use Drupal\core_event_dispatcher\FormHookEvents; use Drupal\core_event_dispatcher\ThemeHookEvents; -use Drupal\field_event_dispatcher\Event\Field\WidgetSingleElementFormAlterEvent; -use Drupal\field_event_dispatcher\FieldHookEvents; -use Drupal\image\Plugin\Field\FieldWidget\ImageWidget; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** @@ -22,27 +19,11 @@ class ThemeEventSubscriber implements EventSubscriberInterface { */ public static function getSubscribedEvents(): array { return [ - FieldHookEvents::WIDGET_SINGLE_ELEMENT_FORM_ALTER => 'formWidgetAlter', FormHookEvents::FORM_ALTER => 'formAlter', ThemeHookEvents::THEME_SUGGESTIONS_ALTER => 'themeSuggestionsAlter', ]; } - /** - * Widget form alter Event call. - * - * @param \Drupal\field_event_dispatcher\Event\Field\WidgetSingleElementFormAlterEvent $event - * The event. - */ - public function formWidgetAlter(WidgetSingleElementFormAlterEvent $event): void { - $element = &$event->getElement(); - $context = $event->getContext(); - // If this is an image field type of instance. - if ($context['widget'] instanceof ImageWidget) { - $element['#process'][] = '_va_gov_media_image_field_widget_process'; - } - } - /** * Form alter Event call. * diff --git a/docroot/modules/custom/va_gov_backend/src/Plugin/Validation/Constraint/RequiredParagraphAB.php b/docroot/modules/custom/va_gov_backend/src/Plugin/Validation/Constraint/RequiredParagraphAB.php new file mode 100644 index 00000000000..0ea62ecce60 --- /dev/null +++ b/docroot/modules/custom/va_gov_backend/src/Plugin/Validation/Constraint/RequiredParagraphAB.php @@ -0,0 +1,75 @@ +hasField($constraint->toggle) && !$entity->hasField($constraint->fieldParagraphA) && !$entity->hasField($constraint->fieldParagraphB)) { + return; + } + /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ + $panel_enabled = $entity->get($constraint->toggle)->getString(); + $countA = $this->getCountForParagraphField($constraint->fieldParagraphA); + $countB = $this->getCountForParagraphField($constraint->fieldParagraphB); + $number = $countA + $countB; + $paragraphAField = $this->getBaseField($constraint->fieldParagraphA); + $paragraphBField = $this->getBaseField($constraint->fieldParagraphB); + $errorPath = $countA ? $paragraphAField : $paragraphBField; + if ($panel_enabled && $number < $constraint->min && $number > 0) { + $this->context->buildViolation($constraint->tooFew, [ + '%plurlLabel' => $constraint->pluralLabel, + '%readable' => $constraint->readable, + '%min' => $constraint->min, + ]) + ->atPath($errorPath) + ->addViolation(); + } + elseif ($panel_enabled && $number > $constraint->max) { + $this->context->buildViolation($constraint->tooMany, [ + '%plurlLabel' => $constraint->pluralLabel, + '%readable' => $constraint->readable, + '%max' => $constraint->max, + ]) + ->atPath($errorPath) + ->addViolation(); + } + elseif ($panel_enabled && $number === 0) { + // Adding a violation in this way ensures that it is displayed even if + // paragraphA and paragraphB have no values. + $this->context->addViolation($constraint->required, [ + '%min' => $constraint->min, + '%panelLabel' => $constraint->panelLabel, + '%readable' => $constraint->readable, + ]); + } + } + + /** + * Gets the item count from a paragraph field. + * + * To target a nested field (a field within a paragraph), specify the $field + * with a colon ":" between the parent and child field names. Only one level + * of nesting is supported. eg: field_faq_group:field_faq_items. + * + * @param string $field + * The field name to get the count from. + * + * @return int + * The item count for the number of nested items. + */ + private function getCountForParagraphField(string $field): int { + $count = 0; + $entity = $this->context->getRoot()->getEntity(); + if (str_contains($field, ':')) { + $fields = explode(":", $field); + if (!empty($fields)) { + [$outerParagraphField, $innerParagraphField] = $fields; + if ($entity->hasField($outerParagraphField)) { + /** @var \Drupal\entity_reference_revisions\Plugin\Field\FieldType\EntityReferenceRevisionsItem $item */ + foreach ($entity->get($outerParagraphField) as $item) { + /** @var \Drupal\paragraphs\ParagraphInterface $paragraph */ + $paragraph = $item->entity; + if ($paragraph->hasField($innerParagraphField)) { + $count += $paragraph->get($innerParagraphField)->count(); + } + } + } + } + } + else { + $count = $entity->get($field)->count(); + } + return $count; + } + + /** + * Get a base field from a given paragraph field identifier. + * + * Since fields can contain colon's (":") to separate parent:child, this + * method is used to get the base field. + * + * @return string + * The base field name. + */ + private function getBaseField(string $field): string { + if (str_contains($field, ':')) { + [$baseField] = explode(":", $field); + return $baseField; + } + else { + return $field; + } + } + +} diff --git a/docroot/modules/custom/va_gov_backend/va_gov_backend.module b/docroot/modules/custom/va_gov_backend/va_gov_backend.module index c6a4af772ea..166de635c31 100644 --- a/docroot/modules/custom/va_gov_backend/va_gov_backend.module +++ b/docroot/modules/custom/va_gov_backend/va_gov_backend.module @@ -786,9 +786,6 @@ function _va_gov_backend_audience_topics_validation(array $form, FormStateInterf if ($tag_count == 0) { $form_state->setErrorByName('field_tags][0][subform][field_topics', t('Please select at least one Topic or Audience tag.')); } - elseif ($tag_count > 4) { - $form_state->setErrorByName('field_tags][0][subform][field_topics', t('No more than 4 Topic/Audience tags may be selected.')); - } } } @@ -1323,15 +1320,6 @@ function va_gov_backend_entity_bundle_field_info_alter(&$fields, EntityTypeInter } // Add paragraph checks on clp panels. if ($entity_type->id() === 'node' && $bundle === 'campaign_landing_page') { - // Add range check on faq panel. - if (isset($fields['field_clp_faq_paragraphs'])) { - $fields['field_clp_faq_paragraphs']->addConstraint('RequiredParagraph', [ - 'toggle' => 'field_clp_faq_panel', - 'readable' => 'Q&A', - 'min' => 3, - 'max' => 10, - ]); - } // Add range check on stories panel. if (isset($fields['field_clp_stories_teasers'])) { $fields['field_clp_stories_teasers']->addConstraint('RequiredParagraph', [ @@ -1945,12 +1933,24 @@ function _va_gov_backend_disable_autopath_alias(FieldableEntityInterface $entity $toggled_on_this_save = $current_use_alias_pattern && !$original_use_alias_pattern; $active_entity = \Drupal::entityTypeManager()->getStorage('node')->load($entity->id()); $published_previously = ($active_entity instanceof NodeInterface) ? $active_entity->isPublished() : FALSE; - - if ($published_previously && !$toggled_on_this_save) { - // This was published and this was not an intentional toggle on. + $path = '/node/' . (int) $active_entity->nid->value; + $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId(); + $path_alias = \Drupal::service('path_alias.manager')->getAliasByPath($path, $langcode); + // If the path_alias is the node path, alias is not set. + $path_alias_set = (bool) preg_match('/\/node\/\d+/', $path_alias) ? FALSE : TRUE; + + if ($path_alias_set && $published_previously && !$toggled_on_this_save) { + // This has a path alias, was published, + // and was not an intentional toggle on. // Disable the pathauto pattern. $entity->path->pathauto = 0; } + elseif (!$path_alias_set) { + // If this is not set pathauto already is 0, + // so we need to explicitly set it to 1 + // to get an alias generated. + $entity->path->pathauto = 1; + } } } diff --git a/docroot/modules/custom/va_gov_clp/src/EventSubscriber/EntityEventSubscriber.php b/docroot/modules/custom/va_gov_clp/src/EventSubscriber/EntityEventSubscriber.php new file mode 100644 index 00000000000..1964b2235ae --- /dev/null +++ b/docroot/modules/custom/va_gov_clp/src/EventSubscriber/EntityEventSubscriber.php @@ -0,0 +1,58 @@ + 'entityTypeAlter', + ]; + } + + /** + * Equivalent of hook_entity_type_alter(). + * + * @param \Drupal\core_event_dispatcher\Event\Entity\EntityTypeAlterEvent $event + * The event for entityTypeAlter. + */ + public function entityTypeAlter(EntityTypeAlterEvent $event): void { + $entity_types = $event->getEntityTypes(); + if (!empty($entity_types['node'])) { + $nodeEntityType = $entity_types['node']; + $this->addConstraintsToClp($nodeEntityType); + } + } + + /** + * Adds constraints to Campaign Landing Page Nodes. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entityType + * The entity type. + */ + public function addConstraintsToClp(EntityTypeInterface $entityType): void { + $entityType->addConstraint('RequiredParagraphAB', [ + 'toggle' => 'field_clp_faq_panel', + 'readable' => 'Q&A', + 'pluralLabel' => 'Page-Specific or Reusable Q&As', + 'panelLabel' => 'FAQ', + 'fieldParagraphA' => 'field_clp_faq_paragraphs', + 'fieldParagraphB' => 'field_clp_reusable_q_a:field_q_as', + 'requiredErrorDisplayAsMessage' => TRUE, + 'min' => 3, + 'max' => 10, + ]); + } + +} diff --git a/docroot/modules/custom/va_gov_clp/va_gov_clp.services.yml b/docroot/modules/custom/va_gov_clp/va_gov_clp.services.yml new file mode 100644 index 00000000000..bef76fd0ad0 --- /dev/null +++ b/docroot/modules/custom/va_gov_clp/va_gov_clp.services.yml @@ -0,0 +1,5 @@ +services: + va_gov_clp.entity_event_subscriber: + class: Drupal\va_gov_clp\EventSubscriber\EntityEventSubscriber + tags: + - { name: event_subscriber } diff --git a/docroot/modules/custom/va_gov_content_types/src/Traits/EventOutreachTrait.php b/docroot/modules/custom/va_gov_content_types/src/Traits/EventOutreachTrait.php index 41b2398e487..a604d7afee0 100644 --- a/docroot/modules/custom/va_gov_content_types/src/Traits/EventOutreachTrait.php +++ b/docroot/modules/custom/va_gov_content_types/src/Traits/EventOutreachTrait.php @@ -46,10 +46,11 @@ public function addToNationalOutreachCalendar(EventInterface $node): void { if ($node->hasField(EventOutreachInterface::LISTING_FIELD) && $node->hasField(EventOutreachInterface::PUBLISH_TO_OUTREACH_CAL_FIELD) && $node->hasField(EventOutreachInterface::ADDITIONAL_LISTING_FIELD)) { - $addToCalValue = $node->get(EventOutreachInterface::PUBLISH_TO_OUTREACH_CAL_FIELD)->first()->getValue(); - if (isset($addToCalValue['value'])) { + if ($node->get(EventOutreachInterface::PUBLISH_TO_OUTREACH_CAL_FIELD)->first()) { + $addToCalValue = $node->get(EventOutreachInterface::PUBLISH_TO_OUTREACH_CAL_FIELD)->first()->getValue(); $listings = $node->get(EventOutreachInterface::LISTING_FIELD)->getValue(); $additionalListings = $node->get(EventOutreachInterface::ADDITIONAL_LISTING_FIELD)->getValue(); + assert(array_key_exists('value', $addToCalValue)); if ($addToCalValue['value'] === 1 || $this->outreachHubOnlyUser()) { // Add to Outreach calendar selected, or user is Outreach Hub only // user. diff --git a/docroot/modules/custom/va_gov_media/js/alt_text_validation.es6.js b/docroot/modules/custom/va_gov_media/js/alt_text_validation.es6.js new file mode 100644 index 00000000000..5601ef0e639 --- /dev/null +++ b/docroot/modules/custom/va_gov_media/js/alt_text_validation.es6.js @@ -0,0 +1,78 @@ +/** + * @file + * Attaches behaviors VA GOv Media module. + */ +(($, Drupal, once, drupalSettings) => { + if (typeof drupalSettings.cvJqueryValidateOptions === "undefined") { + drupalSettings.cvJqueryValidateOptions = {}; + } + + if (drupalSettings.clientside_validation_jquery.force_validate_on_blur) { + drupalSettings.cvJqueryValidateOptions.onfocusout = (element) => { + // "eager" validation + this.element(element); + }; + } + + drupalSettings.cvJqueryValidateOptions.rules = { + "image[0][alt]": { + remote: { + url: `${drupalSettings.path.baseUrl}media/validate`, + type: "post", + data: { + value() { + return $("textarea[data-drupal-selector='edit-image-0-alt']").val(); + }, + }, + dataType: "json", + }, + }, + "media[0][fields][image][0][alt]": { + remote: { + url: `${drupalSettings.path.baseUrl}media/validate`, + type: "post", + data: { + value() { + return $( + "textarea[data-drupal-selector='edit-media-0-fields-image-0-alt']" + ).val(); + }, + }, + dataType: "json", + }, + }, + }; + + // Add messages with translations from backend. + $.extend( + $.validator.messages, + drupalSettings.clientside_validation_jquery.messages + ); + + /** + * Attaches jQuery validate behavior to forms. + * + * @type {Drupal~behavior} + * + * @prop {Drupal~behaviorAttach} attach + * Attaches the outline behavior to the right context. + */ + Drupal.behaviors.altTextValidate = { + // eslint-disable-next-line no-unused-vars + attach(context) { + // Allow all modules to update the validate options. + // Example of how to do this is shown below. + $(document).trigger( + "cv-jquery-validate-options-update", + drupalSettings.cvJqueryValidateOptions + ); + + // Process for all the forms on the page everytime, + // we already use once so we should be good. + once("altTextValidate", "body form").forEach((element) => { + $(element).validate(drupalSettings.cvJqueryValidateOptions); + }); + }, + }; + // eslint-disable-next-line no-undef +})(jQuery, Drupal, once, drupalSettings); diff --git a/docroot/modules/custom/va_gov_media/js/alt_text_validation.js b/docroot/modules/custom/va_gov_media/js/alt_text_validation.js new file mode 100644 index 00000000000..62b484ddf09 --- /dev/null +++ b/docroot/modules/custom/va_gov_media/js/alt_text_validation.js @@ -0,0 +1,52 @@ +/** +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ +var _this = this; +(function ($, Drupal, once, drupalSettings) { + if (typeof drupalSettings.cvJqueryValidateOptions === "undefined") { + drupalSettings.cvJqueryValidateOptions = {}; + } + if (drupalSettings.clientside_validation_jquery.force_validate_on_blur) { + drupalSettings.cvJqueryValidateOptions.onfocusout = function (element) { + _this.element(element); + }; + } + drupalSettings.cvJqueryValidateOptions.rules = { + "image[0][alt]": { + remote: { + url: drupalSettings.path.baseUrl + "media/validate", + type: "post", + data: { + value: function value() { + return $("textarea[data-drupal-selector='edit-image-0-alt']").val(); + } + }, + dataType: "json" + } + }, + "media[0][fields][image][0][alt]": { + remote: { + url: drupalSettings.path.baseUrl + "media/validate", + type: "post", + data: { + value: function value() { + return $("textarea[data-drupal-selector='edit-media-0-fields-image-0-alt']").val(); + } + }, + dataType: "json" + } + } + }; + $.extend($.validator.messages, drupalSettings.clientside_validation_jquery.messages); + Drupal.behaviors.altTextValidate = { + attach: function attach(context) { + $(document).trigger("cv-jquery-validate-options-update", drupalSettings.cvJqueryValidateOptions); + once("altTextValidate", "body form").forEach(function (element) { + $(element).validate(drupalSettings.cvJqueryValidateOptions); + }); + } + }; +})(jQuery, Drupal, once, drupalSettings); \ No newline at end of file diff --git a/docroot/modules/custom/va_gov_media/src/Controller/AltTextValidationController.php b/docroot/modules/custom/va_gov_media/src/Controller/AltTextValidationController.php new file mode 100644 index 00000000000..8ce7af0f374 --- /dev/null +++ b/docroot/modules/custom/va_gov_media/src/Controller/AltTextValidationController.php @@ -0,0 +1,66 @@ +loggerFactory = $loggerFactory; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('logger.factory') + ); + } + + /** + * Validate the alt text. + */ + public function validate(Request $req) { + $logger = $this->loggerFactory->get('va_gov_media'); + $value = $req->request->get('value'); + $value_length = MediaEventSubscriber::getLengthOfSubmittedValue($value); + $res = TRUE; + if ($value_length > 150) { + $logger->error("[CC] Alternative text ({$value}) cannot be longer than 150 characters. {$value_length} characters were submitted."); + $res = $this->t('Alternative text cannot be longer than 150 characters.'); + } + if (preg_match('/\.(jpg|jpeg|png|gif)$/i', $value)) { + $logger->error("[FN] Alternative text cannot contain file names. {$value} was submitted."); + $res = $this->t('Alternative text cannot contain file names.'); + } + if (preg_match('/(image|photo|graphic|picture) of/i', $value)) { + $logger->error("[RP] Alternative text cannot contain repetitive phrases. {$value} was submitted."); + $res = $this->t('Alternative text cannot contain phrases like “image of”, “photo of”, “graphic of”, “picture of”, etc.'); + } + return new JsonResponse($res); + } + +} diff --git a/docroot/modules/custom/va_gov_media/src/EventSubscriber/MediaEventSubscriber.php b/docroot/modules/custom/va_gov_media/src/EventSubscriber/MediaEventSubscriber.php new file mode 100644 index 00000000000..aba483d3486 --- /dev/null +++ b/docroot/modules/custom/va_gov_media/src/EventSubscriber/MediaEventSubscriber.php @@ -0,0 +1,219 @@ + 'formWidgetAlter', + FormHookEvents::FORM_ALTER => 'formAlter', + ]; + } + + /** + * Form alter Event call. + * + * @param \Drupal\core_event_dispatcher\Event\Form\FormAlterEvent $event + * The event. + */ + public function formAlter(FormAlterEvent $event): void { + $form = &$event->getForm(); + + $form_id = $form['#id']; + if ($form_id === 'media-image-add-form') { + $form['name']['widget'][0]['value']['#description'] = $this->t('Provide a name that will help other users of the CMS find and reuse this image. The name is not visible to end users.'); + unset($form['field_media_submission_guideline']); + } + } + + /** + * Widget form alter Event call. + * + * @param \Drupal\field_event_dispatcher\Event\Field\WidgetSingleElementFormAlterEvent $event + * The event. + */ + public function formWidgetAlter(WidgetSingleElementFormAlterEvent $event): void { + $element = &$event->getElement(); + $context = $event->getContext(); + // If this is an image field type of instance. + if ($context['widget'] instanceof ImageWidget) { + $element['#process'][] = [static::class, 'imageFieldWidgetProcess']; + } + } + + /** + * Changes the alt text description to be more helpful and add validation. + * + * @param array $element + * The element to change the alt text description. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The form state. + * @param array $form + * The form. + * + * @return array + * The element. + */ + public static function imageFieldWidgetProcess(array $element, FormStateInterface &$form_state, array $form) { + if (isset($element['alt'])) { + $element['alt']['#description'] = t('Adding a clear and meaningful description of the image is important for accessibility.'); + $element['alt']['#element_validate'] = [ + [static::class, 'validateAltText'], + ]; + $element['alt']['#type'] = 'textarea'; + $element['alt']['#rows'] = 3; + + // Add the textfield counter to the alt text field. + $position = 'after'; + $form_id = $form['#form_id']; + if ($form_id === 'media_library_add_form_dropzonejs') { + $form_storage = $form_state->getStorage(); + $entity = $form_storage['media'][0]; + } + else { + /* var $form_object \Drupal\media\MediaForm */ + $form_object = $form_state->getFormObject(); + /* var $entity \Drupal\media\MediaInterface */ + $entity = $form_object->getEntity(); + } + + $delta = $element['#delta']; + $fieldDefinition = $entity->getFieldDefinition($element['#field_name']); + + $keys = [$element['#entity_type']]; + $keys[] = $entity->id() ? $entity->id() : 0; + if (is_object($fieldDefinition) && method_exists($fieldDefinition, 'id')) { + $field_definition_id = str_replace('.', '--', $fieldDefinition->id()); + } + else { + $field_definition_id = "{$entity->getEntityTypeId()}--{$entity->bundle()}--{$fieldDefinition->getName()}"; + } + + $keys[] = $field_definition_id; + $keys[] = $delta; + $keys[] = 'alt'; + + $key = implode('-', $keys); + + $element['alt']['#attributes']['class'][] = $key; + $element['alt']['#attributes']['class'][] = 'textfield-counter-element'; + $element['alt']['#attributes']['data-field-definition-id'] = $field_definition_id; + + $element['alt']['#attached']['library'][] = 'textfield_counter/counter'; + $element['alt']['#attached']['drupalSettings']['textfieldCounter'][$key]['key'][$delta] = $key; + $element['alt']['#attached']['drupalSettings']['textfieldCounter'][$key]['maxlength'] = (int) self::MAX_LENGTH; + $element['alt']['#attached']['drupalSettings']['textfieldCounter'][$key]['counterPosition'] = $position; + $element['alt']['#attached']['drupalSettings']['textfieldCounter'][$key]['textCountStatusMessage'] = 'Characters remaining: @remaining_count'; + + $element['alt']['#attached']['drupalSettings']['textfieldCounter'][$key]['preventSubmit'] = TRUE; + + $element['alt']['#attached']['drupalSettings']['textfieldCounter'][$key]['countHTMLCharacters'] = self::COUNT_HTML; + + } + + // Return the altered element. + return $element; + } + + /** + * Custom validation of image widget alt text field. + * + * @param array $element + * The image widget alt text element. + * @param \Drupal\Core\Form\FormStateInterface $formState + * The form state. + */ + public static function validateAltText(array $element, FormStateInterface $formState) { + // Only perform validation if the function is triggered from other places + // than the image process form. We don't want this validation to run when an + // image was just uploaded, and they haven't had an opportunity to provide + // the alt text. ImageWidget does this too, see ::validateRequiredFields. + $triggering_element = $formState->getTriggeringElement(); + if (!empty($triggering_element['#submit']) && in_array('file_managed_file_submit', $triggering_element['#submit'], TRUE)) { + $formState->setLimitValidationErrors([]); + return; + } + + $parents = $element['#parents']; + array_pop($parents); + + // Back out if no image was submitted. + $fid_form_element = array_merge($parents, ['fids']); + if (empty($formState->getValue($fid_form_element))) { + return; + } + + $logger = \Drupal::logger('va_gov_media'); + $value = $formState->getValue($element['#parents']); + $value_length = static::getLengthOfSubmittedValue($value); + if ($value_length > self::MAX_LENGTH) { + $formState->setErrorByName(implode('][', $element['#parents']), t('Alternative text cannot be longer than 150 characters.')); + $logger->error("[CC] Alternative text ({$value}) cannot be longer than 150 characters. {$value_length} characters were submitted."); + } + + if (preg_match('/\.(jpg|jpeg|png|gif)$/i', $value)) { + $formState->setErrorByName(implode('][', $element['#parents']), t('Alternative text cannot contain file names.')); + $logger->error("[FN] Alternative text cannot contain file names. {$value} was submitted."); + } + + if (preg_match('/(image|photo|graphic|picture) of/i', $value)) { + $formState->setErrorByName(implode('][', $element['#parents']), t('Alternative text cannot contain phrases like “image of”, “photo of”, “graphic of”, “picture of”, etc.')); + $logger->error("[RP] Alternative text cannot contain repetitive phrases. {$value} was submitted."); + } + } + + /** + * Get the length of the submitted text value. + * + * @param string $value + * The value whose length is to be calculated. + * + * @return int + * The length of the value. + */ + public static function getLengthOfSubmittedValue(string $value): int { + $parts = explode(PHP_EOL, $value); + $newline_count = count($parts) - 1; + + if (self::COUNT_HTML) { + $value_length = mb_strlen($value) - $newline_count; + } + else { + $value_length = str_replace(' ', ' ', $value); + $value_length = trim($value_length); + $value_length = preg_replace("/(\r?\n|\r)+/", "\n", $value_length); + $value_length = mb_strlen(strip_tags($value_length)); + } + + return $value_length; + } + +} diff --git a/docroot/modules/custom/va_gov_media/va_gov_media.info.yml b/docroot/modules/custom/va_gov_media/va_gov_media.info.yml index e2d945d8963..3d4f8130431 100644 --- a/docroot/modules/custom/va_gov_media/va_gov_media.info.yml +++ b/docroot/modules/custom/va_gov_media/va_gov_media.info.yml @@ -3,3 +3,7 @@ type: module description: 'Manage images and other media' core_version_requirement: ^9 || ^10 package: 'Custom' + +dependencies: + - drupal:clientside_validation + - drupal:clientside_validation_jquery diff --git a/docroot/modules/custom/va_gov_media/va_gov_media.libraries.yml b/docroot/modules/custom/va_gov_media/va_gov_media.libraries.yml new file mode 100644 index 00000000000..a26a5f6e2de --- /dev/null +++ b/docroot/modules/custom/va_gov_media/va_gov_media.libraries.yml @@ -0,0 +1,5 @@ +cv.alt-text.validate: + js: + js/alt_text_validation.js: {} + dependencies: + - clientside_validation_jquery/jquery.validate diff --git a/docroot/modules/custom/va_gov_media/va_gov_media.module b/docroot/modules/custom/va_gov_media/va_gov_media.module index f9970c83ced..745d2367af3 100644 --- a/docroot/modules/custom/va_gov_media/va_gov_media.module +++ b/docroot/modules/custom/va_gov_media/va_gov_media.module @@ -74,23 +74,10 @@ function _va_gov_media_image_style_warmer_warm_up(EntityInterface $entity) { } /** - * Changes the alt text description to be more helpful. - * - * @param array $element - * The element to change the alt text description. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * The form state. - * @param array $form - * The form. - * - * @return array - * The element. + * Implements hook_clientside_validation_validator_info_alter(). */ -function _va_gov_media_image_field_widget_process(array $element, FormStateInterface &$form_state, array $form) { - if (isset($element['alt'])) { - $element['alt']['#description'] = t('Adding a clear and meaningful description of the image is important for accessibility.'); +function va_gov_media_clientside_validation_validator_info_alter(&$validators) { + foreach ($validators as &$validator) { + $validator['attachments']['library'][] = 'va_gov_media/cv.alt-text.validate'; } - - // Return the altered element. - return $element; } diff --git a/docroot/modules/custom/va_gov_media/va_gov_media.routing.yml b/docroot/modules/custom/va_gov_media/va_gov_media.routing.yml new file mode 100644 index 00000000000..7e4e00af327 --- /dev/null +++ b/docroot/modules/custom/va_gov_media/va_gov_media.routing.yml @@ -0,0 +1,8 @@ +va_gov_media.alt_text_validate: + path: /media/validate + defaults: + _title: 'Validate Alt Text' + _controller: '\Drupal\va_gov_media\Controller\AltTextValidationController::validate' + methods: ['POST'] + requirements: + _user_is_logged_in: 'TRUE' diff --git a/docroot/modules/custom/va_gov_media/va_gov_media.services.yml b/docroot/modules/custom/va_gov_media/va_gov_media.services.yml new file mode 100644 index 00000000000..97babefb39a --- /dev/null +++ b/docroot/modules/custom/va_gov_media/va_gov_media.services.yml @@ -0,0 +1,8 @@ +services: + logger.channel.va_gov_media: + parent: logger.channel_base + arguments: [ 'va_gov_media' ] + va_gov_media.event_subscriber: + class: Drupal\va_gov_media\EventSubscriber\MediaEventSubscriber + tags: + - { name: event_subscriber } diff --git a/docroot/modules/custom/va_gov_menu_access/src/Service/MenuReductionService.php b/docroot/modules/custom/va_gov_menu_access/src/Service/MenuReductionService.php index 4e23518c846..bc2cd80b5bd 100644 --- a/docroot/modules/custom/va_gov_menu_access/src/Service/MenuReductionService.php +++ b/docroot/modules/custom/va_gov_menu_access/src/Service/MenuReductionService.php @@ -270,7 +270,11 @@ protected function applyVamcMenuRulesForDetailPage(array &$form) { $menu_element_type = $this->getMenuItemType($alias); $menu_element_type = $menu_element_type ?? $this->checkForSeparator($allowed_separators, $menu_item); - + if (str_contains($subject_uuid['option'], 'Work with us')) { + // This is a special case where we want to allow the menu item + // to be enabled. + $menu_element_type = self::ENABLED; + } $this->addAllowedParent($allowed_parents, $enabled_count, $menu_element_type, $subject_uuid); } } diff --git a/docroot/modules/custom/va_gov_workflow/va_gov_workflow.install b/docroot/modules/custom/va_gov_workflow/va_gov_workflow.install index cad35552694..6edabbda72a 100644 --- a/docroot/modules/custom/va_gov_workflow/va_gov_workflow.install +++ b/docroot/modules/custom/va_gov_workflow/va_gov_workflow.install @@ -67,3 +67,29 @@ function va_gov_workflow_update_9001() { $contentType, $oldWorkflow, $newWorklow ); } + +/** + * Change the workflow of the revisions of VAMC system pages. + */ +function va_gov_workflow_update_9002() { + $contentTypes = [ + 'health_care_region_page', + 'locations_listing', + 'vamc_operating_status_and_alerts', + 'vamc_system_billing_insurance', + 'vamc_system_medical_records_offi', + 'vamc_system_policies_page', + 'vamc_system_register_for_care', + 'vamc_system_va_police', + ]; + $message = ''; + foreach ($contentTypes as $contentType) { + $oldWorkflow = 'editorial'; + $newWorkflow = 'restricted_archive'; + $message .= _va_gov_workflow_change_content_type_workflow( + $contentType, $oldWorkflow, $newWorkflow + ) . PHP_EOL; + } + return $message; + +} diff --git a/docroot/robots.txt b/docroot/robots.txt index ebcd04b96ca..3ad8e2e8dec 100644 --- a/docroot/robots.txt +++ b/docroot/robots.txt @@ -37,7 +37,15 @@ Allow: /profiles/*.svg Disallow: /core/ Disallow: /profiles/ # Files -Disallow: /README.txt +Disallow: /README.md +Disallow: /composer/Metapackage/README.txt +Disallow: /composer/Plugin/ProjectMessage/README.md +Disallow: /composer/Plugin/Scaffold/README.md +Disallow: /composer/Plugin/VendorHardening/README.txt +Disallow: /composer/Template/README.txt +Disallow: /modules/README.txt +Disallow: /sites/README.txt +Disallow: /themes/README.txt Disallow: /web.config # Paths (clean URLs) Disallow: /admin/ diff --git a/docroot/sites/default/default.services.yml b/docroot/sites/default/default.services.yml index 8a6cdf2f77f..c4b964fc290 100644 --- a/docroot/sites/default/default.services.yml +++ b/docroot/sites/default/default.services.yml @@ -214,6 +214,8 @@ parameters: # Configure requests allowed from specific origins. Do not include trailing # slashes with URLs. allowedOrigins: ['*'] + # Configure requests allowed from origins, matching against regex patterns. + allowedOriginsPatterns: [] # Sets the Access-Control-Expose-Headers header. exposedHeaders: false # Sets the Access-Control-Max-Age header. diff --git a/docroot/sites/default/default.settings.php b/docroot/sites/default/default.settings.php index c0b18427ae9..d69b1865ecf 100644 --- a/docroot/sites/default/default.settings.php +++ b/docroot/sites/default/default.settings.php @@ -78,8 +78,8 @@ * @code * $databases['default']['default'] = [ * 'database' => 'databasename', - * 'username' => 'sqlusername', - * 'password' => 'sqlpassword', + * 'username' => 'sql_username', + * 'password' => 'sql_password', * 'host' => 'localhost', * 'port' => '3306', * 'driver' => 'mysql', @@ -194,8 +194,8 @@ * $databases['default']['default'] = [ * 'driver' => 'pgsql', * 'database' => 'databasename', - * 'username' => 'sqlusername', - * 'password' => 'sqlpassword', + * 'username' => 'sql_username', + * 'password' => 'sql_password', * 'host' => 'localhost', * 'prefix' => '', * ]; @@ -205,7 +205,7 @@ * @code * $databases['default']['default'] = [ * 'driver' => 'sqlite', - * 'database' => '/path/to/databasefilename', + * 'database' => '/path/to/database_filename', * ]; * @endcode * @@ -216,12 +216,33 @@ * 'namespace' => 'Drupal\my_module\Driver\Database\my_driver', * 'autoload' => 'modules/my_module/src/Driver/Database/my_driver/', * 'database' => 'databasename', - * 'username' => 'sqlusername', - * 'password' => 'sqlpassword', + * 'username' => 'sql_username', + * 'password' => 'sql_password', * 'host' => 'localhost', * 'prefix' => '', * ]; * @endcode + * + * Sample Database configuration format for a driver that is extending another + * database driver. + * @code + * $databases['default']['default'] = [ + * 'driver' => 'my_driver', + * 'namespace' => 'Drupal\my_module\Driver\Database\my_driver', + * 'autoload' => 'modules/my_module/src/Driver/Database/my_driver/', + * 'database' => 'databasename', + * 'username' => 'sql_username', + * 'password' => 'sql_password', + * 'host' => 'localhost', + * 'prefix' => '', + * 'dependencies' => [ + * 'parent_module' => [ + * 'namespace' => 'Drupal\parent_module', + * 'autoload' => 'core/modules/parent_module/src/', + * ], + * ], + * ]; + * @endcode */ /** @@ -567,7 +588,7 @@ * the output of phpinfo(). The full output can contain sensitive information * so by default Drupal removes some sections. * - * This behaviour can be configured by setting this variable to a different + * This behavior can be configured by setting this variable to a different * value corresponding to the flags parameter of phpinfo(). * * If you need to expose more information in the report - for example to debug a diff --git a/docroot/sites/example.settings.local.php b/docroot/sites/example.settings.local.php index 7cb0e685773..bfe061d0565 100644 --- a/docroot/sites/example.settings.local.php +++ b/docroot/sites/example.settings.local.php @@ -29,11 +29,7 @@ * It is strongly recommended that you set zend.assertions=1 in the PHP.ini file * (It cannot be changed from .htaccess or runtime) on development machines and * to 0 or -1 in production. - * - * @see https://wiki.php.net/rfc/expectations */ -assert_options(ASSERT_ACTIVE, TRUE); -assert_options(ASSERT_EXCEPTION, TRUE); /** * Enable local development services. diff --git a/docroot/themes/custom/vagovclaro/assets/scss/components/_fields.scss b/docroot/themes/custom/vagovclaro/assets/scss/components/_fields.scss index b6d17bdb7d9..2578550a089 100644 --- a/docroot/themes/custom/vagovclaro/assets/scss/components/_fields.scss +++ b/docroot/themes/custom/vagovclaro/assets/scss/components/_fields.scss @@ -227,6 +227,17 @@ body:not(.role-admin) { margin-left: var(--spacing-xl); } +.form-item--media-0-fields-image-0-alt, +.form-item--image-0-alt { + .form-item--error-message { + margin: 5px 0; + } +} + +#edit-field-publish-to-outreach-cal-wrapper div.form-item--field-publish-to-outreach-cal-value { + margin-left: auto; +} + #edit-field-publish-to-outreach-cal-wrapper label { margin-left: var(--spacing-xs); } diff --git a/docroot/themes/custom/vagovclaro/assets/scss/components/_media.scss b/docroot/themes/custom/vagovclaro/assets/scss/components/_media.scss index 0af2976882e..aea6e81ecab 100644 --- a/docroot/themes/custom/vagovclaro/assets/scss/components/_media.scss +++ b/docroot/themes/custom/vagovclaro/assets/scss/components/_media.scss @@ -52,3 +52,37 @@ max-width: calc(100% - 1.7rem); } } + +.form-item--image-0 { + .form-managed-file.no-upload { + display: flex; + } +} + +.image-widget { + &.form-managed-file.has-meta .form-managed-file__image-preview { + margin: 0 0 1rem 1rem; + max-width: 600px; + } + + .form-managed-file__main { + display: flex; + } + + .form-managed-file__meta-items { + .form-item__description { + margin-right: 16px; + } + } + + .image-preview__img-wrapper { + box-shadow: unset; + display: flex; + flex-direction: row; + justify-content: end; + + img { + width: 100%; + } + } +} diff --git a/docroot/themes/custom/vagovclaro/templates/content-edit/file-managed-file.html.twig b/docroot/themes/custom/vagovclaro/templates/content-edit/file-managed-file.html.twig index 3df68c5278a..3c9c482b1e2 100644 --- a/docroot/themes/custom/vagovclaro/templates/content-edit/file-managed-file.html.twig +++ b/docroot/themes/custom/vagovclaro/templates/content-edit/file-managed-file.html.twig @@ -40,13 +40,6 @@ {% if has_meta or data.preview %}
- {% if data.preview %} -
-
- {{ data.preview }} -
-
- {% endif %} {% if data.description or display or data.alt or data.title %}
{{ data.description }} @@ -63,22 +56,28 @@ {% set inlineguidance %}

Best practices

    -
  • Be accurate and descriptive, clearly identifying the main purpose of the image.
  • -
  • Be concise, ideally no more that 150 characters.
  • -
  • Avoid phrases like “image of”, “photo of”, “graphic of”, etc.
  • -
  • Leave the file name of the image out of the alt text.
  • -
  • Learn more about alt text guidelines
  • +
  • Be accurate and descriptive.
  • +
  • Don’t use phrases that screen readers already use to describe images such as “image of”, “photo of”, “graphic of”, or “picture of”.
  • +
  • Don't use the name of the image file as alt text. This does not provide clear information to people that use a screen reader.
  • +
  • Learn more about alt text guidelines (opens in a new tab)
{% endset %} {% include '@components/inline-guidance/text-box.twig' with { "content": inlineguidance, - "classes": 'show', + "classes": 'hide', } %} {{ data.alt|without('#title', '#description') }} {{ data.title }}
{% endif %} + {% if data.preview %} +
+
+ {{ data.preview }} +
+
+ {% endif %}
{% endif %} diff --git a/patches/2949540-31.patch b/patches/2949540-31.patch new file mode 100644 index 00000000000..55487454f1f --- /dev/null +++ b/patches/2949540-31.patch @@ -0,0 +1,219 @@ +diff --git a/clientside_validation.links.menu.yml b/clientside_validation.links.menu.yml +new file mode 100644 +index 0000000..0803f80 +--- /dev/null ++++ b/clientside_validation.links.menu.yml +@@ -0,0 +1,5 @@ ++clientside_validation.settings_form: ++ title: 'Clientside Validation Settings' ++ description: 'Configure clientside validation settings.' ++ route_name: clientside_validation.settings_form ++ parent: system.admin_config_ui +diff --git a/clientside_validation.module b/clientside_validation.module +index 50fa8b3..6da4e71 100644 +--- a/clientside_validation.module ++++ b/clientside_validation.module +@@ -12,7 +12,49 @@ use Drupal\Core\Render\Element; + * Implements hook_form_alter(). + */ + function clientside_validation_form_alter(&$form, FormStateInterface &$form_state, $form_id) { +- $form['#after_build'][] = 'clientside_validation_form_after_build'; ++ $config = \Drupal::config('clientside_validation.settings'); ++ ++ // Add cache tags for the config. ++ if (!empty($form['#cache']['tags'])) { ++ $form['#cache']['tags'] = array_merge($form['#cache']['tags'], $config->getCacheTags()); ++ } ++ else { ++ $form['#cache']['tags'] = $config->getCacheTags(); ++ } ++ ++ // If enabled for all forms, add the after build function. ++ $enable_all_forms = $config->get('enable_all_forms'); ++ if ($enable_all_forms) { ++ $form['#after_build'][] = 'clientside_validation_form_after_build'; ++ } ++ // Else, add it only if the form ID was added in configuration. ++ else { ++ $enabled_forms = $config->get('enabled_forms'); ++ if (!empty($enabled_forms) && in_array($form_id, $enabled_forms)) { ++ $form['#after_build'][] = 'clientside_validation_form_after_build'; ++ } ++ } ++ ++ // Webform has its own checkbox for disabling clientside validation, ++ // making it always enabled unless there is a novalidate attribute. ++ if ( ++ substr($form_id, 0, 19) == 'webform_submission_' && ++ !empty($form['#webform_id']) && ++ isset($form['#after_build']) && ++ !in_array('clientside_validation_form_after_build', $form['#after_build']) ++ ) { ++ $form['#after_build'][] = 'clientside_validation_form_after_build'; ++ } ++ ++ // Remove the clientside validation if the novalidate attribute was set. ++ if ( ++ isset($form['#attributes']['novalidate']) && ++ isset($form['#after_build']) && ++ in_array('clientside_validation_form_after_build', $form['#after_build']) ++ ) { ++ $validation_key = array_search('clientside_validation_form_after_build', $form['#after_build']); ++ unset($form['#after_build'][$validation_key]); ++ } + } + + /** +diff --git a/clientside_validation.permissions.yml b/clientside_validation.permissions.yml +new file mode 100644 +index 0000000..579ecaa +--- /dev/null ++++ b/clientside_validation.permissions.yml +@@ -0,0 +1,4 @@ ++administer clientside validation: ++ description: 'Grants access to the clientside validation configuration form.' ++ title: 'Administer clientside validation' ++ restrict access: TRUE +diff --git a/clientside_validation.routing.yml b/clientside_validation.routing.yml +new file mode 100644 +index 0000000..9cf0f16 +--- /dev/null ++++ b/clientside_validation.routing.yml +@@ -0,0 +1,7 @@ ++clientside_validation.settings_form: ++ path: '/admin/config/user-interface/clientside-validation' ++ defaults: ++ _form: '\Drupal\clientside_validation\Form\ClientsideValidationSettingsForm' ++ _title: 'Clientside Validation Settings' ++ requirements: ++ _permission: 'administer clientside validation' +diff --git a/config/install/clientside_validation.settings.yml b/config/install/clientside_validation.settings.yml +new file mode 100644 +index 0000000..dd9fdb9 +--- /dev/null ++++ b/config/install/clientside_validation.settings.yml +@@ -0,0 +1,2 @@ ++enable_all_forms: true ++enabled_forms: { } +diff --git a/config/schema/clientside_validation.schema.yml b/config/schema/clientside_validation.schema.yml +new file mode 100644 +index 0000000..6f8ec51 +--- /dev/null ++++ b/config/schema/clientside_validation.schema.yml +@@ -0,0 +1,12 @@ ++clientside_validation.settings: ++ type: config_object ++ mapping: ++ enable_all_forms: ++ type: boolean ++ label: 'Setting to enable all forms for clientside validation' ++ enabled_forms: ++ type: sequence ++ label: 'A list of clientside validation enabled forms' ++ sequence: ++ type: string ++ label: 'The form ID' +diff --git a/src/Form/ClientsideValidationSettingsForm.php b/src/Form/ClientsideValidationSettingsForm.php +new file mode 100644 +index 0000000..36b2547 +--- /dev/null ++++ b/src/Form/ClientsideValidationSettingsForm.php +@@ -0,0 +1,98 @@ ++config('clientside_validation.settings'); ++ ++ // Add a note in regards to the overrides with the novalidate attribute. ++ $form['novalidate_note'] = [ ++ '#markup' => $this->t('Forms with the "novalidate" attribute will not have clientside validation enabled, regardless of these settings.'), ++ ]; ++ ++ // General enabling for all forms. ++ $form['enable_all_forms'] = [ ++ '#type' => 'checkbox', ++ '#title' => $this->t('Use Clientside Validation in all forms'), ++ '#description' => $this->t('Enable Clientside Validation for all forms on this site.'), ++ '#default_value' => $config->get('enable_all_forms'), ++ ]; ++ ++ // Enabled forms. ++ $enabled_forms = (!empty($config->get('enabled_forms'))) ? $config->get('enabled_forms') : []; ++ $form['enabled_forms'] = [ ++ '#type' => 'textarea', ++ '#title' => $this->t('Clientside Validation Enabled Forms'), ++ '#description' => $this->t('Enter form IDs for all forms that should have clientside validation enabled, separated by a new line.'), ++ '#default_value' => implode(PHP_EOL, $enabled_forms), ++ '#states' => [ ++ // Hide this textarea when all forms are enabled. ++ 'invisible' => [ ++ 'input[name="enable_all_forms"]' => ['checked' => TRUE], ++ ], ++ ], ++ ]; ++ ++ return $form; ++ } ++ ++ /** ++ * {@inheritdoc} ++ */ ++ public function submitForm(array &$form, FormStateInterface $form_state) { ++ parent::submitForm($form, $form_state); ++ $config = $this->config('clientside_validation.settings'); ++ $values = $form_state->getValues(); ++ ++ $config->set('enable_all_forms', $values['enable_all_forms']); ++ $enabled_forms = preg_split("[\n|\r]", $values['enabled_forms']); ++ $enabled_forms = array_filter($enabled_forms); ++ $config->set('enabled_forms', $enabled_forms); ++ $config->save(); ++ } ++ ++} diff --git a/patches/3106205-length-menu-tree-too-short.patch b/patches/3106205-length-menu-tree-too-short-48.patch similarity index 98% rename from patches/3106205-length-menu-tree-too-short.patch rename to patches/3106205-length-menu-tree-too-short-48.patch index 8dd681406aa..85beb189e6e 100644 --- a/patches/3106205-length-menu-tree-too-short.patch +++ b/patches/3106205-length-menu-tree-too-short-48.patch @@ -31,7 +31,7 @@ index a896ba9897435a082dcab1fd3097ca1bff785939..32f1f8f9ffa0961c97fea07f545cd0cb +/** + * Update length of menu_tree fields url and route_param_key from 255 to 2048. + */ -+function system_update_10101() { ++function system_update_10102() { + $schema = \Drupal::database()->schema(); + $spec = [ + 'description' => 'The external path this link points to (when not using a route).', diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 744efcbf120..211a18632c7 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -494,3 +494,8 @@ parameters: message: "#^Variable \\$process might not be defined\\.$#" count: 7 path: tests/scaling_performance.php + + - + message: "#^Call to an undefined method Drupal\\\\Core\\\\\Form\\\\\FormInterface\\:\\:getEntity\\(\\)\\.$#" + count: 1 + path: docroot/modules/custom/va_gov_media/src/EventSubscriber/MediaEventSubscriber.php diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/clp_faq.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_faq.feature index 32a539314db..1ef29e939d8 100644 --- a/tests/cypress/integration/features/content_type/campaign_landing_page/clp_faq.feature +++ b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_faq.feature @@ -12,3 +12,46 @@ Feature: Content Type: Campaign Landing Page And I can fill in "Text" field with fake text And I should see "Add Reusable Q&A" And I should see "Add a link to more FAQs" + + Scenario: Test FAQ page segment requirements + Given I am logged in as a user with the "content_admin" role + Then I create a "campaign_landing_page" node and continue + + # Test maximum FAQs cannot be exceeded. + When I click to expand "FAQs" + And I enable the page segment within selector "#edit-group-faqs" + And I click the "Add Page-Specific Q&A" button + And I fill in "Question" field with fake text + And I fill in ckeditor "edit-field-clp-faq-paragraphs-0-subform-field-answer-0-subform-field-wysiwyg-0-value" with "Adding Page-Specific Q&As..." + And I click the "Add Reusable Q&A Group" button + And I click to expand "Q&As" + And I select 10 items from the "Add Reusable Q&As" Entity Browser modal + And I wait "2" seconds + And I fill in field with selector "#edit-revision-log-0-value" with fake text + And I save the node + Then I should see an element with the selector "#edit-field-clp-faq-paragraphs-0-subform-field-question-0-value.error" + And I should see "Remove Page-Specific or Reusable Q&As" + + # Test fewer than minimum FAQs cannot be added. + When I click the button with selector "[data-drupal-selector='edit-field-clp-reusable-q-a-0-top'] .paragraphs-dropdown-toggle" + And I click the button with selector "[name='field_clp_reusable_q_a_0_remove']" + And I fill in field with selector "#edit-revision-log-0-value" with fake text + And I save the node + Then I should see an element with the selector "#edit-field-clp-faq-paragraphs-0-subform-field-question-0-value.error" + And I should see "Add Page-Specific or Reusable Q&As" + + # Test required Q&As if FAQ segment is enabled + When I click the button with selector "[data-drupal-selector='edit-field-clp-faq-paragraphs-0-top'] .paragraphs-dropdown-toggle" + And I click the button with selector "[name='field_clp_faq_paragraphs_0_remove']" + And I fill in field with selector "#edit-revision-log-0-value" with fake text + And I save the node + Then I should see "A minimum of 3 Q&As is required when the FAQ page segment is enabled. Disable the FAQs page segment if there are no Q&As to add." + + # Test that no Q&A is required if the FAQ page segment is disabled + When I click to expand "FAQs" + And I disable the page segment + And I fill in field with selector "#edit-revision-log-0-value" with fake text + And I save the node + Then the element with selector ".messages__content" should contain "Campaign Landing Page" + And the element with selector ".messages__content" should contain "has been updated." + diff --git a/tests/cypress/integration/features/content_type/event.feature b/tests/cypress/integration/features/content_type/event.feature index b4779d0e4ac..8f5496374be 100644 --- a/tests/cypress/integration/features/content_type/event.feature +++ b/tests/cypress/integration/features/content_type/event.feature @@ -144,3 +144,11 @@ Feature: Content Type: Event Given I am logged in as a user with the "content_admin" role When I am at "node/add/event" Then an element with the selector "#edit-field-datetime-range-timezone-wrapper button.tabledrag-toggle-weight" should not exist + + Scenario: Confirm creating "Featured" Events is possible. + Given I am logged in as a user with the "content_admin" role + And I create a "event" node and continue + And I fill in field with selector "#edit-revision-log-0-value" with fake text + And I feature the content + When I save the node + Then I should see "has been updated." diff --git a/tests/cypress/integration/features/facilities/facilities_api.feature b/tests/cypress/integration/features/content_type/facilities/facilities_api.feature similarity index 100% rename from tests/cypress/integration/features/facilities/facilities_api.feature rename to tests/cypress/integration/features/content_type/facilities/facilities_api.feature diff --git a/tests/cypress/integration/features/content_type/full_width_banner_alert.feature b/tests/cypress/integration/features/content_type/facilities/vamc/full_width_banner_alert.feature similarity index 100% rename from tests/cypress/integration/features/content_type/full_width_banner_alert.feature rename to tests/cypress/integration/features/content_type/facilities/vamc/full_width_banner_alert.feature diff --git a/tests/cypress/integration/features/content_type/health_care_local_facility.feature b/tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_facility.feature similarity index 100% rename from tests/cypress/integration/features/content_type/health_care_local_facility.feature rename to tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_facility.feature diff --git a/tests/cypress/integration/features/content_type/health_care_local_health_service.feature b/tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_health_service.feature similarity index 100% rename from tests/cypress/integration/features/content_type/health_care_local_health_service.feature rename to tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_health_service.feature diff --git a/tests/cypress/integration/features/content_type/health_care_region_detail_page.feature b/tests/cypress/integration/features/content_type/facilities/vamc/health_care_region_detail_page.feature similarity index 100% rename from tests/cypress/integration/features/content_type/health_care_region_detail_page.feature rename to tests/cypress/integration/features/content_type/facilities/vamc/health_care_region_detail_page.feature diff --git a/tests/cypress/integration/features/content_type/regional_health_care_service_des.feature b/tests/cypress/integration/features/content_type/facilities/vamc/regional_health_care_service_des.feature similarity index 100% rename from tests/cypress/integration/features/content_type/regional_health_care_service_des.feature rename to tests/cypress/integration/features/content_type/facilities/vamc/regional_health_care_service_des.feature diff --git a/tests/cypress/integration/features/facilities/vamc_lovell.feature b/tests/cypress/integration/features/content_type/facilities/vamc/vamc_lovell.feature similarity index 100% rename from tests/cypress/integration/features/facilities/vamc_lovell.feature rename to tests/cypress/integration/features/content_type/facilities/vamc/vamc_lovell.feature diff --git a/tests/cypress/integration/features/content_type/vamc_operating_status_and_alerts.feature b/tests/cypress/integration/features/content_type/facilities/vamc/vamc_operating_status_and_alerts.feature similarity index 100% rename from tests/cypress/integration/features/content_type/vamc_operating_status_and_alerts.feature rename to tests/cypress/integration/features/content_type/facilities/vamc/vamc_operating_status_and_alerts.feature diff --git a/tests/cypress/integration/features/content_type/facilities/vba/vba_facility.feature b/tests/cypress/integration/features/content_type/facilities/vba/vba_facility.feature new file mode 100644 index 00000000000..375e546b2f5 --- /dev/null +++ b/tests/cypress/integration/features/content_type/facilities/vba/vba_facility.feature @@ -0,0 +1,47 @@ +@content_type__vba_facility +Feature: CMS User may effectively interact with the VBA Facility form + In order to confirm that cms user have access to the necessary functionality + As anyone involved in the project + I need to have certain functionality available + + Scenario: Log in and try to edit an archived VBA Facility as a VBA editor + When I am logged in as a user with the roles "content_creator_vba, content_publisher" + # Columbia VA Regional Benefit Office + And my workbench access sections are set to "1065" + # Fort Jackson Satelite office - an archived facility in that section. + Then I am at "/node/4071/" + Then the primary tab "View" should exist + Then the primary tab "Edit" should not exist + + Scenario: Enable banner segment and ensure expected fields are present + Given I am logged in as a user with the "content_admin" role + And my workbench access sections are set to "1065" + # Columbia VA Regional Benefit Office + When I am at "/node/4063/edit" + # Banner related fields should not be visible. + And I scroll to element '#edit-field-show-banner-value' + And I uncheck the "Display a banner alert on this facility" checkbox + Then I should not see an element with the selector "#edit-field-alert-type" + And I should not see an element with the selector "#edit-field-dismissible-option--wrapper" + And I should not see an element with the selector "#edit-field-banner-title-0-value" + And I should not see an element with the selector "#edit-field-banner-content-wrapper" + When I check the "Display a banner alert on this facility" checkbox + # Banner related fields should be visible. + Then I should see an element with the selector "#edit-field-alert-type" + And I should see an element with the selector "#edit-field-dismissible-option--wrapper" + And I should see an element with the selector "#edit-field-banner-title-0-value" + And I should see an element with the selector "#edit-field-banner-content-wrapper" + # Banner field data should not persist if it is disabled. + When I select option "Information" from dropdown "Banner alert type" + And I select the "Allow site visitors to dismiss banner" radio button + And I fill in field with selector "#edit-field-banner-title-0-value" with value "[Test Data] Test banner title." + And I fill in ckeditor "edit-field-banner-content-0-value" with "[Test Data] Banner Body" + And I fill in field with selector "#edit-revision-log-0-value" with value "[Test Data] Revision log message." + And I uncheck the "Display a banner alert on this facility" checkbox + And I save the node + Then I should see "VBA Facility Columbia VA Regional Benefit Office has been updated." + When I am at "/node/4063/edit" + And I scroll to element '#edit-field-show-banner-value' + And I check the "Display a banner alert on this facility" checkbox + Then an element with the selector "#edit-field-banner-title-0-value" should be empty + And the option "- Select a value -" from dropdown with selector "#edit-field-alert-type" should be selected diff --git a/tests/cypress/integration/features/content_type/support_resources_detail_page.feature b/tests/cypress/integration/features/content_type/support_resources_detail_page.feature index f1978e4a4f6..12b9978dd47 100644 --- a/tests/cypress/integration/features/content_type/support_resources_detail_page.feature +++ b/tests/cypress/integration/features/content_type/support_resources_detail_page.feature @@ -18,9 +18,3 @@ Feature: Content Type: Resources and Support Detail Page Given I select option "Non-beneficiaries" from dropdown "Audience" Then I should not see an element with the selector "#edit-field-tags-0-subform-field-audience-beneficiares-wrapper" And I should see an element with the selector "#edit-field-tags-0-subform-field-non-beneficiares-wrapper" - - Given I check all checkboxes within "#edit-field-tags-0-subform-field-topics--wrapper" - Then an element with the selector "#edit-field-tags-0-subform-field-audience-selection" should be disabled - - Given I uncheck the first checkbox within "#edit-field-tags-0-subform-field-topics--wrapper" - Then an element with the selector "#edit-field-tags-0-subform-field-audience-selection" should not be disabled diff --git a/tests/cypress/integration/features/content_type/vba_facility.feature b/tests/cypress/integration/features/content_type/vba_facility.feature deleted file mode 100644 index 0af4c7d16bb..00000000000 --- a/tests/cypress/integration/features/content_type/vba_facility.feature +++ /dev/null @@ -1,12 +0,0 @@ -@content_type__vba_facility -Feature: CMS User may effectively interact with the VBA Facility form - In order to confirm that cms user have access to the necessary functionality - As anyone involved in the project - I need to have certain functionality available - - Scenario: Log in and try to edit an archived VBA Facility as a VBA editor - When I am logged in as a user with the roles "content_creator_vba, content_publisher" - And my workbench access sections are set to "1065" - Then I am at "/node/4071/" - Then the primary tab "View" should exist - Then the primary tab "Edit" should not exist diff --git a/tests/cypress/integration/features/platform/alt_text_validation.feature b/tests/cypress/integration/features/platform/alt_text_validation.feature new file mode 100644 index 00000000000..a818c5967eb --- /dev/null +++ b/tests/cypress/integration/features/platform/alt_text_validation.feature @@ -0,0 +1,42 @@ + +Feature: Alt-Text Validation + In order to enhance the veteran experience + As an editor + I need just-in-time guidance as to best practices surrounding alt-text content + + Scenario: An editor supplies verbose alt-text content (server-side validation) + Given I am logged in as a user with the "administrator" role + When I save an image with 152 characters of alt-text content + Then I should see "Alternative text cannot be longer than 150 characters." + + Scenario: An editor supplies redundant alt-text content (server-side validation) + Given I am logged in as a user with the "administrator" role + When I save an image with "Image of polygon" as alt-text + Then I should see "Alternative text cannot contain phrases like “image of”, “photo of”, “graphic of”, “picture of”, etc." + + Scenario: An editor supplies the name of the image file as alt-text content (server-side validation) + Given I am logged in as a user with the "administrator" role + When I save an image with "polygon_image.png" as alt-text + Then I should see "Alternative text cannot contain file names." + + Scenario: An editor supplies verbose alt-text content (element blur validation) + Given I am logged in as a user with the "administrator" role + When I create an image with 152 characters of alt-text content + Then I should see "Alternative text cannot be longer than 150 characters." + + Scenario: An editor supplies redundant alt-text content (element blur validation) + Given I am logged in as a user with the "administrator" role + When I create an image with "Image of polygon" as alt-text + Then I should see "Alternative text cannot contain phrases like “image of”, “photo of”, “graphic of”, “picture of”, etc." + + Scenario: An editor supplies the name of the image file as alt-text content (element blur validation) + Given I am logged in as a user with the "administrator" role + When I create an image with "polygon_image.png" as alt-text + Then I should see "Alternative text cannot contain file names." + + Scenario: An editor supplies the name of the image file and then correctly edits field + Given I am logged in as a user with the "administrator" role + When I create an image with "polygon_image.png" as alt-text + Then I should see "Alternative text cannot contain file names." + When I update alt-text content to display "a simple polygon placeholder" + Then I should see no error message diff --git a/tests/cypress/integration/step_definitions/common/i_create_an_image_with_alt_text.js b/tests/cypress/integration/step_definitions/common/i_create_an_image_with_alt_text.js new file mode 100644 index 00000000000..4b4a52a5ee3 --- /dev/null +++ b/tests/cypress/integration/step_definitions/common/i_create_an_image_with_alt_text.js @@ -0,0 +1,59 @@ +import { When, Then } from "@badeball/cypress-cucumber-preprocessor"; +import { faker } from "@faker-js/faker"; + +const navigateToAndFillMediaForm = () => { + cy.visit("/media/add/image"); + cy.injectAxe(); + cy.scrollTo("top"); + cy.findAllByLabelText("Name").type(`[Test Data] ${faker.lorem.sentence()}`, { + force: true, + }); + cy.findAllByLabelText("Description").type(faker.lorem.sentence(), { + force: true, + }); + cy.findAllByLabelText("Section").select("VACO"); + cy.get("#edit-image-0-upload") + .attachFile("images/polygon_image.png") + .wait(1000); +}; + +const focusOnNameField = () => { + cy.findAllByLabelText("Name").focus(); +}; + +When("I create an image with {string} as alt-text", (altTextContent) => { + navigateToAndFillMediaForm(); + cy.findAllByLabelText("Alternative text").type(altTextContent, { + force: true, + }); + focusOnNameField(); +}); + +When( + "I create an image with {int} characters of alt-text content", + (charCount) => { + navigateToAndFillMediaForm(); + cy.findAllByLabelText("Alternative text").type( + faker.helpers.repeatString("a", charCount), + { + force: true, + } + ); + focusOnNameField(); + } +); + +When("I update alt-text content to display {string}", (altTextContent) => { + cy.findAllByLabelText("Alternative text").clear(); + cy.findAllByLabelText("Alternative text").type(altTextContent, { + force: true, + }); +}); + +Then("I should see no error message", () => { + cy.get("div.form-item--error-message > strong").should( + "have.attr", + "style", + "display: none;" + ); +}); diff --git a/tests/cypress/integration/step_definitions/common/i_enable_the_segment.js b/tests/cypress/integration/step_definitions/common/i_enable_the_segment.js index 7c7898034d0..6f0517daec5 100644 --- a/tests/cypress/integration/step_definitions/common/i_enable_the_segment.js +++ b/tests/cypress/integration/step_definitions/common/i_enable_the_segment.js @@ -3,3 +3,19 @@ import { Given } from "@badeball/cypress-cucumber-preprocessor"; Given("I enable the page segment", () => { cy.findAllByLabelText("Enable this page segment").check({ force: true }); }); + +Given("I disable the page segment", () => { + cy.findAllByLabelText("Enable this page segment").uncheck({ force: true }); +}); + +Given("I enable the page segment within selector {string}", (text) => { + cy.get(text) + .findAllByLabelText("Enable this page segment") + .check({ force: true }); +}); + +Given("I disable the page segment within selector {string}", (text) => { + cy.get(text) + .findAllByLabelText("Enable this page segment") + .uncheck({ force: true }); +}); diff --git a/tests/cypress/integration/step_definitions/common/i_feature_the_content.js b/tests/cypress/integration/step_definitions/common/i_feature_the_content.js new file mode 100644 index 00000000000..4e3fcb8d23d --- /dev/null +++ b/tests/cypress/integration/step_definitions/common/i_feature_the_content.js @@ -0,0 +1,5 @@ +import { Given } from "@badeball/cypress-cucumber-preprocessor"; + +Given("I feature the content", () => { + cy.get("#edit-field-featured-value").check({ force: true }); +}); diff --git a/tests/cypress/integration/step_definitions/common/i_save_an_image_with_alt_text.js b/tests/cypress/integration/step_definitions/common/i_save_an_image_with_alt_text.js new file mode 100644 index 00000000000..900ad1954f1 --- /dev/null +++ b/tests/cypress/integration/step_definitions/common/i_save_an_image_with_alt_text.js @@ -0,0 +1,45 @@ +import { When } from "@badeball/cypress-cucumber-preprocessor"; +import { faker } from "@faker-js/faker"; + +const navigateToAndFillMediaForm = () => { + cy.visit("/media/add/image"); + cy.injectAxe(); + cy.scrollTo("top"); + cy.findAllByLabelText("Name").type(`[Test Data] ${faker.lorem.sentence()}`, { + force: true, + }); + cy.findAllByLabelText("Description").type(faker.lorem.sentence(), { + force: true, + }); + cy.findAllByLabelText("Section").select("VACO"); + cy.get("#edit-image-0-upload") + .attachFile("images/polygon_image.png") + .wait(1000); +}; + +const clickSaveButton = () => { + cy.get("form.media-form input#edit-submit").click(); + cy.wait(1000); +}; + +When("I save an image with {string} as alt-text", (altTextContent) => { + navigateToAndFillMediaForm(); + cy.findAllByLabelText("Alternative text").type(altTextContent, { + force: true, + }); + clickSaveButton(); +}); + +When( + "I save an image with {int} characters of alt-text content", + (charCount) => { + navigateToAndFillMediaForm(); + cy.findAllByLabelText("Alternative text").type( + faker.helpers.repeatString("a", charCount), + { + force: true, + } + ); + clickSaveButton(); + } +); diff --git a/tests/cypress/integration/weights.json b/tests/cypress/integration/weights.json index 0fa67f952a7..8bfdaf92a68 100644 --- a/tests/cypress/integration/weights.json +++ b/tests/cypress/integration/weights.json @@ -1 +1 @@ -{"tests/cypress/integration/features/content_type/banner.feature":{"time":41656,"weight":5},"tests/cypress/integration/features/content_type/basic_landing_page.feature":{"time":57915,"weight":7},"tests/cypress/integration/features/content_type/campaign_landing_page.feature":{"time":68632,"weight":8},"tests/cypress/integration/features/content_type/checklist.feature":{"time":96389,"weight":12},"tests/cypress/integration/features/content_type/documentation_page.feature":{"time":31999,"weight":4},"tests/cypress/integration/features/content_type/event.feature":{"time":191765,"weight":24},"tests/cypress/integration/features/content_type/full_width_banner_alert.feature":{"time":69385,"weight":8},"tests/cypress/integration/features/content_type/health_care_local_facility.feature":{"time":100,"weight":0},"tests/cypress/integration/features/content_type/health_care_local_health_service.feature":{"time":116987,"weight":15},"tests/cypress/integration/features/content_type/health_care_region_detail_page.feature":{"time":38262,"weight":4},"tests/cypress/integration/features/content_type/landing_page.feature":{"time":70951,"weight":9},"tests/cypress/integration/features/content_type/office.feature":{"time":27849,"weight":3},"tests/cypress/integration/features/content_type/person_profile.feature":{"time":134270,"weight":17},"tests/cypress/integration/features/content_type/press_release.feature":{"time":22282,"weight":2},"tests/cypress/integration/features/content_type/regional_health_care_service_des.feature":{"time":111440,"weight":14},"tests/cypress/integration/features/content_type/step_by_step.feature":{"time":41618,"weight":5},"tests/cypress/integration/features/content_type/vamc_operating_status_and_alerts.feature":{"time":66677,"weight":8},"tests/cypress/integration/features/facilities/facilities_api.feature":{"time":159639,"weight":20},"tests/cypress/integration/features/facilities/vamc_lovell.feature":{"time":4716,"weight":0},"tests/cypress/integration/features/meta/ewa_block.feature":{"time":117670,"weight":15},"tests/cypress/integration/features/meta/step_definitions.feature":{"time":161885,"weight":20},"tests/cypress/integration/features/platform/content_release.feature":{"time":151357,"weight":19},"tests/cypress/integration/features/platform/entity_reference_validation.feature":{"time":65271,"weight":8},"tests/cypress/integration/features/platform/file_upload.feature":{"time":68310,"weight":8},"tests/cypress/integration/features/platform/generate_automatic_url_alias.feature":{"time":64351,"weight":8},"tests/cypress/integration/features/platform/help_center.feature":{"time":37695,"weight":4},"tests/cypress/integration/features/platform/image_crop.feature":{"time":94,"weight":0},"tests/cypress/integration/features/platform/media.feature":{"time":310540,"weight":40},"tests/cypress/integration/features/platform/navigation.feature":{"time":16790,"weight":2},"tests/cypress/integration/features/platform/password_policy.feature":{"time":35899,"weight":4},"tests/cypress/integration/features/platform/permissions.feature":{"time":84030,"weight":10},"tests/cypress/integration/features/platform/text_validation.feature":{"time":104535,"weight":13},"tests/cypress/integration/features/platform/tooltip.feature":{"time":8767,"weight":1},"tests/cypress/integration/features/platform/translation.feature":{"time":128853,"weight":16},"tests/cypress/integration/features/platform/user_login.feature":{"time":43462,"weight":5},"tests/cypress/integration/features/taxonomy_type/va_benefit_taxonomy.feature":{"time":36221,"weight":4}} \ No newline at end of file +{"tests/cypress/integration/features/content_type/banner.feature":{"time":41656,"weight":5},"tests/cypress/integration/features/content_type/basic_landing_page.feature":{"time":57915,"weight":7},"tests/cypress/integration/features/content_type/campaign_landing_page.feature":{"time":68632,"weight":8},"tests/cypress/integration/features/content_type/checklist.feature":{"time":96389,"weight":12},"tests/cypress/integration/features/content_type/documentation_page.feature":{"time":31999,"weight":4},"tests/cypress/integration/features/content_type/event.feature":{"time":191765,"weight":24},"tests/cypress/integration/features/content_type/facilities/vamc/full_width_banner_alert.feature":{"time":69385,"weight":8},"tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_facility.feature":{"time":100,"weight":0},"tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_health_service.feature":{"time":116987,"weight":15},"tests/cypress/integration/features/content_type/facilities/vamc/health_care_region_detail_page.feature":{"time":38262,"weight":4},"tests/cypress/integration/features/content_type/landing_page.feature":{"time":70951,"weight":9},"tests/cypress/integration/features/content_type/office.feature":{"time":27849,"weight":3},"tests/cypress/integration/features/content_type/person_profile.feature":{"time":134270,"weight":17},"tests/cypress/integration/features/content_type/press_release.feature":{"time":22282,"weight":2},"tests/cypress/integration/features/content_type/facilities/vamc/regional_health_care_service_des.feature":{"time":111440,"weight":14},"tests/cypress/integration/features/content_type/step_by_step.feature":{"time":41618,"weight":5},"tests/cypress/integration/features/content_type/facilities/vamc/vamc_operating_status_and_alerts.feature":{"time":66677,"weight":8},"tests/cypress/integration/features/facilities/facilities_api.feature":{"time":159639,"weight":20},"tests/cypress/integration/features/facilities/vamc/vamc_lovell.feature":{"time":4716,"weight":0},"tests/cypress/integration/features/meta/ewa_block.feature":{"time":117670,"weight":15},"tests/cypress/integration/features/meta/step_definitions.feature":{"time":161885,"weight":20},"tests/cypress/integration/features/platform/content_release.feature":{"time":151357,"weight":19},"tests/cypress/integration/features/platform/entity_reference_validation.feature":{"time":65271,"weight":8},"tests/cypress/integration/features/platform/file_upload.feature":{"time":68310,"weight":8},"tests/cypress/integration/features/platform/generate_automatic_url_alias.feature":{"time":64351,"weight":8},"tests/cypress/integration/features/platform/help_center.feature":{"time":37695,"weight":4},"tests/cypress/integration/features/platform/image_crop.feature":{"time":94,"weight":0},"tests/cypress/integration/features/platform/media.feature":{"time":310540,"weight":40},"tests/cypress/integration/features/platform/navigation.feature":{"time":16790,"weight":2},"tests/cypress/integration/features/platform/password_policy.feature":{"time":35899,"weight":4},"tests/cypress/integration/features/platform/permissions.feature":{"time":84030,"weight":10},"tests/cypress/integration/features/platform/text_validation.feature":{"time":104535,"weight":13},"tests/cypress/integration/features/platform/tooltip.feature":{"time":8767,"weight":1},"tests/cypress/integration/features/platform/translation.feature":{"time":128853,"weight":16},"tests/cypress/integration/features/platform/user_login.feature":{"time":43462,"weight":5},"tests/cypress/integration/features/taxonomy_type/va_benefit_taxonomy.feature":{"time":36221,"weight":4}}