You are here

public function PerformanceForm::buildForm in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/system/src/Form/PerformanceForm.php \Drupal\system\Form\PerformanceForm::buildForm()
  2. 10 core/modules/system/src/Form/PerformanceForm.php \Drupal\system\Form\PerformanceForm::buildForm()

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides ConfigFormBase::buildForm

File

core/modules/system/src/Form/PerformanceForm.php, line 102

Class

PerformanceForm
Configure performance settings for this site.

Namespace

Drupal\system\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['#attached']['library'][] = 'system/drupal.system';
  $config = $this
    ->config('system.performance');
  $form['clear_cache'] = [
    '#type' => 'details',
    '#title' => t('Clear cache'),
    '#open' => TRUE,
  ];
  $form['clear_cache']['clear'] = [
    '#type' => 'submit',
    '#value' => t('Clear all caches'),
    '#submit' => [
      '::submitCacheClear',
    ],
  ];
  $form['caching'] = [
    '#type' => 'details',
    '#title' => t('Caching'),
    '#open' => TRUE,
  ];

  // Identical options to the ones for block caching.
  // @see \Drupal\Core\Block\BlockBase::buildConfigurationForm()
  $period = [
    0,
    60,
    180,
    300,
    600,
    900,
    1800,
    2700,
    3600,
    10800,
    21600,
    32400,
    43200,
    86400,
  ];
  $period = array_map([
    $this->dateFormatter,
    'formatInterval',
  ], array_combine($period, $period));
  $period[0] = '<' . t('no caching') . '>';
  $form['caching']['page_cache_maximum_age'] = [
    '#type' => 'select',
    '#title' => t('Browser and proxy cache maximum age'),
    '#default_value' => $config
      ->get('cache.page.max_age'),
    '#options' => $period,
    '#description' => t('This is used as the value for max-age in Cache-Control headers.'),
  ];
  $form['caching']['internal_page_cache'] = [
    '#markup' => $this
      ->t('Drupal provides an <a href=":module_enable">Internal Page Cache module</a> that is recommended for small to medium-sized websites.', [
      ':module_enable' => Url::fromRoute('system.modules_list')
        ->toString(),
    ]),
    '#access' => !$this->moduleHandler
      ->moduleExists('page_cache'),
  ];
  $directory = 'public://';
  $is_writable = is_dir($directory) && is_writable($directory);
  $disabled = !$is_writable;
  $disabled_message = '';
  if (!$is_writable) {
    $disabled_message = ' ' . t('<strong class="error">Set up the <a href=":file-system">public files directory</a> to make these optimizations available.</strong>', [
      ':file-system' => Url::fromRoute('system.file_system_settings')
        ->toString(),
    ]);
  }
  $form['bandwidth_optimization'] = [
    '#type' => 'details',
    '#title' => t('Bandwidth optimization'),
    '#open' => TRUE,
    '#description' => t('External resources can be optimized automatically, which can reduce both the size and number of requests made to your website.') . $disabled_message,
  ];
  $form['bandwidth_optimization']['preprocess_css'] = [
    '#type' => 'checkbox',
    '#title' => t('Aggregate CSS files'),
    '#default_value' => $config
      ->get('css.preprocess'),
    '#disabled' => $disabled,
  ];
  $form['bandwidth_optimization']['preprocess_js'] = [
    '#type' => 'checkbox',
    '#title' => t('Aggregate JavaScript files'),
    '#default_value' => $config
      ->get('js.preprocess'),
    '#disabled' => $disabled,
  ];
  return parent::buildForm($form, $form_state);
}