You are here

function module_filter_form_system_modules_alter in Module Filter 8.3

Same name and namespace in other branches
  1. 8 module_filter.module \module_filter_form_system_modules_alter()
  2. 6 module_filter.module \module_filter_form_system_modules_alter()
  3. 7.2 module_filter.module \module_filter_form_system_modules_alter()
  4. 7 module_filter.module \module_filter_form_system_modules_alter()

Implements hook_form_FORM_ID_alter().

File

./module_filter.module, line 35
Provides a filtering mechanism to various admin pages.

Code

function module_filter_form_system_modules_alter(&$form, FormStateInterface $form_state, $form_id) {
  $config = \Drupal::config('module_filter.settings');
  $key = array_search('system/drupal.system.modules', $form['#attached']['library']);
  if ($key !== FALSE) {
    unset($form['#attached']['library'][$key]);
  }
  $form['#attached']['library'][] = $config
    ->get('tabs') ? 'module_filter/modules.tabs' : 'module_filter/modules.bare';
  unset($form['filters']['text']['#description']);
  $form['filters']['text']['#placeholder'] = t('Filter by name');
  if (!empty($_GET['filter'])) {
    $form['filters']['text']['#default_value'] = $_GET['filter'];
  }
  $status_defaults = [
    isset($_GET['enabled']) ? $_GET['enabled'] : 1 ? 'enabled' : '',
    isset($_GET['disabled']) ? $_GET['disabled'] : 1 ? 'disabled' : '',
    isset($_GET['unavailable']) ? $_GET['unavailable'] : 1 ? 'unavailable' : '',
  ];
  $form['filters']['status'] = [
    '#type' => 'container',
    '#attributes' => [
      'class' => [
        'module-filter-status',
      ],
    ],
    'checkboxes' => [
      '#type' => 'checkboxes',
      '#default_value' => array_filter($status_defaults),
      '#options' => [
        'enabled' => t('Enabled'),
        'disabled' => t('Disabled'),
        'unavailable' => t('Unavailable'),
      ],
    ],
  ];
  $state = \Drupal::state();
  $recent = $state
    ->get('module_filter.recent') ?: [];

  // Remove recent items older than a week.
  $recent = array_filter($recent, function ($val) {
    return !($val < \Drupal::time()
      ->getRequestTime() - 60 * 60 * 24 * 7);
  });
  $state
    ->set('module_filter.recent', $recent);
  if (!empty($recent)) {
    foreach ($recent as $module => $time) {
      foreach (Element::children($form['modules']) as $package) {
        if (isset($form['modules'][$package][$module])) {
          $form['modules'][$package][$module]['#attributes']['class'][] = 'recent';
          break;
        }
      }
    }
  }
  $modules = \Drupal::service('extension.list.module')
    ->reset()
    ->getList();
  foreach ($modules as $name => $module) {
    if ($name == 'module_filter') {
      $ctime = filectime($module
        ->getPathname());
      if ($ctime - strtotime('-1 week') > 0) {
        foreach (Element::children($form['modules']) as $package) {
          if (isset($form['modules'][$package][$name])) {
            $form['modules'][$package][$name]['#attributes']['class'][] = 'new';
            break;
          }
        }
      }
    }
  }
  $form['#submit'][] = 'module_filter_system_modules_recent_enabled_submit';
  $form['#submit'][] = 'module_filter_system_modules_redirect_submit';
}