You are here

public function ModuleMissingMessageFixer::getTableRows in Module Missing Message Fixer 8

Same name and namespace in other branches
  1. 2.0.x src/ModuleMissingMessageFixer.php \Drupal\module_missing_message_fixer\ModuleMissingMessageFixer::getTableRows()

Produces one table row for each missing module.

The table rows are suitable for drush and for the admin UI.

Return value

array[] Format: $[$extension_name][$column_key] = $cell

2 calls to ModuleMissingMessageFixer::getTableRows()
ModuleMissingMessageFixer::checkModules in src/ModuleMissingMessageFixer.php
Helper function to check for modules to fix.
ModuleMissingMessageFixer::checkModules in src/ModuleMissingMessageFixer.php
Helper function to check for modules to fix.

File

src/ModuleMissingMessageFixer.php, line 103

Class

ModuleMissingMessageFixer
Class ModuleMissingMessageFixer.

Namespace

Drupal\module_missing_message_fixer

Code

public function getTableRows() {

  // Initalize vars.
  $rows = [];

  // Grab all the modules in the system table.
  $results = $this->connection
    ->select('key_value', 'k')
    ->fields('k', [
    'name',
  ])
    ->condition('collection', 'system.schema')
    ->execute()
    ->fetchAll();

  // Go through the query and check the missing modules.
  // Plus do our checks to see what's wrong.
  foreach ($results as $record) {
    if ($record->name === 'default') {
      continue;
    }

    // Grab the checker.
    $filename = drupal_get_filename('module', $record->name);
    if ($filename === NULL) {

      // Report this module in the table.
      $rows[$record->name] = [
        'name' => $record->name,
        'type' => 'module',
      ];
      continue;
    }
    $message = NULL;
    $replacements = [
      '@name' => $record->name,
      '@type' => 'module',
      '@file' => $filename,
    ];
    if (!file_exists($filename)) {

      // This case is unexpected, because drupal_get_filename() should take care
      // of it already.
      $message = 'The file @file for @name @type is missing.';
    }
    elseif (!is_readable($filename)) {

      // This case is unexpected, because drupal_get_filename() should take care
      // of it already.
      $message = 'The file @file for @name @type is not readable.';
    }
    else {

      // Verify if *.info file exists.
      // See https://www.drupal.org/node/2789993#comment-12306555
      $info_filename = dirname($filename) . '/' . $record->name . '.info.yml';
      $replacements['@info_file'] = $info_filename;
      if (!file_exists($info_filename)) {
        $message = 'The *.info.yml file @info_file for @name @type is missing.';
      }
      elseif (!is_readable($info_filename)) {
        $message = 'The *.info.yml file @info_file for @name @type is not readable.';
      }
    }
    if ($message !== NULL) {

      // This case should never occur.
      $this->messenger
        ->addWarning(t($message, $replacements), FALSE);
    }
  }
  return $rows;
}