class abstract class CdnProviderBase

A base class for CDN Provider settings.

Hierarchy

Expanded class hierarchy of CdnProviderBase

Related topics

Namespace

Drupal\bootstrap\Plugin\Setting\Advanced\Cdn
Source
abstract class CdnProviderBase extends SettingBase {

  use FormAutoloadFixTrait;

  /**
   * The active provider based on form value or theme setting.
   *
   * @var \Drupal\bootstrap\Plugin\Provider\ProviderInterface
   */
  protected $provider;

  /**
   * {@inheritdoc}
   */
  public function alterForm(array &$form, FormStateInterface $form_state, $form_id = NULL) {
    // Add autoload fix to make sure AJAX callbacks work.
    static::formAutoloadFix($form_state);

    // Attempt to extract the active provider from submitted values. Note: in
    // some cases, it needs to be extracted from the raw input if the values
    // haven't yet been populated.
    $input = $form_state->getUserInput();
    $provider = $form_state->getValue('cdn_provider', isset($input['cdn_provider']) ? Html::escape($input['cdn_provider']) : NULL);
    $this->provider = ProviderManager::load($this->theme, $provider);

    // Invoke the original alter.
    parent::alterForm($form, $form_state, $form_id);
  }

  /**
   * Handles any CDN Provider exceptions that may have been thrown.
   *
   * @param \Drupal\bootstrap\Plugin\Provider\ProviderInterface $provider
   *   A CDN Provider to check.
   * @param bool $reset
   *   Flag indicating whether to remove the Exceptions once they have been
   *   retrieved.
   *
   * @return bool
   *   TRUE if there are exceptions, FALSE otherwise.
   */
  protected static function checkCdnExceptions(ProviderInterface $provider, $reset = TRUE) {
    $exceptions = $provider->getCdnExceptions($reset);
    if ($exceptions) {
      Bootstrap::message(t('Unable to parse @provider data. <a href=":logs">Check the logs for more details.</a> If your issues are network related, consider using the "custom" CDN Provider instead to statically set the URLs that should be used.', [
        ':logs' => Url::fromRoute('dblog.overview')->toString(),
        '@provider' => $provider->getLabel(),
      ]), 'error');
      foreach ($exceptions as $exception) {
        watchdog_exception('bootstrap', $exception);
      }
    }
    return !!$exceptions;
  }

  /**
   * AJAX callback for reloading CDN Providers.
   *
   * @param array $form
   *   Nested array of form elements that comprise the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   *
   * @return array
   *   The form element to render.
   */
  public static function ajaxCdnProvidersCallback(array $form, FormStateInterface $form_state) {
    return $form['cdn']['cdn_provider'];
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheTags() {
    return ['library_info'];
  }

  /**
   * Retrieves the active CDN Provider.
   *
   * @return \Drupal\bootstrap\Plugin\Provider\ProviderInterface
   *   A CDN Provider.
   */
  protected function getProvider() {
    if (!isset($this->provider)) {
      $this->provider = $this->theme->getCdnProvider();
    }
    return $this->provider;
  }

  /**
   * Sets the #ajax property to rebuild the entire CDN Providers container.
   *
   * @param \Drupal\bootstrap\Utility\Element|array $element
   *   An Element to modify.
   *
   * @return \Drupal\bootstrap\Utility\Element
   *   The Element passed.
   */
  protected function setCdnProvidersAjax($element) {
    return Element::create($element)->setProperty('ajax', [
      'callback' => [get_class($this), 'ajaxCdnProvidersCallback'],
      'wrapper' => 'cdn-providers',
    ]);
  }

}

Members

Contains filters are case sensitive
Name Modifiers Type Description
CdnProviderBase::$provider protected property The active provider based on form value or theme setting.
CdnProviderBase::ajaxCdnProvidersCallback public static function AJAX callback for reloading CDN Providers.
CdnProviderBase::alterForm public function The alter method to store the code. Overrides SettingBase::alterForm
CdnProviderBase::checkCdnExceptions protected static function Handles any CDN Provider exceptions that may have been thrown.
CdnProviderBase::getCacheTags public function The cache tags associated with this object. Overrides SettingBase::getCacheTags
CdnProviderBase::getProvider protected function Retrieves the active CDN Provider.
CdnProviderBase::setCdnProvidersAjax protected function Sets the #ajax property to rebuild the entire CDN Providers container.
FormAutoloadFixTrait::formAutoloadFix public static function Adds the autoload fix include file to the form state.
PluginBase::$theme protected property The currently set theme object.
PluginBase::__construct public function
SettingBase::$autoUserInterface public static property
SettingBase::access public function Indicates whether a setting is accessible. Overrides SettingInterface::access
SettingBase::alterFormElement public function The alter method to store the code. Overrides FormInterface::alterFormElement
SettingBase::autoCreateFormElement public function Indicates whether a form element should be created automatically. Overrides SettingInterface::autoCreateFormElement
SettingBase::drupalSettings public function Determines whether a theme setting should added to drupalSettings. Overrides SettingInterface::drupalSettings
SettingBase::getDefaultValue public function Retrieves the setting's default value. Overrides SettingInterface::getDefaultValue
SettingBase::getDescription public function Retrieves the setting's description, if any. Overrides SettingInterface::getDescription
SettingBase::getElement Deprecated public function Overrides SettingInterface::getElement
SettingBase::getElementProperties public function Retrieves all the form properties from the setting definition.
SettingBase::getGroup Deprecated public function Overrides SettingInterface::getGroup
SettingBase::getGroupElement public function Retrieves the group form element the setting belongs to. Overrides SettingInterface::getGroupElement
SettingBase::getGroups public function Retrieves the setting's groups. Overrides SettingInterface::getGroups
SettingBase::getOptions public function Retrieves the settings options, if set. Overrides SettingInterface::getOptions
SettingBase::getSettingElement public function Retrieves the form element for the setting. Overrides SettingInterface::getSettingElement
SettingBase::getSettingValue protected function Retrieves the setting value used to populate the form.
SettingBase::getTitle public function Retrieves the setting's human-readable title. Overrides SettingInterface::getTitle
SettingBase::processDeprecatedValues public function Retrieves the value from other deprecated settings. Overrides SettingInterface::processDeprecatedValues
SettingBase::submitForm public static function Form submission handler. Overrides FormInterface::submitForm
SettingBase::submitFormElement public static function Form submission handler. Overrides FormInterface::submitFormElement
SettingBase::validateForm public static function Form validation handler. Overrides FormInterface::validateForm
SettingBase::validateFormElement public static function Form validation handler. Overrides FormInterface::validateFormElement