You are here

function acquia_spi_get in Acquia Connector 6.2

Same name and namespace in other branches
  1. 6 acquia_spi/acquia_spi.module \acquia_spi_get()
  2. 7.3 acquia_spi/acquia_spi.module \acquia_spi_get()
  3. 7 acquia_spi/acquia_spi.module \acquia_spi_get()
  4. 7.2 acquia_spi/acquia_spi.module \acquia_spi_get()

Gather site profile information about this site.

Return value

An associative array keyed by types of information.

1 call to acquia_spi_get()
acquia_spi_send_full_spi in acquia_spi/acquia_spi.module
Gather full SPI data and send to Acquia Insight.

File

acquia_spi/acquia_spi.module, line 495
Send site profile information (NSPI) and system data to Acquia Insight.

Code

function acquia_spi_get() {

  // Get file hashes and compute serialized version.
  list($hashes, $fileinfo) = acquia_spi_file_hashes();
  $hashes_string = serialize($hashes);

  // Get the Drupal version
  $drupal_version = acquia_spi_get_version_info();
  $stored = acquia_spi_data_store_get(array(
    'platform',
  ));
  if (!empty($stored['platform'])) {
    $platform = $stored['platform'];
  }
  else {
    $platform = acquia_spi_get_platform();
  }
  $spi = array(
    'spi_data_version' => ACQUIA_SPI_DATA_VERSION,
    'site_key' => sha1(drupal_get_private_key()),
    'modules' => acquia_spi_get_modules(),
    'platform' => $platform,
    'quantum' => acquia_spi_get_quantum(),
    'system_status' => acquia_spi_get_system_status(),
    'failed_logins' => variable_get('acquia_spi_send_watchdog', 1) ? acquia_spi_get_failed_logins() : array(),
    '404s' => variable_get('acquia_spi_send_watchdog', 1) ? acquai_spi_get_404s() : array(),
    'watchdog_size' => acquai_spi_get_watchdog_size(),
    'watchdog_data' => variable_get('acquia_spi_send_watchdog', 1) ? acquia_spi_get_watchdog_data() : array(),
    'last_nodes' => variable_get('acquia_spi_send_node_user', 1) ? acquai_spi_get_last_nodes() : array(),
    'last_users' => variable_get('acquia_spi_send_node_user', 1) ? acquai_spi_get_last_users() : array(),
    'extra_files' => acquia_spi_check_files_present(),
    'ssl_login' => acquia_spi_check_login(),
    'file_hashes' => $hashes,
    'hashes_md5' => md5($hashes_string),
    'hashes_sha1' => sha1($hashes_string),
    'fileinfo' => $fileinfo,
    'distribution' => $drupal_version['distribution'],
    'base_version' => $drupal_version['base_version'],
    'build_data' => $drupal_version,
    'roles' => _acquia_spi_json(user_roles()),
    'uid_0_present' => acquia_spi_uid_0_present(),
  );
  $scheme = parse_url(variable_get('acquia_spi_server', 'https://nspi.acquia.com'), PHP_URL_SCHEME);
  $via_ssl = in_array('ssl', stream_get_transports(), TRUE) && $scheme == 'https' ? TRUE : FALSE;
  if (variable_get('acquia_spi_ssl_override', FALSE)) {
    $via_ssl = TRUE;
  }
  $additional_data = array();
  $security_review_results = acquia_spi_run_security_review();
  if (!empty($security_review_results)) {
    $additional_data['security_review'] = $security_review_results['security_review'];
  }

  // Collect all user-contributed custom tests that pass validation.
  $custom_tests_results = acquia_spi_test_collect();
  if (!empty($custom_tests_results)) {
    $additional_data['custom_tests'] = $custom_tests_results;
  }
  $spi_data = module_invoke_all('acquia_spi_get');
  if (!empty($spi_data)) {
    foreach ($spi_data as $name => $data) {
      if (is_string($name) && is_array($data)) {
        $additional_data[$name] = $data;
      }
    }
  }

  // Database updates required?
  // Based on code from system.install
  include_once './includes/install.inc';
  drupal_load_updates();
  $additional_data['pending_updates'] = FALSE;
  foreach (module_list() as $module) {
    $updates = drupal_get_schema_versions($module);
    if ($updates !== FALSE) {
      $default = drupal_get_installed_schema_version($module);
      if (max($updates) > $default) {
        $additional_data['pending_updates'] = TRUE;
        break;
      }
    }
  }

  // It's worth sending along node access control information even if there are
  // no modules implementing it - some alerts are simpler if we know we don't
  // have to worry about node access.
  // Check for node grants modules.
  $additional_data['node_grants_modules'] = module_implements('node_grants', TRUE);

  // Check for node access modules.
  // hook_node_access() is hook_access() in Drupal 6, but we place it into
  // the same additional data key for ease of processing.
  $additional_data['node_access_modules'] = module_implements('access', TRUE);
  if (!empty($additional_data)) {

    // JSON encode this additional data.
    $spi['additional_data'] = _acquia_spi_json($additional_data);
  }
  if (!$via_ssl) {
    return $spi;
  }
  else {

    // Values returned only over SSL
    $spi_ssl = array(
      'system_vars' => acquia_spi_get_variables_data(),
      'settings_ra' => acquia_spi_get_settings_permissions(),
      'admin_count' => variable_get('acquia_spi_admin_priv', 1) ? acquia_spi_get_admin_count() : '',
      'admin_name' => variable_get('acquia_spi_admin_priv', 1) ? acquia_spi_get_super_name() : '',
    );
    return array_merge($spi, $spi_ssl);
  }
}