You are here

function update_process_project_info in Drupal 8

Same name and namespace in other branches
  1. 6 modules/update/update.compare.inc \update_process_project_info()
  2. 7 modules/update/update.compare.inc \update_process_project_info()
  3. 9 core/modules/update/update.compare.inc \update_process_project_info()
  4. 10 core/modules/update/update.compare.inc \update_process_project_info()

Determines version and type information for currently installed projects.

Processes the list of projects on the system to figure out the currently installed versions, and other information that is required before we can compare against the available releases to produce the status report.

Parameters

$projects: Array of project information from \Drupal\update\UpdateManager::getProjects().

1 call to update_process_project_info()
update_calculate_project_data in core/modules/update/update.compare.inc
Calculates the current update status of all projects on the site.

File

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

Code

function update_process_project_info(&$projects) {
  foreach ($projects as $key => $project) {

    // Assume an official release until we see otherwise.
    $install_type = 'official';
    $info = $project['info'];
    if (isset($info['version'])) {

      // Check for development snapshots
      if (preg_match('@(dev|HEAD)@', $info['version'])) {
        $install_type = 'dev';
      }

      // Figure out what the currently installed major version is. We need
      // to handle both contribution (e.g. "5.x-1.3", major = 1) and core
      // (e.g. "5.1", major = 5) version strings.
      $matches = [];
      if (preg_match('/^(\\d+\\.x-)?(\\d+)\\..*$/', $info['version'], $matches)) {
        $info['major'] = $matches[2];
      }
      elseif (!isset($info['major'])) {

        // This would only happen for version strings that don't follow the
        // drupal.org convention. We let contribs define "major" in their
        // .info.yml in this case, and only if that's missing would we hit this.
        $info['major'] = -1;
      }
    }
    else {

      // No version info available at all.
      $install_type = 'unknown';
      $info['version'] = t('Unknown');
      $info['major'] = -1;
    }

    // Finally, save the results we care about into the $projects array.
    $projects[$key]['existing_version'] = $info['version'];
    $projects[$key]['existing_major'] = $info['major'];
    $projects[$key]['install_type'] = $install_type;
  }
}