Skip to content
Snippets Groups Projects
Commit e0032fa1 authored by Eric Bremner's avatar Eric Bremner Committed by Kevin Paxman
Browse files

ISTWCMS-5880: adding update hook for media fields

parent 9979bb0a
No related branches found
No related tags found
3 merge requests!284Feature/istwcms 5880 ebremner banners above,!274Draft: ISTWCMS-5551: fixing office hours display,!260Feature/istwcms 5668 a5kulkar rename references to publications
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
*/ */
use Drupal\Core\Config\FileStorage; use Drupal\Core\Config\FileStorage;
use Drupal\field\Entity\FieldConfig;
use Drupal\node\Entity\Node; use Drupal\node\Entity\Node;
use Drupal\taxonomy\Entity\Term; use Drupal\taxonomy\Entity\Term;
use Drupal\user\Entity\Role; use Drupal\user\Entity\Role;
...@@ -458,3 +459,173 @@ function uw_cfg_common_update_9105(&$sandbox) { ...@@ -458,3 +459,173 @@ function uw_cfg_common_update_9105(&$sandbox) {
$active_storage = \Drupal::service('config.storage'); $active_storage = \Drupal::service('config.storage');
$active_storage->write($name, $source->read($name)); $active_storage->write($name, $source->read($name));
} }
/**
* Add new fields for banners above.
*/
function uw_cfg_common_update_9106(&$sandbox) {
// The content types that are not getting any changes.
$cts_not_to_install = [
'uw_ct_sidebar',
'uw_ct_site_footer',
'uw_ct_expand_collapse_group',
];
// The content types with media already in it (hero image).
$cts_with_media = [
'uw_ct_blog',
'uw_ct_event',
'uw_ct_news_item',
];
// Get all the node types.
$node_types = \Drupal::entityTypeManager()->getStorage('node_type')->loadMultiple();
// Step through each node type and get the path to
// the module and the machine name.
foreach ($node_types as $node_type) {
// Get the id from the node type.
$id = $node_type->id();
// Ensure we are only getting the node type
// that need updating.
if (!in_array($id, $cts_not_to_install)) {
// Catalogs and opportunities have different paths
// and ids, so setup the content types array with
// the correct info.
if ($id == 'uw_ct_catalog_item') {
$content_types['uw_ct_catalog'] = $id;
} else if ($id == 'uw_ct_opportunity') {
$content_types['uw_ct_opportunities'] = $id;
} else {
$content_types[$id] = $id;
}
}
}
// Get the type of media field that we need to udpate.
$type_of_media = current(\Drupal::entityTypeManager()->getStorage('field_storage_config')->loadByProperties(array('id' => 'node.field_uw_type_of_media')));
// Get the type of media settings.
$settings = $type_of_media->getSettings();
// Update the settings to remove the allowed values and
// add the allowed values function.
$settings['allowed_values'] = [];
$settings['allowed_values_function'] = '_uw_cfg_common_allowed_media_types';
// Set the update settings.
$type_of_media->setSettings($settings);
// Save the field.
$type_of_media->save();
// The names of the fields we need to install.
$names = [
'field.storage.node.field_uw_banner',
'field.storage.node.field_uw_media_width',
'field.storage.node.field_uw_slide_speed',
'field.storage.node.field_uw_transition_speed',
'field.storage.node.field_uw_text_overlay_style',
];
// Get the path to cfg common config install directory.
$path = \Drupal::service('extension.list.module')->getPath('uw_cfg_common') . '/config/install/';
$config_dir = new FileStorage($path);
// Step through each of the field names and install them.
foreach ($names as $name) {
// Get the config from the yml file into an array.
$config_record = $config_dir->read($name);
// Get the entity type.
$entity_type = \Drupal::service('config.manager')->getEntityTypeIdByName($name);
// Get the storage.
$storage = \Drupal::entityTypeManager()->getStorage($entity_type);
// Create the new field from the converted yml.
$field = $storage->createFromStorageRecord($config_record);
// Save the new field.
$field->save();
}
// Step through each of the content types and install the fields,
// and also setup default values for the fields.
foreach ($content_types as $path => $id) {
// Get the path to the content type.
$path = \Drupal::service('extension.list.module')->getPath($path) . '/config/install/';
$config_dir = new FileStorage($path);
// The names of the fields to install.
$names = [
'field.field.node.' . $id . '.field_uw_banner',
'field.field.node.' . $id . '.field_uw_type_of_media',
'field.field.node.' . $id . '.field_uw_media_width',
'field.field.node.' . $id . '.field_uw_text_overlay_style',
'field.field.node.' . $id . '.field_uw_transition_speed',
];
// Step through each of the fields and install them.
foreach ($names as $name) {
// Get the config from the yml into an array.
$config_record = $config_dir->read($name);
// If the field config is not install, install it.
if (!FieldConfig::loadByName(
$config_record['entity_type'],
$config_record['bundle'],
$config_record['field_name'])
) {
FieldConfig::create($config_record)->save();
}
}
// If there is no media yet on the content type,
// then install the type of hero image field.
if (!in_array($id, $cts_with_media)) {
// Name of the hero image field.
$name = 'field.field.node.' . $id . '.field_uw_hero_image';
// Get the config from the yml into an array.
$config_record = $config_dir->read($name);
// If the field config is not install, install it.
if (!FieldConfig::loadByName($config_record['entity_type'], $config_record['bundle'], $config_record['field_name'])) {
FieldConfig::create($config_record)->save();
}
}
// Get all the nodes of the content type.
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties(['type' => $id]);
// Step through each of the nodes and set the default
// values of the fields.
foreach ($nodes as $node) {
// Set default values for banners.
$node->field_uw_banner = NULL;
$node->field_uw_media_width = 'uw_lbs_full_width';
$node->field_uw_slide_speed = 7000;
$node->field_uw_transition_speed = 400;
$node->field_uw_text_overlay_style = 'full-width';
// If the content type does not have media yet,
// set the default value for type of media.
if (!in_array($id, $cts_with_media)) {
$node->field_uw_type_of_media = NULL;
}
// Save the node.
$node->save();
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment