You are here

class HighContrastSwitchForm in High contrast 8

Class HighContrastSwitchForm.

This class provides the form for toggling high contrast on and off.

Hierarchy

Expanded class hierarchy of HighContrastSwitchForm

File

src/Form/HighContrastSwitchForm.php, line 15

Namespace

Drupal\high_contrast\Form
View source
class HighContrastSwitchForm extends FormBase {
  use HighContrastTrait;

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'high_contrast_switch';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {

    // Set cache context for the form.
    $form['#cache']['contexts'][] = 'high_contrast';

    // Default settings.
    $settings = [
      // Defines the widget type to use: 'links', 'select', 'radios'.
      'switcher_widget' => 'links',
      // Not used.
      'switcher_label' => 'Contrast:',
      // The label for the high contrast element.
      'high_label' => $this
        ->t('Enable'),
      // Not used.
      'separator' => '|',
      // The label for the normal page form element.
      'normal_label' => $this
        ->t('Disable'),
      // Whether or not the form should submit automatically.
      'use_ajax' => FALSE,
      // Shows a single link/checkbox instead or two links/radios.
      'toggle_element' => FALSE,
    ];

    // Merge in provided settings.
    foreach ($settings as $key => $value) {
      if (!empty($form_state
        ->getBuildInfo()['args'][0][$key])) {
        $settings[$key] = $form_state
          ->getBuildInfo()['args'][0][$key];
      }
    }

    // Provide possible values.
    $values = [
      0 => $settings['normal_label'],
      1 => $settings['high_label'],
    ];

    // Build the select / radios form element.
    if ($settings['switcher_widget'] == 'select' || $settings['switcher_widget'] == 'radios') {
      $form['switch'] = [
        '#type' => $settings['switcher_widget'],
        '#options' => $values,
        '#default_value' => $this
          ->highContrastEnabled() ? 1 : 0,
      ];

      // If a toggle option is preferred, show a single checkbox instead.
      if ($settings['switcher_widget'] == 'radios' && $settings['toggle_element']) {
        $form['switch']['#type'] = 'checkbox';
        $form['switch']['#title'] = $settings['high_label'];
        unset($form['switch']['#options']);
      }
      $form['submit'] = [
        '#type' => 'submit',
        '#value' => 'Go',
      ];

      // The form should automatically submit. Hide the submit button as well.
      if ($settings['use_ajax']) {
        $form['switch']['#attributes'] = [
          'onChange' => 'this.form.submit();',
        ];
        $form['submit']['#attributes']['class'][] = 'js-hide';
      }
    }
    else {

      // Fetch current url for the redirect back.
      $current_url = Url::fromRoute('<current>')
        ->toString();

      // No toggle, so build 2 links.
      if (!$settings['toggle_element']) {
        $form['enable_link'] = [
          '#type' => 'link',
          '#title' => $settings['high_label'],
          '#url' => Url::fromRoute('high_contrast.enable', [], [
            'query' => [
              'destination' => $current_url,
            ],
          ]),
        ];
        $form['disable_link'] = [
          '#type' => 'link',
          '#title' => $settings['normal_label'],
          '#url' => Url::fromRoute('high_contrast.disable', [], [
            'query' => [
              'destination' => $current_url,
            ],
          ]),
        ];
      }
      else {
        $route = $this
          ->highContrastEnabled() ? 'high_contrast.disable' : 'high_contrast.enable';
        $form['toggle_link'] = [
          '#type' => 'link',
          '#title' => $this
            ->highContrastEnabled() ? $settings['normal_label'] : $settings['high_label'],
          '#url' => Url::fromRoute($route, [], [
            'query' => [
              'destination' => $current_url,
            ],
          ]),
        ];
      }
    }
    return $form;
  }

  /**
   * {@inheritdoc}
   *
   * Handles the saving of the high contrast state from select and radios. The
   * links are handled via a route.
   *
   * @see HighContrastController
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    if ($form_state
      ->getValue('switch') == 1) {
      $this
        ->enableHighContrast();
    }
    else {
      $this
        ->disableHighContrast();
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FormBase::$configFactory protected property The config factory. 1
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::config protected function Retrieves a configuration object.
FormBase::configFactory protected function Gets the config factory for this form. 1
FormBase::container private function Returns the service container.
FormBase::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create 87
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
FormBase::validateForm public function Form validation handler. Overrides FormInterface::validateForm 62
HighContrastSwitchForm::buildForm public function Form constructor. Overrides FormInterface::buildForm
HighContrastSwitchForm::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
HighContrastSwitchForm::submitForm public function Handles the saving of the high contrast state from select and radios. The links are handled via a route. Overrides FormInterface::submitForm
HighContrastTrait::disableHighContrast public function Disables high contrast mode.
HighContrastTrait::enableHighContrast public function Enables high contrast mode.
HighContrastTrait::highContrastEnabled public static function Return if high contrast is enabled or not.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.