diff --git a/.github/ISSUE_TEMPLATE/pw-clp-request.md b/.github/ISSUE_TEMPLATE/pw-clp-request.md index 11d040cac..76fe9cc15 100644 --- a/.github/ISSUE_TEMPLATE/pw-clp-request.md +++ b/.github/ISSUE_TEMPLATE/pw-clp-request.md @@ -25,15 +25,6 @@ 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 74ac8979a..3c8ffe11e 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@12d225bf2f764e5103a994157c1316df39dc3fae # v1.68.0 + uses: int128/datadog-actions-metrics@56be1c4bf92adece9d10f7fef4ba48bccf8e8c81 # v1.77.0 with: datadog-api-key: ${{ secrets.DATADOG_API_KEY }} collect-job-metrics: true diff --git a/.github/workflows/gha-diagnostics.yml b/.github/workflows/gha-diagnostics.yml new file mode 100644 index 000000000..fe1b3d8d1 --- /dev/null +++ b/.github/workflows/gha-diagnostics.yml @@ -0,0 +1,20 @@ +name: Diagnose github context +on: + pull_request: + types: + - opened + - reopened + - synchronize + - closed + paths-ignore: + - '**.md' + +jobs: + gha_diagnostics: + runs-on: ubuntu-latest + name: Diagnose github context + steps: + - name: Dump GitHub context + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + run: echo "$GITHUB_CONTEXT" \ No newline at end of file diff --git a/.github/workflows/tugboat-dispatch.yml b/.github/workflows/tugboat-dispatch.yml new file mode 100644 index 000000000..bdf56d4bc --- /dev/null +++ b/.github/workflows/tugboat-dispatch.yml @@ -0,0 +1,107 @@ +name: Dispatch Tugboat API Calls +on: + workflow_dispatch: + inputs: + action: + type: choice + description: 'Tugboat API action' + options: + - create + - rebuild + - delete + required: true + pr_number: + type: number + description: 'The pull request number to take action on' + required: true + pr_title: + type: string + description: 'The pull request title for creating previews, requied for creation' + required: false +jobs: + dispatch_tugboat_api: + runs-on: self-hosted + env: + NODE_EXTRA_CA_CERTS: /etc/ssl/certs/ca-certificates.crt + name: Dispatch Tugboat API Calls + steps: + # Setup + - name: Confirm Workflow Inputs + run: | + echo "Action: ${{ inputs.action }} PR Number: ${{ inputs.pr_number }} PR Title: ${{ inputs.pr_title }}" + + # Restore Preview ID for non-creation actions + - name: Restore Preview ID + if: ${{ inputs.action != 'create' }} + uses: actions/cache/restore@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 + with: + path: .tugboat_preview.txt + key: ${{ runner.os }}-tugboat-preview-id-pr-${{ inputs.pr_number }} + - name: Set Preview ID + if: ${{ inputs.action != 'create' }} + run: | + if ! [ -f .tugboat_preview.txt ]; then + echo "Preview ID not found, please contact platform-cms-qa on Github or CMS QA Engineers in #cms-support on Slack for assistance." + exit 1 + fi + PREVIEW_ID=$(cat .tugboat_preview.txt) + echo "Preview ID: ${PREVIEW_ID}" + echo "PREVIEW_ID=$PREVIEW_ID" >> $GITHUB_ENV + + # Make API calls + - name: Create Tugboat Preview + id: tugboat_pr_preview + if: ${{ inputs.action == 'create' }} + run: | + curl --fail \ + -H "Authorization: Bearer ${{ secrets.TUGBOAT_API_TOKEN }}" \ + -H "Content-Type: application/json" \ + -X POST \ + -d '{ "repo": "${{ secrets.TUGBOAT_REPOSITORY }}", "ref": "${{ inputs.pr_number }}", "name": "${{ inputs.pr_title }}", "type": "pullrequest" }' \ + -o .tugboat_response.json \ + https://api.tugboat.vfs.va.gov/v3/previews + - name: Rebuild Tugboat Preview + if: ${{ inputs.action == 'rebuild' }} + run: | + curl --fail \ + -H "Authorization: Bearer ${{ secrets.TUGBOAT_API_TOKEN }}" \ + -H "Content-Type: application/json" \ + -X POST \ + -d '{ "children": "false", "force": "false" }' \ + https://api.tugboat.vfs.va.gov/v3/previews/${{ env.PREVIEW_ID }}/rebuild + - name: Delete Tugboat Preview + if: ${{ inputs.action == 'delete' }} + run: | + curl --fail \ + -H "Authorization: Bearer ${{ secrets.TUGBOAT_API_TOKEN }}" \ + -H "Content-Type: application/json" \ + -X DELETE \ + -d '{ "force": "false" }' \ + https://api.tugboat.vfs.va.gov/v3/previews/${{ env.PREVIEW_ID }} + + # Store Preview ID in cache on creation + - name: Extract Preview ID + if: ${{ inputs.action == 'create' }} + run: jq -r .preview .tugboat_response.json > .tugboat_preview.txt + - name: Confirm Preview ID + if: ${{ inputs.action == 'create' }} + run: cat .tugboat_preview.txt + - name: Delete Previous Preview ID + continue-on-error: true + uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 + with: + script: | + await github.rest.actions.deleteActionsCacheByKey({ + owner: context.repo.owner, + repo: context.repo.repo, + key: `${{ runner.os }}-tugboat-preview-id-pr-${{ inputs.pr_number }}`, + }); + - name: Save Preview ID + uses: actions/cache/save@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 + with: + path: .tugboat_preview.txt + key: ${{ runner.os }}-tugboat-preview-id-pr-${{ inputs.pr_number }} + + # Cleanup + - name: Cleanup temporary file + run: rm .tugboat_preview.txt diff --git a/.github/workflows/tugboat-pr-closed.yml b/.github/workflows/tugboat-pr-closed.yml index fe8e7da61..13b5fe8fa 100644 --- a/.github/workflows/tugboat-pr-closed.yml +++ b/.github/workflows/tugboat-pr-closed.yml @@ -8,32 +8,21 @@ on: jobs: tugboat_delete_preview: - runs-on: self-hosted - env: - NODE_EXTRA_CA_CERTS: /etc/ssl/certs/ca-certificates.crt + runs-on: ubuntu-latest name: Delete Tugboat Preview steps: - - name: Restore Preview ID - uses: actions/cache/restore@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.3 + - name: Dispatch Tugboat Preview Deletion + continue-on-error: true + uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: - path: .tugboat_preview.txt - key: ${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }} - - name: Set Preview ID - run: | - if ! [ -f .tugboat_preview.txt ]; then - echo "Preview ID not found, please manually delete Tugboat Preview. Contact platform-cms-qa on Github or CMS QA Engineers in #cms-support on Slack for assistance." - exit 1 - fi - PREVIEW_ID=$(cat .tugboat_preview.txt) - echo "Preview ID: ${PREVIEW_ID}" - echo "PREVIEW_ID=$PREVIEW_ID" >> $GITHUB_ENV - - name: Cleanup temporary file - run: rm .tugboat_preview.txt - - name: Delete Tugboat Preview - run: | - curl --fail \ - -H "Authorization: Bearer ${{ secrets.TUGBOAT_API_TOKEN }}" \ - -H "Content-Type: application/json" \ - -X DELETE \ - -d '{ "force": "false" }' \ - https://api.tugboat.vfs.va.gov/v3/previews/${{ env.PREVIEW_ID }} \ No newline at end of file + script: | + await github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'tugboat-dispatch.yml', + ref: 'main', + inputs: { + action: 'delete', + pr_number: '${{ github.event.pull_request.number }}', + } + }); diff --git a/.github/workflows/tugboat-pr-opened.yml b/.github/workflows/tugboat-pr-opened.yml index 25ec18f29..327287a40 100644 --- a/.github/workflows/tugboat-pr-opened.yml +++ b/.github/workflows/tugboat-pr-opened.yml @@ -9,39 +9,22 @@ on: jobs: tugboat_create_preview: - runs-on: self-hosted - env: - NODE_EXTRA_CA_CERTS: /etc/ssl/certs/ca-certificates.crt + runs-on: ubuntu-latest name: Create Tugboat Preview steps: - - name: Create Tugboat Preview - id: tugboat_pr_preview - run: | - curl --fail \ - -H "Authorization: Bearer ${{ secrets.TUGBOAT_API_TOKEN }}" \ - -H "Content-Type: application/json" \ - -X POST \ - -d '{ "repo": "${{ secrets.TUGBOAT_REPOSITORY }}", "ref": "${{ github.event.pull_request.number }}", "name": "${{ github.event.pull_request.title }}", "type": "pullrequest" }' \ - -o .tugboat_response.json \ - https://api.tugboat.vfs.va.gov/v3/previews - - name: Diagnostics - run: cat .tugboat_response.json - - name: Extract Preview ID - run: jq -r .preview .tugboat_response.json > .tugboat_preview.txt - - name: Delete Previous Preview ID + - name: Dispatch Tugboat Preview Creation continue-on-error: true uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: script: | - await github.rest.actions.deleteActionsCacheByKey({ + await github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, - key: `${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }}`, + workflow_id: 'tugboat-dispatch.yml', + ref: 'main', + inputs: { + action: 'create', + pr_number: '${{ github.event.pull_request.number }}', + pr_title: '${{ github.event.pull_request.title }}', + } }); - - name: Save Preview ID - 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 }} - - name: Cleanup temporary file - run: rm .tugboat_preview.txt \ No newline at end of file diff --git a/.github/workflows/tugboat-pr-updated.yml b/.github/workflows/tugboat-pr-updated.yml index 44adbe87e..2c855898b 100644 --- a/.github/workflows/tugboat-pr-updated.yml +++ b/.github/workflows/tugboat-pr-updated.yml @@ -8,32 +8,21 @@ on: jobs: tugboat_rebuild_preview: - runs-on: self-hosted - env: - NODE_EXTRA_CA_CERTS: /etc/ssl/certs/ca-certificates.crt + runs-on: ubuntu-latest name: Rebuild Tugboat Preview steps: - - name: Restore Preview ID - uses: actions/cache/restore@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.3 + - name: Dispatch Tugboat Preview Rebuild + continue-on-error: true + uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: - path: .tugboat_preview.txt - key: ${{ runner.os }}-tugboat-preview-id-pr-${{ github.event.pull_request.number }} - - name: Set Preview ID - run: | - if ! [ -f .tugboat_preview.txt ]; then - echo "Preview ID not found, please manually rebuild Tugboat Preview. Contact platform-cms-qa on Github or CMS QA Engineers in #cms-support on Slack for assistance." - exit 1 - fi - PREVIEW_ID=$(cat .tugboat_preview.txt) - echo "Preview ID: ${PREVIEW_ID}" - echo "PREVIEW_ID=$PREVIEW_ID" >> $GITHUB_ENV - - name: Cleanup temporary file - run: rm .tugboat_preview.txt - - name: Rebuild Tugboat Preview - run: | - curl --fail \ - -H "Authorization: Bearer ${{ secrets.TUGBOAT_API_TOKEN }}" \ - -H "Content-Type: application/json" \ - -X POST \ - -d '{ "children": "false", "force": "false" }' \ - https://api.tugboat.vfs.va.gov/v3/previews/${{ env.PREVIEW_ID }}/rebuild \ No newline at end of file + script: | + await github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'tugboat-dispatch.yml', + ref: 'main', + inputs: { + action: 'rebuild', + pr_number: '${{ github.event.pull_request.number }}', + } + }); diff --git a/.github/workflows/tugboat-refresh-cache-responder.yml b/.github/workflows/tugboat-refresh-cache-responder.yml deleted file mode 100644 index 1e87d3d98..000000000 --- a/.github/workflows/tugboat-refresh-cache-responder.yml +++ /dev/null @@ -1,29 +0,0 @@ - - -name: Refresh Tugboat Preview ID Cache -on: - pull_request: - types: [ labeled ] -jobs: - refresh_cache: - name: Refresh Tugboat Preview ID Cache - runs-on: ubuntu-latest - if: ${{ github.event.label.name == 'refresh-tugboat-cache' }} - steps: - - name: Refresh Preview ID - 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 }} - - name: Cleanup temporary file - run: rm .tugboat_preview.txt - - name: Remove refresh label - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 - with: - script: | - await github.rest.issues.removeLabel({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: ${{ github.event.pull_request.number }}, - name: 'refresh-tugboat-cache', - }); diff --git a/.github/workflows/tugboat-refresh-cache-dispatch.yml b/.github/workflows/tugboat-refresh-cache.yml similarity index 58% rename from .github/workflows/tugboat-refresh-cache-dispatch.yml rename to .github/workflows/tugboat-refresh-cache.yml index efba64d67..5c790cb23 100644 --- a/.github/workflows/tugboat-refresh-cache-dispatch.yml +++ b/.github/workflows/tugboat-refresh-cache.yml @@ -5,14 +5,16 @@ on: - cron: '0 */6 * * *' jobs: # Collects the cache keys that need to be refreshed - dispatch_cache_keys: - name: Dispatch Tugboat Preview ID cache keys that need to be refreshed + collect_cache_keys: + name: Collect Tugboat Preview ID cache keys that need to be refreshed + outputs: + matrix: ${{ steps.cache-keys.outputs.result }} runs-on: ubuntu-latest steps: - name: Cross reference open PRs against cache keys in repo + id: cache-keys uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: - github-token: ${{ secrets.LABEL_API_TOKEN }} script: | const prs = await github.paginate( github.rest.pulls.list, @@ -23,11 +25,9 @@ jobs: }, (response) => response.data.map((pr) => pr.number) ) - for (const pr of prs) { console.log(`PR: ${pr}`) } - const cacheKeys = await github.paginate( github.rest.actions.getActionsCacheList, { @@ -36,19 +36,34 @@ jobs: }, (response) => response.data.map((cache) => cache.key) ) - for (const key of cacheKeys) { console.log(`Key: ${key}`) } - + const toRefresh = [] for (const pr of prs) { if (cacheKeys.includes(`${{ runner.os }}-tugboat-preview-id-pr-${pr}`)) { console.log(`Need to refresh: ${pr}`) - await github.rest.issues.addLabels({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: `${pr}`, - labels: ['refresh-tugboat-cache'], - }); + toRefresh.push(pr) } } + const result = JSON.stringify(toRefresh) + console.log(`Refresh Keys: ${result}`) + return result + result-encoding: string + + # Refresh cache for given keys + refresh_cache: + name: Refresh cache for given keys + needs: [ collect_cache_keys ] + runs-on: ubuntu-latest + strategy: + matrix: + value: ${{fromJSON(needs.collect_cache_keys.outputs.matrix)}} + steps: + - name: Refresh Preview ID + uses: actions/cache/restore@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + with: + path: .tugboat_preview.txt + key: ${{ runner.os }}-tugboat-preview-id-pr-${{ matrix.value }} + - name: Cleanup temporary file + run: rm .tugboat_preview.txt diff --git a/READMES/devops/aws-assets.md b/READMES/devops/aws-assets.md deleted file mode 100644 index 4d6c74ff0..000000000 --- a/READMES/devops/aws-assets.md +++ /dev/null @@ -1,18 +0,0 @@ -# AWS Assets - -This is a list of some generic AWS assets that are not directly traceable to this team, i.e. they are not managed in Terraform or other IaC. The purpose of this document is to clarify ownership and collect relevant information so that these assets are more discoverable and their _raison d'être_ more transparent. - -## IAM Users (Service Accounts) - -The following were added in #5611 to work with certain S3 buckets; these are intended to allow transfer of files from CMS file stores to an S3 bucket designated for public access to those files. These systems are not fully in place yet, but are in progress. - -- `svc-dsva-vagov-cms-dev-assets` -- `svc-dsva-vagov-prod-cms-files` -- `svc-dsva-vagov-prod-cms-test-files` -- `svc-dsva-vagov-staging-cms-files` -- `svc-dsva-vagov-staging-cms-test-files` - -The following account may be necessary for GitHub Actions workflows (currently under the purview of Accelerated Publishing) to interact with AWS resources. - -- `svc-gh-vagov-ap-user` - diff --git a/READMES/devops/tugboat.md b/READMES/devops/tugboat.md index c2446d761..bb0ab10c4 100644 --- a/READMES/devops/tugboat.md +++ b/READMES/devops/tugboat.md @@ -33,23 +33,3 @@ 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/tugboat.md b/READMES/tugboat.md index 164ad35fe..856c92555 100644 --- a/READMES/tugboat.md +++ b/READMES/tugboat.md @@ -3,25 +3,25 @@ ## Summary of Tugboat [Tugboat](https://www.tugboat.qa) (SOCKS required to access) is a fast, modern Preview Environment creation tool based on containers ([Docker Swarm](https://docs.docker.com/engine/swarm/)). Tugboat creates "Previews" which are environments that you can test proposed code changes in, login with a web shell, and view logs in the UI. Each Preview is built from a Base Preview. -At VA, Tugboat is used primarily in conjunction with the CMS and content-build. It's helpful to understand a couple of basic terms from Tugboat, to make clear how lower environments receive their data. +At VA, Tugboat is used primarily in conjunction with the CMS and content-build. It's helpful to understand a couple of basic terms from Tugboat, to make clear how lower environments receive their data. -Tugboat contains **Projects**. Each Project can contain **Repositories** (not related to Github). Each Repository then has a **Base Preview**, and **Previews**. +Tugboat contains **Projects**. Each Project can contain **Repositories** (not related to Github). Each Repository then has a **Base Preview**, and **Previews**. * **Previews**, or PR Previews, are the built environments you interact with for a given set of Pull Request (PR) changes. -* **Base Preview** -Take the term Base to mean bottom or foundation: Base Preview is a container, built from a versioned state of the CMS code, with a production database snapshot baked in. Tugboat uses Base Previews to make PR Preview creation quick and disk storage efficient. After a 30-40min build, Base Previews are ready to layer va.gov-cms code changes on top and run post-deploy operations (updatedb, config:import). +* **Base Preview** +Take the term Base to mean bottom or foundation: Base Preview is a container, built from a versioned state of the CMS code, with a production database snapshot baked in. Tugboat uses Base Previews to make PR Preview creation quick and disk storage efficient. After a 30-40min build, Base Previews are ready to layer va.gov-cms code changes on top and run post-deploy operations (updatedb, config:import). ## VA Usage -At VA, our lower environments are each built from a Tugboat Base Preview, in some fashion. Our Tugboat configuration is relevant to the discussion: +At VA, our lower environments are each built from a Tugboat Base Preview, in some fashion. Our Tugboat configuration is relevant to the discussion: -1. **Project**: [CMS PROD Mirrors](https://tugboat.vfs.va.gov/6042eeed6a89948104399d3c) - 1. **Repository**: [Mirrors](https://tugboat.vfs.va.gov/6042eeed6a89945a99399d3d) +1. **Project**: [CMS PROD Mirrors](https://tugboat.vfs.va.gov/6042eeed6a89948104399d3c) + 1. **Repository**: [Mirrors](https://tugboat.vfs.va.gov/6042eeed6a89945a99399d3d) 1. **Base Preview**: Built daily at 7am UTC (2am EST, 1am EDT). This data will then be used on Staging until the next time this Base Preview is refreshed. 2. **Previews**: [content-build-branch-builds](https://tugboat.vfs.va.gov/6189a9af690c68dad4877ea5) — This Prod mirror snapshot of code + data backups is the base for building Staging. 1. **Project**: [CMS](https://tugboat.vfs.va.gov/5fd3b8ee7b465711575722d5) 1. **Repository**: [CMS Demo Environments](https://tugboat.vfs.va.gov/5ffe2f4dfa1ca136135134f6) — Is used for building Demo & Training Previews, manually triggered. 2. **Repository**: [CMS Pull Request Environments](https://tugboat.vfs.va.gov/5fd3b8ee7b4657022b5722d6) — Is used for managing PR Previews, automatically triggered by Pull Requests in va.gov-cms or content-build repos. 1. **Base Preview**: Built nightly at 10am UTC (5am EST, 4am EDT). This data will then be used for all va.gov-cms and content-build PR Preview envs until the next time this Base Preview is refreshed. - + **Refresh**: * .tugboat/config.ymlPHP and MySQL update commands * loads the latest Database and Asset file snapshot from AWS S3. @@ -31,37 +31,20 @@ Each Repository's Base Preview image is refreshed on a daily schedule, which dow ## Other environments' uses of Tugboat and data [Environments & the Content Build Process](https://github.com/department-of-veterans-affairs/va.gov-cms/blob/main/READMES/environments.md) (Github) -## Getting started with CMS Pull Request Preview Environments +## Getting started with CMS Pull Request Preview Environments 1. Log in to the Tugboat dashboard (internal) https://tugboat.vfs.va.gov. When you first log in with GitHub, you need to wait up to 2 minutes for your user account to be granted access to project(s) by a cron script that runs every minute (we are working on making this instant eventually). After you have waited the 2 minutes: 1. Click the "CMS" project then click "CMS Pull Request Environments" 1. Make a pull request -1. A "Deployment in Progress" message will appear on your GitHub Pull Request, and you will see a new environment appear simultaneously in the Tugboat dashboard. With the dashboard you can view the preview environment system logs or launch a "terminal" to modify code and/or run drush commands etc. +1. A "Deployment in Progress" message will appear on your GitHub Pull Request, and you will see a new environment appear simultaneiously in the Tugboat dashboard. With the dashboard you can view the preview environment system logs or launch a "terminal" to modify code and/or run drush commands etc. 1. Within 3 minutes a your new preview environment should be created and a GitHub comment will be posted with links to your environment(s) for testing, this includes a WEB (web-\*) link that builds the static site for testing. The WEB environment will take a while to build and will only be stable after all tests pass. 1. After the GitHub comment is posted with your environment links, tests will start running and the checks in the GitHub status check section will switch from "Expected" to "Pending", this test run step will take closer to 30+ minutes to complete. -### Integration with GitHub Actions (GHA) - -The following section describes the technical details of how the automation is implemented which will likely be unnecessary to know by most developers or collaborators in this repository. The automation is implemented using the Tugboat REST API and GHA automation and is only triggered for PRs involving code changes. Documentation only PRs will not trigger the CI and have all checks marked as completed immediately. The three main workflows responsible for the Tugboat preview automation are: - -- [tugboat-pr-opened.yml](../.github/workflows/tugboat-pr-opened.yml) for creating new Tugboat previews PRs are opened or reopened. -- [tugboat-pr-updated.yml](../.github/workflows/tugboat-pr-updated.yml) for rebuilding Tugboat previews PRs are updated. -- [tugboat-pr-closed.yml](../.github/workflows/tugboat-pr-closed.yml) for deleting new Tugboat previews PRs are merged or closed. - -These workflows use the environment variables `TUGBOAT_API_TOKEN` and `TUGBOAT_REPOSITORY` to interact with the Tugboat REST API. These tokens are obtained from https://tugboat.vfs.va.gov/. Since the Tugboat REST API is stateless, to ensure the same preview is rebuilt and deleted upon updating or closing the PR, the Tugboat Preview ID must be maintained for each PR. This is achieved using [GitHub Actions Cache](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows). The Preview ID is written by the `tugboat-pr-opened.yml` workflow and the same Preview ID is used by the subsequent `tugboat-pr-updated.yml` and `tugboat-pr-closed.yml` workflows. - -There are several limitations given that GHA Cache evicts entries older than 7 days or the oldest entries if the cache is full. To ensure the Tugboat Preview IDs are not lost by the automated eviction mechanism, the Preview ID entries are refreshed periodically. Due to the GHA limitation that all `cron` triggered workflows are executed from the `main` branch while each GHA Cache entry can only be accessed within the PR branch's scope, a two step mechanism is required. For more details, see [#16561](https://github.com/department-of-veterans-affairs/va.gov-cms/issues/16561). The two workflows responsible for periodically refreshing the cache are: - -- [tugboat-refresh-cache-dispatch.yml](../.github/workflows/tugboat-refresh-cache-dispatch.yml) for periodically checking which cache entries need to be refreshed and notifying those PRs to refresh their caches. -- [tugboat-refresh-cache-responder.yml](../.github/workflows/tugboat-refresh-cache-responder.yml) for refreshing the cached Tugboat Preview ID entry in the GHA Cache. - -The notification mechanism between these workflows uses PR labels which can be noisy and requires a separate GITHUB Access Token `LABEL_API_TOKEN` with three permissions listed [here](https://github.com/department-of-veterans-affairs/va.gov-cms/pull/16562#discussion_r1435370089). In the future, alternative designs may be explored to alleviate these issues. - ## Getting started with CMS Demo Preview Environments ### Maintenance and retention policy -1. Demo Preview Environments that are inactive for 30 days are subject to deletion. Run the "Lock" operation to prevent this from happening. +1. Demo Preview Environments that are inactive for 30 days are subject to deletion. Run the "Lock" operation to prevent this from happening. 1. Demo environments must follow this naming pattern: 1. For VAMC Systems - ` health care`. E.g. Alexandria health care. 1. For other CMS products - ``. E.g. Resources and support @@ -84,7 +67,7 @@ The notification mechanism between these workflows uses PR labels which can be n 1. Enter new environment name . 1. Do not change any other settings. 1. Click "Save Configuration", then "Back to Preview". - + You have created a new CMS Demo Preview Environment. ### Human-friendly URLs for CMS Demo Preview Environments @@ -107,11 +90,11 @@ For example, when creating the 'Wilmington health care' demo environment, these ## Tips -1. Refresh, Rebuild and Reset operations. +1. Refresh, Rebuild and Reset operations. Learn more at https://docs.tugboat.qa/building-a-preview/preview-deep-dive/how-previews-work. Below is a quick summary that might help clarify 1. Refresh: Starts at "update" stage, then "build" stage, then "online" stage, see .tugboat/config.yml. "Refresh" is what you want to run to just get a fresh database snapshot (think (re)fresh database) and file asset import from recent production backups. ~10 minutes - 1. Rebuild: Starts at "build" stage, then "online" stage, see .tugboat/config.yml. "Rebuild" does not sync the latests database snapshot and file assets. ~3 minutes - 1. Reset: Resets your database and code to the state it was when the Preview environment was created. <1 minute + 1. Rebuild: Starts at "build" stage, then "online" stage, see .tugboat/config.yml. "Rebuild" does not sync the latests database snapshot and file assets. ~3 minutes + 1. Reset: Resets your database and code to the state it was when the Preview environment was created. <1 minute 1. Clone: Clones the Preview Environment of the database and codebase/filesystem state at the time it was created, and not the current state. <1 minute 1. Environments are deleted on a PR merge/close by default. "Lock" the environment to prevent deletion. 1. There should only be one "Base Preview" built on main @@ -139,7 +122,7 @@ For example, when creating the 'Wilmington health care' demo environment, these | Scroll the logs. | This is not possible in the Tugboat UI, use `tugboat log ` to grep or scroll. | | Run more advanced commands with the `tugboat` tool on the proxy | See the "Tugboat's CLI tool for software engineers" section of this document. | | Want to get the latest .env file | Run a "Refresh" to run the "Build" stage which re-generates the .env file with latest ENV variables. | -| Use a branch as a base preview for further PRs that will be merged into that branch | Push the base preview branch upstream, then go to branches and click "Build Preview". From that preview, click "Preview Settings", select "Use this preview as a Base Preview", then select "Branch Base Preview". PRs representing branches based on the base preview branch will then create previews that use that base preview.| +| Use a branch as a base preview for further PRs that will be merged into that branch | Push the base preview branch upstream, then go to branches and click "Build Preview". From that preview, click "Preview Settings", select "Use this preview as a Base Preview", then select "Branch Base Preview". PRs representing branches based on the base preview branch will then create previews that use that base preview.| | Send an email and capture it in the Tugboat interface | Manually update the email address of the user in question.| | Make changes in the `init` section of `.tugboat/config.yml` | This will require a manual explicit **rebuild** of the base preview image.| @@ -160,9 +143,8 @@ For example, when creating the 'Wilmington health care' demo environment, these ## Known issues 1. The generated URLs have only been observed to change when the file .tugboat/config.yml is modified by changing the name of a defined service, or changes the default service. -1. You cannot search logs with a browser right now, it is a known issue. The alternative is to use the `tugboat` CLI tool to view logs. e.g. `tugboat log 6148dc56690c680da87db5f2 | grep -i 'error'`. You can get the service ID from the URL bar in the UI. -1. You cannot scroll the logs while they are outputting, you can only scroll once they are done. If you want to see previous output then use the Tugboat CLI tool with `tugboat log ` and scroll that way. You can get the service ID from the URL bar in the UI. +1. You cannot search logs with a browser right now, it is a known issue. The alternative is to use the `tugboat` CLI tool to view logs. e.g. `tugboat log 6148dc56690c680da87db5f2 | grep -i 'error'`. You can get the service ID from the URL bar in the UI. +1. You cannot scroll the logs while they are outputting, you can only scroll once they are done. If you want to see previous output then use the Tugboat CLI tool with `tugboat log ` and scroll that way. You can get the service ID from the URL bar in the UI. 1. Email won't be sent to existing users as their email addresses are blanked during the database sanitization process for the developer database snapshot (see [#6100](https://github.com/department-of-veterans-affairs/va.gov-cms/issues/6100)). Email to new users, or users whose email addresses have been updated, can be sent and will be captured in the Tugboat interface. If you need to test email in Tugboat then edit a user and add an @example.com email address. 1. Base preview images are **refreshed** automatically, not **rebuilt**. This means that certain changes to Tugboat config, e.g. in the `init` phase, must be followed by a manual rebuild operation. The nightly refresh will not incorporate the new changes. -1. Pull requests with code in the body may cause a false alarm on the TIC and be rejected silently, and thus the Tugboat environment will not build automatically. This is not an issue we or Tugboat can solve. The only workaround is to build the PR branch manually. See this example of the string `filter_var()` in the webhook POST body causing a firewall block > https://dsva.slack.com/archives/C01A35JDH88/p1675984628181769?thread_ts=1675868445.789729&cid=C01A35JDH88. - +1. Pull requests with code in the body may cause a false alarm on the TIC and be rejected silently, and thus the Tugboat environment will not build automatically. This is not an issue we or Tugboat can solve. The only workaround is to build the PR branch manually. See this example of the string `filter_var()` in the webhook POST body causing a firewall block > https://dsva.slack.com/archives/C01A35JDH88/p1675984628181769?thread_ts=1675868445.789729&cid=C01A35JDH88. diff --git a/READMES/user_management.md b/READMES/user_management.md index 4701188e8..a5b6a2a08 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/admin/content/migrate_source_ui)) +1. go to [the import page](https://prod.cms.va.gov/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 aa6fb5ca4..da80a84d8 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.97.0", + "datadog/dd-trace": "^0.96.0", "dealerdirect/phpcodesniffer-composer-installer": "0.7.2", "drupal/address": "^1.4", "drupal/admin_feedback": "^2.2", @@ -31,9 +31,9 @@ "drupal/animated_gif": "^2.0", "drupal/auto_entitylabel": "^3.0", "drupal/better_exposed_filters": "^6.0", + "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,8 +48,9 @@ "drupal/consumers": "^1.17.0", "drupal/content_lock": "^2.3", "drupal/content_model_documentation": "^1.0.19", - "drupal/core-composer-scaffold": "^10.2.0", - "drupal/core-recommended": "^10.2.0", + "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/crop": "^2.0", "drupal/csv_serialization": "^4.0", "drupal/ctools_block": "^4.0", @@ -97,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": "^3.0", + "drupal/ief_table_view_mode": "^2.1", "drupal/image_style_warmer": "^1.2@RC", "drupal/image_widget_crop": "^2.2", "drupal/jsonapi_extras": "^3.19", @@ -192,7 +193,7 @@ "drupal/views_local_tasks": "^1.0", "drupal/workbench_access": "^2.0", "drupal/workbench_menu_access": "^2.0", - "drush/drush": "^12", + "drush/drush": "^11", "easyrdf/easyrdf": "1.1.1 as 0.9.1", "geocoder-php/mapbox-provider": "^1.3", "gitonomy/gitlib": "^1.2", @@ -203,7 +204,6 @@ "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 +221,7 @@ "symfony/phpunit-bridge": "^5.1", "symfony/process": "^6.3", "symfony/routing": "^6.3", - "va-gov/content-build": "^0.0.3427", + "va-gov/content-build": "^0.0.3414", "vlucas/phpdotenv": "^5.3", "webflo/drupal-finder": "^1.0.0", "webmozart/path-util": "^2.3", @@ -366,9 +366,6 @@ "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" }, @@ -388,10 +385,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/2023-12-20/1156338-31.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", "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/2024-01-02/3106205-length-menu-tree-too-short-48.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", "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", @@ -412,8 +409,7 @@ "3191302 - Make modal iframe tab accessible": "https://www.drupal.org/files/issues/2021-01-07/3191302-3.patch" }, "drupal/entity_browser_table": { - "3194622 - Custom field validation should not be applied to remove button": "https://www.drupal.org/files/issues/2021-01-25/limit-remove-button-validators.patch", - "3408217 - Error: Call to a member function getStorage() on null": "https://www.drupal.org/files/issues/2023-12-21/3408217-error-call-to-member-function-getstorage-on-null.patch" + "3194622 - Custom field validation should not be applied to remove button": "https://www.drupal.org/files/issues/2021-01-25/limit-remove-button-validators.patch" }, "drupal/entity_clone": { "3112577 - Cloning child references to nodes has potential to cause memory resource issues": "https://www.drupal.org/files/issues/2020-02-10/entity_clone-child-node-system-drain-3112577-1.patch" @@ -446,7 +442,8 @@ }, "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" + "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" }, "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" @@ -457,6 +454,9 @@ "drupal/menu_item_extras": { "3210468 - The 'bundle' field is not always populated with the menu name": "https://www.drupal.org/files/issues/2021-04-23/3210468.patch" }, + "drupal/message_subscribe": { + "3279287 - PHP 8.1 Deprecated function notices": "https://www.drupal.org/files/issues/2022-11-03/php-81-deprecation-notices.patch" + }, "drupal/migrate_plus": { "3368310 - Fix str_replace for null values, post PHP 8.1": "patches/3368310-str-replace-throws-php-error-11.patch" }, @@ -502,8 +502,7 @@ }, "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", - "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" + "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 e01abdc74..f8e928dde 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": "8c29a0eecdb0cb5488b48f3abba81154", + "content-hash": "6905a6a7c970e021a036a4784d95c863", "packages": [ { "name": "asm89/stack-cors", - "version": "v2.2.0", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/asm89/stack-cors.git", - "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea" + "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/50f57105bad3d97a43ec4a485eb57daf347eafea", - "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", "shasum": "" }, "require": { - "php": "^7.3|^8.0", - "symfony/http-foundation": "^5.3|^6|^7", - "symfony/http-kernel": "^5.3|^6|^7" + "php": "^7.2|^8.0", + "symfony/http-foundation": "^4|^5|^6", + "symfony/http-kernel": "^4|^5|^6" }, "require-dev": { - "phpunit/phpunit": "^9", + "phpunit/phpunit": "^7|^9", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -58,9 +58,9 @@ ], "support": { "issues": "https://github.com/asm89/stack-cors/issues", - "source": "https://github.com/asm89/stack-cors/tree/v2.2.0" + "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" }, - "time": "2023-11-14T13:51:46+00:00" + "time": "2022-01-18T09:12:03+00:00" }, { "name": "bjeavons/zxcvbn-php", @@ -195,48 +195,49 @@ }, { "name": "chi-teck/drupal-code-generator", - "version": "3.3.0", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/Chi-teck/drupal-code-generator.git", - "reference": "56da9209b24a5a5b5d27bec9e523f02bdd101770" + "reference": "22ed1cc02dc47814e8239de577da541e9b9bd980" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/56da9209b24a5a5b5d27bec9e523f02bdd101770", - "reference": "56da9209b24a5a5b5d27bec9e523f02bdd101770", + "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/22ed1cc02dc47814e8239de577da541e9b9bd980", + "reference": "22ed1cc02dc47814e8239de577da541e9b9bd980", "shasum": "" }, "require": { "ext-json": "*", - "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" + "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" }, "conflict": { "squizlabs/php_codesniffer": "<3.6" }, "require-dev": { - "chi-teck/drupal-coder-extension": "^2.0.0-alpha4", - "drupal/coder": "8.3.22", - "drupal/core": "10.1.x-dev", - "ext-simplexml": "*", + "chi-teck/drupal-coder-extension": "^1.2", + "drupal/coder": "^8.3.14", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.7", - "symfony/var-dumper": "^6.3", - "symfony/yaml": "^6.3", - "vimeo/psalm": "^5.14.0" + "phpunit/phpunit": "^9.4", + "squizlabs/php_codesniffer": "^3.5", + "symfony/var-dumper": "^5.2 || ^6.0", + "symfony/yaml": "^5.2 || ^6.0" }, "bin": [ "bin/dcg" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, "autoload": { "psr-4": { "DrupalCodeGenerator\\": "src" @@ -249,9 +250,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/3.3.0" + "source": "https://github.com/Chi-teck/drupal-code-generator/tree/2.6.2" }, - "time": "2023-10-21T12:57:05+00:00" + "time": "2022-11-11T15:34:04+00:00" }, { "name": "clue/stream-filter", @@ -530,16 +531,16 @@ }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { @@ -589,9 +590,9 @@ "versioning" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", + "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.3.2" }, "funding": [ { @@ -607,20 +608,20 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2022-04-01T19:23:25+00:00" }, { "name": "consolidation/annotated-command", - "version": "4.9.2", + "version": "4.9.1", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "b5255dcbee1de95036185062a103dabc622224de" + "reference": "e01152f698eff4cb5df3ebfe5e097ef335dbd3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/b5255dcbee1de95036185062a103dabc622224de", - "reference": "b5255dcbee1de95036185062a103dabc622224de", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e01152f698eff4cb5df3ebfe5e097ef335dbd3c9", + "reference": "e01152f698eff4cb5df3ebfe5e097ef335dbd3c9", "shasum": "" }, "require": { @@ -661,9 +662,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.2" + "source": "https://github.com/consolidation/annotated-command/tree/4.9.1" }, - "time": "2023-12-26T14:30:50+00:00" + "time": "2023-05-20T04:19:01+00:00" }, { "name": "consolidation/config", @@ -1175,16 +1176,16 @@ }, { "name": "datadog/dd-trace", - "version": "0.97.0", + "version": "0.96.0", "source": { "type": "git", "url": "https://github.com/DataDog/dd-trace-php.git", - "reference": "e76850105e99ba5d5b36697b3e4553ee70cfdae9" + "reference": "96ce8786574a1cc1f0fbcf8570a5b9025cdabca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DataDog/dd-trace-php/zipball/e76850105e99ba5d5b36697b3e4553ee70cfdae9", - "reference": "e76850105e99ba5d5b36697b3e4553ee70cfdae9", + "url": "https://api.github.com/repos/DataDog/dd-trace-php/zipball/96ce8786574a1cc1f0fbcf8570a5b9025cdabca9", + "reference": "96ce8786574a1cc1f0fbcf8570a5b9025cdabca9", "shasum": "" }, "require": { @@ -1273,9 +1274,9 @@ ], "support": { "issues": "https://github.com/DataDog/dd-trace-php/issues", - "source": "https://github.com/DataDog/dd-trace-php/tree/0.97.0" + "source": "https://github.com/DataDog/dd-trace-php/tree/0.96.0" }, - "time": "2024-01-18T10:15:17+00:00" + "time": "2023-12-19T09:26:52+00:00" }, { "name": "davedevelopment/stiphle", @@ -2240,6 +2241,10 @@ "name": "dww", "homepage": "https://www.drupal.org/user/46549" }, + { + "name": "googletorp", + "homepage": "https://www.drupal.org/user/386230" + }, { "name": "jsacksick", "homepage": "https://www.drupal.org/user/972218" @@ -2592,17 +2597,17 @@ }, { "name": "drupal/animated_gif", - "version": "2.0.4", + "version": "2.0.3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/animated_gif.git", - "reference": "2.0.4" + "reference": "2.0.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/animated_gif-2.0.4.zip", - "reference": "2.0.4", - "shasum": "157277d80d0c9b3a1b25f712bea7e1b9b9227e1e" + "url": "https://ftp.drupal.org/files/projects/animated_gif-2.0.3.zip", + "reference": "2.0.3", + "shasum": "44c3ef0f8b6c0a1d39dc1715013c1f9071938397" }, "require": { "drupal/core": "^9.3 || ^10" @@ -2610,8 +2615,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.4", - "datestamp": "1700934453", + "version": "2.0.3", + "datestamp": "1682278376", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2787,6 +2792,55 @@ "issues": "https://www.drupal.org/project/issues/better_exposed_filters" } }, + { + "name": "drupal/block_content_permissions", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/block_content_permissions.git", + "reference": "8.x-1.11" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/block_content_permissions-8.x-1.11.zip", + "reference": "8.x-1.11", + "shasum": "1ecb7330f69be30b6cf05f8682d1957c1aaf605e" + }, + "require": { + "drupal/core": "^8 || ^9 || ^10" + }, + "suggest": { + "drupal/block_region_permissions": "Block Region Permissions adds permissions for administering 'blocks' based on each theme's regions." + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.11", + "datestamp": "1674237116", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Joshua Roberson", + "homepage": "https://www.drupal.org/u/joshuaroberson", + "role": "Maintainer" + } + ], + "description": "Block Content Permissions adds permissions for administering 'block content types' and 'block content'.", + "homepage": "https://www.drupal.org/project/block_content_permissions", + "support": { + "source": "https://git.drupalcode.org/project/block_content_permissions", + "issues": "https://www.drupal.org/project/issues/block_content_permissions" + } + }, { "name": "drupal/cer", "version": "5.0.0-beta3", @@ -2940,68 +2994,6 @@ "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", @@ -3779,16 +3771,16 @@ }, { "name": "drupal/core", - "version": "10.2.2", + "version": "10.1.7", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "fc9abad1ab687635a5eddec00aa1a5f2a29a23bd" + "reference": "54415049a721ede65318e3980b402af59bc35913" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/fc9abad1ab687635a5eddec00aa1a5f2a29a23bd", - "reference": "fc9abad1ab687635a5eddec00aa1a5f2a29a23bd", + "url": "https://api.github.com/repos/drupal/core/zipball/54415049a721ede65318e3980b402af59bc35913", + "reference": "54415049a721ede65318e3980b402af59bc35913", "shasum": "" }, "require": { @@ -3818,26 +3810,23 @@ "php": ">=8.1.0", "psr/log": "^3.0", "sebastian/diff": "^4", - "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/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/polyfill-iconv": "^1.26", - "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", + "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", "twig/twig": "^3.5.0" }, "conflict": { - "drush/drush": "<12.4.3" + "drush/drush": "<8.1.10" }, "replace": { "drupal/core-annotation": "self.version", @@ -3936,22 +3925,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.2.2" + "source": "https://github.com/drupal/core/tree/10.1.7" }, - "time": "2024-01-16T21:10:58+00:00" + "time": "2023-12-06T09:22:56+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "10.2.2", + "version": "10.1.7", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", - "reference": "97bd91856535a354e9b1b815f0957893e26b6622" + "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/97bd91856535a354e9b1b815f0957893e26b6622", - "reference": "97bd91856535a354e9b1b815f0957893e26b6622", + "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/6a2d817ccb59fdb7e6b3720a1478b0d00b475445", + "reference": "6a2d817ccb59fdb7e6b3720a1478b0d00b475445", "shasum": "" }, "require": { @@ -3986,80 +3975,76 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/10.2.2" + "source": "https://github.com/drupal/core-composer-scaffold/tree/10.1.7" }, - "time": "2023-11-15T23:23:28+00:00" + "time": "2023-11-15T23:23:43+00:00" }, { "name": "drupal/core-recommended", - "version": "10.2.2", + "version": "10.1.7", "source": { "type": "git", "url": "https://github.com/drupal/core-recommended.git", - "reference": "d8cb769d86449af5ad763f3517c7f3c0e226ed60" + "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-recommended/zipball/d8cb769d86449af5ad763f3517c7f3c0e226ed60", - "reference": "d8cb769d86449af5ad763f3517c7f3c0e226ed60", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/e4726a4a0173a4b9acdac8cab5d4009d6085fd2e", + "reference": "e4726a4a0173a4b9acdac8cab5d4009d6085fd2e", "shasum": "" }, "require": { - "asm89/stack-cors": "~v2.2.0", - "composer/semver": "~3.4.0", + "asm89/stack-cors": "~v2.1.1", + "composer/semver": "~3.3.2", "doctrine/annotations": "~1.14.3", - "doctrine/deprecations": "~1.1.2", + "doctrine/deprecations": "~v1.1.1", "doctrine/lexer": "~2.1.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", + "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", "mck89/peast": "~v1.15.4", "pear/archive_tar": "~1.4.14", "pear/console_getopt": "~v1.4.3", - "pear/pear-core-minimal": "~v1.10.14", + "pear/pear-core-minimal": "~v1.10.13", "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.3", + "psr/http-client": "~1.0.2", "psr/http-factory": "~1.0.2", "psr/log": "~3.0.0", "ralouphie/getallheaders": "~3.0.3", "sebastian/diff": "~4.0.5", - "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" + "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" }, "conflict": { "webflo/drupal-core-strict": "*" @@ -4071,25 +4056,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.2.2" + "source": "https://github.com/drupal/core-recommended/tree/10.1.7" }, - "time": "2024-01-16T21:10:58+00:00" + "time": "2023-12-06T09:22:56+00:00" }, { "name": "drupal/core_event_dispatcher", - "version": "4.0.0-rc1", + "version": "3.3.4", "require": { - "drupal/core": "^9.3 || ^10", + "drupal/core": "^9.3", "drupal/hook_event_dispatcher": "*" }, "type": "metapackage", "extra": { "drupal": { - "version": "4.0.0-rc1", - "datestamp": "1691676068", + "version": "3.3.4", + "datestamp": "1691759682", "security-coverage": { - "status": "not-covered", - "message": "RC releases are not covered by Drupal security advisories." + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, @@ -4404,17 +4389,17 @@ }, { "name": "drupal/danse", - "version": "2.3.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/danse.git", - "reference": "2.3.1" + "reference": "2.3.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/danse-2.3.1.zip", - "reference": "2.3.1", - "shasum": "cf98e448b2564fdc61991b971548e67685c48c6f" + "url": "https://ftp.drupal.org/files/projects/danse-2.3.0.zip", + "reference": "2.3.0", + "shasum": "202b5ec257177bb9e93aaa74f400a4b8581e7dbf" }, "require": { "drupal/core": "^10 || ^11", @@ -4427,8 +4412,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.3.1", - "datestamp": "1703759808", + "version": "2.3.0", + "datestamp": "1702473774", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5153,39 +5138,35 @@ }, { "name": "drupal/entity_browser", - "version": "2.10.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_browser.git", - "reference": "8.x-2.10" + "reference": "8.x-2.9" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.10.zip", - "reference": "8.x-2.10", - "shasum": "d52548ea66dc56108c2e211aeaff6e1cc0522e85" + "url": "https://ftp.drupal.org/files/projects/entity_browser-8.x-2.9.zip", + "reference": "8.x-2.9", + "shasum": "251afad80cde9fa547501a8d9de5d94b9f5bacff" }, "require": { - "drupal/core": "^9.5 || ^10" - }, - "conflict": { - "drupal/media_entity": "1.*" + "drupal/core": "^9.2 || ^10" }, "require-dev": { - "drupal/ckeditor": "^1.0", - "drupal/embed": "^1.0", - "drupal/entity_embed": "^1.0", - "drupal/entity_reference_revisions": "^1.0", - "drupal/entityqueue": "^1.0", - "drupal/inline_entity_form": "^1.0@rc", - "drupal/paragraphs": "^1.0", - "drupal/token": "^1.0" + "drupal/embed": "~1.0", + "drupal/entity_embed": "1.x-dev", + "drupal/entity_reference_revisions": "1.x-dev", + "drupal/entityqueue": "1.x-dev", + "drupal/inline_entity_form": "1.x-dev", + "drupal/paragraphs": "1.x-dev", + "drupal/token": "1.x-dev" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.10", - "datestamp": "1702325310", + "version": "8.x-2.9", + "datestamp": "1674070933", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5238,7 +5219,7 @@ } ], "description": "Entity browsing and selecting component.", - "homepage": "https://drupal.org/project/entity_browser", + "homepage": "http://drupal.org/project/entity_browser", "support": { "source": "https://git.drupalcode.org/project/entity_browser", "issues": "https://www.drupal.org/project/issues/entity_browser", @@ -5415,17 +5396,17 @@ }, { "name": "drupal/entity_field_fetch", - "version": "1.0.6", + "version": "1.0.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_field_fetch.git", - "reference": "1.0.6" + "reference": "1.0.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_field_fetch-1.0.6.zip", - "reference": "1.0.6", - "shasum": "615ec840043ef03e28ec727bd2809c3c0de630f8" + "url": "https://ftp.drupal.org/files/projects/entity_field_fetch-1.0.4.zip", + "reference": "1.0.4", + "shasum": "a48fabc970c460d032e7ac017285d5b9e2f434d1" }, "require": { "drupal/core": "^8 || ^9 || ^10" @@ -5433,8 +5414,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "1.0.6", - "datestamp": "1704772049", + "version": "1.0.4", + "datestamp": "1691158258", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5515,17 +5496,17 @@ }, { "name": "drupal/entity_reference_revisions", - "version": "1.11.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/entity_reference_revisions.git", - "reference": "8.x-1.11" + "reference": "8.x-1.10" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.11.zip", - "reference": "8.x-1.11", - "shasum": "de21cbb0d8a0344dc3496addcad4ed536747cec5" + "url": "https://ftp.drupal.org/files/projects/entity_reference_revisions-8.x-1.10.zip", + "reference": "8.x-1.10", + "shasum": "edd23b91c4a34db65ea22c4db54b7458edc7513b" }, "require": { "drupal/core": "^9 || ^10" @@ -5536,8 +5517,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.11", - "datestamp": "1705140721", + "version": "8.x-1.10", + "datestamp": "1660664712", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6188,19 +6169,19 @@ }, { "name": "drupal/field_event_dispatcher", - "version": "4.0.0-rc1", + "version": "3.3.4", "require": { - "drupal/core": "^9.3 || ^10", + "drupal/core": "^9.3", "drupal/hook_event_dispatcher": "*" }, "type": "metapackage", "extra": { "drupal": { - "version": "4.0.0-rc1", - "datestamp": "1691676068", + "version": "3.3.4", + "datestamp": "1691759682", "security-coverage": { - "status": "not-covered", - "message": "RC releases are not covered by Drupal security advisories." + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, @@ -6519,17 +6500,17 @@ }, { "name": "drupal/geocoder", - "version": "4.20.0", + "version": "4.17.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/geocoder.git", - "reference": "8.x-4.20" + "reference": "8.x-4.17" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/geocoder-8.x-4.20.zip", - "reference": "8.x-4.20", - "shasum": "1bf5ff7082e64f55128032b61c7333fd611c5347" + "url": "https://ftp.drupal.org/files/projects/geocoder-8.x-4.17.zip", + "reference": "8.x-4.17", + "shasum": "15d197d1fd76b30999721fbbe820c880103e2acd" }, "require": { "davedevelopment/stiphle": "^0.9.2", @@ -6574,8 +6555,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-4.20", - "datestamp": "1706097387", + "version": "8.x-4.17", + "datestamp": "1703116289", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6616,31 +6597,27 @@ }, { "name": "drupal/geofield", - "version": "1.57.0", + "version": "1.56.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/geofield.git", - "reference": "8.x-1.57" + "reference": "8.x-1.56" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/geofield-8.x-1.57.zip", - "reference": "8.x-1.57", - "shasum": "17155834e7abe78b5710907d1f2897f3a01c5702" + "url": "https://ftp.drupal.org/files/projects/geofield-8.x-1.56.zip", + "reference": "8.x-1.56", + "shasum": "edcb25304edb860d0fe907b8aa2dc73b6fc83f39" }, "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.57", - "datestamp": "1701039529", + "version": "8.x-1.56", + "datestamp": "1698017493", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -6913,7 +6890,7 @@ }, { "name": "drupal/graphql_core", - "version": "3.4.0", + "version": "3.3.0", "require": { "drupal/core": "^9 || ^10", "drupal/graphql": "*" @@ -6921,8 +6898,8 @@ "type": "metapackage", "extra": { "drupal": { - "version": "8.x-3.4", - "datestamp": "1699463394", + "version": "8.x-3.3", + "datestamp": "1694177393", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -7303,27 +7280,27 @@ }, { "name": "drupal/ief_table_view_mode", - "version": "3.0.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/ief_table_view_mode.git", - "reference": "3.0.0" + "reference": "8.x-2.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/ief_table_view_mode-3.0.0.zip", - "reference": "3.0.0", - "shasum": "4a434bbe8ccebffa6dd3efcd818bfd5667b6f571" + "url": "https://ftp.drupal.org/files/projects/ief_table_view_mode-8.x-2.3.zip", + "reference": "8.x-2.3", + "shasum": "8f5f2d38745a7654ce72b311f0333478fa7f2aeb" }, "require": { - "drupal/core": "^9 || ^10", - "drupal/inline_entity_form": "^1.0 || ^2.0 || ^3.0" + "drupal/core": "^8.7.7 || ^9 || ^10", + "drupal/inline_entity_form": "^1.0" }, "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.0", - "datestamp": "1705614692", + "version": "8.x-2.3", + "datestamp": "1671410068", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -7478,17 +7455,17 @@ }, { "name": "drupal/inline_entity_form", - "version": "3.0.0-rc19", + "version": "1.0.0-rc15", "source": { "type": "git", "url": "https://git.drupalcode.org/project/inline_entity_form.git", - "reference": "3.0.0-rc19" + "reference": "8.x-1.0-rc15" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/inline_entity_form-3.0.0-rc19.zip", - "reference": "3.0.0-rc19", - "shasum": "d8976940dd3f85412ba5e274af15fbcdd22ee27a" + "url": "https://ftp.drupal.org/files/projects/inline_entity_form-8.x-1.0-rc15.zip", + "reference": "8.x-1.0-rc15", + "shasum": "7702801f7e599956fc3d10cff8257809f53ac3ec" }, "require": { "drupal/core": "^8.8 || ^9 || ^10", @@ -7500,8 +7477,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.0-rc19", - "datestamp": "1704729077", + "version": "8.x-1.0-rc15", + "datestamp": "1678126675", "security-coverage": { "status": "not-covered", "message": "RC releases are not covered by Drupal security advisories." @@ -8267,17 +8244,17 @@ }, { "name": "drupal/limited_field_widgets", - "version": "2.1.0-beta3", + "version": "2.1.0-beta2", "source": { "type": "git", "url": "https://git.drupalcode.org/project/limited_field_widgets.git", - "reference": "2.1.0-beta3" + "reference": "2.1.0-beta2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/limited_field_widgets-2.1.0-beta3.zip", - "reference": "2.1.0-beta3", - "shasum": "eb30c4d5d03742137d4a4ec1714636e7a83361d5" + "url": "https://ftp.drupal.org/files/projects/limited_field_widgets-2.1.0-beta2.zip", + "reference": "2.1.0-beta2", + "shasum": "3ed1431bb4ed734b1131c2b78f6a948ef2e71349" }, "require": { "drupal/core": ">=9.2" @@ -8285,8 +8262,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.1.0-beta3", - "datestamp": "1705262437", + "version": "2.1.0-beta2", + "datestamp": "1699106716", "security-coverage": { "status": "not-covered", "message": "Beta releases are not covered by Drupal security advisories." @@ -9267,14 +9244,14 @@ "name": "amitaibu", "homepage": "https://www.drupal.org/user/57511" }, - { - "name": "bluegeek9", - "homepage": "https://www.drupal.org/user/1286304" - }, { "name": "Grayside", "homepage": "https://www.drupal.org/user/346868" }, + { + "name": "itamar", + "homepage": "https://www.drupal.org/user/1757910" + }, { "name": "jhedstrom", "homepage": "https://www.drupal.org/user/208732" @@ -9351,17 +9328,17 @@ }, { "name": "drupal/message_subscribe", - "version": "1.3.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/message_subscribe.git", - "reference": "8.x-1.3" + "reference": "8.x-1.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/message_subscribe-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "2101dc65ce4b826e6f093b6c7f7ec25963582b17" + "url": "https://ftp.drupal.org/files/projects/message_subscribe-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "e226ff865d52403fb46f20ce5b3d6e3d00209fee" }, "require": { "drupal/core": "^9 || ^10", @@ -9382,8 +9359,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.3", - "datestamp": "1704559138", + "version": "8.x-1.2", + "datestamp": "1671217115", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10605,17 +10582,17 @@ }, { "name": "drupal/paragraphs", - "version": "1.17.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/paragraphs.git", - "reference": "8.x-1.17" + "reference": "8.x-1.16" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs-8.x-1.17.zip", - "reference": "8.x-1.17", - "shasum": "81c05f6a1eb59ab957c9ac97b2e79d6c9837bd72" + "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", @@ -10630,7 +10607,7 @@ "drupal/inline_entity_form": "1.x-dev", "drupal/paragraphs-paragraphs_library": "*", "drupal/replicate": "1.x-dev", - "drupal/search_api": "^1", + "drupal/search_api": "1.x-dev", "drupal/search_api_db": "*" }, "suggest": { @@ -10639,8 +10616,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.17", - "datestamp": "1705234146", + "version": "8.x-1.16", + "datestamp": "1694007797", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10742,17 +10719,17 @@ }, { "name": "drupal/paragraphs_features", - "version": "2.0.0-beta4", + "version": "2.0.0-beta3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/paragraphs_features.git", - "reference": "2.0.0-beta4" + "reference": "2.0.0-beta3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/paragraphs_features-2.0.0-beta4.zip", - "reference": "2.0.0-beta4", - "shasum": "c3137491ba5f73e8395d9c2178beac3a10e33f7d" + "url": "https://ftp.drupal.org/files/projects/paragraphs_features-2.0.0-beta3.zip", + "reference": "2.0.0-beta3", + "shasum": "b040ba0048101f578752050bc55cc039939a649c" }, "require": { "drupal/core": "^9.2 || ^10", @@ -10764,8 +10741,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.0-beta4", - "datestamp": "1705329204", + "version": "2.0.0-beta3", + "datestamp": "1692697161", "security-coverage": { "status": "not-covered", "message": "Beta releases are not covered by Drupal security advisories." @@ -11125,17 +11102,17 @@ }, { "name": "drupal/pathologic", - "version": "2.0.0-alpha2", + "version": "2.0.0-alpha1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/pathologic.git", - "reference": "2.0.0-alpha2" + "reference": "2.0.0-alpha1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/pathologic-2.0.0-alpha2.zip", - "reference": "2.0.0-alpha2", - "shasum": "59de9dbfcd770c2b8810fdb23568d9fb630310b7" + "url": "https://ftp.drupal.org/files/projects/pathologic-2.0.0-alpha1.zip", + "reference": "2.0.0-alpha1", + "shasum": "be911b098ece7d1ffa55cf0d5f33d38ea40acda4" }, "require": { "drupal/core": "^9 || ^10" @@ -11143,8 +11120,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.0-alpha2", - "datestamp": "1706131021", + "version": "2.0.0-alpha1", + "datestamp": "1681263978", "security-coverage": { "status": "not-covered", "message": "Alpha releases are not covered by Drupal security advisories." @@ -12057,17 +12034,17 @@ }, { "name": "drupal/simple_oauth", - "version": "5.2.5", + "version": "5.2.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/simple_oauth.git", - "reference": "5.2.5" + "reference": "5.2.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/simple_oauth-5.2.5.zip", - "reference": "5.2.5", - "shasum": "3517d07e4896a32eddda7446b85a2afa945321a2" + "url": "https://ftp.drupal.org/files/projects/simple_oauth-5.2.4.zip", + "reference": "5.2.4", + "shasum": "19e6a7842855aa1ea1d632e91cceaba29d21a515" }, "require": { "drupal/consumers": "^1.14", @@ -12083,8 +12060,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "5.2.5", - "datestamp": "1700206902", + "version": "5.2.4", + "datestamp": "1697698824", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -12559,17 +12536,17 @@ }, { "name": "drupal/subrequests", - "version": "3.0.10", + "version": "3.0.7", "source": { "type": "git", "url": "https://git.drupalcode.org/project/subrequests.git", - "reference": "3.0.10" + "reference": "3.0.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/subrequests-3.0.10.zip", - "reference": "3.0.10", - "shasum": "52d176f5fc813f7a11dbb42e4aaf654a9232e4c0" + "url": "https://ftp.drupal.org/files/projects/subrequests-3.0.7.zip", + "reference": "3.0.7", + "shasum": "f78f5a382583007b8844fc26b9f4ba7b58f9fa3d" }, "require": { "drupal/core": "^8 || ^9 || ^10", @@ -12581,8 +12558,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.10", - "datestamp": "1703173149", + "version": "3.0.7", + "datestamp": "1682600732", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -13529,33 +13506,33 @@ }, { "name": "drupal/views_bulk_operations", - "version": "4.2.6", + "version": "4.2.5", "source": { "type": "git", "url": "https://git.drupalcode.org/project/views_bulk_operations.git", - "reference": "4.2.6" + "reference": "4.2.5" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.2.6.zip", - "reference": "4.2.6", - "shasum": "20c6f77c0cebda75edfa570a8dc53fb133d6283a" + "url": "https://ftp.drupal.org/files/projects/views_bulk_operations-4.2.5.zip", + "reference": "4.2.5", + "shasum": "220479c5187b1619d5703f64c6f8c272afecf897" }, "require": { "drupal/core": "^9.4 || ^10", "php": ">=7.4.0" }, "require-dev": { - "drush/drush": "^12" + "drush/drush": "^11" }, "suggest": { - "drush/drush": "^11 || ^12" + "drush/drush": "^10 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "4.2.6", - "datestamp": "1704281842", + "version": "4.2.5", + "datestamp": "1691066184", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -13869,55 +13846,57 @@ }, { "name": "drush/drush", - "version": "12.4.3", + "version": "11.6.0", "source": { "type": "git", "url": "https://github.com/drush-ops/drush.git", - "reference": "8245acede57ecc62a90aa0f19ff3b29e5f11f971" + "reference": "f301df5dec8d2aacb03d3e01e0ffc6d98e10ae78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/8245acede57ecc62a90aa0f19ff3b29e5f11f971", - "reference": "8245acede57ecc62a90aa0f19ff3b29e5f11f971", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/f301df5dec8d2aacb03d3e01e0ffc6d98e10ae78", + "reference": "f301df5dec8d2aacb03d3e01e0ffc6d98e10ae78", "shasum": "" }, "require": { - "chi-teck/drupal-code-generator": "^3.0", - "composer-runtime-api": "^2.2", + "chi-teck/drupal-code-generator": "^2.4", "composer/semver": "^1.4 || ^3", - "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", + "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", "ext-dom": "*", - "grasmash/yaml-cli": "^3.1", - "guzzlehttp/guzzle": "^7.0", - "league/container": "^4", - "php": ">=8.1", + "guzzlehttp/guzzle": "^6.5 || ^7.0", + "league/container": "^3.4 || ^4", + "php": ">=7.4", "psy/psysh": "~0.11", - "symfony/event-dispatcher": "^6", - "symfony/filesystem": "^6.1", - "symfony/finder": "^6", - "symfony/var-dumper": "^6.0", - "symfony/yaml": "^6.0", + "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", "webflo/drupal-finder": "^1.2" }, "conflict": { - "drupal/core": "< 10.0", + "drupal/core": "< 9.2", "drupal/migrate_run": "*", "drupal/migrate_tools": "<= 5" }, "require-dev": { - "composer/installers": "^2", + "composer/installers": "^1.7", "cweagans/composer-patches": "~1.0", - "drupal/core-recommended": "^10", + "david-garcia/phpwhois": "4.3.0", + "drupal/core-recommended": "^9 || ^10", "drupal/semver_example": "2.3.0", - "phpunit/phpunit": "^9", + "phpunit/phpunit": ">=7.5.20", "rector/rector": "^0.12", - "squizlabs/php_codesniffer": "^3.7" + "squizlabs/php_codesniffer": "^3.6", + "vlucas/phpdotenv": "^2.4", + "yoast/phpunit-polyfills": "^0.2.0" }, "bin": [ "drush" @@ -13999,9 +13978,8 @@ "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/12.4.3" + "source": "https://github.com/drush-ops/drush/tree/11.6.0" }, "funding": [ { @@ -14009,7 +13987,7 @@ "type": "github" } ], - "time": "2023-11-16T22:57:24+00:00" + "time": "2023-06-06T18:46:18+00:00" }, { "name": "e0ipso/shaper", @@ -14199,22 +14177,88 @@ ], "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.17.0", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", "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 || ~8.3.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" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -14256,9 +14300,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" }, - "time": "2023-11-17T15:01:25+00:00" + "time": "2022-09-18T07:06:19+00:00" }, { "name": "galbar/jsonpath", @@ -14314,23 +14358,26 @@ }, { "name": "geocoder-php/common-http", - "version": "4.6.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/geocoder-php/php-common-http.git", - "reference": "d8c22a66120daed35ba8017467bc1ebfec28a63e" + "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/d8c22a66120daed35ba8017467bc1ebfec28a63e", - "reference": "d8c22a66120daed35ba8017467bc1ebfec28a63e", + "url": "https://api.github.com/repos/geocoder-php/php-common-http/zipball/15629fd7bf771f525282ad1b60d2106bcf630ce9", + "reference": "15629fd7bf771f525282ad1b60d2106bcf630ce9", "shasum": "" }, "require": { "php": "^8.0", - "php-http/discovery": "^1.17", - "psr/http-client-implementation": "^1.0", - "psr/http-factory-implementation": "^1.0", + "php-http/client-implementation": "^1.0", + "php-http/discovery": "^1.6", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0 || ^2.0", + "psr/http-message-implementation": "^1.0", "willdurand/geocoder": "^4.0" }, "require-dev": { @@ -14340,6 +14387,7 @@ "phpunit/phpunit": "^9.5", "symfony/stopwatch": "~2.5 || ~5.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -14370,9 +14418,9 @@ "http geocoder" ], "support": { - "source": "https://github.com/geocoder-php/php-common-http/tree/4.6.0" + "source": "https://github.com/geocoder-php/php-common-http/tree/master" }, - "time": "2023-12-28T10:51:54+00:00" + "time": "2023-07-31T20:07:24+00:00" }, { "name": "geocoder-php/mapbox-provider", @@ -14657,30 +14705,34 @@ }, { "name": "gitonomy/gitlib", - "version": "v1.4.0", + "version": "v1.3.8", "source": { "type": "git", "url": "https://github.com/gitonomy/gitlib.git", - "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9" + "reference": "9fea656e75ad6e3452feb2cac46a6c1239cd7f74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/2c7fbbd9814178474d0bb1b6292701cb4ab508f9", - "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9", + "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/9fea656e75ad6e3452feb2cac46a6c1239cd7f74", + "reference": "9fea656e75ad6e3452feb2cac46a6c1239cd7f74", "shasum": "" }, "require": { "ext-pcre": "*", - "php": "^8.0", + "php": "^5.6 || ^7.0 || ^8.0", "symfony/polyfill-mbstring": "^1.7", - "symfony/process": "^5.4 || ^6.0 || ^7.0" + "symfony/process": "^3.4 || ^4.4 || ^5.0 || ^6.0" }, "require-dev": { "ext-fileinfo": "*", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.20 || ^9.5.9", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^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": { @@ -14716,7 +14768,7 @@ "description": "Library for accessing git", "support": { "issues": "https://github.com/gitonomy/gitlib/issues", - "source": "https://github.com/gitonomy/gitlib/tree/v1.4.0" + "source": "https://github.com/gitonomy/gitlib/tree/v1.3.8" }, "funding": [ { @@ -14724,7 +14776,7 @@ "type": "tidelift" } ], - "time": "2023-12-20T13:02:08+00:00" + "time": "2023-05-11T08:29:06+00:00" }, { "name": "graham-campbell/result-type", @@ -14840,80 +14892,24 @@ }, "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.8.1", + "version": "7.7.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "085b026db54d4b5012f727c80c9958e8b8cbc454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/085b026db54d4b5012f727c80c9958e8b8cbc454", + "reference": "085b026db54d4b5012f727c80c9958e8b8cbc454", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -14922,11 +14918,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -15004,7 +15000,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.7.1" }, "funding": [ { @@ -15020,7 +15016,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2023-08-27T10:02:06+00:00" }, { "name": "guzzlehttp/promises", @@ -15107,16 +15103,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a0b3a03e8e8005257fbc408ce5f0fd0a8274dc7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a0b3a03e8e8005257fbc408ce5f0fd0a8274dc7f", + "reference": "a0b3a03e8e8005257fbc408ce5f0fd0a8274dc7f", "shasum": "" }, "require": { @@ -15130,9 +15126,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -15203,7 +15199,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.5.1" }, "funding": [ { @@ -15219,7 +15215,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2023-08-03T15:02:42+00:00" }, { "name": "http-interop/http-factory-guzzle", @@ -15281,16 +15277,16 @@ }, { "name": "itamair/geophp", - "version": "1.6", + "version": "1.5", "source": { "type": "git", "url": "https://github.com/itamair/geoPHP.git", - "reference": "f210e37ab3d4706b7e8cfe3183fec2f5be8a85e6" + "reference": "645f3262ebaa7443d58910207c65f386c733f614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/itamair/geoPHP/zipball/f210e37ab3d4706b7e8cfe3183fec2f5be8a85e6", - "reference": "f210e37ab3d4706b7e8cfe3183fec2f5be8a85e6", + "url": "https://api.github.com/repos/itamair/geoPHP/zipball/645f3262ebaa7443d58910207c65f386c733f614", + "reference": "645f3262ebaa7443d58910207c65f386c733f614", "shasum": "" }, "require-dev": { @@ -15321,9 +15317,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.6" + "source": "https://github.com/itamair/geoPHP/tree/1.5" }, - "time": "2023-12-23T23:28:59+00:00" + "time": "2023-04-26T23:16:44+00:00" }, { "name": "jean85/pretty-package-versions", @@ -15634,16 +15630,16 @@ }, { "name": "laminas/laminas-stdlib", - "version": "3.19.0", + "version": "3.18.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "6a192dd0882b514e45506f533b833b623b78fff3" + "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/6a192dd0882b514e45506f533b833b623b78fff3", - "reference": "6a192dd0882b514e45506f533b833b623b78fff3", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf", + "reference": "e85b29076c6216e7fc98e72b42dbe1bbc3b95ecf", "shasum": "" }, "require": { @@ -15654,10 +15650,10 @@ }, "require-dev": { "laminas/laminas-coding-standard": "^2.5", - "phpbench/phpbench": "^1.2.15", - "phpunit/phpunit": "^10.5.8", + "phpbench/phpbench": "^1.2.14", + "phpunit/phpunit": "^10.3.3", "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.20.0" + "vimeo/psalm": "^5.15.0" }, "type": "library", "autoload": { @@ -15689,7 +15685,7 @@ "type": "community_bridge" } ], - "time": "2024-01-19T12:39:49+00:00" + "time": "2023-09-19T10:15:21+00:00" }, { "name": "laminas/laminas-text", @@ -16197,16 +16193,16 @@ }, { "name": "league/uri", - "version": "7.4.0", + "version": "7.3.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5" + "reference": "36743c3961bb82bf93da91917b6bced0358a8d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bf414ba956d902f5d98bf9385fcf63954f09dce5", - "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/36743c3961bb82bf93da91917b6bced0358a8d45", + "reference": "36743c3961bb82bf93da91917b6bced0358a8d45", "shasum": "" }, "require": { @@ -16275,7 +16271,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.4.0" + "source": "https://github.com/thephpleague/uri/tree/7.3.0" }, "funding": [ { @@ -16283,20 +16279,20 @@ "type": "github" } ], - "time": "2023-12-01T06:24:25+00:00" + "time": "2023-09-09T17:21:43+00:00" }, { "name": "league/uri-interfaces", - "version": "7.4.0", + "version": "7.3.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3" + "reference": "c409b60ed2245ff94c965a8c798a60166db53361" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/bd8c487ec236930f7bbc42b8d374fa882fbba0f3", - "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c409b60ed2245ff94c965a8c798a60166db53361", + "reference": "c409b60ed2245ff94c965a8c798a60166db53361", "shasum": "" }, "require": { @@ -16359,7 +16355,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.4.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.3.0" }, "funding": [ { @@ -16367,7 +16363,7 @@ "type": "github" } ], - "time": "2023-11-24T15:40:42+00:00" + "time": "2023-09-09T17:21:43+00:00" }, { "name": "masterminds/html5", @@ -16538,21 +16534,21 @@ }, { "name": "mglaman/phpstan-drupal", - "version": "1.2.6", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/mglaman/phpstan-drupal.git", - "reference": "ba8678f8cbea42cc41022c21751004eb677cf5a4" + "reference": "57b2cc67fb4416e8484db37a3d8502ac8fb3c0d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/ba8678f8cbea42cc41022c21751004eb677cf5a4", - "reference": "ba8678f8cbea42cc41022c21751004eb677cf5a4", + "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/57b2cc67fb4416e8484db37a3d8502ac8fb3c0d6", + "reference": "57b2cc67fb4416e8484db37a3d8502ac8fb3c0d6", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^1.10.56", + "phpstan/phpstan": "^1.10.1", "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", @@ -16622,7 +16618,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.6" + "source": "https://github.com/mglaman/phpstan-drupal/tree/1.2.4" }, "funding": [ { @@ -16638,7 +16634,7 @@ "type": "tidelift" } ], - "time": "2024-01-16T00:42:10+00:00" + "time": "2023-11-14T22:47:32+00:00" }, { "name": "michelf/php-markdown", @@ -17007,16 +17003,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.18.0", + "version": "v4.17.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { @@ -17057,9 +17053,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" }, - "time": "2023-12-10T21:03:43+00:00" + "time": "2023-08-13T19:53:39+00:00" }, { "name": "npm-asset/dropzone", @@ -17073,18 +17069,6 @@ "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", @@ -17759,16 +17743,16 @@ }, { "name": "php-http/cache-plugin", - "version": "1.8.1", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/php-http/cache-plugin.git", - "reference": "b3e6c25d89ee5e4ac82115ed23b21ba87986d614" + "reference": "6bf9fbf66193f61d90c2381b75eb1fa0202fd314" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/b3e6c25d89ee5e4ac82115ed23b21ba87986d614", - "reference": "b3e6c25d89ee5e4ac82115ed23b21ba87986d614", + "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/6bf9fbf66193f61d90c2381b75eb1fa0202fd314", + "reference": "6bf9fbf66193f61d90c2381b75eb1fa0202fd314", "shasum": "" }, "require": { @@ -17776,7 +17760,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 || ^7.0" + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" @@ -17807,9 +17791,9 @@ ], "support": { "issues": "https://github.com/php-http/cache-plugin/issues", - "source": "https://github.com/php-http/cache-plugin/tree/1.8.1" + "source": "https://github.com/php-http/cache-plugin/tree/1.8.0" }, - "time": "2023-11-21T08:52:56+00:00" + "time": "2023-04-28T10:56:55+00:00" }, { "name": "php-http/client-common", @@ -18259,16 +18243,16 @@ }, { "name": "php-http/promise", - "version": "1.3.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/php-http/promise.git", - "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07" + "reference": "44a67cb59f708f826f3bec35f22030b3edb90119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/2916a606d3b390f4e9e8e2b8dd68581508be0f07", - "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07", + "url": "https://api.github.com/repos/php-http/promise/zipball/44a67cb59f708f826f3bec35f22030b3edb90119", + "reference": "44a67cb59f708f826f3bec35f22030b3edb90119", "shasum": "" }, "require": { @@ -18305,9 +18289,9 @@ ], "support": { "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.3.0" + "source": "https://github.com/php-http/promise/tree/1.2.1" }, - "time": "2024-01-04T18:49:48+00:00" + "time": "2023-11-08T12:57:08+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -18421,16 +18405,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.8.0", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc" + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc", - "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", "shasum": "" }, "require": { @@ -18473,9 +18457,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.8.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" }, - "time": "2024-01-11T11:49:22+00:00" + "time": "2023-08-12T11:01:26+00:00" }, { "name": "phpmailer/phpmailer", @@ -18808,16 +18792,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.25.0", + "version": "1.24.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" + "reference": "fedf211ff14ec8381c9bf5714e33a7a552dd1acc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", - "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fedf211ff14ec8381c9bf5714e33a7a552dd1acc", + "reference": "fedf211ff14ec8381c9bf5714e33a7a552dd1acc", "shasum": "" }, "require": { @@ -18849,22 +18833,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.5" }, - "time": "2024-01-04T17:06:16+00:00" + "time": "2023-12-16T09:33:33+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.57", + "version": "1.10.50", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e" + "reference": "06a98513ac72c03e8366b5a0cb00750b487032e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1627b1d03446904aaa77593f370c5201d2ecc34e", - "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/06a98513ac72c03e8366b5a0cb00750b487032e4", + "reference": "06a98513ac72c03e8366b5a0cb00750b487032e4", "shasum": "" }, "require": { @@ -18913,7 +18897,7 @@ "type": "tidelift" } ], - "time": "2024-01-24T11:51:34+00:00" + "time": "2023-12-13T10:59:42+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -18965,23 +18949,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.30", + "version": "9.2.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089" + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089", - "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -19031,7 +19015,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.30" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" }, "funding": [ { @@ -19039,7 +19023,7 @@ "type": "github" } ], - "time": "2023-12-22T06:47:57+00:00" + "time": "2023-09-19T04:57:46+00:00" }, { "name": "phpunit/php-file-iterator", @@ -19284,16 +19268,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.16", + "version": "9.6.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f" + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3767b2c56ce02d01e3491046f33466a1ae60a37f", - "reference": "3767b2c56ce02d01e3491046f33466a1ae60a37f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", "shasum": "" }, "require": { @@ -19367,7 +19351,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.16" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" }, "funding": [ { @@ -19383,7 +19367,7 @@ "type": "tidelift" } ], - "time": "2024-01-19T07:03:14+00:00" + "time": "2023-12-01T16:55:19+00:00" }, { "name": "politsin/jquery-ui-touch-punch", @@ -19883,25 +19867,25 @@ }, { "name": "psy/psysh", - "version": "v0.12.0", + "version": "v0.11.22", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d" + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d", - "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "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" + "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" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" @@ -19912,7 +19896,8 @@ "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-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." }, "bin": [ "bin/psysh" @@ -19920,7 +19905,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.12.x-dev" + "dev-0.11": "0.11.x-dev" }, "bamarni-bin": { "bin-links": false, @@ -19956,9 +19941,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.0" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" }, - "time": "2023-12-20T15:28:09+00:00" + "time": "2023-10-14T21:56:36+00:00" }, { "name": "querypath/querypath", @@ -20335,20 +20320,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.7", "php": ">=7.3" }, "require-dev": { @@ -20380,7 +20365,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" }, "funding": [ { @@ -20388,7 +20373,7 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2020-10-26T15:52:27+00:00" }, { "name": "sebastian/diff", @@ -20662,20 +20647,20 @@ }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.6", "php": ">=7.3" }, "require-dev": { @@ -20707,7 +20692,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.4" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" }, "funding": [ { @@ -20715,7 +20700,7 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2020-11-28T06:42:11+00:00" }, { "name": "sebastian/object-enumerator", @@ -21433,16 +21418,16 @@ }, { "name": "simplesamlphp/simplesamlphp-assets-base", - "version": "v2.1.8", + "version": "v2.1.6", "source": { "type": "git", "url": "https://github.com/simplesamlphp/simplesamlphp-assets-base.git", - "reference": "16ce8123311b93af783858eccf7ce01eceded84e" + "reference": "ab7fdad861877ab439860ec5f77727ff2dc99327" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-assets-base/zipball/16ce8123311b93af783858eccf7ce01eceded84e", - "reference": "16ce8123311b93af783858eccf7ce01eceded84e", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-assets-base/zipball/ab7fdad861877ab439860ec5f77727ff2dc99327", + "reference": "ab7fdad861877ab439860ec5f77727ff2dc99327", "shasum": "" }, "require": { @@ -21463,9 +21448,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.8" + "source": "https://github.com/simplesamlphp/simplesamlphp-assets-base/tree/v2.1.6" }, - "time": "2023-12-24T00:59:54+00:00" + "time": "2023-10-26T09:03:43+00:00" }, { "name": "simshaun/recurr", @@ -21651,16 +21636,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.8.1", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "14f5fff1e64118595db5408e946f3a22c75807f7" + "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/14f5fff1e64118595db5408e946f3a22c75807f7", - "reference": "14f5fff1e64118595db5408e946f3a22c75807f7", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5805f7a4e4958dbb5e944ef1e6edae0a303765e7", + "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7", "shasum": "" }, "require": { @@ -21670,11 +21655,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ - "bin/phpcbf", - "bin/phpcs" + "bin/phpcs", + "bin/phpcbf" ], "type": "library", "extra": { @@ -21727,7 +21712,7 @@ "type": "open_collective" } ], - "time": "2024-01-11T20:47:48+00:00" + "time": "2023-12-08T12:32:31+00:00" }, { "name": "steverhoades/oauth2-openid-connect-server", @@ -21905,16 +21890,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "14a75869bbb41cb35bc5d9d322473928c6f3f978" + "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/14a75869bbb41cb35bc5d9d322473928c6f3f978", - "reference": "14a75869bbb41cb35bc5d9d322473928c6f3f978", + "url": "https://api.github.com/repos/symfony/cache/zipball/ac2d25f97b17eec6e19760b6b9962a4f7c44356a", + "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a", "shasum": "" }, "require": { @@ -21981,7 +21966,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.2" + "source": "https://github.com/symfony/cache/tree/v6.4.0" }, "funding": [ { @@ -21997,7 +21982,7 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:34:34+00:00" + "time": "2023-11-24T19:28:07+00:00" }, { "name": "symfony/cache-contracts", @@ -22152,16 +22137,16 @@ }, { "name": "symfony/console", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625" + "reference": "ca73e92b0ab86d3c5347f58ec6d822cce6ded1b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0254811a143e6bc6c8deea08b589a7e68a37f625", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625", + "url": "https://api.github.com/repos/symfony/console/zipball/ca73e92b0ab86d3c5347f58ec6d822cce6ded1b0", + "reference": "ca73e92b0ab86d3c5347f58ec6d822cce6ded1b0", "shasum": "" }, "require": { @@ -22169,7 +22154,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -22183,16 +22168,12 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "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" + "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" }, "type": "library", "autoload": { @@ -22226,7 +22207,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.2" + "source": "https://github.com/symfony/console/tree/v6.3.11" }, "funding": [ { @@ -22242,20 +22223,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2023-12-10T14:03:40+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "226ea431b1eda6f0d9f5a4b278757171960bb195" + "reference": "891c195b2aa6beed145adf2c9cf0dcbdb58f71b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/226ea431b1eda6f0d9f5a4b278757171960bb195", - "reference": "226ea431b1eda6f0d9f5a4b278757171960bb195", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/891c195b2aa6beed145adf2c9cf0dcbdb58f71b4", + "reference": "891c195b2aa6beed145adf2c9cf0dcbdb58f71b4", "shasum": "" }, "require": { @@ -22263,7 +22244,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|^7.0" + "symfony/var-exporter": "^6.2.10" }, "conflict": { "ext-psr": "<1.1|>=2", @@ -22277,9 +22258,9 @@ "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.1", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -22307,7 +22288,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.4.2" + "source": "https://github.com/symfony/dependency-injection/tree/v6.3.11" }, "funding": [ { @@ -22323,11 +22304,11 @@ "type": "tidelift" } ], - "time": "2023-12-28T19:16:56+00:00" + "time": "2023-12-28T19:16:47+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -22374,7 +22355,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.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -22461,31 +22442,30 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.0", + "version": "v6.3.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" + "reference": "1f69476b64fb47105c06beef757766c376b548c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/1f69476b64fb47105c06beef757766c376b548c4", + "reference": "1f69476b64fb47105c06beef757766c376b548c4", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^5.4|^6.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -22516,7 +22496,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.4.0" + "source": "https://github.com/symfony/error-handler/tree/v6.3.5" }, "funding": [ { @@ -22532,20 +22512,20 @@ "type": "tidelift" } ], - "time": "2023-10-18T09:43:34+00:00" + "time": "2023-09-12T06:57:20+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "e95216850555cd55e71b857eb9d6c2674124603a" + "reference": "4b4738c49f4dc2f6cf750301c7781dd0d715c0b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e95216850555cd55e71b857eb9d6c2674124603a", - "reference": "e95216850555cd55e71b857eb9d6c2674124603a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4b4738c49f4dc2f6cf750301c7781dd0d715c0b8", + "reference": "4b4738c49f4dc2f6cf750301c7781dd0d715c0b8", "shasum": "" }, "require": { @@ -22562,13 +22542,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "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/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/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -22596,7 +22576,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.4.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.11" }, "funding": [ { @@ -22612,11 +22592,11 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:16:42+00:00" + "time": "2023-12-27T22:16:07+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -22672,7 +22652,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" }, "funding": [ { @@ -22819,34 +22799,34 @@ }, { "name": "symfony/framework-bundle", - "version": "v6.4.2", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "c26a221e0462027d1f9d4a802ed63f8ab07a43d0" + "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c26a221e0462027d1f9d4a802ed63f8ab07a43d0", - "reference": "c26a221e0462027d1f9d4a802ed63f8ab07a43d0", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f83d20092e98c3ae8b5874b8f0787546c5c61cda", + "reference": "f83d20092e98c3ae8b5874b8f0787546c5c61cda", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", "php": ">=8.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.3.1", "symfony/deprecation-contracts": "^2.5|^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/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/polyfill-mbstring": "~1.0", - "symfony/routing": "^6.4|^7.0" + "symfony/routing": "^5.4|^6.0" }, "conflict": { "doctrine/annotations": "<1.13.1", @@ -22854,71 +22834,67 @@ "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|>=7.0", - "symfony/dom-crawler": "<6.4", + "symfony/console": "<5.4", + "symfony/dom-crawler": "<6.3", "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.4", + "symfony/mime": "<6.2", "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.4", + "symfony/serializer": "<6.3", "symfony/stopwatch": "<5.4", - "symfony/translation": "<6.4", + "symfony/translation": "<6.2.8", "symfony/twig-bridge": "<5.4", "symfony/twig-bundle": "<5.4", - "symfony/validator": "<6.4", - "symfony/web-profiler-bundle": "<6.4", - "symfony/workflow": "<6.4" + "symfony/validator": "<6.3", + "symfony/web-profiler-bundle": "<5.4", + "symfony/workflow": "<5.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", - "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/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", "symfony/polyfill-intl-icu": "~1.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", + "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", "twig/twig": "^2.10|^3.0" }, "type": "symfony-bundle", @@ -22947,7 +22923,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.4.2" + "source": "https://github.com/symfony/framework-bundle/tree/v6.3.9" }, "funding": [ { @@ -22963,20 +22939,20 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:34:34+00:00" + "time": "2023-11-24T10:25:33+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271" + "reference": "63a2041d055f17cdbd454838e2fbb822e2abc266" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/172d807f9ef3fc3fbed8377cc57c20d389269271", - "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/63a2041d055f17cdbd454838e2fbb822e2abc266", + "reference": "63a2041d055f17cdbd454838e2fbb822e2abc266", "shasum": "" }, "require": { @@ -22991,12 +22967,12 @@ "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.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" + "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" }, "type": "library", "autoload": { @@ -23024,7 +23000,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.4.2" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.11" }, "funding": [ { @@ -23040,29 +23016,29 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:16:42+00:00" + "time": "2023-12-27T22:16:07+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "13e8387320b5942d0dc408440c888e2d526efef4" + "reference": "9e9966d27dfe612898ffb3c507a1db2f29faefd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/13e8387320b5942d0dc408440c888e2d526efef4", - "reference": "13e8387320b5942d0dc408440c888e2d526efef4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9e9966d27dfe612898ffb3c507a1db2f29faefd1", + "reference": "9e9966d27dfe612898ffb3c507a1db2f29faefd1", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/error-handler": "^6.3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^6.3.4", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -23070,7 +23046,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.4", + "symfony/dependency-injection": "<6.3.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -23080,7 +23056,7 @@ "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<6.4", + "symfony/validator": "<5.4", "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, @@ -23089,26 +23065,26 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.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/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/http-client-contracts": "^2.5|^3", - "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/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/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^6.3", + "symfony/var-exporter": "^6.2", "twig/twig": "^2.13|^3.0.4" }, "type": "library", @@ -23137,7 +23113,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.4.2" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.11" }, "funding": [ { @@ -23153,20 +23129,20 @@ "type": "tidelift" } ], - "time": "2023-12-30T15:31:44+00:00" + "time": "2023-12-30T13:09:13+00:00" }, { "name": "symfony/intl", - "version": "v6.4.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "4f45148f7eb984ef12b1f7e123205ab904828839" + "reference": "41d16f0294b9ca6e5540728580c65cfa3848fbf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/4f45148f7eb984ef12b1f7e123205ab904828839", - "reference": "4f45148f7eb984ef12b1f7e123205ab904828839", + "url": "https://api.github.com/repos/symfony/intl/zipball/41d16f0294b9ca6e5540728580c65cfa3848fbf5", + "reference": "41d16f0294b9ca6e5540728580c65cfa3848fbf5", "shasum": "" }, "require": { @@ -23219,7 +23195,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.2" + "source": "https://github.com/symfony/intl/tree/v6.4.0" }, "funding": [ { @@ -23235,100 +23211,20 @@ "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": [ - { - "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-19T09:12:31+00:00" + "time": "2023-10-28T23:12:08+00:00" }, { "name": "symfony/mime", - "version": "v6.4.0", + "version": "v6.3.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" + "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", "shasum": "" }, "require": { @@ -23342,16 +23238,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/serializer": "<6.2.13|>=6.3,<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|^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" + "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" }, "type": "library", "autoload": { @@ -23383,7 +23279,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.0" + "source": "https://github.com/symfony/mime/tree/v6.3.5" }, "funding": [ { @@ -23399,7 +23295,7 @@ "type": "tidelift" } ], - "time": "2023-10-17T11:49:05+00:00" + "time": "2023-09-29T06:59:36+00:00" }, { "name": "symfony/options-resolver", @@ -23470,16 +23366,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v5.4.34", + "version": "v5.4.26", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "b3f772189bfc52e870233a040e888fc3b64c2a22" + "reference": "d04639b395e25efa4260fc5b12a9fa1eafb38a64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/b3f772189bfc52e870233a040e888fc3b64c2a22", - "reference": "b3f772189bfc52e870233a040e888fc3b64c2a22", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/d04639b395e25efa4260fc5b12a9fa1eafb38a64", + "reference": "d04639b395e25efa4260fc5b12a9fa1eafb38a64", "shasum": "" }, "require": { @@ -23533,7 +23429,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.34" + "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.26" }, "funding": [ { @@ -23549,20 +23445,20 @@ "type": "tidelift" } ], - "time": "2023-12-18T14:56:06+00:00" + "time": "2023-07-12T15:44:31+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -23577,7 +23473,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23615,7 +23511,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -23631,20 +23527,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.28.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1" + "reference": "927013f3aac555983a5059aada98e1907d842695" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1", - "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", + "reference": "927013f3aac555983a5059aada98e1907d842695", "shasum": "" }, "require": { @@ -23659,7 +23555,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23698,7 +23594,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" }, "funding": [ { @@ -23714,20 +23610,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -23739,7 +23635,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23779,7 +23675,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -23795,7 +23691,7 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-icu", @@ -23886,16 +23782,16 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -23909,7 +23805,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -23953,7 +23849,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -23969,20 +23865,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -23994,7 +23890,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -24037,7 +23933,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -24053,20 +23949,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -24081,7 +23977,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -24120,7 +24016,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -24136,7 +24032,7 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php72", @@ -24378,16 +24274,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", "shasum": "" }, "require": { @@ -24397,7 +24293,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.28-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -24410,10 +24306,7 @@ ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -24438,7 +24331,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" }, "funding": [ { @@ -24454,20 +24347,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241" + "reference": "0a4e8fac947b0f1720b0f634a13a2273cc4cc1ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c4b1ef0bc80533d87a2e969806172f1c2a980241", - "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241", + "url": "https://api.github.com/repos/symfony/process/zipball/0a4e8fac947b0f1720b0f634a13a2273cc4cc1ad", + "reference": "0a4e8fac947b0f1720b0f634a13a2273cc4cc1ad", "shasum": "" }, "require": { @@ -24499,7 +24392,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.2" + "source": "https://github.com/symfony/process/tree/v6.3.11" }, "funding": [ { @@ -24515,7 +24408,7 @@ "type": "tidelift" } ], - "time": "2023-12-22T16:42:54+00:00" + "time": "2023-12-02T12:48:42+00:00" }, { "name": "symfony/property-access", @@ -24596,34 +24489,34 @@ }, { "name": "symfony/property-info", - "version": "v6.4.0", + "version": "v6.3.9", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "288be71bae2ebc88676f5d3a03d23f70b278fcc1" + "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/288be71bae2ebc88676f5d3a03d23f70b278fcc1", - "reference": "288be71bae2ebc88676f5d3a03d23f70b278fcc1", + "url": "https://api.github.com/repos/symfony/property-info/zipball/664ae7ad443d7cc591ff3e15496b954e4cefe729", + "reference": "664ae7ad443d7cc591ff3e15496b954e4cefe729", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<5.4", - "symfony/serializer": "<6.4" + "symfony/dependency-injection": "<5.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|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -24659,7 +24552,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.0" + "source": "https://github.com/symfony/property-info/tree/v6.3.9" }, "funding": [ { @@ -24675,42 +24568,46 @@ "type": "tidelift" } ], - "time": "2023-11-25T16:57:46+00:00" + "time": "2023-11-24T11:57:32+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v6.4.2", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "d32f5898f163266230182432b877ab7623ff252d" + "reference": "28a732c05bbad801304ad5a5c674cf2970508993" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/d32f5898f163266230182432b877ab7623ff252d", - "reference": "d32f5898f163266230182432b877ab7623ff252d", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/28a732c05bbad801304ad5a5c674cf2970508993", + "reference": "28a732c05bbad801304ad5a5c674cf2970508993", "shasum": "" }, "require": { - "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" + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0", + "symfony/http-foundation": "^5.4 || ^6.0" }, "require-dev": { "nyholm/psr7": "^1.1", - "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" + "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" }, "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-main": "2.2-dev" + } + }, "autoload": { "psr-4": { "Symfony\\Bridge\\PsrHttpMessage\\": "" @@ -24730,11 +24627,11 @@ }, { "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "homepage": "http://symfony.com/contributors" } ], "description": "PSR HTTP message bridge", - "homepage": "https://symfony.com", + "homepage": "http://symfony.com", "keywords": [ "http", "http-message", @@ -24742,7 +24639,8 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v6.4.2" + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.2.0" }, "funding": [ { @@ -24758,20 +24656,20 @@ "type": "tidelift" } ], - "time": "2023-12-28T07:55:26+00:00" + "time": "2023-04-21T08:40:19+00:00" }, { "name": "symfony/routing", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "98eab13a07fddc85766f1756129c69f207ffbc21" + "reference": "5f1b4eb8e7b7d8487389bd774fb76f51dba57452" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/98eab13a07fddc85766f1756129c69f207ffbc21", - "reference": "98eab13a07fddc85766f1756129c69f207ffbc21", + "url": "https://api.github.com/repos/symfony/routing/zipball/5f1b4eb8e7b7d8487389bd774fb76f51dba57452", + "reference": "5f1b4eb8e7b7d8487389bd774fb76f51dba57452", "shasum": "" }, "require": { @@ -24787,11 +24685,11 @@ "require-dev": { "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "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" + "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" }, "type": "library", "autoload": { @@ -24825,7 +24723,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.2" + "source": "https://github.com/symfony/routing/tree/v6.3.11" }, "funding": [ { @@ -24841,20 +24739,20 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:34:34+00:00" + "time": "2023-12-29T15:20:22+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "f87ea9d7bfd4cf2f7b72be554607e6c96e6664af" + "reference": "83a2e5ec60dddfb227b28ef9bffb7da073e50cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/f87ea9d7bfd4cf2f7b72be554607e6c96e6664af", - "reference": "f87ea9d7bfd4cf2f7b72be554607e6c96e6664af", + "url": "https://api.github.com/repos/symfony/serializer/zipball/83a2e5ec60dddfb227b28ef9bffb7da073e50cfc", + "reference": "83a2e5ec60dddfb227b28ef9bffb7da073e50cfc", "shasum": "" }, "require": { @@ -24870,32 +24768,28 @@ "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", - "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" + "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" }, "type": "library", "autoload": { @@ -24923,7 +24817,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.4.2" + "source": "https://github.com/symfony/serializer/tree/v6.3.11" }, "funding": [ { @@ -24939,25 +24833,25 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:34:34+00:00" + "time": "2023-12-29T15:20:22+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^1.1|^2.0" + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -25005,7 +24899,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { @@ -25021,20 +24915,20 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/string", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc" + "reference": "6a4b1e7b315cf420c814c8e29d8af1e96ae4b674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/7cb80bc10bfcdf6b5492741c0b9357dac66940bc", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc", + "url": "https://api.github.com/repos/symfony/string/zipball/6a4b1e7b315cf420c814c8e29d8af1e96ae4b674", + "reference": "6a4b1e7b315cf420c814c8e29d8af1e96ae4b674", "shasum": "" }, "require": { @@ -25048,11 +24942,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "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/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -25091,7 +24985,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.2" + "source": "https://github.com/symfony/string/tree/v6.3.11" }, "funding": [ { @@ -25107,20 +25001,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2023-12-10T14:03:40+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.4.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "06450585bf65e978026bda220cdebca3f867fde7" + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", - "reference": "06450585bf65e978026bda220cdebca3f867fde7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", "shasum": "" }, "require": { @@ -25169,7 +25063,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" }, "funding": [ { @@ -25185,20 +25079,20 @@ "type": "tidelift" } ], - "time": "2023-12-26T14:02:43+00:00" + "time": "2023-05-30T17:17:10+00:00" }, { "name": "symfony/validator", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "15fe2c6ed815b06b6b8636d8ba3ef9807ee1a75c" + "reference": "e35e841744bc8d3c54ffd35f06e22e02b36d6209" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/15fe2c6ed815b06b6b8636d8ba3ef9807ee1a75c", - "reference": "15fe2c6ed815b06b6b8636d8ba3ef9807ee1a75c", + "url": "https://api.github.com/repos/symfony/validator/zipball/e35e841744bc8d3c54ffd35f06e22e02b36d6209", + "reference": "e35e841744bc8d3c54ffd35f06e22e02b36d6209", "shasum": "" }, "require": { @@ -25223,21 +25117,21 @@ "require-dev": { "doctrine/annotations": "^1.13|^2", "egulias/email-validator": "^2.1.10|^3|^4", - "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" + "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" }, "type": "library", "autoload": { @@ -25265,7 +25159,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.2" + "source": "https://github.com/symfony/validator/tree/v6.3.11" }, "funding": [ { @@ -25281,20 +25175,20 @@ "type": "tidelift" } ], - "time": "2023-12-29T16:34:12+00:00" + "time": "2023-12-29T16:33:47+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f" + "reference": "376d3c652c17c33d88db7a7e2e5288ecf3e327dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", - "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/376d3c652c17c33d88db7a7e2e5288ecf3e327dc", + "reference": "376d3c652c17c33d88db7a7e2e5288ecf3e327dc", "shasum": "" }, "require": { @@ -25307,11 +25201,10 @@ }, "require-dev": { "ext-iconv": "*", - "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", + "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", "twig/twig": "^2.13|^3.0.4" }, "bin": [ @@ -25350,7 +25243,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.2" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.11" }, "funding": [ { @@ -25366,28 +25259,27 @@ "type": "tidelift" } ], - "time": "2023-12-28T19:16:56+00:00" + "time": "2023-12-28T15:37:35+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.2", + "version": "v6.3.11", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "5fe9a0021b8d35e67d914716ec8de50716a68e7e" + "reference": "a8a93f02c528066a3ee66ed823dff839b602e1c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5fe9a0021b8d35e67d914716ec8de50716a68e7e", - "reference": "5fe9a0021b8d35e67d914716ec8de50716a68e7e", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a8a93f02c528066a3ee66ed823dff839b602e1c1", + "reference": "a8a93f02c528066a3ee66ed823dff839b602e1c1", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.1" }, "require-dev": { - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -25425,7 +25317,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.2" + "source": "https://github.com/symfony/var-exporter/tree/v6.3.11" }, "funding": [ { @@ -25441,20 +25333,20 @@ "type": "tidelift" } ], - "time": "2023-12-27T08:18:35+00:00" + "time": "2023-12-26T12:32:59+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.0", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587" + "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4f9237a1bb42455d609e6687d2613dde5b41a587", - "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3493af8a8dad7fa91c77fa473ba23ecd95334a92", + "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92", "shasum": "" }, "require": { @@ -25466,7 +25358,7 @@ "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^5.4|^6.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -25497,7 +25389,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.0" + "source": "https://github.com/symfony/yaml/tree/v6.3.8" }, "funding": [ { @@ -25513,7 +25405,7 @@ "type": "tidelift" } ], - "time": "2023-11-06T11:00:25+00:00" + "time": "2023-11-06T10:58:05+00:00" }, { "name": "theseer/tokenizer", @@ -25737,27 +25629,26 @@ }, { "name": "twig/twig", - "version": "v3.8.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" + "reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", - "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd", + "reference": "7e7d5839d4bec168dfeef0ac66d5c5a2edbabffd", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" }, "type": "library", "autoload": { @@ -25793,7 +25684,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.8.0" + "source": "https://github.com/twigphp/Twig/tree/v3.6.1" }, "funding": [ { @@ -25805,20 +25696,20 @@ "type": "tidelift" } ], - "time": "2023-11-21T18:54:41+00:00" + "time": "2023-06-08T12:52:13+00:00" }, { "name": "va-gov/content-build", - "version": "v0.0.3427", + "version": "v0.0.3414", "source": { "type": "git", "url": "https://github.com/department-of-veterans-affairs/content-build.git", - "reference": "d98e082265882b311383cb6a0b83ef6cf6d72f42" + "reference": "a337ba03263ce90145a22194c353cbf9b3eb71a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/d98e082265882b311383cb6a0b83ef6cf6d72f42", - "reference": "d98e082265882b311383cb6a0b83ef6cf6d72f42", + "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/a337ba03263ce90145a22194c353cbf9b3eb71a0", + "reference": "a337ba03263ce90145a22194c353cbf9b3eb71a0", "shasum": "" }, "type": "node-project", @@ -25845,9 +25736,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.3427" + "source": "https://github.com/department-of-veterans-affairs/content-build/tree/v0.0.3414" }, - "time": "2024-01-24T17:14:58+00:00" + "time": "2024-01-04T16:17:01+00:00" }, { "name": "vlucas/phpdotenv", @@ -26805,6 +26696,24 @@ } ], "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", @@ -26835,6 +26744,7 @@ "drupal/hook_event_dispatcher": 10, "drupal/image_style_warmer": 5, "drupal/jsonapi_resources": 10, + "drupal/limited_field_widgets": 15, "drupal/linkit": 5, "drupal/linky": 10, "drupal/menu_breadcrumb": 15, @@ -26845,6 +26755,7 @@ "drupal/openapi_ui": 5, "drupal/paragraphs_features": 10, "drupal/password_strength": 20, + "drupal/pathologic": 15, "drupal/prometheus_exporter": 10, "drupal/schemata": 10, "drupal/simplesamlphp_auth": 5, diff --git a/config/local/simplesamlphp_auth.settings.yml b/config/local/simplesamlphp_auth.settings.yml index 683ccf2d2..654546b95 100644 --- a/config/local/simplesamlphp_auth.settings.yml +++ b/config/local/simplesamlphp_auth.settings.yml @@ -9,7 +9,7 @@ header_no_cache: false role: population: '' eval_every_time: false -register_users: false +register_users: true allow: set_drupal_pwd: true default_login: true diff --git a/config/prod/simplesamlphp_auth.settings.yml b/config/prod/simplesamlphp_auth.settings.yml index 9861d67e5..7f00ed4c8 100644 --- a/config/prod/simplesamlphp_auth.settings.yml +++ b/config/prod/simplesamlphp_auth.settings.yml @@ -4,7 +4,7 @@ login_link_display_name: 'Login with PIV or other Smartcard.' debug: false secure: true httponly: false -register_users: false +register_users: true header_no_cache: false allow: default_login: true diff --git a/config/stg/simplesamlphp_auth.settings.yml b/config/stg/simplesamlphp_auth.settings.yml index 9861d67e5..7f00ed4c8 100644 --- a/config/stg/simplesamlphp_auth.settings.yml +++ b/config/stg/simplesamlphp_auth.settings.yml @@ -4,7 +4,7 @@ login_link_display_name: 'Login with PIV or other Smartcard.' debug: false secure: true httponly: false -register_users: false +register_users: true header_no_cache: false allow: default_login: true diff --git a/config/sync/clientside_validation.settings.yml b/config/sync/clientside_validation.settings.yml deleted file mode 100644 index 4814ea29e..000000000 --- a/config/sync/clientside_validation.settings.yml +++ /dev/null @@ -1,4 +0,0 @@ -_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 deleted file mode 100644 index 1c68f90ce..000000000 --- a/config/sync/clientside_validation_jquery.settings.yml +++ /dev/null @@ -1,6 +0,0 @@ -_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 ed14648e9..1b2576ac1 100644 --- a/config/sync/core.entity_form_display.media.image.default.yml +++ b/config/sync/core.entity_form_display.media.image.default.yml @@ -8,10 +8,9 @@ dependencies: - field.field.media.image.field_media_submission_guideline - field.field.media.image.field_owner - field.field.media.image.image - - image.style.full_content_width + - image.style.3_2_medium_thumbnail - media.type.image module: - - change_labels - field_group - image_widget_crop - markup @@ -48,7 +47,6 @@ 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: { } @@ -70,23 +68,14 @@ content: region: content settings: progress_indicator: throbber - preview_image_style: full_content_width + preview_image_style: 3_2_medium_thumbnail crop_preview_image_style: crop_thumbnail - crop_list: - - '2_1' - - '2_3' - - '3_2' - - '7_2' - - freeform - - original - - square + crop_list: { } crop_types_required: { } warn_multiple_usages: false show_crop_area: true show_default_crop: true - third_party_settings: - change_labels: - remove_label: '' + third_party_settings: { } name: type: string_textfield weight: 1 @@ -95,11 +84,6 @@ 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 ed66f4ecb..11f5fad9f 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: '@remaining_count characters remaining' + textcount_status_message: 'Maxlength: @maxlength
Used: @current_length
Remaining: @remaining_count' 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 55a7e6fcc..d8b3a76b7 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,7 +15,6 @@ 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 @@ -31,6 +30,7 @@ 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: 9 + weight: 8 format_type: details_sidebar format_settings: classes: '' @@ -65,7 +65,7 @@ third_party_settings: label: 'Editorial Workflow' region: content parent_name: '' - weight: 10 + weight: 9 format_type: fieldset format_settings: classes: '' @@ -78,7 +78,7 @@ third_party_settings: label: '"Prepare for your visit"' region: content parent_name: '' - weight: 7 + weight: 6 format_type: details format_settings: classes: '' @@ -119,7 +119,7 @@ third_party_settings: label: 'Social Media' region: content parent_name: '' - weight: 6 + weight: 5 format_type: fieldset format_settings: classes: '' @@ -158,7 +158,6 @@ 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: '' @@ -205,7 +204,7 @@ third_party_settings: label: 'COVID-19 health protection guidelines' region: hidden parent_name: '' - weight: 21 + weight: 19 format_type: html_element format_settings: classes: '' @@ -247,7 +246,6 @@ 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: { } @@ -282,13 +280,12 @@ 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: 11 + weight: 10 region: content settings: { } third_party_settings: { } @@ -318,13 +315,6 @@ 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 @@ -343,8 +333,7 @@ content: type: office_hours_default weight: 29 region: content - settings: - collapsed: false + settings: { } third_party_settings: { } field_operating_status_facility: type: options_buttons @@ -362,7 +351,6 @@ 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: { } @@ -398,7 +386,7 @@ content: third_party_settings: { } path: type: path - weight: 8 + weight: 7 region: content settings: { } third_party_settings: { } @@ -413,7 +401,6 @@ 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 bb8face28..e8f2e84b4 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,7 +16,6 @@ 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 @@ -151,7 +150,6 @@ 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 5a013764e..f72aca1fd 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.restricted_archive + - workflows.workflow.editorial 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 dfd98c488..ca779bc27 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.restricted_archive + - workflows.workflow.editorial 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 d48cf3b36..44714eca6 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.restricted_archive + - workflows.workflow.editorial 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 2eeb0bdba..47f115235 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.restricted_archive + - workflows.workflow.editorial 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 bf5bfece8..2a3cc6f51 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.restricted_archive + - workflows.workflow.editorial 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 8cf2c8fe1..f0e1275d3 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.restricted_archive + - workflows.workflow.editorial 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 67262f7c8..5f48b5cda 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.restricted_archive + - workflows.workflow.editorial 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 dbd802eb5..7f38f10b7 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.restricted_archive + - workflows.workflow.editorial 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 8a2ea63ce..a1ddf0e56 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,7 +15,6 @@ 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,7 +94,6 @@ 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 @@ -157,7 +155,7 @@ content: label: above settings: { } third_party_settings: { } - weight: 16 + weight: 17 region: content field_description: type: string @@ -202,21 +200,13 @@ content: third_party_settings: { } weight: 0 region: content - field_mental_health_contact_phon: - type: telephone_link - label: inline - settings: - title: '' - third_party_settings: { } - weight: 20 - region: content field_mental_health_phone: type: telephone_link label: inline settings: title: '' third_party_settings: { } - weight: 19 + weight: 20 region: content field_mobile: type: boolean @@ -226,7 +216,7 @@ content: format_custom_false: '' format_custom_true: '' third_party_settings: { } - weight: 18 + weight: 19 region: content field_office_hours: type: office_hours @@ -259,7 +249,7 @@ content: schema: enabled: false third_party_settings: { } - weight: 20 + weight: 21 region: content field_operating_status_facility: type: list_default @@ -281,14 +271,14 @@ content: settings: title: '' third_party_settings: { } - weight: 17 + weight: 18 region: content field_timezone: type: basic_string label: above settings: { } third_party_settings: { } - weight: 21 + weight: 22 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 c148f6326..166c5fe7a 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,7 +16,6 @@ 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 @@ -220,6 +219,7 @@ content: grouped: false show_closed: all closed_format: Closed + all_day_format: 'All day open' separator: days: '
' grouped_days: ' - ' @@ -230,6 +230,11 @@ 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: @@ -268,7 +273,6 @@ 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 54d54c1bd..d978097d7 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,7 +16,6 @@ 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 @@ -120,7 +119,6 @@ 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 45398d626..23950b24f 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,7 +16,6 @@ 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 @@ -96,7 +95,6 @@ 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 d7ad4a2d3..67e9b2840 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -24,8 +24,6 @@ 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/feature_toggle.features.yml b/config/sync/feature_toggle.features.yml index c874cc6e9..211539b63 100644 --- a/config/sync/feature_toggle.features.yml +++ b/config/sync/feature_toggle.features.yml @@ -2,6 +2,6 @@ _core: default_config_hash: daCVJgiGNXHoQmWA2-cvaQEapbq7AGlBQtopOWTqqlw features: feature_all_hub_side_navs: FEATURE_ALL_HUB_SIDE_NAVS + feature_single_value_field_link: FEATURE_SINGLE_VALUE_FIELD_LINK feature_health_connect_number: FEATURE_HEALTH_CONNECT_NUMBER feature_next_story_preview: FEATURE_NEXT_STORY_PREVIEW - feature_mobile_app_promo: FEATURE_MOBILE_APP_PROMO 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 deleted file mode 100644 index f62a8a60d..000000000 --- a/config/sync/field.field.node.health_care_local_facility.field_mental_health_contact_phon.yml +++ /dev/null @@ -1,25 +0,0 @@ -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 ff107baf8..bb2fc3160 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,15 +7,11 @@ 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 number' +label: 'Mental Health Phone' 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 45b797bbb..0859ff7da 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,15 +7,11 @@ 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 54465c6f5..f111a20eb 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 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).

" + 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).

" 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 f514c78b7..7bf6f6d51 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.
\r\nTags allow users to see more articles for that tag.
\r\nYou can select a combination of Topics and Audiences.

\r\n" + 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" 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 deleted file mode 100644 index a32d2da38..000000000 --- a/config/sync/field.storage.node.field_mental_health_contact_phon.yml +++ /dev/null @@ -1,19 +0,0 @@ -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 b7fc49f3d..98341fe19 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: -1 +cardinality: 4 translatable: true indexes: { } persist_with_no_fields: false diff --git a/config/sync/next.settings.yml b/config/sync/next.settings.yml index d5cb9d91d..6a6d3d954 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: 86400 + secret_expiration: 300 debug: false diff --git a/config/sync/views.view.user_admin_people.yml b/config/sync/views.view.user_admin_people.yml index 955be0390..971377b47 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: 'Y-m-d H:i:s' + custom_date_format: 'F j, Y, g:ia' timezone: '' tooltip: date_format: '' @@ -1477,7 +1477,6 @@ display: past_format: '@interval ago' granularity: 2 refresh: 60 - description: '' group_column: value group_columns: { } group_rows: true @@ -1502,7 +1501,7 @@ display: exclude: false alter: alter_text: true - 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 %}" + 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 %}" make_link: false path: '' absolute: false @@ -2007,7 +2006,7 @@ display: type: timestamp settings: date_format: custom - custom_date_format: 'Y-m-d H:i:s' + custom_date_format: 'F j, Y, g:ia' timezone: '' tooltip: date_format: '' @@ -2043,7 +2042,7 @@ display: exclude: false alter: alter_text: true - 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 %}" + 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 %}" make_link: false path: '' absolute: false diff --git a/config/sync/workflows.workflow.editorial.yml b/config/sync/workflows.workflow.editorial.yml index 8f2215978..1cba2486a 100644 --- a/config/sync/workflows.workflow.editorial.yml +++ b/config/sync/workflows.workflow.editorial.yml @@ -20,9 +20,11 @@ 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 @@ -42,6 +44,12 @@ 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 @@ -153,9 +161,11 @@ 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 @@ -175,6 +185,12 @@ 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 731793da0..71d33174f 100644 --- a/config/sync/workflows.workflow.restricted_archive.yml +++ b/config/sync/workflows.workflow.restricted_archive.yml @@ -3,15 +3,7 @@ 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 @@ -99,14 +91,6 @@ 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/config/tugboat/simplesamlphp_auth.settings.yml b/config/tugboat/simplesamlphp_auth.settings.yml index e2d49332e..e9c1f6802 100644 --- a/config/tugboat/simplesamlphp_auth.settings.yml +++ b/config/tugboat/simplesamlphp_auth.settings.yml @@ -4,7 +4,7 @@ login_link_display_name: 'Login with PIV or other Smartcard.' debug: true secure: true httponly: false -register_users: false +register_users: true header_no_cache: false allow: default_login: true diff --git a/docroot/design-system/components/input/input.scss b/docroot/design-system/components/input/input.scss index 9ab24f945..50cc01ec0 100644 --- a/docroot/design-system/components/input/input.scss +++ b/docroot/design-system/components/input/input.scss @@ -23,6 +23,5 @@ } .form-item--error-message { - color: var(--va-red-dark); - margin: 5px 0; + color: var(--va-red-bright); } diff --git a/docroot/design-system/components/tokens/_variables.scss b/docroot/design-system/components/tokens/_variables.scss index fbbc25b89..a86e64bfa 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-dark); + --color-maximumred: var(--va-red-bright); --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 83aacc69d..048866247 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,6 +3,80 @@ */ (($, 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() { @@ -49,6 +123,8 @@ .parent() .hide(); + // Enforce tag selection rules. + enforceMaximumNumberOfTags(); // React when the tags fieldset changes. $("fieldset#edit-group-tags").change(() => { const selection = $( @@ -98,6 +174,8 @@ 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 730bbd9ef..072751aa8 100644 --- a/docroot/modules/custom/va_gov_backend/js/audience_topics.js +++ b/docroot/modules/custom/va_gov_backend/js/audience_topics.js @@ -4,7 +4,40 @@ * 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) { @@ -16,26 +49,36 @@ $('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 70de24852..d3b8ab3f7 100644 --- a/docroot/modules/custom/va_gov_backend/src/EventSubscriber/ThemeEventSubscriber.php +++ b/docroot/modules/custom/va_gov_backend/src/EventSubscriber/ThemeEventSubscriber.php @@ -7,6 +7,9 @@ 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; /** @@ -19,11 +22,27 @@ 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 deleted file mode 100644 index 0ea62ecce..000000000 --- a/docroot/modules/custom/va_gov_backend/src/Plugin/Validation/Constraint/RequiredParagraphAB.php +++ /dev/null @@ -1,75 +0,0 @@ -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 166de635c..598386237 100644 --- a/docroot/modules/custom/va_gov_backend/va_gov_backend.module +++ b/docroot/modules/custom/va_gov_backend/va_gov_backend.module @@ -419,12 +419,12 @@ function va_gov_backend_form_alter(&$form, FormStateInterface $form_state, $form // Only run when on a node. // Additionally, reduce the number of times called when editing a paragraph, // which will have a triggering_element set. - $base_form_id = $form_state->getBuildInfo()['base_form_id'] ?? ''; - if ((!$form_state->getTriggeringElement()) && ($base_form_id === "node_form")) { + if (isset($form['#entity_type']) + && $form['#entity_type'] === 'node' + && (!$form_state->getTriggeringElement())) { $targets = [ 'field_office', 'field_listing', - 'field_facility_location', ]; _va_gov_backend_dropdown_field_access($form, $targets); } @@ -786,6 +786,9 @@ 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.')); + } } } @@ -1042,13 +1045,6 @@ function _va_gov_backend_dropdown_field_access(array &$form, array $targets) { } } } - elseif (!empty($option_header)) { - // If not an array, it's just an option. - // If not in the allowed items array, take it out. - if (!in_array($header_key, $allowed_options)) { - unset($form[$target]['widget']['#options'][$header_key]); - } - } } } } @@ -1320,6 +1316,15 @@ 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', [ @@ -1933,24 +1938,12 @@ 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; - $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. + + if ($published_previously && !$toggled_on_this_save) { + // This was published and this 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 deleted file mode 100644 index 1964b2235..000000000 --- a/docroot/modules/custom/va_gov_clp/src/EventSubscriber/EntityEventSubscriber.php +++ /dev/null @@ -1,58 +0,0 @@ - '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 deleted file mode 100644 index bef76fd0a..000000000 --- a/docroot/modules/custom/va_gov_clp/va_gov_clp.services.yml +++ /dev/null @@ -1,5 +0,0 @@ -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 a604d7afe..41b2398e4 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,11 +46,10 @@ 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)) { - if ($node->get(EventOutreachInterface::PUBLISH_TO_OUTREACH_CAL_FIELD)->first()) { - $addToCalValue = $node->get(EventOutreachInterface::PUBLISH_TO_OUTREACH_CAL_FIELD)->first()->getValue(); + $addToCalValue = $node->get(EventOutreachInterface::PUBLISH_TO_OUTREACH_CAL_FIELD)->first()->getValue(); + if (isset($addToCalValue['value'])) { $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_entity_browser/va_gov_entity_browser.module b/docroot/modules/custom/va_gov_entity_browser/va_gov_entity_browser.module deleted file mode 100644 index 85554225f..000000000 --- a/docroot/modules/custom/va_gov_entity_browser/va_gov_entity_browser.module +++ /dev/null @@ -1,18 +0,0 @@ - { - 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 deleted file mode 100644 index 62b484ddf..000000000 --- a/docroot/modules/custom/va_gov_media/js/alt_text_validation.js +++ /dev/null @@ -1,52 +0,0 @@ -/** -* 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 deleted file mode 100644 index 8ce7af0f3..000000000 --- a/docroot/modules/custom/va_gov_media/src/Controller/AltTextValidationController.php +++ /dev/null @@ -1,66 +0,0 @@ -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 deleted file mode 100644 index aba483d34..000000000 --- a/docroot/modules/custom/va_gov_media/src/EventSubscriber/MediaEventSubscriber.php +++ /dev/null @@ -1,219 +0,0 @@ - '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 3d4f81304..e2d945d89 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,7 +3,3 @@ 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 deleted file mode 100644 index a26a5f6e2..000000000 --- a/docroot/modules/custom/va_gov_media/va_gov_media.libraries.yml +++ /dev/null @@ -1,5 +0,0 @@ -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 da508f413..f9970c83c 100644 --- a/docroot/modules/custom/va_gov_media/va_gov_media.module +++ b/docroot/modules/custom/va_gov_media/va_gov_media.module @@ -74,11 +74,23 @@ function _va_gov_media_image_style_warmer_warm_up(EntityInterface $entity) { } /** - * Implements hook_clientside_validation_validator_info_alter(). + * 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. */ -function va_gov_media_clientside_validation_validator_info_alter(&$validators) { - foreach ($validators as &$validator) { - $validator['attachments']['library'][] = 'va_gov_media/cv.alt-text.validate'; +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.'); } - unset($validator); + + // 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 deleted file mode 100644 index 7e4e00af3..000000000 --- a/docroot/modules/custom/va_gov_media/va_gov_media.routing.yml +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 97babefb3..000000000 --- a/docroot/modules/custom/va_gov_media/va_gov_media.services.yml +++ /dev/null @@ -1,8 +0,0 @@ -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 a7cdf3de6..4e23518c8 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 @@ -616,11 +616,11 @@ protected function preventUnintendedChangeOfParent(array &$form) { $form['menu']['link']['menu_parent']['#value'] = $this->currentMenuParent; } // Check for rare possibility that menu parent is the default menu root. - elseif (empty($this->currentMenuParent) || $this->currentMenuParent === "pittsburgh-health-care:") { + elseif ($this->currentMenuParent === "pittsburgh-health-care:") { return; } // This is not new so check the current parent exists in the reduced form. - elseif (!$current_menu_item_is_present || $this->isCurrentMenuParentDisabledAndLocked($form)) { + elseif (!$current_menu_item_is_present || $this->isCurrentMenuSettingDisabled($form)) { // Parent does not exist in reduced form, Put the original parent options // back to prevent data loss. The existing menu setting should not be // allowed, but it exists, so allow it to persist. It may have been @@ -633,11 +633,10 @@ protected function preventUnintendedChangeOfParent(array &$form) { $title .= " ($can_not_change)"; $form['menu']['link']['menu_parent']['#title'] = $title; } - } /** - * Checks to see if the current menu parent is disabled and children locked. + * Checks to see if the current menu parent is disabled. * * @param array $form * The form array. @@ -645,7 +644,7 @@ protected function preventUnintendedChangeOfParent(array &$form) { * @return bool * TRUE if the current menu parent is disabled. FALSE otherwise. */ - protected function isCurrentMenuParentDisabledAndLocked(array $form) : bool { + protected function isCurrentMenuSettingDisabled(array $form) : bool { $is_disabled = FALSE; $current_menu_setting = $form['menu']['link']['menu_parent']['#options'][$this->currentMenuParent] ?? ''; if (strpos($current_menu_setting, 'Disabled no-link') !== FALSE) { @@ -655,27 +654,6 @@ protected function isCurrentMenuParentDisabledAndLocked(array $form) : bool { return $is_disabled; } - /** - * Checks if the current menu parent is disabled but might allow children. - * - * @param array $form - * The form array. - * @param string $menu_parent - * The id of the menu parent currently selected at node load. - * - * @return bool - * TRUE if the current menu parent is disabled. FALSE otherwise. - */ - public static function isCurrentMenuParentDisabled(array $form, $menu_parent) : bool { - $is_disabled = FALSE; - $current_menu_setting = $form['menu']['link']['menu_parent']['#options'][$menu_parent] ?? ''; - if (strpos($current_menu_setting, 'Disabled') !== FALSE) { - $is_disabled = TRUE; - } - - return $is_disabled; - } - /** * Set the ['vagov_menu_access']['content_type'] on drupal settings. * diff --git a/docroot/modules/custom/va_gov_menu_access/va_gov_menu_access.module b/docroot/modules/custom/va_gov_menu_access/va_gov_menu_access.module index 5da101859..f88a5cb11 100644 --- a/docroot/modules/custom/va_gov_menu_access/va_gov_menu_access.module +++ b/docroot/modules/custom/va_gov_menu_access/va_gov_menu_access.module @@ -7,7 +7,6 @@ use Drupal\Core\Block\BlockPluginInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\va_gov_menu_access\Service\MenuReductionService; /** * Implements hook_page_attachments(). @@ -56,26 +55,7 @@ function _va_gov_menu_access_hide_menu_fields(array &$form) { */ function _va_gov_menu_access_set_menu_parent_requirement(array $form, FormStateInterface $form_state) { if ($form_state->getValue(['menu', 'enabled'])) { - $menu_parent = $form_state->getValue([ - 'menu', - 'menu_parent', - ]); - if (!empty($menu_parent) && MenuReductionService::isCurrentMenuParentDisabled($form, $menu_parent)) { - // The clientside_validation_jquery module's validation is too aggressive - // with the menu parent, and considers any option that is disabled as - // empty, even though there is a value in the option list. - // Since the parent field contains a disabled parent, we have to turn off - // clientside_validation for that field. - $form['menu']['link']['menu_parent']['#attributes']['novalidate'] = 'novalidate'; - $form['menu']['link']['menu_parent']['#attributes']['formnovalidate'] = 'formnovalidate'; - // Those should have been enough to make clientside_validation happy, - // but we need this too. No worries, there is drupal validation to prevent - // a save with no parent from succeeding. - $form['menu']['link']['menu_parent']['#required'] = FALSE; - } - else { - $form['menu']['link']['menu_parent']['#required'] = TRUE; - } + $form['menu']['link']['menu_parent']['#required'] = TRUE; $form['#validate'][] = '_va_gov_menu_access_parent_menu_selected_validation'; } return $form; 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 6edabbda7..cad355526 100644 --- a/docroot/modules/custom/va_gov_workflow/va_gov_workflow.install +++ b/docroot/modules/custom/va_gov_workflow/va_gov_workflow.install @@ -67,29 +67,3 @@ 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 3ad8e2e8d..ebcd04b96 100644 --- a/docroot/robots.txt +++ b/docroot/robots.txt @@ -37,15 +37,7 @@ Allow: /profiles/*.svg Disallow: /core/ Disallow: /profiles/ # Files -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: /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 c4b964fc2..8a6cdf2f7 100644 --- a/docroot/sites/default/default.services.yml +++ b/docroot/sites/default/default.services.yml @@ -214,8 +214,6 @@ 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 d69b1865e..c0b18427a 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' => 'sql_username', - * 'password' => 'sql_password', + * 'username' => 'sqlusername', + * 'password' => 'sqlpassword', * 'host' => 'localhost', * 'port' => '3306', * 'driver' => 'mysql', @@ -194,8 +194,8 @@ * $databases['default']['default'] = [ * 'driver' => 'pgsql', * 'database' => 'databasename', - * 'username' => 'sql_username', - * 'password' => 'sql_password', + * 'username' => 'sqlusername', + * 'password' => 'sqlpassword', * 'host' => 'localhost', * 'prefix' => '', * ]; @@ -205,7 +205,7 @@ * @code * $databases['default']['default'] = [ * 'driver' => 'sqlite', - * 'database' => '/path/to/database_filename', + * 'database' => '/path/to/databasefilename', * ]; * @endcode * @@ -216,33 +216,12 @@ * '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', + * 'username' => 'sqlusername', + * 'password' => 'sqlpassword', * '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 */ /** @@ -588,7 +567,7 @@ * the output of phpinfo(). The full output can contain sensitive information * so by default Drupal removes some sections. * - * This behavior can be configured by setting this variable to a different + * This behaviour 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 bfe061d05..7cb0e6857 100644 --- a/docroot/sites/example.settings.local.php +++ b/docroot/sites/example.settings.local.php @@ -29,7 +29,11 @@ * 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 2578550a0..b6d17bdb7 100644 --- a/docroot/themes/custom/vagovclaro/assets/scss/components/_fields.scss +++ b/docroot/themes/custom/vagovclaro/assets/scss/components/_fields.scss @@ -227,17 +227,6 @@ 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 aea6e81ec..0af297688 100644 --- a/docroot/themes/custom/vagovclaro/assets/scss/components/_media.scss +++ b/docroot/themes/custom/vagovclaro/assets/scss/components/_media.scss @@ -52,37 +52,3 @@ 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 3c9c482b1..3df68c527 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,6 +40,13 @@ {% 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 }} @@ -56,28 +63,22 @@ {% set inlineguidance %}

Best practices

    -
  • 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)
  • +
  • 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
{% endset %} {% include '@components/inline-guidance/text-box.twig' with { "content": inlineguidance, - "classes": 'hide', + "classes": 'show', } %} {{ 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 deleted file mode 100644 index 55487454f..000000000 --- a/patches/2949540-31.patch +++ /dev/null @@ -1,219 +0,0 @@ -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-48.patch b/patches/3106205-length-menu-tree-too-short.patch similarity index 98% rename from patches/3106205-length-menu-tree-too-short-48.patch rename to patches/3106205-length-menu-tree-too-short.patch index 85beb189e..8dd681406 100644 --- a/patches/3106205-length-menu-tree-too-short-48.patch +++ b/patches/3106205-length-menu-tree-too-short.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_10102() { ++function system_update_10101() { + $schema = \Drupal::database()->schema(); + $spec = [ + 'description' => 'The external path this link points to (when not using a route).', diff --git a/patches/3408217-error-call-to-member-function-getstorage-on-null.patch b/patches/3408217-error-call-to-member-function-getstorage-on-null.patch deleted file mode 100644 index 831a1f2de..000000000 --- a/patches/3408217-error-call-to-member-function-getstorage-on-null.patch +++ /dev/null @@ -1,87 +0,0 @@ -diff --git a/src/Plugin/Field/FieldWidget/EntityReferenceBrowserTableWidget.php b/src/Plugin/Field/FieldWidget/EntityReferenceBrowserTableWidget.php -index 177fda745f27e21d6377025e50b2caee9f28894a..af1f8b00834c9d9fadf9314a26c67769732d1694 100644 ---- a/src/Plugin/Field/FieldWidget/EntityReferenceBrowserTableWidget.php -+++ b/src/Plugin/Field/FieldWidget/EntityReferenceBrowserTableWidget.php -@@ -4,19 +4,10 @@ namespace Drupal\entity_browser_table\Plugin\Field\FieldWidget; - - use Drupal\Component\Plugin\Exception\PluginException; - use Drupal\Component\Utility\Html; --use Drupal\content_moderation\ModerationInformation; - use Drupal\Core\Entity\EntityInterface; --use Drupal\Core\Entity\EntityTypeBundleInfo; --use Drupal\Core\Entity\EntityTypeManagerInterface; --use Drupal\Core\Extension\ModuleHandlerInterface; --use Drupal\Core\Field\FieldDefinitionInterface; - use Drupal\Core\Field\FieldItemListInterface; - use Drupal\Core\Form\FormStateInterface; --use Drupal\Core\Language\LanguageManagerInterface; --use Drupal\Core\Messenger\MessengerInterface; --use Drupal\Core\Session\AccountInterface; - use Drupal\Core\Url; --use Drupal\entity_browser\FieldWidgetDisplayManager; - use Drupal\entity_browser\Plugin\Field\FieldWidget\EntityReferenceBrowserWidget; - use Symfony\Component\DependencyInjection\ContainerInterface; - -@@ -47,55 +38,13 @@ class EntityReferenceBrowserTableWidget extends EntityReferenceBrowserWidget { - protected $moderationInfo; - - public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { -- -- return new static( -- $plugin_id, -- $plugin_definition, -- $configuration['field_definition'], -- $configuration['settings'], -- $configuration['third_party_settings'], -- $container->get('entity_type.manager'), -- $container->get('plugin.manager.entity_browser.field_widget_display'), -- $container->get('module_handler'), -- $container->get('current_user'), -- $container->get('messenger'), -- $container->get('language_manager'), -- $container->get('entity_type.bundle.info'), -- $container->has('content_moderation.moderation_information') -- ? $container->get('content_moderation.moderation_information') -- : NULL -- ); -- } -- -- public function __construct( -- $plugin_id, -- array $plugin_definition, -- FieldDefinitionInterface $field_definition, -- array $settings, -- array $third_party_settings, -- EntityTypeManagerInterface $entity_type_manager, -- FieldWidgetDisplayManager $field_display_manager, -- ModuleHandlerInterface $module_handler, -- AccountInterface $current_user, -- MessengerInterface $messenger, -- LanguageManagerInterface $languageManager, -- EntityTypeBundleInfo $bundleInfo, -- ModerationInformation $moderationInformation = NULL) { -- parent::__construct( -- $plugin_id, -- $plugin_definition, -- $field_definition, -- $settings, -- $third_party_settings, -- $entity_type_manager, -- $field_display_manager, -- $module_handler, -- $current_user, -- $messenger -- ); -- $this->currentLanguage = $languageManager->getCurrentLanguage()->getId(); -- $this->entityBundleInfo = $bundleInfo; -- $this->moderationInfo = $moderationInformation; -+ $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition); -+ $instance->currentLanguage = $container->get('language_manager')->getCurrentLanguage()->getId(); -+ $instance->entityBundleInfo = $container->get('entity_type.bundle.info'); -+ $instance->moderationInfo = $container->has('content_moderation.moderation_information') -+ ? $container->get('content_moderation.moderation_information') -+ : NULL; -+ return $instance; - } - - /** diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 211a18632..744efcbf1 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -494,8 +494,3 @@ 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/scripts/queue_runner/queue_runner.sh b/scripts/queue_runner/queue_runner.sh index 16fd886e5..afa6852a4 100644 --- a/scripts/queue_runner/queue_runner.sh +++ b/scripts/queue_runner/queue_runner.sh @@ -1,4 +1,4 @@ -#!/bin/bash -l +#!/bin/sh cd "${TUGBOAT_ROOT}" ./bin/drush advancedqueue:queue:process command_runner 2>&1 diff --git a/scripts/web-build.sh b/scripts/web-build.sh index bdc714984..ebdc8e0cb 100755 --- a/scripts/web-build.sh +++ b/scripts/web-build.sh @@ -17,6 +17,7 @@ touch ./.buildlock build_type="vagovdev" web_path="./web" build_path="${web_path}/build/${build_type}" +assets_base_url="https://dev-va-gov-assets\.s3-us-gov-west-1\.amazonaws\.com" rm -rf "${build_path}" pushd "${web_path}" @@ -34,19 +35,11 @@ yarn build \ popd echo "Replacing s3 address with local in generated files." -assets_base_url="https://dev-va-gov-assets\.s3-us-gov-west-1\.amazonaws\.com" find \ "${build_path}/generated" \ -type f \ -exec sed -i "s#${assets_base_url}##g" {} \+; -echo "Replacing s3 address with local in built content." -dev_base_url="https://s3-us-gov-west-1\.amazonaws\.com/content\.dev\.va\.gov" -find \ - "${build_path}" \ - -type f \ - -exec sed -i -e "s#${dev_base_url}##g" {} \+; - rm ./.buildlock popd > /dev/null diff --git a/tests/cypress/integration/features/content_type/campaign_landing_page/clp_downloadable_resources.feature b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_downloadable_resources.feature index f8661c442..4ff5a7a23 100644 --- a/tests/cypress/integration/features/content_type/campaign_landing_page/clp_downloadable_resources.feature +++ b/tests/cypress/integration/features/content_type/campaign_landing_page/clp_downloadable_resources.feature @@ -10,20 +10,15 @@ Feature: Content Type: Campaign Landing Page Then I should see an element with the selector "#edit-field-clp-resources-header-0-value" And I can fill in field with selector "#edit-field-clp-resources-header-0-value" with fake text And I can fill in field with selector "#edit-field-clp-resources-intro-text-0-value" with fake text - - # Test the 'Add new Downloadable resource' button When I click the "Add new Downloadable resource" button Then I can fill in "Name" field with fake text And I can fill in "External File URL" field with fake text And I can fill in "Description" field with fake text - - # Test the 'Add existing Downloadable resource' button +# TODO: Test section drop-down for this segment When I click the "Cancel" button - And I click the "Add existing Downloadable resource" button - And I select 2 items from the "Select Downloadable resource" Entity Browser modal - Then I should not see an element with the selector ".ief-entity-submit.button[name='ief-reference-submit-field_clp_resources-form'" - - # Test Downloadable resources CTA + Then I click the "Add existing Downloadable resource" button + And I should see "Select Downloadable resource" +# TODO: Test clicking the "Select Downloadable resource" button and modal And I should see "Downloadable resources cta" And I click the "Add Call to action" button And I fill in "Link" field with fake link 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 1ef29e939..32a539314 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,46 +12,3 @@ 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 8f5496374..b4779d0e4 100644 --- a/tests/cypress/integration/features/content_type/event.feature +++ b/tests/cypress/integration/features/content_type/event.feature @@ -144,11 +144,3 @@ 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/content_type/facilities/vba/vba_facility.feature b/tests/cypress/integration/features/content_type/facilities/vba/vba_facility.feature deleted file mode 100644 index 375e546b2..000000000 --- a/tests/cypress/integration/features/content_type/facilities/vba/vba_facility.feature +++ /dev/null @@ -1,47 +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" - # 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/facilities/vamc/full_width_banner_alert.feature b/tests/cypress/integration/features/content_type/full_width_banner_alert.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/vamc/full_width_banner_alert.feature rename to tests/cypress/integration/features/content_type/full_width_banner_alert.feature diff --git a/tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_facility.feature b/tests/cypress/integration/features/content_type/health_care_local_facility.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_facility.feature rename to tests/cypress/integration/features/content_type/health_care_local_facility.feature diff --git a/tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_health_service.feature b/tests/cypress/integration/features/content_type/health_care_local_health_service.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/vamc/health_care_local_health_service.feature rename to tests/cypress/integration/features/content_type/health_care_local_health_service.feature diff --git a/tests/cypress/integration/features/content_type/facilities/vamc/health_care_region_detail_page.feature b/tests/cypress/integration/features/content_type/health_care_region_detail_page.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/vamc/health_care_region_detail_page.feature rename to tests/cypress/integration/features/content_type/health_care_region_detail_page.feature diff --git a/tests/cypress/integration/features/content_type/facilities/vamc/regional_health_care_service_des.feature b/tests/cypress/integration/features/content_type/regional_health_care_service_des.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/vamc/regional_health_care_service_des.feature rename to tests/cypress/integration/features/content_type/regional_health_care_service_des.feature 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 12b9978dd..f1978e4a4 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,3 +18,9 @@ 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/facilities/vamc/vamc_operating_status_and_alerts.feature b/tests/cypress/integration/features/content_type/vamc_operating_status_and_alerts.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/vamc/vamc_operating_status_and_alerts.feature rename to tests/cypress/integration/features/content_type/vamc_operating_status_and_alerts.feature diff --git a/tests/cypress/integration/features/content_type/vba_facility.feature b/tests/cypress/integration/features/content_type/vba_facility.feature new file mode 100644 index 000000000..0af4c7d16 --- /dev/null +++ b/tests/cypress/integration/features/content_type/vba_facility.feature @@ -0,0 +1,12 @@ +@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/content_type/vba_facility_service.feature b/tests/cypress/integration/features/content_type/vba_facility_service.feature deleted file mode 100644 index 595513799..000000000 --- a/tests/cypress/integration/features/content_type/vba_facility_service.feature +++ /dev/null @@ -1,21 +0,0 @@ -@content_type__vba_facility_service -Feature: CMS User may effectively interact with the VBA Facility service 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 create a VBA Facility service 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" - And I am at "/node/add/vba_facility_service" - Then I should see an option with the text "Columbia VA Regional Benefit Office" from dropdown with selector "#edit-field-office" - And I should not see an option with the text "Cheyenne VA Regional Benefit Office" from dropdown with selector "#edit-field-office" - -Scenario: Log in and try to create a VBA Facility service as a VBA editor with 2 sections - 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,1104" - And I am at "/node/add/vba_facility_service" - Then I should see an option with the text "Cheyenne VA Regional Benefit Office" from dropdown with selector "#edit-field-office" - And I should see an option with the text "Columbia VA Regional Benefit Office" from dropdown with selector "#edit-field-office" - And I should not see an option with the text "Denver VA Regional Benefit Office" from dropdown with selector "#edit-field-office" - diff --git a/tests/cypress/integration/features/content_type/facilities/facilities_api.feature b/tests/cypress/integration/features/facilities/facilities_api.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/facilities_api.feature rename to tests/cypress/integration/features/facilities/facilities_api.feature diff --git a/tests/cypress/integration/features/content_type/facilities/vamc/vamc_lovell.feature b/tests/cypress/integration/features/facilities/vamc_lovell.feature similarity index 100% rename from tests/cypress/integration/features/content_type/facilities/vamc/vamc_lovell.feature rename to tests/cypress/integration/features/facilities/vamc_lovell.feature diff --git a/tests/cypress/integration/features/platform/alt_text_validation.feature b/tests/cypress/integration/features/platform/alt_text_validation.feature deleted file mode 100644 index a818c5967..000000000 --- a/tests/cypress/integration/features/platform/alt_text_validation.feature +++ /dev/null @@ -1,42 +0,0 @@ - -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/features/platform/entity_reference_validation.feature b/tests/cypress/integration/features/platform/entity_reference_validation.feature new file mode 100644 index 000000000..cb971d77a --- /dev/null +++ b/tests/cypress/integration/features/platform/entity_reference_validation.feature @@ -0,0 +1,18 @@ +Feature: Entity Reference Validation + In order to confirm that entity reference fields are validated correctly + As an editor + I need Resources & Support content types to not allow duplicate references + + @entity_reference_validation + Scenario: Duplicate Benefit Hub references should not be allowed + Given I am logged in as a user with the "content_admin" role + And I create a "step_by_step" node + And I click the edit tab + And I select the "VA Careers and employment" benefits hub + And I wait "3" seconds + And I select the "VA Careers and employment" benefits hub + And I wait "3" seconds + And I fill in field with selector "#edit-revision-log-0-value" with value "[Test Data] Revision log message." + And I save the node + Then "1 error has been found" should exist + Then "The value Careers and employment" should exist 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 deleted file mode 100644 index 4b4a52a5e..000000000 --- a/tests/cypress/integration/step_definitions/common/i_create_an_image_with_alt_text.js +++ /dev/null @@ -1,59 +0,0 @@ -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 6f0517dae..7c7898034 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,19 +3,3 @@ 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 deleted file mode 100644 index 4e3fcb8d2..000000000 --- a/tests/cypress/integration/step_definitions/common/i_feature_the_content.js +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 900ad1954..000000000 --- a/tests/cypress/integration/step_definitions/common/i_save_an_image_with_alt_text.js +++ /dev/null @@ -1,45 +0,0 @@ -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/step_definitions/common/i_select_from_entity_browser.js b/tests/cypress/integration/step_definitions/common/i_select_from_entity_browser.js deleted file mode 100644 index daa25ac9a..000000000 --- a/tests/cypress/integration/step_definitions/common/i_select_from_entity_browser.js +++ /dev/null @@ -1,41 +0,0 @@ -import { Given } from "@badeball/cypress-cucumber-preprocessor"; - -Given(`I select one item from the {string} Entity Browser modal`, (text) => { - cy.contains(text).click({ force: true }); - cy.get(".entity-browser-modal iframe").should("exist"); - cy.wait(3000); - - cy.get(".entity-browser-modal iframe") - .iframe() - .within(() => { - cy.get("tr") - .should("exist") - .parent() - .find("[type='checkbox']") - .first() - .check({ force: true }); - cy.get("#edit-submit").click({ force: true }); - }); - cy.get(".entity-browser-modal iframe").should("not.exist"); -}); - -Given( - `I select {int} items from the {string} Entity Browser modal`, - (numItems, text) => { - cy.contains(text).click({ force: true }); - cy.get(".entity-browser-modal iframe").should("exist"); - cy.wait(3000); - cy.get(".entity-browser-modal iframe") - .iframe() - .within(() => { - for (let i = 0; i < numItems; i++) { - cy.get("input[type='checkbox']") - .eq(i) - .should("exist") - .check({ force: true }); - } - cy.get("#edit-submit").click({ force: true }); - }); - cy.get(".entity-browser-modal iframe").should("not.exist"); - } -); diff --git a/tests/cypress/integration/weights.json b/tests/cypress/integration/weights.json index 8bfdaf92a..0fa67f952 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/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}} +{"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