123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- <?php
- namespace Drupal\webprofiler\Form;
- use Drupal\Core\Config\ConfigFactoryInterface;
- use Drupal\Core\Form\ConfigFormBase;
- use Drupal\Core\Form\FormStateInterface;
- use Drupal\webprofiler\Profiler\ProfilerStorageManager;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- use Symfony\Component\HttpKernel\Profiler\Profiler;
- /**
- * Class ConfigForm
- */
- class ConfigForm extends ConfigFormBase {
- /**
- * @var \Symfony\Component\HttpKernel\Profiler\Profiler
- */
- private $profiler;
- /**
- * @var array
- */
- private $templates;
- /**
- * @var \Drupal\webprofiler\Profiler\ProfilerStorageManager
- */
- private $storageManager;
- /**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container) {
- return new static(
- $container->get('config.factory'),
- $container->get('profiler'),
- $container->get('profiler.storage_manager'),
- $container->getParameter('data_collector.templates')
- );
- }
- /**
- * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
- * @param Profiler $profiler
- * @param \Drupal\webprofiler\Profiler\ProfilerStorageManager $storageManager
- * @param array $templates
- */
- public function __construct(ConfigFactoryInterface $config_factory, Profiler $profiler, ProfilerStorageManager $storageManager, $templates) {
- parent::__construct($config_factory);
- $this->profiler = $profiler;
- $this->templates = $templates;
- $this->storageManager = $storageManager;
- }
- /**
- * {@inheritdoc}
- */
- public function getFormId() {
- return 'webprofiler_config';
- }
- /**
- * {@inheritdoc}
- */
- public function buildForm(array $form, FormStateInterface $form_state) {
- $config = $this->config('webprofiler.config');
- $form['purge_on_cache_clear'] = [
- '#type' => 'checkbox',
- '#title' => $this->t('Purge on cache clear'),
- '#description' => $this->t('Deletes all profiler files during cache clear.'),
- '#default_value' => $config->get('purge_on_cache_clear'),
- ];
- $storages = $this->storageManager->getStorages();
- $form['storage'] = [
- '#type' => 'select',
- '#title' => $this->t('Storage backend'),
- '#description' => $this->t('Choose were to store profiler data.'),
- '#options' => $storages,
- '#default_value' => $config->get('storage'),
- ];
- $form['exclude'] = [
- '#type' => 'textarea',
- '#title' => $this->t('Exclude'),
- '#default_value' => $config->get('exclude'),
- '#description' => $this->t('Paths to exclude for profiling. One path per line.'),
- ];
- $form['active_toolbar_items'] = [
- '#type' => 'checkboxes',
- '#title' => $this->t('Active toolbar items'),
- '#options' => $this->getCollectors(),
- '#description' => $this->t('Choose which items to show into the toolbar.'),
- '#default_value' => $config->get('active_toolbar_items'),
- ];
- $form['ide_settings'] = [
- '#type' => 'details',
- '#title' => $this->t('IDE settings'),
- '#open' => FALSE,
- ];
- $form['ide_settings']['ide_link'] = [
- '#type' => 'textfield',
- '#title' => $this->t('IDE link'),
- '#description' => $this->t('IDE link for open files.'),
- '#default_value' => $config->get('ide_link'),
- ];
- $form['ide_settings']['ide_link_remote'] = [
- '#type' => 'textfield',
- '#title' => $this->t('IDE link remote path'),
- '#description' => $this->t('The path of the remote docroot. Leave blank if the docroot is on the same machine of the IDE. No trailing slash.'),
- '#default_value' => $config->get('ide_link_remote'),
- ];
- $form['ide_settings']['ide_link_local'] = [
- '#type' => 'textfield',
- '#title' => $this->t('IDE link local path'),
- '#description' => $this->t('The path of the local docroot. Leave blank if the docroot is on the same machine of IDE. No trailing slash.'),
- '#default_value' => $config->get('ide_link_local'),
- ];
- $form['database'] = [
- '#type' => 'details',
- '#title' => $this->t('Database settings'),
- '#open' => FALSE,
- '#states' => array(
- 'visible' => array(
- array(
- 'input[name="active_toolbar_items[database]"]' => array('checked' => TRUE),
- ),
- ),
- ),
- ];
- $form['database']['query_sort'] = [
- '#type' => 'radios',
- '#title' => $this->t('Sort query log'),
- '#options' => ['source' => 'by source', 'duration' => 'by duration'],
- '#description' => $this->t('The query table can be sorted in the order that the queries were executed or by descending duration.'),
- '#default_value' => $config->get('query_sort'),
- ];
- $form['database']['query_highlight'] = [
- '#type' => 'number',
- '#title' => $this->t('Slow query highlighting'),
- '#description' => $this->t('Enter an integer in milliseconds. Any query which takes longer than this many milliseconds will be highlighted in the query log. This indicates a possibly inefficient query, or a candidate for caching.'),
- '#default_value' => $config->get('query_highlight'),
- '#min' => 0,
- ];
- $storageId = $this->config('webprofiler.config')->get('storage');
- $storage = $this->storageManager->getStorage($storageId);
- $form['purge'] = [
- '#type' => 'details',
- '#title' => $this->t('Purge profiles'),
- '#open' => FALSE,
- ];
- $form['purge']['actions'] = ['#type' => 'actions'];
- $form['purge']['actions']['purge'] = [
- '#type' => 'submit',
- '#value' => $this->t('Purge'),
- '#submit' => [[$this, 'purge']],
- ];
- $form['purge']['purge-help'] = [
- '#type' => 'inline_template',
- '#template' => '<div class="form-item">{{ message }}</div>',
- '#context' => [
- 'message' => $this->t('Purge %storage profiles.', ['%storage' => $storage['title']]),
- ],
- ];
- return parent::buildForm($form, $form_state);
- }
- /**
- * {@inheritdoc}
- */
- public function submitForm(array &$form, FormStateInterface $form_state) {
- $this->config('webprofiler.config')
- ->set('purge_on_cache_clear', $form_state->getValue('purge_on_cache_clear'))
- ->set('storage', $form_state->getValue('storage'))
- ->set('exclude', $form_state->getValue('exclude'))
- ->set('active_toolbar_items', $form_state->getValue('active_toolbar_items'))
- ->set('ide_link', $form_state->getValue('ide_link'))
- ->set('ide_link_remote', $form_state->getValue('ide_link_remote'))
- ->set('ide_link_local', $form_state->getValue('ide_link_local'))
- ->set('query_sort', $form_state->getValue('query_sort'))
- ->set('query_highlight', $form_state->getValue('query_highlight'))
- ->save();
- parent::submitForm($form, $form_state);
- }
- /**
- * Purges profiles.
- */
- public function purge(array &$form, FormStateInterface $form_state) {
- $this->profiler->purge();
- drupal_set_message($this->t('Profiles purged'));
- }
- /**
- * @return array
- */
- private function getCollectors() {
- $options = [];
- foreach ($this->templates as $template) {
- // drupal collector should not be disabled
- if ($template[0] != 'drupal') {
- $options[$template[0]] = $template[2];
- }
- }
- asort($options);
- return $options;
- }
- /**
- * {@inheritdoc}
- */
- public function getEditableConfigNames() {
- return [
- 'webprofiler.config',
- ];
- }
- }
|