You are here

function _install_select_profile in Drupal 7

Same name and namespace in other branches
  1. 8 core/includes/install.core.inc \_install_select_profile()
  2. 9 core/includes/install.core.inc \_install_select_profile()

Selects an installation profile.

A profile will be selected if:

  • Only one profile is available,
  • A profile was submitted through $_POST,
  • Exactly one of the profiles is marked as "exclusive".

If multiple profiles are marked as "exclusive" then no profile will be selected.

Parameters

array $profiles: An associative array of profiles with the machine-readable names as keys.

Return value

The machine-readable name of the selected profile or NULL if no profile was selected.

1 call to _install_select_profile()
install_select_profile in includes/install.core.inc
Selects which profile to install.

File

includes/install.core.inc, line 1096
API functions for installing Drupal.

Code

function _install_select_profile($profiles) {
  if (sizeof($profiles) == 0) {
    throw new Exception(install_no_profile_error());
  }

  // Don't need to choose profile if only one available.
  if (sizeof($profiles) == 1) {
    $profile = array_pop($profiles);

    // TODO: is this right?
    require_once DRUPAL_ROOT . '/' . $profile->uri;
    return $profile->name;
  }
  else {
    foreach ($profiles as $profile) {
      if (!empty($_POST['profile']) && $_POST['profile'] == $profile->name) {
        return $profile->name;
      }
    }
  }

  // Check for a profile marked as "exclusive" and ensure that only one
  // profile is marked as such.
  $exclusive_profile = NULL;
  foreach ($profiles as $profile) {
    $profile_info = install_profile_info($profile->name);
    if (!empty($profile_info['exclusive'])) {
      if (empty($exclusive_profile)) {
        $exclusive_profile = $profile->name;
      }
      else {

        // We found a second "exclusive" profile. There's no way to choose
        // between them, so we ignore the property.
        return;
      }
    }
  }
  return $exclusive_profile;
}