function _webform_update_webform_handler_settings in Webform 6.x
Same name and namespace in other branches
- 8.5 includes/webform.install.inc \_webform_update_webform_handler_settings()
Update webform handler settings to reflect changes in the handler's settings.
See also
\Drupal\webform\Plugin\WebformHandlerInterface
23 calls to _webform_update_webform_handler_settings()
- WebformAdminConfigAdvancedForm::submitForm in src/
Form/ AdminConfig/ WebformAdminConfigAdvancedForm.php - Form submission handler.
- WebformCliService::drush_webform_repair in src/
Commands/ WebformCliService.php - webform_options_limit_update_8001 in modules/
webform_options_limit/ webform_options_limit.install - Issue #3093104: Per User Option Limits Handler.
- webform_options_limit_update_8002 in modules/
webform_options_limit/ webform_options_limit.install - Issue #3124729: Option Limit broken for Tableselect.
- webform_scheduled_email_update_8001 in modules/
webform_scheduled_email/ webform_scheduled_email.install - Update schema config to add new "past actions" item.
File
- includes/
webform.install.inc, line 201 - Webform install helper functions.
Code
function _webform_update_webform_handler_settings() {
// Issue #2863986: Allow updating modules with new service dependencies.
\Drupal::service('kernel')
->rebuildContainer();
// Get the default configuration (aka settings) for all handlers provided
// by the Webform module.
/** @var \Drupal\webform\Plugin\WebformHandlerManagerInterface $handler_manager */
$handler_manager = \Drupal::service('plugin.manager.webform.handler');
$definitions = $handler_manager
->getDefinitions();
$default_handler_settings = [];
foreach ($definitions as $plugin_id => $definition) {
if (strpos($definition['provider'], 'webform_test_') === 0 || in_array($definition['provider'], [
'webform',
'webform_scheduled_email',
])) {
$default_handler_settings[$plugin_id] = $handler_manager
->createInstance($plugin_id)
->defaultConfiguration();
}
}
$config_factory = \Drupal::configFactory();
// Update 'webform.webform.*' configuration.
foreach ($config_factory
->listAll('webform.webform.') as $webform_config_name) {
$webform_config = $config_factory
->getEditable($webform_config_name);
// Get data.
$data = $webform_config
->getRawData();
// Apply the default handler settings.
$has_handler = FALSE;
if (!empty($data['handlers'])) {
foreach ($data['handlers'] as &$handler) {
if (!isset($default_handler_settings[$handler['id']])) {
continue;
}
$settings = $default_handler_settings[$handler['id']];
foreach ($handler['settings'] as $settings_key => $setting_value) {
$settings[$settings_key] = $setting_value;
}
if ($handler['settings'] !== $settings) {
$has_handler = TRUE;
$handler['settings'] = $settings;
}
}
if ($has_handler) {
$webform_config
->setData($data)
->save();
}
}
}
}