ModulesListForm::buildRow

protected ModulesListForm::buildRow(array $modules, Extension $module, $distribution)

Builds a table row for the system modules page.

Parameters

array $modules: The list existing modules.

\Drupal\Core\Extension\Extension $module: The module for which to build the form row.

$distribution:

Return value

array The form row for the given module.

File

core/modules/system/src/Form/ModulesListForm.php, line 201

Class

ModulesListForm
Provides module installation interface.

Namespace

Drupal\system\Form

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
protected function buildRow(array $modules, Extension $module, $distribution) {
  // Set the basic properties.
  $row['#required'] = array();
  $row['#requires'] = array();
  $row['#required_by'] = array();
 
  $row['name']['#markup'] = $module->info['name'];
  $row['description']['#markup'] = $this->t($module->info['description']);
  $row['version']['#markup'] = $module->info['version'];
 
  // Generate link for module's help page. Assume that if a hook_help()
  // implementation exists then the module provides an overview page, rather
  // than checking to see if the page exists, which is costly.
  if ($this->moduleHandler->moduleExists('help') && $module->status && in_array($module->getName(), $this->moduleHandler->getImplementations('help'))) {
    $row['links']['help'] = array(
      '#type' => 'link',
      '#title' => $this->t('Help'),
      '#url' => Url::fromRoute('help.page', ['name' => $module->getName()]),
      '#options' => array('attributes' => array('class' => array('module-link', 'module-link-help'), 'title' => $this->t('Help'))),
    );
  }
 
  // Generate link for module's permission, if the user has access to it.
  if ($module->status && $this->currentUser->hasPermission('administer permissions') && $this->permissionHandler->moduleProvidesPermissions($module->getName())) {
    $row['links']['permissions'] = array(
      '#type' => 'link',
      '#title' => $this->t('Permissions'),
      '#url' => Url::fromRoute('user.admin_permissions'),
      '#options' => array('fragment' => 'module-' . $module->getName(), 'attributes' => array('class' => array('module-link', 'module-link-permissions'), 'title' => $this->t('Configure permissions'))),
    );
  }
 
  // Generate link for module's configuration page, if it has one.
  if ($module->status && isset($module->info['configure'])) {
    $route_parameters = isset($module->info['configure_parameters']) ? $module->info['configure_parameters'] : array();
    if ($this->accessManager->checkNamedRoute($module->info['configure'], $route_parameters, $this->currentUser)) {
      $row['links']['configure'] = array(
        '#type' => 'link',
        '#title' => $this->t('Configure <span class="visually-hidden">the @module module</span>', ['@module' => $module->info['name']]),
        '#url' => Url::fromRoute($module->info['configure'], $route_parameters),
        '#options' => array(
          'attributes' => array(
            'class' => array('module-link', 'module-link-configure'),
          ),
        ),
      );
    }
  }
 
  // Present a checkbox for installing and indicating the status of a module.
  $row['enable'] = array(
    '#type' => 'checkbox',
    '#title' => $this->t('Install'),
    '#default_value' => (bool) $module->status,
    '#disabled' => (bool) $module->status,
  );
 
  // Disable the checkbox for required modules.
  if (!empty($module->info['required'])) {
    // Used when displaying modules that are required by the installation profile
    $row['enable']['#disabled'] = TRUE;
    $row['#required_by'][] = $distribution . (!empty($module->info['explanation']) ? ' (' . $module->info['explanation'] . ')' : '');
  }
 
  // Check the compatibilities.
  $compatible = TRUE;
 
  // Initialize an empty array of reasons why the module is incompatible. Add
  // each reason as a separate element of the array.
  $reasons = array();
 
  // Check the core compatibility.
  if ($module->info['core'] != \Drupal::CORE_COMPATIBILITY) {
    $compatible = FALSE;
    $reasons[] = $this->t('This version is not compatible with Drupal @core_version and should be replaced.', array(
      '@core_version' => \Drupal::CORE_COMPATIBILITY,
    ));
  }
 
  // Ensure this module is compatible with the currently installed version of PHP.
  if (version_compare(phpversion(), $module->info['php']) < 0) {
    $compatible = FALSE;
    $required = $module->info['php'] . (substr_count($module->info['php'], '.') < 2 ? '.*' : '');
    $reasons[] = $this->t('This module requires PHP version @php_required and is incompatible with PHP version @php_version.', array(
      '@php_required' => $required,
      '@php_version' => phpversion(),
    ));
  }
 
  // If this module is not compatible, disable the checkbox.
  if (!$compatible) {
    $status = implode(' ', $reasons);
    $row['enable']['#disabled'] = TRUE;
    $row['description']['#markup'] = $status;
    $row['#attributes']['class'][] = 'incompatible';
  }
 
  // If this module requires other modules, add them to the array.
  foreach ($module->requires as $dependency => $version) {
    if (!isset($modules[$dependency])) {
      $row['#requires'][$dependency] = $this->t('@module (<span class="admin-missing">missing</span>)', array('@module' => Unicode::ucfirst($dependency)));
      $row['enable']['#disabled'] = TRUE;
    }
    // Only display visible modules.
    elseif (empty($modules[$dependency]->hidden)) {
      $name = $modules[$dependency]->info['name'];
      // Disable the module's checkbox if it is incompatible with the
      // dependency's version.
      if ($incompatible_version = drupal_check_incompatibility($version, str_replace(\Drupal::CORE_COMPATIBILITY . '-', '', $modules[$dependency]->info['version']))) {
        $row['#requires'][$dependency] = $this->t('@module (<span class="admin-missing">incompatible with</span> version @version)', array(
          '@module' => $name . $incompatible_version,
          '@version' => $modules[$dependency]->info['version'],
        ));
        $row['enable']['#disabled'] = TRUE;
      }
      // Disable the checkbox if the dependency is incompatible with this
      // version of Drupal core.
      elseif ($modules[$dependency]->info['core'] != \Drupal::CORE_COMPATIBILITY) {
        $row['#requires'][$dependency] = $this->t('@module (<span class="admin-missing">incompatible with</span> this version of Drupal core)', array(
          '@module' => $name,
        ));
        $row['enable']['#disabled'] = TRUE;
      }
      elseif ($modules[$dependency]->status) {
        $row['#requires'][$dependency] = $this->t('@module', array('@module' => $name));
      }
      else {
        $row['#requires'][$dependency] = $this->t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => $name));
      }
    }
  }
 
  // If this module is required by other modules, list those, and then make it
  // impossible to disable this one.
  foreach ($module->required_by as $dependent => $version) {
    if (isset($modules[$dependent]) && empty($modules[$dependent]->info['hidden'])) {
      if ($modules[$dependent]->status == 1 && $module->status == 1) {
        $row['#required_by'][$dependent] = $this->t('@module', array('@module' => $modules[$dependent]->info['name']));
        $row['enable']['#disabled'] = TRUE;
      }
      else {
        $row['#required_by'][$dependent] = $this->t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => $modules[$dependent]->info['name']));
      }
    }
  }
 
  return $row;
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.