All extensions with available updates should be listed at once.
The issue seems to be related to a wrong comparison inside ExtensionAdapter.php
.
The variable $this->latest
still points to the version of the previously processed extension, which prevents subsequent updates from being listed if the prior extension’s version is greater.
It looks like $this->latest is not being reset correctly per extension, which causes only one update to be shown at a time.
// If the PHP version and minimum stability checks pass, consider this version as a possible update
if ($phpMatch && $stabilityMatch && $dbMatch) {
if (isset($this->latest)) {
// We already have a possible update. Check the version.
if (version_compare($this->currentUpdate->version, $this->latest->version, '>') == 1) {
$this->latest = $this->currentUpdate;
}
} else {
// We don't have any possible updates yet, assume this is an available update.
$this->latest = $this->currentUpdate;
}
}
Labels |
Added:
No Code Attached Yet
|
.. or to be more precise: Does it happen in 5.3.x too? And in 5.4.0-beta2?
It definitely does not happen in 5.3.
Remains 5.4 to be checked to see if it was introduced there and merged up into 6, or if it was introduced in 6.
Maybe it needs a combination of different extension types?
Maybe?
.. or to be more precise: Does it happen in 5.3.x too? And in 5.4.0-beta2?
@richard67 Nope it only happens in Joomla 6 Beta 2
@brianteeman It seems a combination of versions and ordering of extensions. For example if in your case you have 7.8 and 10.0.3 you could see both updates, but if you had 10.0.3 and 7.8 you could see only Akeeba Backup
yes i can confirm that - weird indeed
The problem comes from how the update check logic in ExtensionAdapter.php handles the $this->latest variable.
Currently, $this->latest is not reset between processing different extensions. This means that when Joomla checks multiple extensions for updates, it keeps comparing new candidates against the previously stored $this->latest value — even though that value belongs to another extension.
As a result:
If the first extension processed has a higher version number (e.g. 10.0.6), it will remain in $this->latest.
Subsequent extensions with lower version numbers (e.g. 2.20) will be ignored, even if they have updates available.
Only after updating or removing the first extension does Joomla show the next one.
That’s why in the backend you only see one update at a time, even though the database (#__update_sites) clearly lists multiple available updates.
Technical cause:
if ($phpMatch && $stabilityMatch && $dbMatch) {
if (isset($this->latest)) {
if (version_compare($this->currentUpdate->version, $this->latest->version, '>') == 1) {
$this->latest = $this->currentUpdate;
}
} else {
$this->latest = $this->currentUpdate;
}
}
The bug is that $this->latest is only initialized once and reused across extensions. It should be reset for every extension being processed so that comparisons happen only within the same extension’s update candidates, not across unrelated ones.
that block of code is very old
Status | New | ⇒ | Closed |
Closed_Date | 0000-00-00 00:00:00 | ⇒ | 2025-09-12 05:32:10 |
Closed_By | ⇒ | joomdonation |
Thanks @joeforjoomla for details analyst. I created PR #46075 which should should the issue. Please help testing, thanks !
@joeforjoomla Does the same also happen with Joomla 5.x?