diff --git a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php index 26f2b949e3..70a8d0d33f 100755 --- a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php +++ b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php @@ -100,8 +100,13 @@ public function handle(CheckForUpdates $command) $composerJson = $this->composerJson->get(); foreach ($installed as $mainPackageUpdate) { - // Skip if not an extension - if (! $this->extensions->getExtension(Util::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(Util::nameToId($mainPackageUpdate['name']))) { continue; } diff --git a/extensions/package-manager/src/Composer/ComposerJson.php b/extensions/package-manager/src/Composer/ComposerJson.php index 528ddcd4ec..8c93266a2d 100644 --- a/extensions/package-manager/src/Composer/ComposerJson.php +++ b/extensions/package-manager/src/Composer/ComposerJson.php @@ -56,8 +56,15 @@ public function require(string $packageName, string $version): void continue; } - // Only extensions can all be set to * versioning. - if (! $this->extensions->getExtension(Util::nameToId($packageName))) { + // Platform requirements such as `php` or `ext-*` have no vendor + // segment, so they cannot be turned into an extension id. + if (strpos($p, '/') === false) { + 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(Util::nameToId($p))) { continue; }