Commit 87cc3210 authored by Herman van Rink's avatar Herman van Rink Committed by Herman van Rink
Browse files

Issue #2766445 by helmo: Option to remove missing modules

parent fc945c33
Loading
Loading
Loading
Loading
+46 −2
Changes for missing_module.drush.inc: 46 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -12,16 +12,29 @@ function missing_module_drush_command() {
  $items = array();
  $items['list-missing-modules'] = array(
    'description' => "Lists modules activated in database, that are missing in filesystem.",
    'options' => array(
      'only-enabled' => dt('Only include enabled modules.'),
    ),
    'examples' => array(
      'drush lmm' => 'Lists modules activated in database, that are missing in filesystem.',
    ),
    'aliases' => array('lmm'),
  );
  $items['remove-missing-modules'] = array(
    'description' => "Remove modules from database, that are missing in filesystem.",
    'options' => array(
      'only-enabled' => dt('Only include enabled modules.'),
    ),
    'examples' => array(
      'drush rmm' => 'Remove modules from database, that are missing in filesystem.',
    ),
    'aliases' => array('rmm'),
  );
  return $items;
}

/**
 * Implements drush_hook().
 * Implements drush_hook_COMMAND().
 */
function drush_missing_module_list_missing_modules() {

@@ -30,7 +43,7 @@ function drush_missing_module_list_missing_modules() {
    include_once(dirname(__FILE__) . '/missing_module.module');
  }

  $modules = missing_module_find_missing();
  $modules = missing_module_find_missing(drush_get_option('only-enabled', FALSE));

  if ($modules) {
    drush_log(count($modules) . " Missing module(s) found.", 'warning');
@@ -44,3 +57,34 @@ function drush_missing_module_list_missing_modules() {
    drush_log("no missing modules found.", 'success');
  }
}

/**
 * Implements drush_hook_COMMAND().
 */
function drush_missing_module_remove_missing_modules() {

  // Include the module file directly when run from drush.
  if (!function_exists('missing_module_find_missing')) {
    include_once(dirname(__FILE__) . '/missing_module.module');
  }

  $modules = missing_module_find_missing(drush_get_option('only-enabled', FALSE));

  if ($modules) {
    drush_log(count($modules) . " Missing module(s) found.", 'warning');
    foreach ($modules as $mm) {
      drush_log("MODULE: $mm", 'warning');
    }

    drush_log("Removing system records for: " . implode(array_keys($modules), " "), 'warning');
    // Delete if there is no modules.
      db_delete('system')
        ->condition('name', array_keys($modules), 'IN')
        ->execute();


  }
  else {
    drush_log("no missing modules found.", 'success');
  }
}
+42 −0
Changes for missing_module.form.inc: 42 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -47,3 +47,45 @@ function missing_module_disable_confirm_submit($form, &$form_state) {

  $form_state['redirect'] = 'admin/reports/status';
}

/**
 * Menu callback: Confirm remove module.
 */
function missing_module_remove_confirm($form, &$form_state, $module_name = FALSE) {
  $form_state['missing_modules']['modules'] = missing_module_find_missing();

  if (array_key_exists($module_name, $form_state['missing_modules']['modules'])) {
    $form = confirm_form(array(),
                  t('This action removes the @module_name module.', array('@module_name' => $module_name)),
                  'admin/reports/status',
                  t('Are you sure you want to remove the @module_name module from the system tabel?', array('@module_name' => $module_name)),
                   t('Remove module'),
                   t('Cancel'));
  }
  else {
    drupal_set_message(t('%module_name is not a missing module and cannot be disabled.', array('%module_name' => $module_name)), 'error');
    // This will exit out of the function.
    drupal_goto('admin/reports/status');
  }

  return $form;
}

/**
 * Handler for module remove confirmation.
 */
function missing_module_remove_confirm_submit($form, &$form_state) {

  $module_name = $form_state['build_info']['args'][0];

  if (array_key_exists($module_name, $form_state['missing_modules']['modules'])) {
    db_delete('system')
           ->condition('name', $module_name)
           ->execute();
  }
  else {
    drupal_set_message(t('%module_name is not a missing module and cannot be removed.', array('%module_name' => $module_name)), 'error');
  }

  $form_state['redirect'] = 'admin/reports/status';
}
 No newline at end of file
+2 −1
Changes for missing_module.install: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -31,12 +31,13 @@ function missing_module_requirements($phase) {
                                                    array('@missing_count' => count($missing_modules)));

      foreach ($missing_modules as $mm_name => $mm_path) {
        $value .= $t('<li>@module_path | <a href="@module_url">link to module on drupal.org</a> | <a href="@module_disable">disable</a></li>',
        $value .= $t('<li>@module_path | <a href="@module_url">link to module on drupal.org</a> | <a href="@module_disable">disable</a> | <a href="@module_remove">remove</a></li>',
          array(
            '@module_path' => $mm_path,
            '@module_url' => "http://drupal.org/project/$mm_name",
            '@module_name' => $mm_name,
            '@module_disable' => '/admin/reports/status/disable_module/' . $mm_name,
            '@module_remove' => '/admin/reports/status/remove_module/' . $mm_name,
          ));
      }
      $value .= '</ul>';
+17 −2
Changes for missing_module.module: 17 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -8,11 +8,18 @@
/**
 * Find modules that are missing from file system.
 */
function missing_module_find_missing() {
function missing_module_find_missing($only_enabled = FALSE) {
  $missing = array();

  // Select all active modules from current database.
  $result = db_select('system')->fields('system', array('filename'))->condition('status', '1', '=')->execute();
  $q = db_select('system')->fields('system', array('filename'));

  if ($only_enabled) {
    // Thus only selecting all enabled modules.
    $q->condition('status', '1', '=');
  }

  $result = $q->execute();

  foreach ($result as $node) {
    $path = DRUPAL_ROOT . '/' . $node->filename;
@@ -41,6 +48,14 @@ function missing_module_menu() {
    'access arguments' => array('administer modules'),
    'type' => MENU_CALLBACK,
    'file' => 'missing_module.form.inc',
  );
    $items['admin/reports/status/remove_module/%'] = array(
    'title' => 'Remove Module',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('missing_module_remove_confirm', 4),
    'access arguments' => array('administer modules'),
    'type' => MENU_CALLBACK,
    'file' => 'missing_module.form.inc',
  );
  return $items;
}