You are here

function commons_install_additional_modules in Drupal Commons 7.3

Task callback: uses Batch API to enable modules based on user selection.

Creates all demo content if requested and installs optional modules that providing additional functionality to the base install.

File

./commons.install, line 278
Install, update and uninstall functions for the Commons install profile.

Code

function commons_install_additional_modules() {
  $selected_extras = variable_get('commons_selected_extras', array());
  $modules = array();
  if (!empty($selected_extras['acquia_agent'])) {
    $modules[] = 'acquia_agent';
  }
  if (!empty($selected_extras['acquia_search'])) {
    $modules[] = 'acquia_search';
  }
  if (!empty($selected_extras['acquia_spi'])) {
    $modules[] = 'acquia_spi';
  }
  if (!empty($selected_extras['og_access'])) {
    $modules[] = 'og_access';
  }

  // Resolve the dependencies now, so that module_enable() doesn't need
  // to do it later for each individual module (which kills performance).
  $files = system_rebuild_module_data();
  $modules_sorted = array();
  foreach ($modules as $module) {
    if ($files[$module]->requires) {

      // Create a list of dependencies that haven't been installed yet.
      $dependencies = array_keys($files[$module]->requires);
      $dependencies = array_filter($dependencies, '_commons_filter_dependencies');

      // Add them to the module list.
      $modules = array_merge($modules, $dependencies);
    }
  }
  $modules = array_unique($modules);
  foreach ($modules as $module) {
    $modules_sorted[$module] = $files[$module]->sort;
  }
  arsort($modules_sorted);
  $operations = array();

  // Enable the selected modules.
  foreach ($modules_sorted as $module => $weight) {
    $operations[] = array(
      '_commons_enable_module',
      array(
        $module,
        $files[$module]->info['name'],
      ),
    );
  }

  // Create the example content.
  if (!empty($selected_extras['example_content'])) {

    // Create the demo users.
    $operations[] = array(
      '_commons_create_demo_users',
      array(
        t('Created demo users.'),
      ),
    );

    // Create the demo taxonomy terms.
    $operations[] = array(
      '_commons_create_demo_taxonomy_terms',
      array(
        t('Created taxonomy terms.'),
      ),
    );

    // Create the demo groups.
    $operations[] = array(
      '_commons_create_demo_groups',
      array(
        t('Created demo groups.'),
      ),
    );

    // Create the demo content.
    $operations[] = array(
      '_commons_create_demo_content',
      array(
        t('Created demo content.'),
      ),
    );
  }

  // Convert the administrator into a group.
  $operations[] = array(
    '_commons_convert_administrator_to_group',
    array(
      t('Converted administrator into a group.'),
    ),
  );
  $batch = array(
    'title' => !empty($selected_extras['example_content']) ? st('Installing example content') : st('Installing additional functionality'),
    'operations' => $operations,
    'file' => drupal_get_path('profile', 'commons') . '/commons.install_callbacks.inc',
  );
  return $batch;
}