diff --git a/.github/workflows/actions-metrics.yml b/.github/workflows/actions-metrics.yml index f1ec78d3fa..2bfbb7f781 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@af1a1a70bb380b079e38053d5fb32ae907ce2b6a # v1.79.0 + uses: int128/datadog-actions-metrics@2ca3c09b18e2185806a071ed29fd5a02b75f8599 # v1.80.0 with: datadog-api-key: ${{ secrets.DATADOG_API_KEY }} collect-job-metrics: true diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index 5ea204ed62..e21798631f 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -43,7 +43,7 @@ jobs: uses: ./.github/actions/post-checkout - name: ReviewDog # See also `composer va:test:eslint` in composer.json - uses: reviewdog/action-eslint@5deb8e2c1d8a9bbefff4d80d6702c41c5b3729cb # v1.22.0 + uses: reviewdog/action-eslint@b3c5aa2589ed06195b52faffd3afb108c02faaf5 # v1.23.0 with: reporter: github-pr-review eslint_flags: '--max-warnings 0 -c .eslintrc.json --no-eslintrc docroot/modules/custom/**/*.es6.js docroot/themes/custom/**/*.es6.js tests/cypress/**/*.js' @@ -139,7 +139,7 @@ jobs: uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Stylelint modules # See also `composer va:test:stylelint-modules` in composer.json - uses: reviewdog/action-stylelint@548276a94275c7865effa8d72fa8b6983d9f47c4 # v1.18.1 + uses: reviewdog/action-stylelint@eadef3f639793f2b361a4719ee8720bf5055a0ff # v1.22.1 with: fail_on_error: true github_token: ${{ secrets.github_token }} @@ -149,7 +149,7 @@ jobs: stylelint_input: 'docroot/modules/custom/**/*.css' - name: Stylelint themes # See also `composer va:test:stylelint-themes` in composer.json - uses: reviewdog/action-stylelint@548276a94275c7865effa8d72fa8b6983d9f47c4 # v1.18.1 + uses: reviewdog/action-stylelint@eadef3f639793f2b361a4719ee8720bf5055a0ff # v1.22.1 with: fail_on_error: true github_token: ${{ secrets.github_token }} diff --git a/READMES/devops/tugboat.md b/READMES/devops/tugboat.md index de0332abaa..e0551b3ef6 100644 --- a/READMES/devops/tugboat.md +++ b/READMES/devops/tugboat.md @@ -36,6 +36,8 @@ Can only update CPU and memory at a project level, not repository level. ## Tugboat Crisis Intervention +Shelling into the Tugboat server can be accomplished with `ssm-session tugboat utility`. + ### Overload **Symptoms**: Tugboat is slow, requests to Tugboat dashboard return 502/504 status codes, previews disappear and reappear, etc. diff --git a/composer.json b/composer.json index 9e9478136f..658c1118bd 100644 --- a/composer.json +++ b/composer.json @@ -221,7 +221,7 @@ "symfony/phpunit-bridge": "^5.1", "symfony/process": "^6.3", "symfony/routing": "^6.3", - "va-gov/content-build": "^0.0.3437", + "va-gov/content-build": "^0.0.3441", "vlucas/phpdotenv": "^5.3", "webflo/drupal-finder": "^1.0.0", "webmozart/path-util": "^2.3", diff --git a/composer.lock b/composer.lock index c71d3e0498..35509b265c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5a2e47403b810bc18a1b3c3793555a6a", + "content-hash": "0aafdc84754d748d9a73e8856c353b95", "packages": [ { "name": "asm89/stack-cors", @@ -3055,17 +3055,17 @@ }, { "name": "drupal/codit_menu_tools", - "version": "1.0.0-alpha3", + "version": "1.0.3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/codit_menu_tools.git", - "reference": "1.0.0-alpha3" + "reference": "1.0.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/codit_menu_tools-1.0.0-alpha3.zip", - "reference": "1.0.0-alpha3", - "shasum": "25eea2ccf5054d2d62027f87e597c18fc000a3d5" + "url": "https://ftp.drupal.org/files/projects/codit_menu_tools-1.0.3.zip", + "reference": "1.0.3", + "shasum": "090d85ecc45291e72da636ff2d51cd226f4366b7" }, "require": { "drupal/core": "^10" @@ -3073,11 +3073,11 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "1.0.0-alpha3", - "datestamp": "1701920607", + "version": "1.0.3", + "datestamp": "1707873156", "security-coverage": { - "status": "not-covered", - "message": "Project has not opted into security advisory coverage!" + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, @@ -25807,16 +25807,16 @@ }, { "name": "va-gov/content-build", - "version": "v0.0.3437", + "version": "v0.0.3441", "source": { "type": "git", "url": "https://github.com/department-of-veterans-affairs/content-build.git", - "reference": "7e1bb61b6bb656124410196ee2bb9933417c8db5" + "reference": "4ff558516c6af0270ce577b42127f5cd413ddf8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/7e1bb61b6bb656124410196ee2bb9933417c8db5", - "reference": "7e1bb61b6bb656124410196ee2bb9933417c8db5", + "url": "https://api.github.com/repos/department-of-veterans-affairs/content-build/zipball/4ff558516c6af0270ce577b42127f5cd413ddf8f", + "reference": "4ff558516c6af0270ce577b42127f5cd413ddf8f", "shasum": "" }, "type": "node-project", @@ -25843,9 +25843,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.3437" + "source": "https://github.com/department-of-veterans-affairs/content-build/tree/v0.0.3441" }, - "time": "2024-02-06T20:33:35+00:00" + "time": "2024-02-14T14:09:01+00:00" }, { "name": "vlucas/phpdotenv", diff --git a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.changed.yml b/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.changed.yml deleted file mode 100644 index 3d4cd89268..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.changed.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: 3f2d2ec2-879e-47d8-a8cc-5d09217436e4 -langcode: en -status: true -dependencies: - config: - - system.menu.va-leavenworth-health-care -id: menu_link_content.va-leavenworth-health-care.changed -field_name: changed -entity_type: menu_link_content -bundle: va-leavenworth-health-care -label: Changed -description: 'The time that the menu link was last edited.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: changed diff --git a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.description.yml b/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.description.yml deleted file mode 100644 index a222be04cf..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.description.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: ef139ac8-8c31-4da1-86f0-8af6d9749032 -langcode: en -status: true -dependencies: - config: - - system.menu.va-leavenworth-health-care -id: menu_link_content.va-leavenworth-health-care.description -field_name: description -entity_type: menu_link_content -bundle: va-leavenworth-health-care -label: Description -description: 'Shown when hovering over the menu link.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: string diff --git a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.metatag.yml b/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.metatag.yml deleted file mode 100644 index 8b4f04fae8..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.metatag.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: f8faf9ea-96fb-49b4-89a1-85f599800efc -langcode: en -status: true -dependencies: - config: - - system.menu.va-leavenworth-health-care -id: menu_link_content.va-leavenworth-health-care.metatag -field_name: metatag -entity_type: menu_link_content -bundle: va-leavenworth-health-care -label: 'Metatags (Hidden field for JSON support)' -description: 'The meta tags for the entity.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: map diff --git a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.title.yml b/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.title.yml deleted file mode 100644 index 3651823a04..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.title.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: 45771ebb-ff9f-4d41-8091-199095f6980c -langcode: en -status: true -dependencies: - config: - - system.menu.va-leavenworth-health-care -id: menu_link_content.va-leavenworth-health-care.title -field_name: title -entity_type: menu_link_content -bundle: va-leavenworth-health-care -label: 'Menu link title' -description: 'The text to be used for this link in the menu.' -required: true -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: string diff --git a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.view_mode.yml b/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.view_mode.yml deleted file mode 100644 index f847dbe409..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-leavenworth-health-care.view_mode.yml +++ /dev/null @@ -1,20 +0,0 @@ -uuid: b967b3f4-3b6a-4952-8bdd-1e29215e7d8b -langcode: en -status: true -dependencies: - config: - - system.menu.va-leavenworth-health-care - module: - - menu_item_extras -id: menu_link_content.va-leavenworth-health-care.view_mode -field_name: view_mode -entity_type: menu_link_content -bundle: va-leavenworth-health-care -label: 'View mode' -description: 'Per item view mode selector.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: string diff --git a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.changed.yml b/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.changed.yml deleted file mode 100644 index ec451acb13..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.changed.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: 53d9a2c1-1088-4094-b3bb-abc9e2385fe5 -langcode: en -status: true -dependencies: - config: - - system.menu.va-topeka-health-care -id: menu_link_content.va-topeka-health-care.changed -field_name: changed -entity_type: menu_link_content -bundle: va-topeka-health-care -label: Changed -description: 'The time that the menu link was last edited.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: changed diff --git a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.description.yml b/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.description.yml deleted file mode 100644 index 51dc51476b..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.description.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: 87dd9f31-45a2-47e2-af3a-eb37a7f620d2 -langcode: en -status: true -dependencies: - config: - - system.menu.va-topeka-health-care -id: menu_link_content.va-topeka-health-care.description -field_name: description -entity_type: menu_link_content -bundle: va-topeka-health-care -label: Description -description: 'Shown when hovering over the menu link.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: string diff --git a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.metatag.yml b/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.metatag.yml deleted file mode 100644 index dd4a79ef27..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.metatag.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: da6103a5-de28-41dd-b4f0-53087bee2889 -langcode: en -status: true -dependencies: - config: - - system.menu.va-topeka-health-care -id: menu_link_content.va-topeka-health-care.metatag -field_name: metatag -entity_type: menu_link_content -bundle: va-topeka-health-care -label: 'Metatags (Hidden field for JSON support)' -description: 'The meta tags for the entity.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: map diff --git a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.title.yml b/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.title.yml deleted file mode 100644 index 78836b9b2a..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.title.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: bf001922-b5fd-479d-acab-a25fb32ebca6 -langcode: en -status: true -dependencies: - config: - - system.menu.va-topeka-health-care -id: menu_link_content.va-topeka-health-care.title -field_name: title -entity_type: menu_link_content -bundle: va-topeka-health-care -label: 'Menu link title' -description: 'The text to be used for this link in the menu.' -required: true -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: string diff --git a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.view_mode.yml b/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.view_mode.yml deleted file mode 100644 index 219cb08a5e..0000000000 --- a/config/sync/core.base_field_override.menu_link_content.va-topeka-health-care.view_mode.yml +++ /dev/null @@ -1,20 +0,0 @@ -uuid: 24007f4e-cbb3-4b84-a87f-1416ee0818fb -langcode: en -status: true -dependencies: - config: - - system.menu.va-topeka-health-care - module: - - menu_item_extras -id: menu_link_content.va-topeka-health-care.view_mode -field_name: view_mode -entity_type: menu_link_content -bundle: va-topeka-health-care -label: 'View mode' -description: 'Per item view mode selector.' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: { } -field_type: string diff --git a/config/sync/core.entity_form_display.node.vba_facility.default.yml b/config/sync/core.entity_form_display.node.vba_facility.default.yml index 0728525c69..7ac4b106c5 100644 --- a/config/sync/core.entity_form_display.node.vba_facility.default.yml +++ b/config/sync/core.entity_form_display.node.vba_facility.default.yml @@ -20,7 +20,6 @@ dependencies: - field.field.node.vba_facility.field_facility_locator_api_id - field.field.node.vba_facility.field_facility_vba_classificatio - field.field.node.vba_facility.field_geolocation - - field.field.node.vba_facility.field_intro_text - field.field.node.vba_facility.field_last_saved_by_an_editor - field.field.node.vba_facility.field_local_spotlight - field.field.node.vba_facility.field_media @@ -64,14 +63,14 @@ third_party_settings: - field_operating_status_more_info label: 'Operating status' region: content - parent_name: '' - weight: 1 + parent_name: group_locations_and_contact_info + weight: 4 format_type: fieldset format_settings: classes: '' show_empty_fields: true id: operating-status - description: "Use this status for weather or other events that impact your facility's operations. Don't duplicate information contained in your COVID-19 status. This status will display on the facility's location page and operating status page." + description: "This status will display on the facility's page and in VA’s facility locator tool." required_fields: true description_display: after group_governance: @@ -80,7 +79,7 @@ third_party_settings: label: 'Section settings' region: content parent_name: '' - weight: 11 + weight: 9 format_type: details_sidebar format_settings: classes: '' @@ -97,7 +96,7 @@ third_party_settings: label: 'Editorial Workflow' region: content parent_name: '' - weight: 13 + weight: 11 format_type: fieldset format_settings: classes: '' @@ -106,29 +105,32 @@ third_party_settings: required_fields: true group_locations_and_contact_info: children: + - group_operating_status + - field_media - group_facility_data - label: 'Locations and contact information' + label: 'Location and contact information' region: content parent_name: '' - weight: 5 - format_type: fieldset + weight: 3 + format_type: details format_settings: - classes: '' + classes: external-content show_empty_fields: false - id: locations-and-contact-information + id: locations-and-contact-info + open: true description: '' required_fields: true - description_display: after group_facility_data: children: - - title - - field_facility_locator_api_id - - field_facility_vba_classificatio - - field_address - - field_geolocation - field_phone_number + - field_address - field_office_hours - field_timezone + - group_benefit_office_hours_vary + - group_benefits_hotline + - field_facility_locator_api_id + - field_facility_vba_classificatio + - field_geolocation - field_non_va_official_name - field_non_va_location_url - field_office @@ -136,12 +138,12 @@ third_party_settings: label: 'Facility data' region: content parent_name: group_locations_and_contact_info - weight: 15 + weight: 7 format_type: tooltip format_settings: - show_label: '1' - tooltip_description: "Why can’t I edit this?\r\nThis content is automatically populated from centralized databases, and helps maintain consistent information across all of VA.gov." - description: 'Learn how to correct or update centrally-managed data.' + show_label: '0' + tooltip_description: '' + description: '' required_fields: '1' id: external-content classes: not-editable @@ -149,53 +151,36 @@ third_party_settings: element: div label_element: h3 attributes: '' - group_vba_editable_fields: - children: - - field_intro_text - - field_media - label: 'Top of page information' - region: content - parent_name: '' - weight: 4 - format_type: fieldset - format_settings: - classes: '' - show_empty_fields: true - id: top-of-page-information - description: '' - required_fields: true - description_display: after group_prepare_for_your_visit: children: - field_prepare_for_visit label: 'Prepare for your visit' region: content parent_name: '' - weight: 8 - format_type: fieldset + weight: 4 + format_type: details format_settings: classes: '' show_empty_fields: true id: prepare-for-your-visit - description: 'Add location services available at this facility such as transportation, parking, visiting hours, lodging options, food options, etc. Do not use this for benefit services.' - required_fields: true open: true - description_display: after + description: 'Add information to help visitors find the facility and make appointments. Include details on appointments, parking, public transportation, and what to bring. For more guidance, refer to the prepare for your visit Knowledge Base article (opens in a new window).' + required_fields: true group_benefit_office_overview: children: - field_cc_vba_facility_overview label: 'Benefit office overview' region: content parent_name: '' - weight: 3 + weight: 2 format_type: tooltip format_settings: show_empty_fields: '1' - show_label: '0' + show_label: '1' tooltip_description: "Why can’t I edit this?\r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." description: '' required_fields: '1' - id: '' + id: benefit-office-overview classes: centralized element: div label_element: h3 @@ -205,41 +190,39 @@ third_party_settings: - field_cc_benefits_hotline label: 'Benefits hotline' region: content - parent_name: '' - weight: 7 + parent_name: group_facility_data + weight: 15 format_type: tooltip format_settings: - show_empty_fields: 0 + show_label: '1' + tooltip_description: "Why can’t I edit this?\r\nInternational editors keep this content standardized to provide consistent messaging for facilities nationwide." + description: '' + required_fields: '1' id: '' classes: centralized + show_empty_fields: 0 element: div - show_label: '0' label_element: h3 - required_fields: 1 attributes: '' - description: '' - tooltip_description: "Why can’t I edit this?\r\nInternational editors keep this content standardized to provide consistent messaging for facilities nationwide." - open: false group_benefit_office_hours_vary: children: - field_cc_benefit_office_hours_va label: 'Benefit office hours may vary' region: content - parent_name: '' - weight: 6 + parent_name: group_facility_data + weight: 14 format_type: tooltip format_settings: - show_empty_fields: 0 + show_label: '1' + tooltip_description: "Why can’t I edit this? \r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." + description: '' + required_fields: '1' id: '' classes: centralized + show_empty_fields: 0 element: div - show_label: '0' label_element: h3 - required_fields: 1 attributes: '' - description: '' - tooltip_description: "Why can’t I edit this? \r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." - open: false group_national_spotlight: children: - field_cc_national_spotlight_1 @@ -249,57 +232,54 @@ third_party_settings: weight: 9 format_type: tooltip format_settings: - show_empty_fields: 0 + show_label: '1' + tooltip_description: "Why can’t I edit this? \r\nThis content is standardized to provide consistent messaging for facilities nationwide." + description: '' + required_fields: '1' id: '' classes: centralized + show_empty_fields: 0 element: div - show_label: '0' label_element: h3 - required_fields: 1 attributes: '' - description: '' - tooltip_description: "Why can’t I edit this? \r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." - open: false group_can_t_find_benefits: children: - field_cc_cant_find_benefits label: "Can't find benefits" region: content parent_name: '' - weight: 10 + weight: 7 format_type: tooltip format_settings: - show_empty_fields: 0 - id: '' + show_label: '0' + tooltip_description: "Why can’t I edit this? \r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." + description: '' + required_fields: '1' + id: cant-find-service classes: centralized + show_empty_fields: 0 element: div - show_label: '0' label_element: h3 - required_fields: 1 attributes: '' - description: '' - tooltip_description: "Why can’t I edit this? \r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." - open: false group_get_updates_from_vba: children: - field_cc_get_updates_from_vba label: 'Get updates from VBA' region: content parent_name: '' - weight: 12 + weight: 8 format_type: tooltip format_settings: - show_empty_fields: 0 - id: '' + show_label: '1' + tooltip_description: "Why can’t I edit this? \r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." + description: '' + required_fields: '1' + id: get-updates classes: centralized + show_empty_fields: 0 element: div - show_label: '0' label_element: h3 - required_fields: 1 attributes: '' - description: '' - tooltip_description: "Why can’t I edit this? \r\nNational editors keep this content standardized to provide consistent messaging for facilities nationwide." - open: false group_banner: children: - field_show_banner @@ -311,7 +291,7 @@ third_party_settings: label: 'Banner alert' region: content parent_name: '' - weight: 2 + weight: 1 format_type: detailswithimage format_settings: description: 'This optional segment allows you to add a banner alert to the VBA facility.' @@ -319,7 +299,7 @@ third_party_settings: visual_guide_file_name: '' visual_guide_alt_text: '' required_fields: '1' - id: '' + id: banner-alert classes: '' show_empty_fields: 0 group_spotlight_content: @@ -329,22 +309,22 @@ third_party_settings: label: 'Spotlight content' region: content parent_name: '' - weight: 9 - format_type: fieldset + weight: 5 + format_type: details format_settings: classes: '' show_empty_fields: false - id: '' - description: '' + id: spotlight-content + open: true + description: 'The VBA spotlight content area is designed to showcase items such as events, activities, or benefit news. For more guidance, refer to the Knowledge Base article about spotlight content (opens in a new window).' required_fields: true - description_display: after group_meta_tags: children: - field_cc_meta_tags label: 'Meta tags' region: content parent_name: '' - weight: 15 + weight: 13 format_type: fieldset format_settings: classes: hidden @@ -353,6 +333,56 @@ third_party_settings: description: '' required_fields: false description_display: after + group_facility_services: + children: { } + label: 'Facility services' + region: content + parent_name: '' + weight: 6 + format_type: tooltip + format_settings: + show_empty_fields: '1' + show_label: '1' + tooltip_description: '' + description: 'Facility services are created on a different page.' + required_fields: '1' + id: facility-services + classes: 'not-editable centralized' + element: div + label_element: h3 + attributes: '' + group_other_va_locations: + children: { } + label: 'Other VA locations' + region: content + parent_name: '' + weight: 10 + format_type: tooltip + format_settings: + show_empty_fields: '1' + show_label: '1' + tooltip_description: '' + description: 'Other nearby VA locations are generated automatically for this page.' + id: other-va-locations + classes: 'not-editable centralized' + element: div + label_element: h3 + required_fields: 0 + attributes: '' + group_facility_image: + children: { } + label: 'Facility image' + region: hidden + parent_name: '' + weight: 14 + format_type: fieldset + format_settings: + classes: '' + show_empty_fields: false + id: '' + description: '

Add an image that helps people recognize the facility. For best results, add an image cropped to a 3:2 aspect ratio. For accessibility, alternative text must also be added. Please refer to the alt text Knowledge Base article (opens in a new window) for more information.

' + required_fields: true + description_display: before id: node.vba_facility.default targetEntityType: node bundle: vba_facility @@ -360,7 +390,7 @@ mode: default content: field_address: type: address_default - weight: 7 + weight: 11 region: content settings: { } third_party_settings: { } @@ -394,12 +424,19 @@ content: hide_help: '1' hide_guidelines: '1' field_banner_title: - type: string_textfield + type: string_textfield_with_counter weight: 31 region: content settings: size: 60 placeholder: '' + use_field_maxlength: false + maxlength: 100 + 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: { } field_banner_types_description: type: markup @@ -412,36 +449,36 @@ content: weight: 13 region: content settings: - show_field_label: '1' show_link_to_source: '1' show_source_updated_date: '1' + show_field_label: 0 third_party_settings: { } field_cc_benefits_hotline: type: entity_field_fetch_widget weight: 26 region: content settings: - show_field_label: '1' show_link_to_source: '1' show_source_updated_date: '1' + show_field_label: 0 third_party_settings: { } field_cc_cant_find_benefits: type: entity_field_fetch_widget weight: 11 region: content settings: - show_field_label: '1' show_link_to_source: '1' show_source_updated_date: '1' + show_field_label: 0 third_party_settings: { } field_cc_get_updates_from_vba: type: entity_field_fetch_widget weight: 11 region: content settings: - show_field_label: '1' show_link_to_source: '1' show_source_updated_date: '1' + show_field_label: 0 third_party_settings: { } field_cc_meta_tags: type: entity_field_fetch_widget @@ -457,18 +494,18 @@ content: weight: 1 region: content settings: - show_field_label: '1' show_link_to_source: '1' show_source_updated_date: '1' + show_field_label: 0 third_party_settings: { } field_cc_vba_facility_overview: type: entity_field_fetch_widget weight: 2 region: content settings: - show_field_label: '1' show_link_to_source: '1' show_source_updated_date: '1' + show_field_label: 0 third_party_settings: { } field_dismissible_option: type: options_buttons @@ -478,7 +515,7 @@ content: third_party_settings: { } field_facility_locator_api_id: type: string_textfield - weight: 5 + weight: 16 region: content settings: size: 60 @@ -486,28 +523,20 @@ content: third_party_settings: { } field_facility_vba_classificatio: type: options_select - weight: 6 + weight: 17 region: content settings: { } third_party_settings: { } field_geolocation: type: geofield_latlon - weight: 8 + weight: 18 region: content settings: html5_geolocation: false third_party_settings: { } - field_intro_text: - type: string_textarea - weight: 3 - region: content - settings: - rows: 5 - placeholder: '' - third_party_settings: { } field_last_saved_by_an_editor: type: datetime_timestamp - weight: 14 + weight: 12 region: content settings: { } third_party_settings: { } @@ -555,14 +584,14 @@ content: add_another: '' field_media: type: media_library_widget - weight: 4 + weight: 6 region: content settings: media_types: { } third_party_settings: { } field_non_va_location_url: type: link_default - weight: 15 + weight: 20 region: content settings: placeholder_url: '' @@ -570,7 +599,7 @@ content: third_party_settings: { } field_non_va_official_name: type: string_textfield - weight: 14 + weight: 19 region: content settings: size: 60 @@ -578,13 +607,13 @@ content: third_party_settings: { } field_office: type: options_select - weight: 16 + weight: 21 region: content settings: { } third_party_settings: { } field_office_hours: type: office_hours_default - weight: 11 + weight: 12 region: content settings: collapsed: false @@ -611,7 +640,7 @@ content: third_party_settings: { } field_phone_number: type: telephone_default - weight: 9 + weight: 10 region: content settings: placeholder: '' @@ -646,7 +675,7 @@ content: add_another: '' field_shared_vha_location: type: entity_reference_autocomplete - weight: 17 + weight: 22 region: content settings: match_operator: CONTAINS @@ -669,7 +698,7 @@ content: third_party_settings: { } field_timezone: type: tzfield_default - weight: 12 + weight: 13 region: content settings: { } third_party_settings: { } @@ -684,21 +713,6 @@ content: region: content settings: { } third_party_settings: { } - title: - type: string_textfield_with_counter - weight: 4 - region: content - settings: - size: 60 - placeholder: '' - use_field_maxlength: false - maxlength: 150 - 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: { } hidden: created: true langcode: true @@ -706,5 +720,6 @@ hidden: promote: true status: true sticky: true + title: true uid: true url_redirects: true diff --git a/config/sync/core.entity_form_display.paragraph.basic_accordion.default.yml b/config/sync/core.entity_form_display.paragraph.basic_accordion.default.yml index 2d87ac0cb2..7017f49e95 100644 --- a/config/sync/core.entity_form_display.paragraph.basic_accordion.default.yml +++ b/config/sync/core.entity_form_display.paragraph.basic_accordion.default.yml @@ -7,19 +7,28 @@ dependencies: - field.field.paragraph.basic_accordion.field_rich_wysiwyg - paragraphs.paragraphs_type.basic_accordion module: + - allowed_formats - text + - textfield_counter id: paragraph.basic_accordion.default targetEntityType: paragraph bundle: basic_accordion mode: default content: field_header: - type: string_textfield + type: string_textfield_with_counter weight: 0 region: content settings: size: 60 placeholder: '' + use_field_maxlength: true + maxlength: 0 + 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: { } field_rich_wysiwyg: type: text_textarea @@ -28,7 +37,10 @@ content: settings: rows: 5 placeholder: '' - third_party_settings: { } + third_party_settings: + allowed_formats: + hide_help: '1' + hide_guidelines: '0' hidden: created: true status: true diff --git a/config/sync/core.entity_view_display.node.vba_facility.default.yml b/config/sync/core.entity_view_display.node.vba_facility.default.yml index 1563a78acb..f826dffb8a 100644 --- a/config/sync/core.entity_view_display.node.vba_facility.default.yml +++ b/config/sync/core.entity_view_display.node.vba_facility.default.yml @@ -20,7 +20,6 @@ dependencies: - field.field.node.vba_facility.field_facility_locator_api_id - field.field.node.vba_facility.field_facility_vba_classificatio - field.field.node.vba_facility.field_geolocation - - field.field.node.vba_facility.field_intro_text - field.field.node.vba_facility.field_last_saved_by_an_editor - field.field.node.vba_facility.field_local_spotlight - field.field.node.vba_facility.field_media @@ -104,7 +103,6 @@ third_party_settings: attributes: '' group_editable_fields: children: - - field_intro_text - field_media label: 'Facility Intro and Photo' parent_name: '' @@ -123,7 +121,7 @@ third_party_settings: - field_non_va_location_url - field_office - field_shared_vha_location - label: 'DB data' + label: 'Facility CMS data' parent_name: group_facility_data region: content weight: 11 @@ -375,13 +373,6 @@ content: third_party_settings: { } weight: 3 region: content - field_intro_text: - type: basic_string - label: above - settings: { } - third_party_settings: { } - weight: 14 - region: content field_local_spotlight: type: entity_reference_revisions_entity_view label: above diff --git a/config/sync/core.entity_view_display.node.vba_facility.external_content.yml b/config/sync/core.entity_view_display.node.vba_facility.external_content.yml index 271c7ac7a6..e5dd49d187 100644 --- a/config/sync/core.entity_view_display.node.vba_facility.external_content.yml +++ b/config/sync/core.entity_view_display.node.vba_facility.external_content.yml @@ -14,13 +14,13 @@ dependencies: - field.field.node.vba_facility.field_cc_benefits_hotline - field.field.node.vba_facility.field_cc_cant_find_benefits - field.field.node.vba_facility.field_cc_get_updates_from_vba + - field.field.node.vba_facility.field_cc_meta_tags - field.field.node.vba_facility.field_cc_national_spotlight_1 - field.field.node.vba_facility.field_cc_vba_facility_overview - field.field.node.vba_facility.field_dismissible_option - field.field.node.vba_facility.field_facility_locator_api_id - field.field.node.vba_facility.field_facility_vba_classificatio - field.field.node.vba_facility.field_geolocation - - field.field.node.vba_facility.field_intro_text - field.field.node.vba_facility.field_last_saved_by_an_editor - field.field.node.vba_facility.field_local_spotlight - field.field.node.vba_facility.field_media @@ -110,7 +110,7 @@ third_party_settings: - field_non_va_location_url - field_office - field_shared_vha_location - label: 'DB data' + label: 'Facility CMS data' parent_name: group_facility_data region: content weight: 10 @@ -119,7 +119,7 @@ third_party_settings: classes: not-editable show_empty_fields: true id: '' - description: '' + description: '

These fields are not shown on VA.gov.

' description_display: after layout_builder: enabled: false @@ -256,10 +256,10 @@ hidden: field_cc_benefits_hotline: true field_cc_cant_find_benefits: true field_cc_get_updates_from_vba: true + field_cc_meta_tags: true field_cc_national_spotlight_1: true field_cc_vba_facility_overview: true field_dismissible_option: true - field_intro_text: true field_last_saved_by_an_editor: true field_local_spotlight: true field_location_services: true diff --git a/config/sync/core.entity_view_display.node.vba_facility.ief_table.yml b/config/sync/core.entity_view_display.node.vba_facility.ief_table.yml index e496b8050c..40a13173fe 100644 --- a/config/sync/core.entity_view_display.node.vba_facility.ief_table.yml +++ b/config/sync/core.entity_view_display.node.vba_facility.ief_table.yml @@ -14,13 +14,13 @@ dependencies: - field.field.node.vba_facility.field_cc_benefits_hotline - field.field.node.vba_facility.field_cc_cant_find_benefits - field.field.node.vba_facility.field_cc_get_updates_from_vba + - field.field.node.vba_facility.field_cc_meta_tags - field.field.node.vba_facility.field_cc_national_spotlight_1 - field.field.node.vba_facility.field_cc_vba_facility_overview - field.field.node.vba_facility.field_dismissible_option - field.field.node.vba_facility.field_facility_locator_api_id - field.field.node.vba_facility.field_facility_vba_classificatio - field.field.node.vba_facility.field_geolocation - - field.field.node.vba_facility.field_intro_text - field.field.node.vba_facility.field_last_saved_by_an_editor - field.field.node.vba_facility.field_local_spotlight - field.field.node.vba_facility.field_media @@ -189,12 +189,12 @@ hidden: field_cc_benefits_hotline: true field_cc_cant_find_benefits: true field_cc_get_updates_from_vba: true + field_cc_meta_tags: true field_cc_national_spotlight_1: true field_cc_vba_facility_overview: true field_dismissible_option: true field_facility_vba_classificatio: true field_geolocation: true - field_intro_text: true field_last_saved_by_an_editor: true field_local_spotlight: true field_location_services: true diff --git a/config/sync/core.entity_view_display.node.vba_facility.teaser.yml b/config/sync/core.entity_view_display.node.vba_facility.teaser.yml index 01846c6387..4a6606bd06 100644 --- a/config/sync/core.entity_view_display.node.vba_facility.teaser.yml +++ b/config/sync/core.entity_view_display.node.vba_facility.teaser.yml @@ -14,13 +14,13 @@ dependencies: - field.field.node.vba_facility.field_cc_benefits_hotline - field.field.node.vba_facility.field_cc_cant_find_benefits - field.field.node.vba_facility.field_cc_get_updates_from_vba + - field.field.node.vba_facility.field_cc_meta_tags - field.field.node.vba_facility.field_cc_national_spotlight_1 - field.field.node.vba_facility.field_cc_vba_facility_overview - field.field.node.vba_facility.field_dismissible_option - field.field.node.vba_facility.field_facility_locator_api_id - field.field.node.vba_facility.field_facility_vba_classificatio - field.field.node.vba_facility.field_geolocation - - field.field.node.vba_facility.field_intro_text - field.field.node.vba_facility.field_last_saved_by_an_editor - field.field.node.vba_facility.field_local_spotlight - field.field.node.vba_facility.field_media @@ -66,13 +66,13 @@ hidden: field_cc_benefits_hotline: true field_cc_cant_find_benefits: true field_cc_get_updates_from_vba: true + field_cc_meta_tags: true field_cc_national_spotlight_1: true field_cc_vba_facility_overview: true field_dismissible_option: true field_facility_locator_api_id: true field_facility_vba_classificatio: true field_geolocation: true - field_intro_text: true field_last_saved_by_an_editor: true field_local_spotlight: true field_location_services: true 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 54465c6f51..302f015b7a 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:

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

You can read more about these banner types on the site in the VA Design System banner page (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.node.vba_facility.field_media.yml b/config/sync/field.field.node.vba_facility.field_media.yml index 82cc7e1cd3..084371a379 100644 --- a/config/sync/field.field.node.vba_facility.field_media.yml +++ b/config/sync/field.field.node.vba_facility.field_media.yml @@ -8,21 +8,20 @@ dependencies: - node.type.vba_facility module: - entity_reference_validators - - epp + - tmgmt_content third_party_settings: entity_reference_validators: circular_reference: false circular_reference_deep: false duplicate_reference: false - epp: - value: '' - on_update: 0 + tmgmt_content: + excluded: false id: node.vba_facility.field_media field_name: field_media entity_type: node bundle: vba_facility -label: 'Facility photo' -description: "Photo guidelines
\r\n✓ Smart phone photos are ok
\r\n✓ Use landscape orientation
\r\n✓ Show the entrance side of the building
\r\n✗ No people
\r\n✗ No car license plates
" +label: 'Facility image' +description: "

Add an image that helps people recognize the facility. For best results, add an image cropped to a 3:2 aspect ratio. For accessibility, alternative text must also be added. Please refer to the alt text Knowledge Base article (opens in a new window) for more information.

\r\n

Image guidelines

\r\n

✓ Please do:

\r\n\r\n

✗ Do not

\r\n\r\n" required: false translatable: false default_value: { } diff --git a/config/sync/field.field.node.vba_facility.field_operating_status_facility.yml b/config/sync/field.field.node.vba_facility.field_operating_status_facility.yml index f3c4817149..83590e76fe 100644 --- a/config/sync/field.field.node.vba_facility.field_operating_status_facility.yml +++ b/config/sync/field.field.node.vba_facility.field_operating_status_facility.yml @@ -7,6 +7,10 @@ dependencies: - node.type.vba_facility module: - options + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: node.vba_facility.field_operating_status_facility field_name: field_operating_status_facility entity_type: node diff --git a/config/sync/field.field.node.vba_facility.field_operating_status_more_info.yml b/config/sync/field.field.node.vba_facility.field_operating_status_more_info.yml index aa8d24120e..7f89dbadc0 100644 --- a/config/sync/field.field.node.vba_facility.field_operating_status_more_info.yml +++ b/config/sync/field.field.node.vba_facility.field_operating_status_more_info.yml @@ -5,12 +5,17 @@ dependencies: config: - field.storage.node.field_operating_status_more_info - node.type.vba_facility + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: node.vba_facility.field_operating_status_more_info field_name: field_operating_status_more_info entity_type: node bundle: vba_facility -label: 'Operating status - more info' -description: "Up to 300 characters to provide additional information about the facility's operating status. " +label: Details +description: 'Add relevant details about how this status will impact Veterans and visitors.' required: false translatable: false default_value: { } diff --git a/config/sync/field.field.node.vba_facility.field_table_of_contents.yml b/config/sync/field.field.node.vba_facility.field_table_of_contents.yml index 2b77967703..e34d03d860 100644 --- a/config/sync/field.field.node.vba_facility.field_table_of_contents.yml +++ b/config/sync/field.field.node.vba_facility.field_table_of_contents.yml @@ -25,6 +25,6 @@ default_value: default_value_callback: '' settings: markup: - value: "

Editing this content

\r\n\r\n

Provide Veterans with the basic information they need to plan a visit to a VBA facility. Some content won’t be editable because it comes from other sources. Learn more by hovering over the “?.”

\r\n\r\n

For full guidance, see How to edit VBA facility pages.

\r\n\r\n

Jump to edit...

\r\n\r\n

Operating status

\r\n\r\n

Top of page information

\r\n\r\n

Locations and contact information

\r\n\r\n

Services

\r\n\r\n

Content

\r\n" + value: "

Editing this content

Provide Veterans with the information they need to plan a visit to a VBA facility. Some content won’t be editable because it comes from other sources.\L

For more guidance, learn how to edit VBA facility pages (opens in a new window).

On this page

Banner alert

Benefit office overview

Location and contact information

Prepare for your visit

Spotlight content

Facility services

Can't find the service you're looking for?

Get updates from VBA

Other VA locations

Content

" format: rich_text field_type: markup diff --git a/config/sync/field.field.paragraph.basic_accordion.field_header.yml b/config/sync/field.field.paragraph.basic_accordion.field_header.yml index d0d793e8e2..6a685240d5 100644 --- a/config/sync/field.field.paragraph.basic_accordion.field_header.yml +++ b/config/sync/field.field.paragraph.basic_accordion.field_header.yml @@ -5,12 +5,17 @@ dependencies: config: - field.storage.paragraph.field_header - paragraphs.paragraphs_type.basic_accordion + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: paragraph.basic_accordion.field_header field_name: field_header entity_type: paragraph bundle: basic_accordion label: Header -description: '' +description: 'This is shown when the accordion is open or closed.' required: true translatable: false default_value: { } diff --git a/config/sync/field.field.paragraph.basic_accordion.field_rich_wysiwyg.yml b/config/sync/field.field.paragraph.basic_accordion.field_rich_wysiwyg.yml index f22886ed3d..042ec0eeb7 100644 --- a/config/sync/field.field.paragraph.basic_accordion.field_rich_wysiwyg.yml +++ b/config/sync/field.field.paragraph.basic_accordion.field_rich_wysiwyg.yml @@ -8,19 +8,23 @@ dependencies: module: - allowed_formats - text + - tmgmt_content third_party_settings: allowed_formats: allowed_formats: - rich_text_limited + tmgmt_content: + excluded: false id: paragraph.basic_accordion.field_rich_wysiwyg field_name: field_rich_wysiwyg entity_type: paragraph bundle: basic_accordion -label: 'Rich text' -description: '' +label: Content +description: 'Accordion content should be kept succinct and follow VA content guidance (opens in a new window).' required: true translatable: false default_value: { } default_value_callback: '' -settings: { } +settings: + allowed_formats: { } field_type: text_long diff --git a/config/sync/field.field.paragraph.button.field_button_label.yml b/config/sync/field.field.paragraph.button.field_button_label.yml index e2038689e4..2fa3a17e73 100644 --- a/config/sync/field.field.paragraph.button.field_button_label.yml +++ b/config/sync/field.field.paragraph.button.field_button_label.yml @@ -5,12 +5,17 @@ dependencies: config: - field.storage.paragraph.field_button_label - paragraphs.paragraphs_type.button + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: paragraph.button.field_button_label field_name: field_button_label entity_type: paragraph bundle: button label: 'Link text' -description: '' +description: 'This text should describe the purpose of the link. Additional tips are on the VA content style guide links page (opens in a new window).' required: true translatable: true default_value: { } diff --git a/config/sync/field.field.paragraph.button.field_button_link.yml b/config/sync/field.field.paragraph.button.field_button_link.yml index efe5353460..f49fd03ce5 100644 --- a/config/sync/field.field.paragraph.button.field_button_link.yml +++ b/config/sync/field.field.paragraph.button.field_button_link.yml @@ -7,6 +7,10 @@ dependencies: - paragraphs.paragraphs_type.button module: - link + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: paragraph.button.field_button_link field_name: field_button_link entity_type: paragraph diff --git a/config/sync/field.field.paragraph.featured_content.field_description.yml b/config/sync/field.field.paragraph.featured_content.field_description.yml index ad47bbc057..4e32bde3b0 100644 --- a/config/sync/field.field.paragraph.featured_content.field_description.yml +++ b/config/sync/field.field.paragraph.featured_content.field_description.yml @@ -8,19 +8,23 @@ dependencies: module: - allowed_formats - text + - tmgmt_content third_party_settings: allowed_formats: allowed_formats: - rich_text_limited + tmgmt_content: + excluded: false id: paragraph.featured_content.field_description field_name: field_description entity_type: paragraph bundle: featured_content label: Description -description: '' +description: 'Briefly describe the service, event, or news.' required: true translatable: false default_value: { } default_value_callback: '' -settings: { } +settings: + allowed_formats: { } field_type: text_long diff --git a/config/sync/field.field.paragraph.featured_content.field_section_header.yml b/config/sync/field.field.paragraph.featured_content.field_section_header.yml index 725140e910..1fb4b7eafa 100644 --- a/config/sync/field.field.paragraph.featured_content.field_section_header.yml +++ b/config/sync/field.field.paragraph.featured_content.field_section_header.yml @@ -5,12 +5,17 @@ dependencies: config: - field.storage.paragraph.field_section_header - paragraphs.paragraphs_type.featured_content + module: + - tmgmt_content +third_party_settings: + tmgmt_content: + excluded: false id: paragraph.featured_content.field_section_header field_name: field_section_header entity_type: paragraph bundle: featured_content label: Title -description: '' +description: 'This title should be in sentence case and follow VA content guidance (opens in a new window). ' required: true translatable: false default_value: { } diff --git a/config/sync/language.content_settings.menu_link_content.va-leavenworth-health-care.yml b/config/sync/language.content_settings.menu_link_content.va-leavenworth-health-care.yml deleted file mode 100644 index ea070a35f9..0000000000 --- a/config/sync/language.content_settings.menu_link_content.va-leavenworth-health-care.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: 79299311-302d-4d60-a3ef-cecf4524d356 -langcode: en -status: true -dependencies: - config: - - system.menu.va-leavenworth-health-care - module: - - content_translation -third_party_settings: - content_translation: - enabled: false - bundle_settings: - untranslatable_fields_hide: '0' -id: menu_link_content.va-leavenworth-health-care -target_entity_type_id: menu_link_content -target_bundle: va-leavenworth-health-care -default_langcode: site_default -language_alterable: false diff --git a/config/sync/language.content_settings.menu_link_content.va-topeka-health-care.yml b/config/sync/language.content_settings.menu_link_content.va-topeka-health-care.yml deleted file mode 100644 index bbf25f9eaf..0000000000 --- a/config/sync/language.content_settings.menu_link_content.va-topeka-health-care.yml +++ /dev/null @@ -1,18 +0,0 @@ -uuid: 22aacb56-0220-4aaa-9a8f-f999dd970e91 -langcode: en -status: true -dependencies: - config: - - system.menu.va-topeka-health-care - module: - - content_translation -third_party_settings: - content_translation: - enabled: false - bundle_settings: - untranslatable_fields_hide: '0' -id: menu_link_content.va-topeka-health-care -target_entity_type_id: menu_link_content -target_bundle: va-topeka-health-care -default_langcode: site_default -language_alterable: false diff --git a/config/sync/system.menu.va-leavenworth-health-care.yml b/config/sync/system.menu.va-leavenworth-health-care.yml deleted file mode 100644 index f982dc911b..0000000000 --- a/config/sync/system.menu.va-leavenworth-health-care.yml +++ /dev/null @@ -1,14 +0,0 @@ -uuid: efdadc4b-3464-454c-975d-0cd0a83b883a -langcode: en -status: true -dependencies: - module: - - workbench_menu_access -third_party_settings: - workbench_menu_access: - access_scheme: - 356: '356' -id: va-leavenworth-health-care -label: 'VA Leavenworth health care' -description: 'VISN 15 | va.gov/leavenworth-health-care' -locked: false diff --git a/config/sync/system.menu.va-topeka-health-care.yml b/config/sync/system.menu.va-topeka-health-care.yml deleted file mode 100644 index 117c10a37d..0000000000 --- a/config/sync/system.menu.va-topeka-health-care.yml +++ /dev/null @@ -1,14 +0,0 @@ -uuid: 07a6a9a5-dfe2-4b02-8466-526d27a5d24d -langcode: en -status: true -dependencies: - module: - - workbench_menu_access -third_party_settings: - workbench_menu_access: - access_scheme: - 360: '360' -id: va-topeka-health-care -label: 'VA Topeka health care' -description: 'VISN 15 | va.gov/topeka-health-care' -locked: false diff --git a/docroot/modules/custom/va_gov_consumers/va_gov_consumers.module b/docroot/modules/custom/va_gov_consumers/va_gov_consumers.module index cb87e4e4e8..e461fca085 100644 --- a/docroot/modules/custom/va_gov_consumers/va_gov_consumers.module +++ b/docroot/modules/custom/va_gov_consumers/va_gov_consumers.module @@ -313,8 +313,10 @@ function _va_gov_consumers_disable_external_content_editing(array &$form, FormSt } elseif (isset($form['external_content'])) { // We want the external content to appear in the fieldgroup - // group_locations_and_contact_info on other node types. + // group_locations_and_contact_info on other node types + // and at the bottom when other elements are present. $form['group_locations_and_contact_info']['external_content'] = $form['external_content']; + $form['group_locations_and_contact_info']['external_content']['#weight'] = 10; unset($form['external_content']); } } diff --git a/docroot/themes/custom/vagovclaro/assets/scss/components/_centralized_content.scss b/docroot/themes/custom/vagovclaro/assets/scss/components/_centralized_content.scss index e2a7245aba..b08f08ed9a 100644 --- a/docroot/themes/custom/vagovclaro/assets/scss/components/_centralized_content.scss +++ b/docroot/themes/custom/vagovclaro/assets/scss/components/_centralized_content.scss @@ -18,6 +18,11 @@ height: 0; visibility: hidden; } + + // Nested fieldsets should look like the rest of centralized + fieldset { + background-color: var(--va-gray-lightest) !important; + } } // Colors scope sections on node view page diff --git a/docroot/themes/custom/vagovclaro/assets/scss/components/_external_content.scss b/docroot/themes/custom/vagovclaro/assets/scss/components/_external_content.scss index 58d6eb4445..e39a75cee2 100644 --- a/docroot/themes/custom/vagovclaro/assets/scss/components/_external_content.scss +++ b/docroot/themes/custom/vagovclaro/assets/scss/components/_external_content.scss @@ -14,10 +14,6 @@ } } -#external-content h3 { - text-transform: uppercase; -} - #block-vagovclaro-content { .field--name-field-va-health-connect-phone, .field--name-field-vamc-ehr-system { diff --git a/scripts/content/VACMS-16233-reorder-vamc-menu-items.php b/scripts/content/VACMS-16233-reorder-vamc-menu-items.php new file mode 100644 index 0000000000..15c50e79c8 --- /dev/null +++ b/scripts/content/VACMS-16233-reorder-vamc-menu-items.php @@ -0,0 +1,102 @@ +set("script_library__va_gov_vamc_get_system_menus", DESIRED_NUMBER);'` + * to set the last number that ran successfully. + */ + +use Drupal\codit_menu_tools\MenuManipulator; + +require_once __DIR__ . '/script-library.php'; + +run(); + +/** + * Executes the intended functionality. Runs by default when the script is run. + * + * @return string + * Indicating the run is complete. + */ +function run(): string { + $sandbox = ['#finished' => 0]; + do { + print(va_gov_vamc_deploy_resort_vamc_menus($sandbox)); + } while ($sandbox['#finished'] < 1); + + return "Script run complete. All menus should have been updated. "; +} + +/** + * Re-sort VAMC menus. + * + * @param mixed $sandbox + * Batch sandbox to keep state during multiple runs. + * + * @return string + * The message to be output. + */ +function va_gov_vamc_deploy_resort_vamc_menus(&$sandbox) { + script_library_sandbox_init($sandbox, '_va_gov_vamc_get_system_menus', []); + $message = _va_gov_vamc_arrange_menus($sandbox); + return $message . script_library_sandbox_complete($sandbox, "Re-arranged @total VAMC System Menus."); +} + +/** + * Get all VAMC system menus. + * + * @return array + * An array of VAMC system menus ['machine_name' => 'Human Name']. + */ +function _va_gov_vamc_get_system_menus(): array { + // Load the menus. + $vamc_menus = MenuManipulator::getAllMenuNames('-health-'); + $non_name_compliant_menus = [ + 'va-central-western-massachusetts' => 'VA Central Western Massachusetts health care', + 'va-columbia-south-carolina-healt' => 'VA Columbia South Carolina health care', + 'va-lebanon' => 'VA Lebanon health care', + ]; + + return array_merge($vamc_menus, $non_name_compliant_menus); +} + +/** + * Re-arranges existing VAMC menus to match a pattern. + * + * @param mixed $sandbox + * Batch sandbox to keep state during multiple runs. + * + * @return string + * A message to be output. + */ +function _va_gov_vamc_arrange_menus(&$sandbox) { + $menu_name = array_key_first($sandbox['items_to_process']); + $pattern = [ + 'About us', + 'Programs', + 'Research', + 'Policies', + 'VA police', + 'Work with us', + 'Contact us', + ]; + $menu_arranger = new MenuManipulator($menu_name); + $menu_arranger->matchPattern($pattern); + $message = "The menu {$sandbox['items_to_process'][$menu_name]} had been rearranged. "; + // It has been run successfully, so remove it. + unset($sandbox['items_to_process'][$menu_name]); + + return $message; +} diff --git a/scripts/content/script-library.php b/scripts/content/script-library.php index b78c6799ec..ac00016965 100644 --- a/scripts/content/script-library.php +++ b/scripts/content/script-library.php @@ -3,13 +3,21 @@ /** * @file * Common code related to drupal content scripts. + * + * This file can also be included in other things that run during non-full + * bootstrap processes like hook_update_n, post update, and deploy. + * Put the following line wherever you want to use this library. + * require_once __DIR__ . '/script-library.php'; */ +use Drupal\Component\Render\FormattableMarkup; use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Utility\UpdateException; use Drupal\node\NodeInterface; use Drupal\node\NodeStorageInterface; use Drupal\taxonomy\Entity\Term; use Drupal\user\UserStorageInterface; +use Psr\Log\LogLevel; const CMS_MIGRATOR_ID = 1317; @@ -152,6 +160,37 @@ function normalize_crisis_number($input, $plain = FALSE): string { return $output; } +/** + * Get an array of node ids for batch processing. + * + * @param string $node_bundle + * The bundle name of the nodes to lookup. + * @param bool $published_only + * TRUE if you need only published nodes. + * + * @return array + * An array of nids for for the requested bundle. + */ +function get_nids_of_type($node_bundle, $published_only = FALSE): array { + $query = \Drupal::entityQuery('node') + ->condition('type', $node_bundle) + ->accessCheck(FALSE); + if ($published_only) { + $query->condition('status', 1); + } + + $nids = $query->execute(); + // Having a node ids as a numeric keyed array is problematic when it comes + // to removing things from the array. As soon as you unset one, the array + // becomes renumbered. So we create string keys, with numeric values. + // [35, 75, 20] becomes + // ['node_35' => 35, 'node_75' => 75, 'node_20' => 20]. + $node_ids = array_combine( + array_map('_va_gov_stringifynid', array_values($nids)), + array_values($nids)); + return $node_ids; +} + /** * Saves a node revision with log messaging. * @@ -170,16 +209,18 @@ function save_node_revision(NodeInterface $node, $message = '', $new = TRUE): in $node->setNewRevision($new); $node->setSyncing(TRUE); $node->setValidationRequired(FALSE); + $node->enforceIsNew(FALSE); // New revisions deserve special treatment. if ($new) { - $node->enforceIsNew(TRUE); $node->setChangedTime(time()); $node->setRevisionCreationTime(time()); $uid = CMS_MIGRATOR_ID; } else { - $node->enforceIsNew(FALSE); $uid = $node->getRevisionUserId(); + // Append new log message to previous log message. + $prefix = !empty($message) ? $node->getRevisionLogMessage() . ' - ' : ''; + $message = $prefix . $message; } $node->setRevisionUserId($uid); $revision_time = $node->getRevisionCreationTime(); @@ -188,9 +229,7 @@ function save_node_revision(NodeInterface $node, $message = '', $new = TRUE): in // the value is not different from the original value. $revision_time++; $node->setRevisionCreationTime($revision_time); - // Append new log message to previous log message. - $prefix = !empty($message) ? $node->getRevisionLogMessage() . ' - ' : ''; - $node->setRevisionLogMessage($prefix . $message); + $node->setRevisionLogMessage($message); $node->set('moderation_state', $moderation_state); return $node->save(); @@ -258,6 +297,149 @@ function save_new_terms($vocabulary_id, array $terms): int { return $terms_created; } +/** + * Initializes the basic sandbox values. + * + * @param array $sandbox + * Standard drupal $sandbox var to keep state in hook_update_N. + * @param string $counter_callback + * A function name to call to get the items to process. Must return an array. + * @param array $callback_args + * A flat array of arguments to pass to the counter_callback. + * + * @throws Drupal\Core\Utility\UpdateException + * If the counter callback can not be found. + */ +function script_library_sandbox_init(array &$sandbox, $counter_callback, array $callback_args = []) { + if (empty($sandbox['total'])) { + // Sandbox has not been initiated. + if (is_callable($counter_callback)) { + $sandbox['items_to_process'] = call_user_func_array($counter_callback, $callback_args); + $sandbox['total'] = count($sandbox['items_to_process']); + $sandbox['current'] = 0; + $sandbox['multi_run_state_key'] = "script_library_$counter_callback"; + + // This seems like the first run, see if there is already a state saved + // from a previous attempt. + $last_run_completed = \Drupal::state()->get($sandbox['multi_run_state_key']); + if (!is_null($last_run_completed)) { + // A state exists, so alter the 'current' and 'items_to_process'. + $sandbox['current'] = $last_run_completed + 1; + // Remove the last successful run, and all that came before it. + $sandbox['items_to_process'] = array_slice($sandbox['items_to_process'], $last_run_completed); + } + } + else { + // Something went wrong could not use callback. Throw exception. + throw new UpdateException( + "Counter callback {$counter_callback} provided in script_library_sandbox_init() is not callable. Can not proceed." + ); + } + } + $sandbox['element'] = array_key_first($sandbox['items_to_process']); +} + +/** + * Updates the counts and log if complete. + * + * @param array $sandbox + * Hook_update_n sandbox for keeping state. + * @param string $completed_message + * Message to log when completed. Can use '@completed' and '@total' as tokens. + * + * @return string + * String to be used as update hook messages. + */ +function script_library_sandbox_complete(array &$sandbox, $completed_message) { + // Determine when to stop batching. + $sandbox['current'] = ($sandbox['total'] - count($sandbox['items_to_process'])); + // Save the 'current' value to state, to record a successful run. + \Drupal::state()->set($sandbox['multi_run_state_key'], $sandbox['current']); + $sandbox['#finished'] = (empty($sandbox['total'])) ? 1 : ($sandbox['current'] / $sandbox['total']); + $vars = [ + '@completed' => $sandbox['current'], + '@element' => $sandbox['element'], + '@total' => $sandbox['total'], + ]; + + $message = t('Processed @element. @completed/@total.', $vars) . PHP_EOL; + // Log the all finished notice. + if ($sandbox['#finished'] === 1) { + Drupal::logger('script_library')->log(LogLevel::INFO, $completed_message, $vars); + $logged_message = new FormattableMarkup($completed_message, $vars); + $message = t('Process completed:') . " {$logged_message}" . PHP_EOL; + // Delete the state as it is no longer needed. + \Drupal::state()->delete($sandbox['multi_run_state_key']); + } + return $message; +} + +/** + * Lookup a key in a map array and return the value from the map. + * + * @param string|null $lookup + * A map key to lookup. Do not lookup int as indexes can shift. + * @param array $map + * An array containing string key value pairs. [lookup => value]. + * @param bool $strict + * TRUE = only want a value from the array, FALSE = want your lookup back. + * + * @return mixed + * Whatever the value associated with the key. + */ +function script_libary_map_to_value(string|null $lookup, array $map, bool $strict = TRUE) : mixed { + if (empty($lookup)) { + if (isset($map['default'])) { + // There is a default set, so use it. + return $map['default']; + } + elseif ($strict) { + return NULL; + } + else { + return $lookup; + } + } + if ($strict) { + // Strict, so either it is there, or nothing. + return $map[$lookup] ?? NULL; + } + else { + // Not strict, so pass back what given it its not in the map. + return $map[$lookup] ?? $lookup; + } +} + +/** + * Turns on or off queueing of items to the post_api. + * + * CAUTION: The only time we would want to fully disable queueing is during a + * deploy when editors can not save anything. + * + * @param bool $state + * TRUE to toggle the settings on, FALSE to toggle them off. + */ +function script_library_disable_post_api_queueing(bool $state): void { + $on = ($state) ? 1 : 0; + $config_post_api = \Drupal::configFactory()->getEditable('post_api.settings'); + $config_post_api->set('disable_queueing', $on) + ->save(FALSE); + script_library_skip_post_api_data_check($state); +} + +/** + * Turns on or off data checks and deduping for adding items to post_api queue. + * + * @param bool $state + * TRUE to toggle the settings on, FALSE to toggle them off. + */ +function script_library_skip_post_api_data_check(bool $state): void { + $on = ($state) ? 1 : 0; + $config_va_gov_post_api = \Drupal::configFactory()->getEditable('va_gov_post_api.settings'); + $config_va_gov_post_api->set('bypass_data_check', $on) + ->save(FALSE); +} + /** * Callback function to concat node ids with string. *