Skip to content
Snippets Groups Projects

Issue #3445081 by Grevil: Add missing update hook for adjusting viewsreference field settings

Open Issue #3445081 by Grevil: Add missing update hook for adjusting viewsreference field settings
1 file
+ 71
0
Compare changes
  • Side-by-side
  • Inline
+ 71
0
@@ -284,3 +284,74 @@ function viewsreference_update_viewsreference_fields(array $columns_to_add = [])
}
}
}
/**
* Update field settings.
*
* Updates the "plugin_types", "preselect_views" and "enabled_settings" field
* settings, unsetting disabled options and adjusting "enabled_settings" options
* to use strings instead of integers / booleans.
*/
function viewsreference_update_8104() {
$viewsReferenceFields = \Drupal::entityTypeManager()->getStorage('field_config')->loadByProperties(['field_type' => 'viewsreference']);
$fieldSettingsChanged = FALSE;
foreach ($viewsReferenceFields as $field) {
/** @var \Drupal\field\Entity\FieldConfig $field */
// Process plugin_types through unsetting empty values, similar how
// fieldSettingsFormValidate() does in the frontend.
$pluginTypes = $field->getSetting('plugin_types');
if (is_array($pluginTypes) && !empty($pluginTypes)) {
foreach ($pluginTypes as $pluginTypeKey => $pluginTypeValue) {
if (empty($pluginTypeValue)) {
unset($pluginTypes[$pluginTypeKey]);
}
}
$field->setSetting('plugin_types', $pluginTypes);
$fieldSettingsChanged = TRUE;
}
// Process preselect_views through unsetting empty values:
$preselectedViews = $field->getSetting('preselect_views');
if (is_array($preselectedViews) && !empty($preselectedViews)) {
foreach ($preselectedViews as $preselectedViewKey => $preselectedViewValue) {
if (empty($preselectedViewValue)) {
unset($preselectedViews[$preselectedViewKey]);
}
}
$field->setSetting('preselect_views', $preselectedViews);
$fieldSettingsChanged = TRUE;
}
// Process enabled_settings through unsetting empty values AND converting
// non empty integer and boolean values to strings:
$enabledSettings = $field->getSetting('enabled_settings');
if (is_array($enabledSettings) && !empty($enabledSettings)) {
foreach ($enabledSettings as $enabledSettingKey => $enabledSettingValue) {
if (empty($enabledSettingValue)) {
// Unset empty values:
unset($enabledSettings[$enabledSettingKey]);
}
else {
// Convert non empty integer and boolean values to string. Use the key
// as value, since the old config could be structured like this:
// @codingStandardsIgnoreStart
// enabled_settings:
// limit: 1
// offset: 1
// title: true
// pager: pager
// argument: argument
// @codingStandardsIgnoreEnd
$enabledSettings[$enabledSettingKey] = $enabledSettingKey;
}
}
$field->setSetting('enabled_settings', $enabledSettings);
$fieldSettingsChanged = TRUE;
}
if ($fieldSettingsChanged) {
$field->save();
}
}
}
Loading