You are here

function _webform_update_webform_handler_settings in Webform 6.x

Same name and namespace in other branches
  1. 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.

... See full list

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();
      }
    }
  }
}