public static function SystemThemeSettings::submitFormElement in Express 8
Form submission handler.
Parameters
\Drupal\bootstrap\Utility\Element $form: The Element object that comprises the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Overrides FormBase::submitFormElement
File
- themes/contrib/ bootstrap/ src/ Plugin/ Form/ SystemThemeSettings.php, line 117 
- Contains \Drupal\bootstrap\Plugin\Form\SystemThemeSettings.
Class
- SystemThemeSettings
- Implements hook_form_system_theme_settings_alter().
Namespace
Drupal\bootstrap\Plugin\FormCode
public static function submitFormElement(Element $form, FormStateInterface $form_state) {
  $theme = self::getTheme($form, $form_state);
  if (!$theme) {
    return;
  }
  $cache_tags = [];
  $save = FALSE;
  $settings = $theme
    ->settings();
  // Iterate over all setting plugins and manually save them since core's
  // process is severely limiting and somewhat broken.
  foreach ($theme
    ->getSettingPlugin() as $name => $setting) {
    // Allow the setting to participate in the form submission process.
    // Must call the "submitForm" method in case any setting actually uses it.
    // It should, in turn, invoke "submitFormElement", if the setting that
    // overrides it is implemented properly.
    $setting
      ->submitForm($form
      ->getArray(), $form_state);
    // Retrieve the submitted value.
    $value = $form_state
      ->getValue($name);
    // Determine if the setting has a new value that overrides the original.
    // Ignore the schemas "setting" because it's handled by UpdateManager.
    if ($name !== 'schemas' && $settings
      ->overridesValue($name, $value)) {
      // Set the new value.
      $settings
        ->set($name, $value);
      // Retrieve the cache tags for the setting.
      $cache_tags = array_unique(array_merge($setting
        ->getCacheTags()));
      // Flag the save.
      $save = TRUE;
    }
    // Remove value from the form state object so core doesn't re-save it.
    $form_state
      ->unsetValue($name);
  }
  // Save the settings, if needed.
  if ($save) {
    $settings
      ->save();
    // Invalidate necessary cache tags.
    if ($cache_tags) {
      \Drupal::service('cache_tags.invalidator')
        ->invalidateTags($cache_tags);
    }
    // Clear our internal theme cache so it can be rebuilt properly.
    $theme
      ->getCache('settings')
      ->deleteAll();
  }
}