public static ModuleHandler::parseDependency($dependency)
Parses a dependency for comparison by drupal_check_incompatibility().
Parameters
$dependency: A dependency string, which specifies a module dependency, and optionally the project it comes from and versions that are supported. Supported formats include:
- 'module'
- 'project:module'
- 'project:module (>=version, version)'
Return value
An associative array with three keys:
- 'name' includes the name of the thing to depend on (e.g. 'foo').
- 'original_version' contains the original version string (which can be used in the UI for reporting incompatibilities).
- 'versions' is a list of associative arrays, each containing the keys 'op' and 'version'. 'op' can be one of: '=', '==', '!=', '<>', '<', '<=', '>', or '>='. 'version' is one piece like '4.5-beta3'.
Callers should pass this structure to drupal_check_incompatibility().
See also
drupal_check_incompatibility()
File
- core/lib/Drupal/Core/Extension/ModuleHandler.php, line 660
Class
- ModuleHandler
- Class that manages modules in a Drupal installation.
Namespace
Drupal\Core\Extension
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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 ; } |
Please login to continue.