From dc1f3d216c359ff1448ae9237c6ffbde939ffcb7 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sun, 14 Jun 2026 13:28:01 -0500 Subject: [PATCH] fix: set correct per extension type in Joomla update feed (#611) Only components use client_id=1 (administrator). All other types (package, plugin, library, file) use client_id=0 (site). Fixes: packages never showing updates due to client_id mismatch. --- services/updateserver/joomla.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/services/updateserver/joomla.go b/services/updateserver/joomla.go index 73fd674613..bac8f634e2 100644 --- a/services/updateserver/joomla.go +++ b/services/updateserver/joomla.go @@ -383,12 +383,22 @@ func GenerateJoomlaXML(ctx context.Context, repo *repo_model.Repository, require infoURL = meta.SupportURL } - // Joomla element uses string values per the update server spec. - // Joomla's XML parser maps these to client_id internally (0/1). - client := "site" + // Joomla element must match the client_id stored in #__extensions. + // Joomla's update finder matches by (element, type, client_id, folder) — + // a mismatch causes extension_id=0 and the update never shows. + // + // Joomla hardcodes client_id per extension type in the installer adapters: + // component → client_id=1 (ComponentAdapter.php:900) + // package → client_id=0 (PackageAdapter.php:548) + // plugin → client_id=0 (PluginAdapter.php:492) + // library → client_id=0 (LibraryAdapter.php:420) + // file → client_id=0 (FileAdapter.php:422) + // module → client_id from manifest (0=site, 1=admin) + // template → client_id from manifest (0=site, 1=admin) + client := "site" // default: client_id=0 switch extType { - case "package", "component", "library", "file": - client = "administrator" + case "component": + client = "administrator" // client_id=1 } u := xmlUpdate{ -- 2.52.0