1.20.x update.compare.inc update_calculate_project_data($available)

Calculates the current update status of all projects on the site.

The results of this function are expensive to compute, especially on sites with lots of projects, since it involves a lot of comparisons and other operations. Therefore, we cache the results into the {cache_update} table using the 'update_project_data' cache ID. However, since this is not the data about available updates fetched from the network, it is ok to invalidate it somewhat quickly. If we keep this data for very long, site administrators are more likely to see incorrect results if they upgrade to a newer version of a module, theme, or layout, but do not visit certain pages that automatically clear this cache.

Parameters

array $available: Data about available project releases.

Return value

An array of installed projects with current update status information.:

See also

update_get_available()

update_get_projects()

update_process_project_info()

update_project_cache()

File

modules/update/update.compare.inc, line 367
Code required only when comparing available updates to existing data.

Code

function update_calculate_project_data($available) {
  // Retrieve the projects from cache, if present.
  $projects = update_project_cache('update_project_data');

  // If cached project update data exists, return that, and skip the rest of the
  // function.
  if (!empty($projects)) {
    return $projects;
  }
  // Otherwise the cache must be rebuilt.
  $projects = update_get_projects();
  update_process_project_info($projects);
  foreach ($projects as $project => $project_info) {
    if (isset($available[$project])) {
      update_calculate_project_update_status($projects[$project], $available[$project]);
    }
    else {
      $projects[$project]['status'] = UPDATE_UNKNOWN;
      $projects[$project]['reason'] = t('No available releases found');
    }
  }
  // Give other modules a chance to alter the status (for example, to allow a
  // contrib module to provide fine-grained settings to ignore specific
  // projects or releases).
  backdrop_alter('update_status', $projects);

  // Cache the site's update status for at most 1 hour.
  _update_cache_set('update_project_data', $projects, REQUEST_TIME + 3600);

  return $projects;
}