diff --git a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php index e5dda3ed36..0ba88dd3ab 100755 --- a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php +++ b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php @@ -76,8 +76,13 @@ public function handle(CheckForUpdates $command): array $composerJson = $this->composerJson->get(); foreach ($installed as $mainPackageUpdate) { - // Skip if not an extension - if (! $this->extensions->getExtension(Extension::nameToId($mainPackageUpdate['name']))) { + $isCore = $mainPackageUpdate['name'] === 'flarum/core'; + + // Skip if not an extension. flarum/core is not one, but surfacing a new + // major of it is the stated purpose of the first command above, and both + // LastUpdateCheck::getNewMajorVersion() and the admin frontend read the + // flarum/core entry back out of this list, so it has to survive the loop. + if (! $isCore && ! $this->extensions->getExtension(Extension::nameToId($mainPackageUpdate['name']))) { continue; } diff --git a/extensions/package-manager/src/Composer/ComposerJson.php b/extensions/package-manager/src/Composer/ComposerJson.php index ee0f9b9168..18dcb96bfe 100644 --- a/extensions/package-manager/src/Composer/ComposerJson.php +++ b/extensions/package-manager/src/Composer/ComposerJson.php @@ -38,8 +38,15 @@ public function require(string $packageName, string $version): void continue; } - // Only extensions can all be set to * versioning. - if (! $this->extensions->getExtension(Extension::nameToId($packageName))) { + // Platform requirements such as `php` or `ext-*` have no vendor + // segment, so they cannot be turned into an extension id. + if (! str_contains($p, '/')) { + continue; + } + + // Only extensions can all be set to * versioning. This has to test the + // package being iterated, not the wildcard that was passed in. + if (! $this->extensions->getExtension(Extension::nameToId($p))) { continue; }