diff --git a/.gitattributes b/.gitattributes index 76ea8feeb11..8cd2ef1d72d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -42,6 +42,8 @@ *.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +composer.lock linguist-generated=false + # Define binary file attributes. # - Do not treat them as text. # - Include binary diff in patches instead of "binary files differ." diff --git a/.github/ISSUE_TEMPLATE/cms-design-system-experimental-addition-request.md b/.github/ISSUE_TEMPLATE/cms-design-system-experimental-addition-request.md new file mode 100644 index 00000000000..9667ab37574 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/cms-design-system-experimental-addition-request.md @@ -0,0 +1,44 @@ +--- +name: CMS Design System Experimental Addition Request +about: Use this template for designers outside of the CMS team to request a component or pattern be added to the CMS Design System. +title: 'Experimental Design for [component or pattern name]' +labels: CMS design system, CMS design, CMS Team, Needs refining +assignees: BlakeOrgan + +--- + +## What +Give a brief description of the component or pattern you want to propose. + +## Purpose +What problem does this component or pattern solve for the user? + +## Usage +Context or task: Explain the scenario or user tasks where this component is, or could be, used. + +## Behavior +Describe the key interactions for this component. + +## Examples +Include any examples you have of this component or pattern. These can be screenshots, links to a Sketch or Figma file, or links to staging or production. + +## Drupal Modules +If the functionality of this component or pattern is provided through a Drupal module, please link to the module currently being used or one that you plan to use. + +## Accessibility +Include any accessibility considerations. + +## Guidance +What would you want to tell other teams about this component or pattern? + +## Research (optional) +Include any research you have already conducted, or plan to conduct, on this component or pattern. + +## Code (optional) +Include any existing code. + +## Next steps +Send a message in the #cms-design channel letting the CMS team know that this request has been submitted and include a link to this ticket. +A designer on the CMS team will review this request and will reach out to you if they have questions/comments/concerns. +If your request is approved, you can add your component or pattern to the system. +If you have any questions on how to add your component or pattern to the system, please reach out in the #cms-design channel. diff --git a/.github/workflows/contextual-advice.yml b/.github/workflows/contextual-advice.yml index 369fcf9d462..53e8a79c132 100644 --- a/.github/workflows/contextual-advice.yml +++ b/.github/workflows/contextual-advice.yml @@ -17,7 +17,7 @@ jobs: # branch or its commits, regardless of provenance. # # Do not execute any code located within the repository! - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index 2f54d69ccdb..3babb7cb1db 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Check Corresponding Entity Reference Fields # See also `composer va:test:check-cer` in composer.json run: ./tests/scripts/check-cer.sh @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Composer Validate run: composer validate @@ -35,12 +35,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Post-Checkout Actions uses: ./.github/actions/post-checkout - name: ReviewDog # See also `composer va:test:eslint` in composer.json - uses: reviewdog/action-eslint@f2ee6727e05e6f0e46ea1d06a16f6685d3d7fb37 # v1.19.2 + uses: reviewdog/action-eslint@10ca150f51dbbb963467c37a03c873ba1fa75f91 # v1.20.0 with: reporter: github-pr-review eslint_flags: '--max-warnings 0 -c .eslintrc.json --no-eslintrc docroot/modules/custom/**/*.es6.js docroot/themes/custom/**/*.es6.js tests/cypress/**/*.js' @@ -52,7 +52,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Post-Checkout Actions uses: ./.github/actions/post-checkout - name: Run PHP_CodeSniffer and ReviewDog @@ -76,7 +76,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Post-Checkout Actions uses: ./.github/actions/post-checkout - name: Run PHPLint @@ -89,13 +89,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Post-Checkout Actions uses: ./.github/actions/post-checkout - name: Run PHPStan and ReviewDog # See also `composer va:test:phpstan` in composer.json run: | - export REVIEWDOG_GITHUB_API_TOKEN="${GITHUB_TOKEN}" bin/phpstan analyze \ --no-progress \ --no-interaction \ @@ -105,9 +104,11 @@ jobs: -name="PHPStan" \ -f=phpstan \ -reporter=github-pr-review \ - -diff='git diff' + -fail-on-error=true \ + -diff='git diff' \ + -tee env: - GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + REVIEWDOG_GITHUB_API_TOKEN: "${{ secrets.GITHUB_TOKEN }}" # Run unit tests against codebase with PHPUnit. phpunit: @@ -115,7 +116,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Post-Checkout Actions uses: ./.github/actions/post-checkout - name: Run PHPUnit (Unit Tests only) @@ -132,10 +133,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Stylelint modules # See also `composer va:test:stylelint-modules` in composer.json - uses: reviewdog/action-stylelint@e45410880466232c34ec6ab2e0fbc15f5ce3fdd2 # v1.17.1 + uses: reviewdog/action-stylelint@548276a94275c7865effa8d72fa8b6983d9f47c4 # v1.18.1 with: fail_on_error: true github_token: ${{ secrets.github_token }} @@ -145,7 +146,7 @@ jobs: stylelint_input: 'docroot/modules/custom/**/*.css' - name: Stylelint themes # See also `composer va:test:stylelint-themes` in composer.json - uses: reviewdog/action-stylelint@e45410880466232c34ec6ab2e0fbc15f5ce3fdd2 # v1.17.1 + uses: reviewdog/action-stylelint@548276a94275c7865effa8d72fa8b6983d9f47c4 # v1.18.1 with: fail_on_error: true github_token: ${{ secrets.github_token }} @@ -153,4 +154,41 @@ jobs: reporter: github-pr-review stylelint_config: '.stylelintrc' stylelint_input: 'docroot/themes/custom/**/*.scss' - + + # Warn strongly if the `composer.lock` lines changed exceed a threshold. + check-composer-lock-changes: + name: Check composer.lock changes + if: ${{ github.actor != 'dependabot[bot]' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + with: + fetch-depth: 0 + - name: Delete any existing comment. + uses: thollander/actions-comment-pull-request@d61db783da9abefc3437960d0cce08552c7c004f # v2.4.2 + with: + comment_tag: check-composer-lock-changes + mode: delete + message: | + Checking composer.lock changes... + - name: Check changes in composer.lock. + run: | + LINES_CHANGED=$(git diff --numstat origin/main..HEAD -- composer.lock | awk '{print $1+$2}') + THRESHOLD=200 + >&2 echo "LINES CHANGED=$LINES_CHANGED" + >&2 echo "THRESHOLD=$THRESHOLD" + echo "LINES_CHANGED=$LINES_CHANGED" >> $GITHUB_ENV + echo "THRESHOLD=$THRESHOLD" >> $GITHUB_ENV + - name: Comment if composer.lock changes exceed threshold. + uses: thollander/actions-comment-pull-request@d61db783da9abefc3437960d0cce08552c7c004f # v2.4.2 + if: env.LINES_CHANGED > env.THRESHOLD + with: + comment_tag: check-composer-lock-changes + message: | + The number of lines changed in composer.lock exceeds the acceptable threshold. + + - Lines changed: ${{ env.LINES_CHANGED }} + - Threshold: ${{ env.THRESHOLD }} + + This is a warning only. Please review the changes and ensure that they are acceptable. diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index f04b538613e..e47edb82180 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: # When Sorry-Cypress support is enabled on `main`, this should be # removed so that the `main` version of the workflow is used @@ -47,7 +47,7 @@ jobs: NODE_TLS_REJECT_UNAUTHORIZED: 0 - name: Cypress run - uses: cypress-io/github-action@7215fc1624803790752b15000c55f71354592d84 # v6.4.0 + uses: cypress-io/github-action@59810ebfa5a5ac6fcfdcfdf036d1cd4d083a88f2 # v6.5.0 with: wait-on: "${{ inputs.preview_url }}" command: 'npm run test:cypress:parallel' diff --git a/.github/workflows/default-branch-datadog-metrics.yml b/.github/workflows/default-branch-datadog-metrics.yml index 9fd6a39d2ca..083712208cb 100644 --- a/.github/workflows/default-branch-datadog-metrics.yml +++ b/.github/workflows/default-branch-datadog-metrics.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: ./.github/actions/post-checkout - name: Find occurrences of "Implements hook" in *.module files. id: hook_implementations @@ -75,7 +75,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: ./.github/actions/post-checkout - name: Run PHPUnit (Unit Tests only) run: bin/phpunit \ @@ -197,7 +197,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: ./.github/actions/post-checkout - name: Run PHPLOC and parse output for metrics. id: phploc_code_quality diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml index 6d53189dca1..11359f601dd 100644 --- a/.github/workflows/dependabot-auto-merge.yml +++ b/.github/workflows/dependabot-auto-merge.yml @@ -21,7 +21,7 @@ jobs: # Checkout repo to make package allow list available - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 # Use a YAML formatted config file to list which dependencies can be auto-merged - name: Read list of Allowed Auto-merge Dependencies @@ -31,7 +31,7 @@ jobs: # Get the initial AWS IAM User credentials. Only has basic permissions for sts:assumeRole - name: Configure AWS credentials (1) - uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 + uses: aws-actions/configure-aws-credentials@50ac8dd1e1b10d09dac7b8727528b91bed831ac0 # v3.0.2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -39,7 +39,7 @@ jobs: # Get credentials from our SSM role. Least privilege method for AWS IAM. - name: Configure AWS Credentials (2) - uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 + uses: aws-actions/configure-aws-credentials@50ac8dd1e1b10d09dac7b8727528b91bed831ac0 # v3.0.2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/pull-request-labels.yml b/.github/workflows/pull-request-labels.yml index fd994d82afd..86c9c3b1099 100644 --- a/.github/workflows/pull-request-labels.yml +++ b/.github/workflows/pull-request-labels.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: token: "${{ secrets.GITHUB_TOKEN }}" - name: Autolabel diff --git a/.github/workflows/s3-backup-retention.yml b/.github/workflows/s3-backup-retention.yml index ceab9730491..71a825c82dc 100644 --- a/.github/workflows/s3-backup-retention.yml +++ b/.github/workflows/s3-backup-retention.yml @@ -21,7 +21,7 @@ jobs: # Get the initial AWS IAM User credentials. Only has basic permissions for sts:assumeRole - name: Configure AWS credentials (1) - uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 + uses: aws-actions/configure-aws-credentials@50ac8dd1e1b10d09dac7b8727528b91bed831ac0 # v3.0.2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -36,7 +36,7 @@ jobs: # Get credentials from our s3 role. Least privilege method for AWS IAM. - name: Configure AWS credentials (1) - uses: aws-actions/configure-aws-credentials@04b98b3f9e85f563fb061be8751a0352327246b0 # v3.0.1 + uses: aws-actions/configure-aws-credentials@50ac8dd1e1b10d09dac7b8727528b91bed831ac0 # v3.0.2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/set-tugboat-tests-pending.yml b/.github/workflows/set-tugboat-tests-pending.yml index 8aa2e4f4eed..1f7f0edad94 100644 --- a/.github/workflows/set-tugboat-tests-pending.yml +++ b/.github/workflows/set-tugboat-tests-pending.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Set status for Tugboat tasks. run: | test_names=( diff --git a/READMES/devops/deploy-oob.md b/READMES/devops/deploy-oob.md index 42aeb544236..3e2eb53d6ab 100644 --- a/READMES/devops/deploy-oob.md +++ b/READMES/devops/deploy-oob.md @@ -40,13 +40,13 @@ For ease of reference, the following is a breakdown of our current product deplo | Step | Time to Complete | Time Remaining After Completion | | ---- | ---------------- | ------------------------------- | -| Create a PR | ~5 minutes | ~3 hours, 30 minutes | -| Pull Request CI Tests | ~50 minutes | ~2 hours, 30 minutes | -| [`testing/cms`](http://jenkins.vfs.va.gov/job/testing/job/cms/) Jenkins job | ~25 minutes | ~2 hours, 10 minutes | -| [`deploys/cms-vagov-staging`](http://jenkins.vfs.va.gov/job/deploys/job/cms-vagov-staging/) Jenkins job | ~35 minutes | ~90 minutes | -| [`cms/deploy-live-staging`](http://jenkins.vfs.va.gov/job/cms/job/deploy-live-staging/) Jenkins job | ~1 minute | ~90 minutes | -| [`testing/cms-post-deploy-tests-staging`](http://jenkins.vfs.va.gov/job/testing/job/cms-post-deploy-tests-staging/) Jenkins job | ~55 minutes | ~35 minutes | -| [`deploys/cms-auto-deploy`](http://jenkins.vfs.va.gov/job/deploys/job/cms-auto-deploy/) Jenkins job | ~15 minutes | ~20 minutes | +| Create a PR | ~5 minutes | ~2 hours, 30 minutes | +| Pull Request CI Tests | ~20 minutes | ~2 hours, 10 minutes | +| [`testing/cms`](http://jenkins.vfs.va.gov/job/testing/job/cms/) Jenkins job | ~30 minutes | ~1 hour, 40 minutes | +| [`deploys/cms-vagov-staging`](http://jenkins.vfs.va.gov/job/deploys/job/cms-vagov-staging/) Jenkins job | ~40 minutes | ~60 minutes | +| [`cms/deploy-live-staging`](http://jenkins.vfs.va.gov/job/cms/job/deploy-live-staging/) Jenkins job | ~1 minute | ~60 minutes | +| [`testing/cms-post-deploy-tests-staging`](http://jenkins.vfs.va.gov/job/testing/job/cms-post-deploy-tests-staging/) Jenkins job | ~30 minutes | ~30 minutes | +| [`deploys/cms-auto-deploy`](http://jenkins.vfs.va.gov/job/deploys/job/cms-auto-deploy/) Jenkins job | ~15 minutes | ~15 minutes | | [`cms/cms-full-pipeline`](http://jenkins.vfs.va.gov/job/cms/job/cms-full-pipeline/) Jenkins job | ~7 minutes | ~10 minutes | | [`releases/cms`](http://jenkins.vfs.va.gov/job/releases/job/cms/) Jenkins job | ~1 minute | ~10 minutes | | [`deploys/cms-vagov-prod`](http://jenkins.vfs.va.gov/job/deploys/job/cms-vagov-prod/) Jenkins job | ~7 minutes | | diff --git a/composer.json b/composer.json index e99333edf90..69a12f7345b 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ "composer/installers": "^2.2.0", "consolidation/site-process": "^4.1", "cweagans/composer-patches": "^1.7", - "datadog/dd-trace": "^0.90.0", + "datadog/dd-trace": "^0.91.0", "dealerdirect/phpcodesniffer-composer-installer": "0.7.2", "drupal/address": "^1.4", "drupal/admin_feedback": "^2.2", @@ -83,7 +83,7 @@ "drupal/geofield_map": "^3.0", "drupal/google_analytics": "^4.0", "drupal/govdelivery_bulletins": "^1.2", - "drupal/graphql": "^3.0", + "drupal/graphql": "3.1.0", "drupal/graphql_core": "^3.1.0", "drupal/graphql_menu": "^1.0@alpha", "drupal/graphql_metatag": "^1.0", @@ -201,14 +201,14 @@ "phpstan/phpstan-deprecation-rules": "^1.0", "phpunit/phpunit": "^9.3.0", "querypath/querypath": "^3.0", - "simplesamlphp/simplesamlphp": "^1.18", + "simplesamlphp/simplesamlphp": "^1.19", "squizlabs/php_codesniffer": "^3.5", "symfony/browser-kit": "^6.3", "symfony/config": "^4.0", "symfony/phpunit-bridge": "^5.1", "symfony/process": "^4.0", "symfony/routing": "^4.0", - "va-gov/content-build": "^0.0.3338", + "va-gov/content-build": "^0.0.3342", "vlucas/phpdotenv": "^5.3", "webflo/drupal-finder": "^1.0.0", "webmozart/path-util": "^2.3", @@ -507,7 +507,8 @@ "63049395 - Get same results on different request": "https://www.drupal.org/files/issues/2019-07-18/change_request_type-63049395-09.patch" }, "drupal/smart_date": { - "3260965 - Undefined index: #value": "https://www.drupal.org/files/issues/2022-01-27/smart_date_undefined_value_in_validation.patch" + "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" }, "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 56d79670e72..6b1594e47b3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e35b2933a201ef927124de02461c975c", + "content-hash": "30c608ddc1bf35bd011e4f9dd7646d16", "packages": [ { "name": "alchemy/zippy", @@ -1289,16 +1289,16 @@ }, { "name": "datadog/dd-trace", - "version": "0.90.0", + "version": "0.91.1", "source": { "type": "git", "url": "https://github.com/DataDog/dd-trace-php.git", - "reference": "ec17a97e981257d988a5dd09644ca1628784c3fb" + "reference": "2e9e3b785daafa9d092c1a03f03ac8e535a42bee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DataDog/dd-trace-php/zipball/ec17a97e981257d988a5dd09644ca1628784c3fb", - "reference": "ec17a97e981257d988a5dd09644ca1628784c3fb", + "url": "https://api.github.com/repos/DataDog/dd-trace-php/zipball/2e9e3b785daafa9d092c1a03f03ac8e535a42bee", + "reference": "2e9e3b785daafa9d092c1a03f03ac8e535a42bee", "shasum": "" }, "require": { @@ -1377,9 +1377,9 @@ ], "support": { "issues": "https://github.com/DataDog/dd-trace-php/issues", - "source": "https://github.com/DataDog/dd-trace-php/tree/0.90.0" + "source": "https://github.com/DataDog/dd-trace-php/tree/0.91.1" }, - "time": "2023-07-15T14:23:43+00:00" + "time": "2023-09-08T15:42:14+00:00" }, { "name": "davedevelopment/stiphle", @@ -10311,17 +10311,17 @@ }, { "name": "drupal/paragraphs", - "version": "1.15.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/paragraphs.git", - "reference": "8.x-1.15" + "reference": "8.x-1.16" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.15.zip", - "reference": "8.x-1.15", - "shasum": "2ed2d3199553010fa1c500181bbebe676e9e60c1" + "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.16.zip", + "reference": "8.x-1.16", + "shasum": "48f60810fd8086a52d56e84af8b212cce7a270e8" }, "require": { "drupal/core": "^9.3 || ^10", @@ -10345,8 +10345,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.15", - "datestamp": "1661440897", + "version": "8.x-1.16", + "datestamp": "1694007797", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -20625,33 +20625,34 @@ }, { "name": "simplesamlphp/assert", - "version": "v1.0.5", + "version": "v0.0.13", "source": { "type": "git", "url": "https://github.com/simplesamlphp/assert.git", - "reference": "014d722cd2fc316e458a982648f10e17ab498c92" + "reference": "5429921b320ca4f9d1844225884ac52f649ea1e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/assert/zipball/014d722cd2fc316e458a982648f10e17ab498c92", - "reference": "014d722cd2fc316e458a982648f10e17ab498c92", + "url": "https://api.github.com/repos/simplesamlphp/assert/zipball/5429921b320ca4f9d1844225884ac52f649ea1e3", + "reference": "5429921b320ca4f9d1844225884ac52f649ea1e3", "shasum": "" }, "require": { - "ext-date": "*", - "ext-filter": "*", - "ext-pcre": "*", "ext-spl": "*", - "php": "^8.0", - "webmozart/assert": "^1.11" + "php": "^7.1 || ^8.0", + "webmozart/assert": "^1.9" }, "require-dev": { - "simplesamlphp/simplesamlphp-test-framework": "^1.5.1" + "phpunit/phpunit": "^8.5", + "sensiolabs/security-checker": "~6.0", + "simplesamlphp/simplesamlphp-test-framework": "^0.2.7", + "squizlabs/php_codesniffer": "~3.5", + "vimeo/psalm": "~3.13" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "v1.1.x-dev" + "dev-master": "v0.0.x-dev" } }, "autoload": { @@ -20676,32 +20677,28 @@ "description": "A wrapper around webmozart/assert to make it useful beyond checking method arguments", "support": { "issues": "https://github.com/simplesamlphp/assert/issues", - "source": "https://github.com/simplesamlphp/assert/tree/v1.0.5" + "source": "https://github.com/simplesamlphp/assert/tree/master" }, - "time": "2023-08-15T15:00:10+00:00" + "time": "2020-08-17T20:40:49+00:00" }, { "name": "simplesamlphp/composer-module-installer", - "version": "v1.3.4", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/simplesamlphp/composer-module-installer.git", - "reference": "36508ed9580a30c4d5ab0bb3c25c00d0b5d42946" + "reference": "27b4fe96198ffaff3ab49c87b40f4cb24de77b01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/36508ed9580a30c4d5ab0bb3c25c00d0b5d42946", - "reference": "36508ed9580a30c4d5ab0bb3c25c00d0b5d42946", + "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/27b4fe96198ffaff3ab49c87b40f4cb24de77b01", + "reference": "27b4fe96198ffaff3ab49c87b40f4cb24de77b01", "shasum": "" }, "require": { "composer-plugin-api": "^1.1 || ^2.0", "php": "^7.4 || ^8.0", - "simplesamlphp/assert": "^0.8.0 || ^1.0" - }, - "require-dev": { - "composer/composer": "^2.4", - "simplesamlphp/simplesamlphp-test-framework": "^1.2.1" + "simplesamlphp/simplesamlphp": "*" }, "type": "composer-plugin", "extra": { @@ -20719,9 +20716,9 @@ "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.", "support": { "issues": "https://github.com/simplesamlphp/composer-module-installer/issues", - "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.3.4" + "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.2.0" }, - "time": "2023-03-08T20:58:22+00:00" + "time": "2022-08-31T17:20:27+00:00" }, { "name": "simplesamlphp/saml2", @@ -20783,16 +20780,16 @@ }, { "name": "simplesamlphp/simplesamlphp", - "version": "v1.18.9", + "version": "1.19.8", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp.git", - "reference": "2bce3acb32c7e667fdf0233d4ea720e4e8cdbd32" + "reference": "a69141a45ad41b3b48f55535bafc9cd538a35b74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/2bce3acb32c7e667fdf0233d4ea720e4e8cdbd32", - "reference": "2bce3acb32c7e667fdf0233d4ea720e4e8cdbd32", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/a69141a45ad41b3b48f55535bafc9cd538a35b74", + "reference": "a69141a45ad41b3b48f55535bafc9cd538a35b74", "shasum": "" }, "require": { @@ -20805,12 +20802,13 @@ "ext-pcre": "*", "ext-spl": "*", "ext-zlib": "*", - "gettext/gettext": "^4.6", - "php": ">=5.6", - "phpmailer/phpmailer": "^6.0", - "robrichards/xmlseclibs": "^3.0.4", - "simplesamlphp/saml2": "^3.4 || ^4.0", - "simplesamlphp/simplesamlphp-module-adfs": "^0.9", + "gettext/gettext": "^4.8.7", + "php": ">=7.1|^8", + "phpmailer/phpmailer": "^6.1", + "robrichards/xmlseclibs": "^3.1", + "simplesamlphp/assert": "^0.0.13", + "simplesamlphp/saml2": "^4.5", + "simplesamlphp/simplesamlphp-module-adfs": "^1.0", "simplesamlphp/simplesamlphp-module-authcrypt": "^0.9", "simplesamlphp/simplesamlphp-module-authfacebook": "^0.9", "simplesamlphp/simplesamlphp-module-authorize": "^0.9", @@ -20822,15 +20820,15 @@ "simplesamlphp/simplesamlphp-module-cdc": "^0.9", "simplesamlphp/simplesamlphp-module-consent": "^0.9", "simplesamlphp/simplesamlphp-module-consentadmin": "^0.9", - "simplesamlphp/simplesamlphp-module-discopower": "^0.9", + "simplesamlphp/simplesamlphp-module-discopower": "^0.10", "simplesamlphp/simplesamlphp-module-exampleattributeserver": "^1.0", "simplesamlphp/simplesamlphp-module-expirycheck": "^0.9", - "simplesamlphp/simplesamlphp-module-ldap": "^0.9", + "simplesamlphp/simplesamlphp-module-ldap": "^0.9 | ^1.0", "simplesamlphp/simplesamlphp-module-memcachemonitor": "^0.9", "simplesamlphp/simplesamlphp-module-memcookie": "^1.2", - "simplesamlphp/simplesamlphp-module-metarefresh": "^0.9", + "simplesamlphp/simplesamlphp-module-metarefresh": "^0.10", "simplesamlphp/simplesamlphp-module-negotiate": "^0.9", - "simplesamlphp/simplesamlphp-module-oauth": "^0.9", + "simplesamlphp/simplesamlphp-module-oauth": "^0.9.3", "simplesamlphp/simplesamlphp-module-preprodwarning": "^0.9", "simplesamlphp/simplesamlphp-module-radius": "^0.9", "simplesamlphp/simplesamlphp-module-riak": "^0.9", @@ -20838,23 +20836,26 @@ "simplesamlphp/simplesamlphp-module-smartattributes": "^0.9", "simplesamlphp/simplesamlphp-module-sqlauth": "^0.9", "simplesamlphp/simplesamlphp-module-statistics": "^0.9", - "simplesamlphp/twig-configurable-i18n": "^2.2", - "symfony/config": "^3.4 || ^4.0", - "symfony/dependency-injection": "^3.4 || ^4.0", - "symfony/http-foundation": "^3.4 || ^4.0", - "symfony/http-kernel": "^3.4 || ^4.0", - "symfony/routing": "^3.4 || ^4.0", - "symfony/yaml": "^3.4 || ^4.0", - "twig/twig": "~1.0 || ~2.0" + "simplesamlphp/twig-configurable-i18n": "~2.3.3", + "symfony/cache": "^4.4 || ^5.0", + "symfony/config": "^4.4 || ^5.0", + "symfony/console": "^4.4 || ^5.0", + "symfony/dependency-injection": "^4.4 || ^5.0", + "symfony/finder": "^4.4 || ^5.0", + "symfony/framework-bundle": "^4.4 || ^5.0", + "symfony/http-foundation": "^4.4 || ^5.0", + "symfony/http-kernel": "^4.4 || ^5.0", + "symfony/routing": "^4.4 || ^5.0", + "symfony/var-exporter": "^4.4 || ^5.0", + "symfony/yaml": "^4.4 || ^5.0", + "twig/twig": "^2.15.3" }, "require-dev": { "ext-curl": "*", "mikey179/vfsstream": "~1.6", - "phpunit/phpunit": "~5.7", - "sensiolabs/security-checker": "^5.0.3", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.14", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "~1.1.9" + "phpunit/phpunit": "^7.5", + "simplesamlphp/simplesamlphp-test-framework": "^0.1.2", + "vimeo/psalm": "~3.14" }, "suggest": { "ext-curl": "Needed in order to check for updates automatically", @@ -20907,31 +20908,30 @@ "issues": "https://github.com/simplesamlphp/simplesamlphp/issues", "source": "https://github.com/simplesamlphp/simplesamlphp" }, - "time": "2022-03-15T22:30:22+00:00" + "time": "2023-03-02T11:44:45+00:00" }, { "name": "simplesamlphp/simplesamlphp-module-adfs", - "version": "v0.9.9", + "version": "v1.0.9", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp-module-adfs.git", - "reference": "a2349c2131f2dfe21a56eb5ede3fddd429278850" + "reference": "c47daabc262b7e14a76879015fd9db85319752ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/a2349c2131f2dfe21a56eb5ede3fddd429278850", - "reference": "a2349c2131f2dfe21a56eb5ede3fddd429278850", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-adfs/zipball/c47daabc262b7e14a76879015fd9db85319752ec", + "reference": "c47daabc262b7e14a76879015fd9db85319752ec", "shasum": "" }, "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1" + "php": ">=7.1", + "simplesamlphp/assert": "^0.0.13", + "simplesamlphp/composer-module-installer": "^1.1.7" }, "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17", - "simplesamlphp/simplesamlphp-test-framework": "^0.0.15", - "webmozart/assert": "<1.7" + "simplesamlphp/simplesamlphp": "^1.18", + "simplesamlphp/simplesamlphp-test-framework": "^0.1.2" }, "type": "simplesamlphp-module", "autoload": { @@ -20955,10 +20955,10 @@ "simplesamlphp" ], "support": { - "issues": "https://github.com/tvdijen/simplesamlphp-module-adfs/issues", - "source": "https://github.com/tvdijen/simplesamlphp-module-adfs" + "issues": "https://github.com/simplesamlphp/simplesamlphp-module-adfs/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-module-adfs" }, - "time": "2022-01-03T20:33:38+00:00" + "time": "2022-04-11T10:24:25+00:00" }, { "name": "simplesamlphp/simplesamlphp-module-authcrypt", @@ -21545,26 +21545,25 @@ }, { "name": "simplesamlphp/simplesamlphp-module-discopower", - "version": "v0.9.1", + "version": "v0.10.1", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp-module-discopower.git", - "reference": "006c0617610f1bae11cf4d17e8ce4c509239a60e" + "reference": "4cb6b7c648b455586903b8932a171397375b50b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/006c0617610f1bae11cf4d17e8ce4c509239a60e", - "reference": "006c0617610f1bae11cf4d17e8ce4c509239a60e", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-discopower/zipball/4cb6b7c648b455586903b8932a171397375b50b0", + "reference": "4cb6b7c648b455586903b8932a171397375b50b0", "shasum": "" }, "require": { - "php": ">=5.6", - "simplesamlphp/composer-module-installer": "~1.1", - "webmozart/assert": "~1.4" + "php": ">=7.1", + "simplesamlphp/composer-module-installer": "~1.1" }, "require-dev": { - "phpunit/phpunit": "~5.7", - "simplesamlphp/simplesamlphp": "^1.17" + "simplesamlphp/simplesamlphp": "^1.19", + "simplesamlphp/simplesamlphp-test-framework": "^0.1.2" }, "type": "simplesamlphp-module", "autoload": { @@ -21574,7 +21573,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0-or-later" + "LGPL-2.1-or-later" ], "authors": [ { @@ -21592,7 +21591,7 @@ "issues": "https://github.com/tvdijen/simplesamlphp-module-discopower/issues", "source": "https://github.com/tvdijen/simplesamlphp-module-discopower" }, - "time": "2019-11-27T20:34:37+00:00" + "time": "2021-08-17T14:29:22+00:00" }, { "name": "simplesamlphp/simplesamlphp-module-exampleattributeserver", @@ -21853,16 +21852,16 @@ }, { "name": "simplesamlphp/simplesamlphp-module-metarefresh", - "version": "v0.9.7", + "version": "v0.10.0", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp-module-metarefresh.git", - "reference": "ca724f0edd1179bb0056dc4561d455db7a1f1adc" + "reference": "488d7809857c274befac89facfa03520a05bc1ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/ca724f0edd1179bb0056dc4561d455db7a1f1adc", - "reference": "ca724f0edd1179bb0056dc4561d455db7a1f1adc", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-module-metarefresh/zipball/488d7809857c274befac89facfa03520a05bc1ba", + "reference": "488d7809857c274befac89facfa03520a05bc1ba", "shasum": "" }, "require": { @@ -21898,7 +21897,7 @@ "issues": "https://github.com/tvdijen/simplesamlphp-module-metarefresh/issues", "source": "https://github.com/tvdijen/simplesamlphp-module-metarefresh" }, - "time": "2022-01-06T22:45:08+00:00" + "time": "2022-05-03T08:57:30+00:00" }, { "name": "simplesamlphp/simplesamlphp-module-negotiate", @@ -22889,6 +22888,182 @@ ], "time": "2023-07-06T06:56:43+00:00" }, + { + "name": "symfony/cache", + "version": "v5.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "62b7ae3bccc5b474a30fadc7ef6bbc362007d3f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/62b7ae3bccc5b474a30fadc7ef6bbc362007d3f9", + "reference": "62b7ae3bccc5b474a30fadc7ef6bbc362007d3f9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.4.28" + }, + "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-08-05T08:32:42+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.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": "2022-01-02T09:53:40+00:00" + }, { "name": "symfony/config", "version": "v4.4.44", @@ -23643,23 +23818,22 @@ }, { "name": "symfony/finder", - "version": "v6.3.3", + "version": "v5.4.27", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -23687,7 +23861,153 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.3" + "source": "https://github.com/symfony/finder/tree/v5.4.27" + }, + "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-07-31T08:02:31+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v4.4.49", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "d8cf2558249004a29b8e27b1f6eae52337ff471b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d8cf2558249004a29b8e27b1f6eae52337ff471b", + "reference": "d8cf2558249004a29b8e27b1f6eae52337ff471b", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.1.3", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.4.11|~5.0.11|^5.1.3", + "symfony/dependency-injection": "^4.4.38|^5.0.1", + "symfony/error-handler": "^4.4.1|^5.0.1", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/routing": "^4.4.12|^5.1.4" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.0|>=3.2.0,<3.2.2", + "phpdocumentor/type-resolver": "<0.3.0|1.3.*", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/asset": "<3.4", + "symfony/browser-kit": "<4.3", + "symfony/console": "<4.4.21", + "symfony/dom-crawler": "<4.3", + "symfony/dotenv": "<4.3.6", + "symfony/form": "<4.3.5", + "symfony/http-client": "<4.4", + "symfony/lock": "<4.4", + "symfony/mailer": "<4.4", + "symfony/messenger": "<4.4", + "symfony/mime": "<4.4", + "symfony/property-info": "<3.4", + "symfony/security-bundle": "<4.4", + "symfony/serializer": "<4.4", + "symfony/stopwatch": "<3.4", + "symfony/translation": "<4.4", + "symfony/twig-bridge": "<4.1.1", + "symfony/twig-bundle": "<4.4", + "symfony/validator": "<4.4", + "symfony/web-profiler-bundle": "<4.4", + "symfony/workflow": "<4.3.6" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^2.0", + "doctrine/persistence": "^1.3|^2|^3", + "paragonie/sodium_compat": "^1.8", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/browser-kit": "^4.3|^5.0", + "symfony/console": "^4.4.42|^5.4.9", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dom-crawler": "^4.4.30|^5.3.7", + "symfony/dotenv": "^4.3.6|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/form": "^4.3.5|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/mailer": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/security-core": "^3.4|^4.4|^5.2", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/security-http": "^3.4|^4.0|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.3.6|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/twig": "^1.43|^2.13|^3.0.4" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "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": "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/v4.4.49" }, "funding": [ { @@ -23703,7 +24023,7 @@ "type": "tidelift" } ], - "time": "2023-07-31T08:31:44+00:00" + "time": "2022-11-05T15:42:31+00:00" }, { "name": "symfony/http-client", @@ -26128,6 +26448,79 @@ ], "time": "2023-08-24T13:38:36+00:00" }, + { + "name": "symfony/var-exporter", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "11401fe94f960249b3c63a488c63ba73091c1e4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/11401fe94f960249b3c63a488c63ba73091c1e4a", + "reference": "11401fe94f960249b3c63a488c63ba73091c1e4a", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.4.26" + }, + "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-07-20T07:21:16+00:00" + }, { "name": "symfony/yaml", "version": "v4.4.45", @@ -26446,16 +26839,16 @@ }, { "name": "va-gov/content-build", - "version": "v0.0.3338", + "version": "v0.0.3342", "source": { "type": "git", "url": "https://github.com/department-of-veterans-affairs/content-build.git", - "reference": "f8310204c13e9c44466232f0d34cf1c627f34ce3" + "reference": "3f7e50cd6da7f6d19fb09fb129db7e264af89d66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/f8310204c13e9c44466232f0d34cf1c627f34ce3", - "reference": "f8310204c13e9c44466232f0d34cf1c627f34ce3", + "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/3f7e50cd6da7f6d19fb09fb129db7e264af89d66", + "reference": "3f7e50cd6da7f6d19fb09fb129db7e264af89d66", "shasum": "" }, "type": "node-project", @@ -26482,9 +26875,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.3338" + "source": "https://github.com/department-of-veterans-affairs/content-build/tree/v0.0.3342" }, - "time": "2023-08-31T18:44:54+00:00" + "time": "2023-09-08T18:36:45+00:00" }, { "name": "vlucas/phpdotenv", diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index 01cb8eb29f0..0ea62237068 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -255,6 +255,7 @@ module: va_gov_graphql: 0 va_gov_help_center: 0 va_gov_links: 0 + va_gov_live_field_migration: 0 va_gov_login: 0 va_gov_lovell: 0 va_gov_magichead: 0 diff --git a/docroot/modules/custom/va_gov_events/src/Plugin/Validation/Constraint/NonZeroEventDateConstraint.php b/docroot/modules/custom/va_gov_events/src/Plugin/Validation/Constraint/NonZeroEventDateConstraint.php new file mode 100644 index 00000000000..381a1817fa2 --- /dev/null +++ b/docroot/modules/custom/va_gov_events/src/Plugin/Validation/Constraint/NonZeroEventDateConstraint.php @@ -0,0 +1,24 @@ +rrule; + if (isset($rruleId)) { + $rrule = SmartDateRule::load($rruleId); + $instances = $rrule->getRuleInstances(); + if (count($instances) < 1) { + $this->context->buildViolation($constraint->errorMessage)->atPath((string) '0.make_recurring')->addViolation(); + } + } + } + +} diff --git a/docroot/modules/custom/va_gov_events/va_gov_events.module b/docroot/modules/custom/va_gov_events/va_gov_events.module index fa3b9cef93a..a35076167cd 100644 --- a/docroot/modules/custom/va_gov_events/va_gov_events.module +++ b/docroot/modules/custom/va_gov_events/va_gov_events.module @@ -5,6 +5,7 @@ * Contains va_gov_events.module. */ +use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Routing\RouteMatchInterface; @@ -45,3 +46,14 @@ function _va_gov_events_move_country_select_to_bottom(array $form) { $form['country_code']['#weight'] = 100; return $form; } + +/** + * Implements hook_entity_bundle_field_info_alter(). + */ +function va_gov_events_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) { + if ($entity_type->id() === 'node' && $bundle === 'event') { + if (isset($fields['field_datetime_range_timezone'])) { + $fields['field_datetime_range_timezone']->addConstraint('NonZeroEventDate', []); + } + } +} diff --git a/docroot/modules/custom/va_gov_live_field_migration/drush.services.yml b/docroot/modules/custom/va_gov_live_field_migration/drush.services.yml new file mode 100644 index 00000000000..e3f89e571a4 --- /dev/null +++ b/docroot/modules/custom/va_gov_live_field_migration/drush.services.yml @@ -0,0 +1,6 @@ +services: + va_gov_live_field_migration.commands: + class: \Drupal\va_gov_live_field_migration\Commands\Commands + arguments: [] + tags: + - { name: drush.command } diff --git a/docroot/modules/custom/va_gov_live_field_migration/src/Commands/Commands.php b/docroot/modules/custom/va_gov_live_field_migration/src/Commands/Commands.php new file mode 100644 index 00000000000..8692f1ae75b --- /dev/null +++ b/docroot/modules/custom/va_gov_live_field_migration/src/Commands/Commands.php @@ -0,0 +1,130 @@ +output()->writeln('Error: ' . $exception->getMessage()); + } + finally { + $elapsedTime = microtime(TRUE) - $startTime; + $peakMemoryUsage = memory_get_peak_usage(); + $this->output()->writeln('Elapsed time: ' . number_format($elapsedTime, 2) . ' seconds'); + $this->output()->writeln('Peak memory usage: ' . number_format($peakMemoryUsage / 1024 / 1024, 2) . ' MB'); + } + } + + /** + * Migrate a specific field on a specific content type. + * + * @param string $entityType + * The entity type. + * @param string $bundle + * The entity bundle or content type. + * @param string $fieldName + * The field name. + * + * @command va-gov-live-field-migration:migrate-field + * @aliases va-gov-live-field-migration-migrate-field + */ + public function migrateField( + string $entityType, + string $bundle, + string $fieldName + ) { + $this->performOperation(function () use ($entityType, $bundle, $fieldName) { + $this->output()->writeln('Migrating field ' . $fieldName . ' on ' . $entityType . ' ' . $bundle); + // Logic for the migration. + $this->output()->writeln('Migration successful.'); + }); + } + + /** + * Rollback a specific field on a specific content type. + * + * @param string $entityType + * The entity type. + * @param string $bundle + * The entity bundle or content type. + * @param string $fieldName + * The field name. + * + * @command va-gov-live-field-migration:rollback-field + * @aliases va-gov-live-field-migration-rollback-field + */ + public function rollbackField( + string $entityType, + string $bundle, + string $fieldName + ) { + $this->performOperation(function () use ($entityType, $bundle, $fieldName) { + $this->output()->writeln('Rolling back field ' . $fieldName . ' on ' . $entityType . ' ' . $bundle); + // Logic for the rollback. + $this->output()->writeln('Rollback successful.'); + }); + } + + /** + * Verify a migration completed successfully. + * + * @param string $entityType + * The entity type. + * @param string $bundle + * The entity bundle or content type. + * @param string $fieldName + * The field name. + * + * @command va-gov-live-field-migration:verify + * @aliases va-gov-live-field-migration-verify + */ + public function verify( + string $entityType, + string $bundle, + string $fieldName + ) { + $this->performOperation(function () use ($entityType, $bundle, $fieldName) { + $this->output()->writeln('Verifying field ' . $fieldName . ' on ' . $entityType . ' ' . $bundle); + // Logic for the verification. + $this->output()->writeln('Verification successful.'); + }); + } + + /** + * Find fields that haven't been migrated yet. + * + * @param string $entityType + * The entity type. + * @param string $bundle + * The entity bundle or content type. + * + * @command va-gov-live-field-migration:find + * @aliases va-gov-live-field-migration-find + */ + public function find( + string $entityType, + string $bundle + ) { + $this->performOperation(function () use ($entityType, $bundle) { + $this->output()->writeln('Finding fields on ' . $entityType . ' ' . $bundle); + // Logic for finding fields. + }); + } + +} diff --git a/docroot/modules/custom/va_gov_live_field_migration/va_gov_live_field_migration.info.yml b/docroot/modules/custom/va_gov_live_field_migration/va_gov_live_field_migration.info.yml new file mode 100644 index 00000000000..c29590b780c --- /dev/null +++ b/docroot/modules/custom/va_gov_live_field_migration/va_gov_live_field_migration.info.yml @@ -0,0 +1,6 @@ +name: 'VA.gov Live Field Migration' +type: module +description: 'Helper functionality for live field migrations.' +core_version_requirement: ^9 || ^10 +package: 'Custom' +dependencies: [] diff --git a/docroot/modules/custom/va_gov_live_field_migration/va_gov_live_field_migration.module b/docroot/modules/custom/va_gov_live_field_migration/va_gov_live_field_migration.module new file mode 100644 index 00000000000..31cddced81e --- /dev/null +++ b/docroot/modules/custom/va_gov_live_field_migration/va_gov_live_field_migration.module @@ -0,0 +1,6 @@ +