'Name',
'type' => 'Type',
'filename' => 'Filename',
);
}
// These are special modules that have their own patches already.
// This will help eliminate some of the brute force of this module.
$special = array(
'adminimal_theme' => 'https://www.drupal.org/node/2763581',
'content' => 'https://www.drupal.org/node/2763555',
'field_collection_table' => 'https://www.drupal.org/node/2764331',
);
// Grab all the modules in the system table.
$query = db_query("SELECT filename, type, name FROM {system}");
// Go through the query and check to see if the module exists in the directory.
foreach ($query->fetchAll() as $record) {
// Grab the checker.
$check = drupal_get_filename($record->type, $record->name, $record->filename, FALSE);
// If drupal_get_filename returns null = we got problems.
if (is_null($check) &&
$record->name != 'default' &&
!array_key_exists($record->name, $special)) {
// Go ahead and set the row if all is well.
$rows[$record->name] = array(
'name' => $record->name,
'type' => $record->type,
'filename' => $record->filename,
);
}
// Go ahead and print out a special message for the user.
elseif (array_key_exists($record->name, $special)) {
// Add exception to this since content module seems to be ubercart sad only.
if ($record->name == 'content' && !module_exists('ubercart')) {
$rows[$record->name] = array(
'name' => $record->name,
'type' => $record->type,
'filename' => $record->filename,
);
}
// Everyone else fails into here.
else {
// Set the message.
$msg = t('The @module module has a patch. See this issue for more information. It WILL NOT be removed by Module Missing Message Fixer.', array(
'@module' => $record->name,
'@link' => $special[$record->name],
));
// Now print it!
drupal_set_message($msg, 'status', FALSE);
}
}
}
// Return the rows for the fixer here.
if ($return) {
return $rows;
}
// Print Table here instead of in the hook_command.
$output = count($rows) > 1 ? drush_format_table($rows, TRUE) : 'No Missing Modules Found!!!';
drush_print($output);
}
/**
* Implements hook_drush_help().
*/
function module_missing_message_fixer_drush_help($section) {
switch ($section) {
case 'module-missing-message-fixer-list':
$result = dt("Returns a list of modules that have missing messages.");
case 'module-missing-message-fixer-fix':
$result = dt("Fixes a specified module that has missing messages. (optional --all)");
}
return $result;
}
/**
* Implements hook_drush_command().
*/
function module_missing_message_fixer_drush_command() {
$items = array();
$items['module-missing-message-fixer-list'] = array(
'description' => dt('Returns a list of modules that have missing messages.'),
'aliases' => array(
'mmmfl',
),
'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL
);
$items['module-missing-message-fixer-fix'] = array(
'description' => dt('Fixes modules that have missing messages.'),
'aliases' => array(
'mmmff',
),
'arguments' => array(
'name' => 'The name of the module to fix.',
),
'options' => array(
'all' => dt('Fixes all module missing messages'),
),
'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL
);
return $items;
}
/**
* Drush command.
*
* Displays a list of modules that have missing messages.
*/
function drush_module_missing_message_fixer_list() {
module_missing_message_fixer_check_modules();
}
/**
* Drush command.
*
* @param string $name
* The name of the module to fix messages for.
*/
function drush_module_missing_message_fixer_fix($name = NULL) {
$module = array();
if (drush_get_option('all') !== NULL) {
$rows = module_missing_message_fixer_check_modules(TRUE);
if (!empty($rows)) {
foreach ($rows as $row) {
$modules[] = $row['name'];
}
}
}
elseif ($name !== NULL) {
if (module_exists($name)) {
$modules[] = $name;
}
else {
drush_log(dt('Module ' . $name . ' was not found.'), 'error');
}
}
else {
drush_log(dt('Missing input, provide module name or run with --all'), 'error');
}
// Delete if there is no modules.
if (count($modules) > 0) {
db_delete('system')
->condition('name', $modules, 'IN')
->execute();
if (drush_get_option('all') !== NULL) {
drush_log(dt('All missing references have been removed.'), 'success');
}
elseif (isset($name)) {
if (in_array($name, $modules)) {
drush_log(dt('Reference to ' . $name . ' (if found) has been removed.'), 'success');
}
}
}
}