Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 7 |
CRAP | |
0.00% |
0 / 86 |
| PerformanceForm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 7 |
90 | |
0.00% |
0 / 86 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
| getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getEditableConfigNames | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| buildForm | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 55 |
|||
| submitForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 10 |
|||
| submitCacheClear | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\system\Form\PerformanceForm. | |
| */ | |
| namespace Drupal\system\Form; | |
| use Drupal\Core\Asset\AssetCollectionOptimizerInterface; | |
| use Drupal\Core\Form\ConfigFormBase; | |
| use Drupal\Core\Config\ConfigFactoryInterface; | |
| use Drupal\Core\Cache\CacheBackendInterface; | |
| use Drupal\Core\Datetime\DateFormatterInterface; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Configure performance settings for this site. | |
| */ | |
| class PerformanceForm extends ConfigFormBase { | |
| /** | |
| * The render cache bin. | |
| * | |
| * @var \Drupal\Core\Cache\CacheBackendInterface | |
| */ | |
| protected $renderCache; | |
| /** | |
| * The date formatter service. | |
| * | |
| * @var \Drupal\Core\Datetime\DateFormatterInterface | |
| */ | |
| protected $dateFormatter; | |
| /** | |
| * The CSS asset collection optimizer service. | |
| * | |
| * @var \Drupal\Core\Asset\AssetCollectionOptimizerInterface | |
| */ | |
| protected $cssCollectionOptimizer; | |
| /** | |
| * The JavaScript asset collection optimizer service. | |
| * | |
| * @var \Drupal\Core\Asset\AssetCollectionOptimizerInterface | |
| */ | |
| protected $jsCollectionOptimizer; | |
| /** | |
| * Constructs a PerformanceForm object. | |
| * | |
| * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
| * The factory for configuration objects. | |
| * @param \Drupal\Core\Cache\CacheBackendInterface $render_cache | |
| * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter | |
| * The date formatter service. | |
| * @param \Drupal\Core\Asset\AssetCollectionOptimizerInterface $css_collection_optimizer | |
| * The CSS asset collection optimizer service. | |
| * @param \Drupal\Core\Asset\AssetCollectionOptimizerInterface $js_collection_optimizer | |
| * The JavaScript asset collection optimizer service. | |
| */ | |
| public function __construct(ConfigFactoryInterface $config_factory, CacheBackendInterface $render_cache, DateFormatterInterface $date_formatter, AssetCollectionOptimizerInterface $css_collection_optimizer, AssetCollectionOptimizerInterface $js_collection_optimizer) { | |
| parent::__construct($config_factory); | |
| $this->renderCache = $render_cache; | |
| $this->dateFormatter = $date_formatter; | |
| $this->cssCollectionOptimizer = $css_collection_optimizer; | |
| $this->jsCollectionOptimizer = $js_collection_optimizer; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('config.factory'), | |
| $container->get('cache.render'), | |
| $container->get('date.formatter'), | |
| $container->get('asset.css.collection_optimizer'), | |
| $container->get('asset.js.collection_optimizer') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFormId() { | |
| return 'system_performance_settings'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function getEditableConfigNames() { | |
| return ['system.performance']; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_state) { | |
| $form['#attached']['library'][] = 'system/drupal.system'; | |
| $config = $this->config('system.performance'); | |
| $form['clear_cache'] = array( | |
| '#type' => 'details', | |
| '#title' => t('Clear cache'), | |
| '#open' => TRUE, | |
| ); | |
| $form['clear_cache']['clear'] = array( | |
| '#type' => 'submit', | |
| '#value' => t('Clear all caches'), | |
| '#submit' => array('::submitCacheClear'), | |
| ); | |
| $form['caching'] = array( | |
| '#type' => 'details', | |
| '#title' => t('Caching'), | |
| '#open' => TRUE, | |
| '#description' => $this->t('Note: Drupal provides an internal page cache module that is recommended for small to medium-sized websites.'), | |
| ); | |
| // Identical options to the ones for block caching. | |
| // @see \Drupal\Core\Block\BlockBase::buildConfigurationForm() | |
| $period = array(0, 60, 180, 300, 600, 900, 1800, 2700, 3600, 10800, 21600, 32400, 43200, 86400); | |
| $period = array_map(array($this->dateFormatter, 'formatInterval'), array_combine($period, $period)); | |
| $period[0] = '<' . t('no caching') . '>'; | |
| $form['caching']['page_cache_maximum_age'] = array( | |
| '#type' => 'select', | |
| '#title' => t('Page cache maximum age'), | |
| '#default_value' => $config->get('cache.page.max_age'), | |
| '#options' => $period, | |
| '#description' => t('The maximum time a page can be cached by browsers and proxies. This is used as the value for max-age in Cache-Control headers.'), | |
| ); | |
| $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>', array(':file-system' => $this->url('system.file_system_settings'))); | |
| } | |
| $form['bandwidth_optimization'] = array( | |
| '#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'] = array( | |
| '#type' => 'checkbox', | |
| '#title' => t('Aggregate CSS files'), | |
| '#default_value' => $config->get('css.preprocess'), | |
| '#disabled' => $disabled, | |
| ); | |
| $form['bandwidth_optimization']['preprocess_js'] = array( | |
| '#type' => 'checkbox', | |
| '#title' => t('Aggregate JavaScript files'), | |
| '#default_value' => $config->get('js.preprocess'), | |
| '#disabled' => $disabled, | |
| ); | |
| return parent::buildForm($form, $form_state); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function submitForm(array &$form, FormStateInterface $form_state) { | |
| $this->cssCollectionOptimizer->deleteAll(); | |
| $this->jsCollectionOptimizer->deleteAll(); | |
| // This form allows page compression settings to be changed, which can | |
| // invalidate cached pages in the render cache, so it needs to be cleared on | |
| // form submit. | |
| $this->renderCache->deleteAll(); | |
| $this->config('system.performance') | |
| ->set('cache.page.max_age', $form_state->getValue('page_cache_maximum_age')) | |
| ->set('css.preprocess', $form_state->getValue('preprocess_css')) | |
| ->set('js.preprocess', $form_state->getValue('preprocess_js')) | |
| ->save(); | |
| parent::submitForm($form, $form_state); | |
| } | |
| /** | |
| * Clears the caches. | |
| */ | |
| public function submitCacheClear(array &$form, FormStateInterface $form_state) { | |
| drupal_flush_all_caches(); | |
| drupal_set_message(t('Caches cleared.')); | |
| } | |
| } |