class ExtensionVersion
Same name in other branches
- 9 core/lib/Drupal/Core/Extension/ExtensionVersion.php \Drupal\Core\Extension\ExtensionVersion
- 11.x core/lib/Drupal/Core/Extension/ExtensionVersion.php \Drupal\Core\Extension\ExtensionVersion
Provides an extension version value object.
@internal
Hierarchy
- class \Drupal\Core\Extension\ExtensionVersion
Expanded class hierarchy of ExtensionVersion
See also
https://www.drupal.org/drupalorg/docs/apis/update-status-xml
5 files declare their use of ExtensionVersion
- ExtensionVersionTest.php in core/
tests/ Drupal/ Tests/ Core/ Extension/ ExtensionVersionTest.php - ProjectSecurityData.php in core/
modules/ update/ src/ ProjectSecurityData.php - SecurityAdvisoriesFetcher.php in core/
modules/ system/ src/ SecurityAdvisories/ SecurityAdvisoriesFetcher.php - update.compare.inc in core/
modules/ update/ update.compare.inc - Code required only when comparing available updates to existing data.
- UpdateManagerUpdate.php in core/
modules/ update/ src/ Form/ UpdateManagerUpdate.php
File
-
core/
lib/ Drupal/ Core/ Extension/ ExtensionVersion.php, line 12
Namespace
Drupal\Core\ExtensionView source
final class ExtensionVersion {
/**
* The '8.x-' prefix is used on contrib extension version numbers.
*
* @var string
*/
const CORE_PREFIX = '8.x-';
/**
* The major version.
*
* @var string
*/
protected $majorVersion;
/**
* The minor version.
*
* @var string|null
*/
protected $minorVersion;
/**
* The version extra string.
*
* For example, if the extension version is '2.0.3-alpha1', then the version
* extra string is 'alpha1'.
*
* @var string|null
*/
protected $versionExtra;
/**
* Constructs an extension version object from a version string.
*
* @param string $version_string
* The version string.
*
* @return \Drupal\Core\Extension\ExtensionVersion
* The extension version instance.
*/
public static function createFromVersionString(string $version_string) : ExtensionVersion {
$original_version = $version_string;
if (str_starts_with($version_string, static::CORE_PREFIX) && $version_string !== '8.x-dev') {
$version_string = preg_replace('/8\\.x-/', '', $version_string, 1);
}
else {
// Ensure the version string has no unsupported core prefixes.
$dot_x_position = strpos($version_string, '.x-');
if ($dot_x_position === 1 || $dot_x_position === 2) {
$after_core_prefix = explode('.x-', $version_string)[1];
if ($after_core_prefix !== 'dev') {
throw new \UnexpectedValueException("Unexpected version core prefix in {$version_string}. The only core prefix expected in \\Drupal\\Core\\Extension\\ExtensionVersion is: 8.x-");
}
}
}
$version_parts = explode('.', $version_string);
$major_version = $version_parts[0];
$version_parts_count = count($version_parts);
if ($version_parts_count === 2) {
$minor_version = NULL;
}
elseif ($version_parts_count === 3) {
$minor_version = $version_parts[1];
}
$last_part_split = explode('-', $version_parts[count($version_parts) - 1]);
$version_extra = count($last_part_split) === 1 ? NULL : $last_part_split[1];
if ($version_parts_count > 3 || $version_parts_count < 2 || !is_numeric($major_version) || $version_parts_count === 3 && !is_numeric($version_parts[1]) || !is_numeric($last_part_split[0]) && $last_part_split !== 'x' && $version_extra !== 'dev') {
throw new \UnexpectedValueException("Unexpected version number in: {$original_version}");
}
return new static($major_version, $minor_version, $version_extra);
}
/**
* Constructs an ExtensionVersion object.
*
* @param string $major_version
* The major version.
* @param string|null $minor_version
* The minor version.
* @param string|null $version_extra
* The extra version string.
*/
private function __construct(string $major_version, ?string $minor_version, ?string $version_extra) {
$this->majorVersion = $major_version;
$this->minorVersion = $minor_version;
$this->versionExtra = $version_extra;
}
/**
* Constructs an ExtensionVersion version object from a support branch.
*
* This can be used to determine the major version of the branch.
* ::getVersionExtra() will always return NULL for branches.
*
* @param string $branch
* The support branch.
*
* @return \Drupal\Core\Extension\ExtensionVersion
* The ExtensionVersion instance.
*/
public static function createFromSupportBranch(string $branch) : ExtensionVersion {
if (!str_ends_with($branch, '.')) {
throw new \UnexpectedValueException("Invalid support branch: {$branch}");
}
return static::createFromVersionString($branch . '0');
}
/**
* Gets the major version.
*
* @return string
* The major version.
*/
public function getMajorVersion() : string {
return $this->majorVersion;
}
/**
* Gets the minor version.
*
* @return string|null
* The minor version.
*/
public function getMinorVersion() : ?string {
return $this->minorVersion;
}
/**
* Gets the version extra string at the end of the version number.
*
* @return string|null
* The version extra string if available, or otherwise NULL.
*/
public function getVersionExtra() : ?string {
return $this->versionExtra;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
ExtensionVersion::$majorVersion | protected | property | The major version. |
ExtensionVersion::$minorVersion | protected | property | The minor version. |
ExtensionVersion::$versionExtra | protected | property | The version extra string. |
ExtensionVersion::CORE_PREFIX | constant | The '8.x-' prefix is used on contrib extension version numbers. | |
ExtensionVersion::createFromSupportBranch | public static | function | Constructs an ExtensionVersion version object from a support branch. |
ExtensionVersion::createFromVersionString | public static | function | Constructs an extension version object from a version string. |
ExtensionVersion::getMajorVersion | public | function | Gets the major version. |
ExtensionVersion::getMinorVersion | public | function | Gets the minor version. |
ExtensionVersion::getVersionExtra | public | function | Gets the version extra string at the end of the version number. |
ExtensionVersion::__construct | private | function | Constructs an ExtensionVersion object. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.