You are here

class InfoForm in Advanced CSS/JS Aggregation 8.3

Same name and namespace in other branches
  1. 8.4 src/Form/InfoForm.php \Drupal\advagg\Form\InfoForm
  2. 8.2 src/Form/InfoForm.php \Drupal\advagg\Form\InfoForm

View AdvAgg information for this site.

Hierarchy

Expanded class hierarchy of InfoForm

1 string reference to 'InfoForm'
advagg.routing.yml in ./advagg.routing.yml
advagg.routing.yml

File

src/Form/InfoForm.php, line 20

Namespace

Drupal\advagg\Form
View source
class InfoForm extends ConfigFormBase {

  /**
   * The theme registry service.
   *
   * @var \Drupal\Core\Theme\Registry
   */
  protected $themeRegistry;

  /**
   * The request stack.
   *
   * @var \Symfony\Component\HttpFoundation\RequestStack
   */
  protected $requestStack;

  /**
   * The date formatter service.
   *
   * @var \Drupal\Core\Datetime\DateFormatterInterface
   */
  protected $dateFormatter;

  /**
   * The string translation service.
   *
   * @var \Drupal\Core\StringTranslation\Translator\TranslatorInterface
   */
  protected $translation;

  /**
   * The AdvAgg cache.
   *
   * @var \Drupal\Core\Cache\CacheBackendInterface
   */
  protected $cache;

  /**
   * The Messenger service.
   *
   * @var \Drupal\Core\Messenger\MessengerInterface
   */
  protected $messenger;

  /**
   * Constructs a SettingsForm object.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The factory for configuration objects.
   * @param \Drupal\Core\Theme\Registry $theme_registry
   *   The theme registry service.
   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
   *   The request stack.
   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
   *   The Date formatter service.
   * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $string_translation
   *   The string translation service.
   * @param \Drupal\Core\Cache\CacheBackendInterface $cache
   *   The AdvAgg cache.
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   *   The messenger service.
   */
  public function __construct(ConfigFactoryInterface $config_factory, Registry $theme_registry, RequestStack $request_stack, DateFormatterInterface $date_formatter, TranslatorInterface $string_translation, CacheBackendInterface $cache, MessengerInterface $messenger) {
    parent::__construct($config_factory);
    $this->themeRegistry = $theme_registry;
    $this->requestStack = $request_stack;
    $this->dateFormatter = $date_formatter;
    $this->translation = $string_translation;
    $this->cache = $cache;
    $this->messenger = $messenger;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('config.factory'), $container
      ->get('theme.registry'), $container
      ->get('request_stack'), $container
      ->get('date.formatter'), $container
      ->get('string_translation'), $container
      ->get('cache.advagg'), $container
      ->get('messenger'));
  }

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

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['tip'] = [
      '#markup' => '<p>' . $this
        ->t('This page provides debugging information. There are no configuration options here.') . '</p>',
    ];

    // Get all hooks and variables.
    $core_hooks = $this->themeRegistry
      ->get();
    $advagg_hooks = advagg_hooks_implemented();

    // Output html preprocess functions hooks.
    $form['theme_info'] = [
      '#type' => 'details',
      '#open' => TRUE,
      '#title' => $this
        ->t('Hook Theme Info'),
    ];
    $data = implode("\n", $core_hooks['html']['preprocess functions']);
    $form['theme_info']['advagg_theme_info'] = [
      '#markup' => '<p>preprocess functions on html.</p><pre>' . $data . '</pre>',
    ];
    $form['hooks_implemented'] = [
      '#type' => 'details',
      '#open' => TRUE,
      '#title' => $this
        ->t('Core asset hooks implemented by modules'),
    ];

    // Output all advagg hooks implemented.
    foreach ($advagg_hooks as $hook => $values) {
      if (empty($values)) {
        $form['hooks_implemented'][$hook] = [
          '#markup' => '<div><strong>' . $hook . ':</strong> 0</div>',
        ];
      }
      else {
        $form['hooks_implemented'][$hook] = [
          '#markup' => '<div><strong>' . $hook . ':</strong> ' . count($values) . $this
            ->formatList($values) . '</div>',
        ];
      }
    }

    // Get info about a file.
    $form['get_info_about_agg'] = [
      '#type' => 'details',
      '#open' => TRUE,
      '#title' => $this
        ->t('Get detailed info about an optimized file'),
    ];
    $form['get_info_about_agg']['filename'] = [
      '#type' => 'textfield',
      '#size' => 170,
      '#maxlength' => 256,
      '#default_value' => '',
      '#title' => $this
        ->t('Filename'),
    ];
    $form['get_info_about_agg']['submit'] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Lookup Details'),
      '#submit' => [
        '::getFileInfoSubmit',
      ],
      '#validate' => [
        '::getFileInfoValidate',
      ],
      '#ajax' => [
        'callback' => '::getFileInfoAjax',
        'wrapper' => 'advagg-file-info-ajax',
        'effect' => 'fade',
      ],
    ];
    if ($tip = $this
      ->getRandomFile()) {
      $form['get_info_about_agg']['tip'] = [
        '#markup' => '<p>' . $this
          ->t('Input an optimized filename like "@css_file".', [
          '@css_file' => $tip,
        ]) . '</p>',
      ];
    }
    $form['get_info_about_agg']['wrapper'] = [
      '#prefix' => "<div id='advagg-file-info-ajax'>",
      '#suffix' => "</div>",
    ];
    $form = parent::buildForm($form, $form_state);
    unset($form['actions']);
    return $form;
  }

  /**
   * Format an indented list from array.
   *
   * @param array $list
   *   The array to convert to a string.
   * @param int $depth
   *   (optional) Depth multiplier for indentation.
   *
   * @return string
   *   The imploded and spaced array.
   */
  private function formatList(array $list, $depth = 1) {
    $spacer = '<br />' . str_repeat('&nbsp;', 2 * $depth);
    $output = $spacer . Xss::filter(implode($spacer, $list), [
      'br',
    ]);
    return $output;
  }

  /**
   * Display file info in a drupal message.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   */
  public function getFileInfoSubmit(array &$form, FormStateInterface $form_state) {
    $this->messenger
      ->addMessage($this
      ->getFileInfo($form_state
      ->getValue('filename')));
  }

  /**
   * Display file info via ajax callback.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   *
   * @return array
   *   The file info element.
   */
  public function getFileInfoAjax(array &$form) {
    return $form['get_info_about_agg']['wrapper'];
  }

  /**
   * Verify that the filename is correct.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   */
  public function getFileInfoValidate(array $form, FormStateInterface $form_state) {
    if (empty($form_state
      ->getValue('filename'))) {
      $form_state
        ->setErrorByName('filename', $this
        ->t('Please input a valid optimized filename.'));
    }
  }

  /**
   * Get detailed info about the given filename.
   *
   * @param string $filename
   *   Name of file to lookup.
   *
   * @return string
   *   Detailed info about this file.
   */
  private function getFileInfo($filename) {
    if (substr_compare($filename, 'css_', 0) || substr_compare($filename, 'js_', 0)) {
      $cid = str_replace([
        'css_',
        'js_',
        '.css',
        '.js',
      ], '', $filename);
      $cid = substr($cid, 0, strpos($cid, '.'));
      if ($cached = $this->cache
        ->get($cid, TRUE)) {
        return print_r($cached->data, TRUE);
      }
    }
    return $this
      ->t('Optimized file information not found, confirm spelling of the path. Alternatively, that could be an outdated file.');
  }

  /**
   * Get a (pseudo) random optimized file name.
   *
   * @return bool|string
   *   The filename or FALSE if no valid files found.
   */
  private function getRandomFile() {

    // Ensure the directory exists.
    $dir = 'public://js/optimized/';
    if (!is_dir($dir)) {
      return FALSE;
    }
    if ($handler = opendir($dir)) {
      while (($file = readdir($handler)) !== FALSE) {
        if (is_file($dir . $file) && pathinfo($file, PATHINFO_EXTENSION) == 'js') {
          closedir($handler);
          return $file;
        }
      }
      closedir($handler);
    }
    return FALSE;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConfigFormBase::submitForm public function Form submission handler. Overrides FormInterface::submitForm 26
ConfigFormBaseTrait::config protected function Retrieves a configuration object.
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::$routeMatch protected property The route match.
FormBase::configFactory protected function Gets the config factory for this form. 1
FormBase::container private function Returns the service container.
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
InfoForm::$cache protected property The AdvAgg cache.
InfoForm::$dateFormatter protected property The date formatter service.
InfoForm::$messenger protected property The Messenger service. Overrides MessengerTrait::$messenger
InfoForm::$requestStack protected property The request stack. Overrides FormBase::$requestStack
InfoForm::$themeRegistry protected property The theme registry service.
InfoForm::$translation protected property The string translation service.
InfoForm::buildForm public function Form constructor. Overrides ConfigFormBase::buildForm
InfoForm::create public static function Instantiates a new instance of this class. Overrides ConfigFormBase::create
InfoForm::formatList private function Format an indented list from array.
InfoForm::getEditableConfigNames protected function Gets the configuration names that will be editable. Overrides ConfigFormBaseTrait::getEditableConfigNames
InfoForm::getFileInfo private function Get detailed info about the given filename.
InfoForm::getFileInfoAjax public function Display file info via ajax callback.
InfoForm::getFileInfoSubmit public function Display file info in a drupal message.
InfoForm::getFileInfoValidate public function Verify that the filename is correct.
InfoForm::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
InfoForm::getRandomFile private function Get a (pseudo) random optimized file name.
InfoForm::__construct public function Constructs a SettingsForm object. Overrides ConfigFormBase::__construct
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 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.