function ThemeExperimentalConfirmForm::buildForm

Same name and namespace in other branches
  1. 9 core/modules/system/src/Form/ThemeExperimentalConfirmForm.php \Drupal\system\Form\ThemeExperimentalConfirmForm::buildForm()
  2. 8.9.x core/modules/system/src/Form/ThemeExperimentalConfirmForm.php \Drupal\system\Form\ThemeExperimentalConfirmForm::buildForm()
  3. 11.x core/modules/system/src/Form/ThemeExperimentalConfirmForm.php \Drupal\system\Form\ThemeExperimentalConfirmForm::buildForm()

Overrides ConfirmFormBase::buildForm

File

core/modules/system/src/Form/ThemeExperimentalConfirmForm.php, line 96

Class

ThemeExperimentalConfirmForm
Builds a confirmation form for enabling experimental themes.

Namespace

Drupal\system\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
    $theme = $form_state->getBuildInfo()['args'][0] ? $form_state->getBuildInfo()['args'][0] : NULL;
    $all_themes = $this->themeList
        ->getList();
    if (!isset($all_themes[$theme])) {
        return $this->redirect('system.themes_page');
    }
    $this->messenger()
        ->addWarning($this->t('Experimental themes are provided for testing purposes only. Use at your own risk.'));
    $dependencies = array_keys($all_themes[$theme]->requires);
    $themes = array_merge([
        $theme,
    ], $dependencies);
    $is_experimental = function ($theme) use ($all_themes) {
        return isset($all_themes[$theme]) && $all_themes[$theme]->isExperimental();
    };
    $get_label = function ($theme) use ($all_themes) {
        return $all_themes[$theme]->info['name'];
    };
    $items = [];
    if (!empty($dependencies)) {
        // Display a list of required themes that have to be installed as well.
        $items[] = $this->formatPlural(count($dependencies), 'You must install the @required theme to install @theme.', 'You must install the @required themes to install @theme.', [
            '@theme' => $get_label($theme),
            // It is safe to implode this because theme names are not translated
            // markup and so will not be double-escaped.
'@required' => implode(', ', array_map($get_label, $dependencies)),
        ]);
    }
    // Add the list of experimental themes after any other messages.
    $items[] = $this->t('The following themes are experimental: @themes', [
        '@themes' => implode(', ', array_map($get_label, array_filter($themes, $is_experimental))),
    ]);
    $form['message'] = [
        '#theme' => 'item_list',
        '#items' => $items,
    ];
    return parent::buildForm($form, $form_state);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.