public static ModuleHandler::parseDependency($dependency)
Parses a dependency for comparison by drupal_check_incompatibility().
$dependency: A dependency string, which specifies a module dependency, and optionally the project it comes from and versions that are supported. Supported formats include:
An associative array with three keys:
Callers should pass this structure to drupal_check_incompatibility().
drupal_check_incompatibility()
public static function parseDependency($dependency) { $value = array(); // Split out the optional project name. if (strpos($dependency, ':') !== FALSE) { list($project_name, $dependency) = explode(':', $dependency); $value['project'] = $project_name; } // We use named subpatterns and support every op that version_compare // supports. Also, op is optional and defaults to equals. $p_op = '(?<operation>!=|==|=|<|<=|>|>=|<>)?'; // Core version is always optional: 8.x-2.x and 2.x is treated the same. $p_core = '(?:' . preg_quote(\Drupal::CORE_COMPATIBILITY) . '-)?'; $p_major = '(?<major>\d+)'; // By setting the minor version to x, branches can be matched. $p_minor = '(?<minor>(?:\d+|x)(?:-[A-Za-z]+\d+)?)'; $parts = explode('(', $dependency, 2); $value['name'] = trim($parts[0]); if (isset($parts[1])) { $value['original_version'] = ' (' . $parts[1]; foreach (explode(',', $parts[1]) as $version) { if (preg_match("/^\s*$p_op\s*$p_core$p_major\.$p_minor/", $version, $matches)) { $op = !empty($matches['operation']) ? $matches['operation'] : '='; if ($matches['minor'] == 'x') { // Drupal considers "2.x" to mean any version that begins with // "2" (e.g. 2.0, 2.9 are all "2.x"). PHP's version_compare(), // on the other hand, treats "x" as a string; so to // version_compare(), "2.x" is considered less than 2.0. This // means that >=2.x and <2.x are handled by version_compare() // as we need, but > and <= are not. if ($op == '>' || $op == '<=') { $matches['major']++; } // Equivalence can be checked by adding two restrictions. if ($op == '=' || $op == '==') { $value['versions'][] = array('op' => '<', 'version' => ($matches['major'] + 1) . '.x'); $op = '>='; } } $value['versions'][] = array('op' => $op, 'version' => $matches['major'] . '.' . $matches['minor']); } } } return $value; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Extension!ModuleHandler.php/function/ModuleHandler::parseDependency/8.1.x