Skip to content

Commit

Permalink
VACMS-14000: Adds and populates meta tags on VBA Facility (#16395)
Browse files Browse the repository at this point in the history
* VACMS-14000: Adds config, hides field

* VACMS-14000: Adds script to update VBA facilities

* VACMS-14000: Tweaks script for accuracy.

* VACMS-14000: Updates Service Region form display to match VBA Facility

---------

Co-authored-by: Steve Wirt <[email protected]>
  • Loading branch information
omahane and swirtSJW authored Dec 18, 2023
1 parent 8265c86 commit df3840d
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ dependencies:
- field.field.node.service_region.field_service_name_and_descripti
- field.field.node.service_region.field_vba_region_facility_list
- node.type.service_region
- workflows.workflow.editorial
- workflows.workflow.restricted_archive
module:
- change_labels
- content_moderation
Expand Down
31 changes: 28 additions & 3 deletions config/sync/core.entity_form_display.node.vba_facility.default.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ 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
Expand All @@ -36,7 +37,7 @@ dependencies:
- field.field.node.vba_facility.field_table_of_contents
- field.field.node.vba_facility.field_timezone
- node.type.vba_facility
- workflows.workflow.editorial
- workflows.workflow.restricted_archive
module:
- address
- allowed_formats
Expand Down Expand Up @@ -328,7 +329,7 @@ third_party_settings:
label: 'Spotlight content'
region: content
parent_name: ''
weight: 8
weight: 9
format_type: fieldset
format_settings:
classes: ''
Expand All @@ -337,6 +338,21 @@ third_party_settings:
description: ''
required_fields: true
description_display: after
group_meta_tags:
children:
- field_cc_meta_tags
label: 'Meta tags'
region: content
parent_name: ''
weight: 15
format_type: fieldset
format_settings:
classes: hidden
show_empty_fields: false
id: ''
description: ''
required_fields: false
description_display: after
id: node.vba_facility.default
targetEntityType: node
bundle: vba_facility
Expand Down Expand Up @@ -427,9 +443,18 @@ content:
show_link_to_source: '1'
show_source_updated_date: '1'
third_party_settings: { }
field_cc_meta_tags:
type: entity_field_fetch_widget
weight: 0
region: content
settings:
show_field_label: '1'
show_link_to_source: 0
show_source_updated_date: 0
third_party_settings: { }
field_cc_national_spotlight_1:
type: entity_field_fetch_widget
weight: 10
weight: 1
region: content
settings:
show_field_label: '1'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ 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
Expand Down Expand Up @@ -530,6 +531,7 @@ hidden:
content_moderation_control: true
field_administration: true
field_banner_types_description: true
field_cc_meta_tags: true
field_facility_vba_classificatio: true
field_geolocation: true
field_last_saved_by_an_editor: true
Expand Down
29 changes: 29 additions & 0 deletions config/sync/field.field.node.vba_facility.field_cc_meta_tags.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
uuid: 8e17f221-14a1-4920-b33f-4739d8ddf543
langcode: en
status: true
dependencies:
config:
- field.storage.node.field_cc_meta_tags
- node.type.vba_facility
module:
- entity_field_fetch
- tmgmt_content
third_party_settings:
tmgmt_content:
excluded: false
id: node.vba_facility.field_cc_meta_tags
field_name: field_cc_meta_tags
entity_type: node
bundle: vba_facility
label: 'Meta tags'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
target_entity_type: node
target_entity_id: '61744'
field_to_fetch: field_content_block
target_paragraph_uuid: '142580'
field_type: entity_field_fetch
19 changes: 19 additions & 0 deletions config/sync/field.storage.node.field_cc_meta_tags.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
uuid: 04efffc3-15ed-43b2-8079-dd55b0f7a388
langcode: en
status: true
dependencies:
module:
- entity_field_fetch
- node
id: node.field_cc_meta_tags
field_name: field_cc_meta_tags
entity_type: node
type: entity_field_fetch
settings: { }
module: entity_field_fetch
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
9 changes: 9 additions & 0 deletions config/sync/metatag.metatag_defaults.node__vba_facility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
uuid: 8dab1acd-96b7-4f47-adff-d38ea93ea39a
langcode: en
status: true
dependencies: { }
id: node__vba_facility
label: 'Content: VBA Facility'
tags:
description: '[node:field_cc_meta_tags]'
og_description: '[node:field_cc_meta_tags]'
128 changes: 128 additions & 0 deletions scripts/content/VACMS-14000-vba-facility-meta-tags.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
<?php

/**
* @file
* Set VBA facility meta tags.
*
* VBA Facility needs to have meta tags populated
* with data from an entity fetch field.
*
* VACMS-14000-vba-facility-meta-tags
*/

require_once __DIR__ . '/script-library.php';

use Psr\Log\LogLevel;

$sandbox = ['#finished' => 0];
do {
print(va_gov_set_vba_facility_meta_tags($sandbox));
} while ($sandbox['#finished'] < 1);
// Node processing complete. Call this done.
return;

/**
* Setting the VBA facility meta tags.
*
* @param array $sandbox
* Modeling the structure of hook_update_n sandbox.
*
* @return string
* Status message.
*/
function va_gov_set_vba_facility_meta_tags(array &$sandbox) {
$node_storage = \Drupal::entityTypeManager()->getStorage('node');

// Get the count for VBA facilities.
// This runs only once.
if (!isset($sandbox['total'])) {
$query = $node_storage->getQuery();
$query->condition('type', 'vba_facility');
$query->accessCheck(FALSE);
$nids_to_update = $query->execute();
$result_count = count($nids_to_update);
$sandbox['total'] = $result_count;
$sandbox['current'] = 0;
$sandbox['updated'] = 0;

// Create non-numeric keys to accurately remove each nid when processed.
$sandbox['nids_to_update'] = array_combine(
array_map('_va_gov_stringifynid', array_values($nids_to_update)),
array_values($nids_to_update)
);
}

// Do not continue if no nodes are found.
if (empty($sandbox['total'])) {
$sandbox['#finished'] = 1;
return "No VBA facility nodes found for processing.\n";
}

$limit = 25;

// Load entities.
$node_ids = array_slice($sandbox['nids_to_update'], 0, $limit, TRUE);
$nodes = $node_storage->loadMultiple($node_ids);
foreach ($nodes as $node) {
/** @var \Drupal\node\NodeInterface $node */
$nid = $node->id();
$nvid = $node->getRevisionId();
$node_storage = get_node_storage();
$latest_nvid = $node_storage->getLatestRevisionId($nid);

update_field_cc_meta_tags_table($nid, $nvid);

// Set the latest revision, if different than the default.
if ($nvid < $latest_nvid) {
update_field_cc_meta_tags_table($nid, $latest_nvid);
}

$sandbox['updated']++;
$nids[] = $nid;

unset($sandbox['nids_to_update']["node_{$nid}"]);
$sandbox['current'] = $sandbox['total'] - count($sandbox['nids_to_update']);
}

// Log the processed nodes.
Drupal::logger('va_gov_db')
->log(LogLevel::INFO, 'VBA Facility update: Successfully updated %current nodes with meta tags from centralized content. Nodes updated: %nids', [
'%current' => $sandbox['current'],
'%nids' => empty($nids) ? 'None' : implode(', ', $nids),
]);

$sandbox['#finished'] = ($sandbox['current'] / $sandbox['total']);

// Log the all-finished notice.
if ($sandbox['#finished'] == 1) {
Drupal::logger('va_gov_db')->log(LogLevel::INFO, 'Updating all %count VBA facility nodes with meta tags from centralized content.', [
'%count' => $sandbox['total'],
]);
return "VBA facility node updates complete. {$sandbox['current']} / {$sandbox['total']} - Total updated: {$sandbox['updated']}\n";
}

return "Processed nodes... {$sandbox['current']} / {$sandbox['total']}.\n";
}

/**
* Update the node__field_cc_meta_tags table to set the entity fetch field.
*
* @param string $nodeId
* The id of the node.
* @param string $revisionId
* The id of the node revision.
*/
function update_field_cc_meta_tags_table(string $nodeId, string $revisionId) {
$connection = \Drupal::database();
$connection->upsert('node__field_cc_meta_tags')
->fields([
'bundle' => 'vba_facility',
'entity_id' => $nodeId,
'revision_id' => $revisionId,
'langcode' => 'en',
'delta' => 0,
'field_cc_meta_tags_value' => 0,
])
->key('revision_id')
->execute();
}

0 comments on commit df3840d

Please sign in to comment.