From b8de9e6f1c5ce0abf0d2a9d9ee67aa9788fe06be Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 9 Jun 2026 14:35:58 -0500 Subject: [PATCH] feat: detect display_name, target_version, php_minimum in manifest_detect These fields are now required by MokoGitea's update feed generator which reads them from the manifest API (#592). - display_name: from XML with type prefix detection - target_version: from or default (5|6) - php_minimum: from tag --- cli/manifest_detect.php | 45 ++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/cli/manifest_detect.php b/cli/manifest_detect.php index c3251d3..67710cc 100644 --- a/cli/manifest_detect.php +++ b/cli/manifest_detect.php @@ -161,15 +161,18 @@ class ManifestDetectCli extends CliFramework $platform = $this->detectPlatform($root); $fields = [ - 'platform' => $platform, - 'name' => '', - 'description' => '', - 'version' => '', - 'element_name' => '', - 'package_type' => '', - 'language' => '', - 'entry_point' => '', - 'license_spdx' => '', + 'platform' => $platform, + 'name' => '', + 'description' => '', + 'version' => '', + 'element_name' => '', + 'package_type' => '', + 'language' => '', + 'entry_point' => '', + 'license_spdx' => '', + 'display_name' => '', + 'target_version' => '', + 'php_minimum' => '', ]; switch ($platform) { @@ -349,6 +352,30 @@ class ManifestDetectCli extends CliFramework } } + // Display name for update feeds + if (!empty($fields['name'])) { + $name = $fields['name']; + // If name already has "Type - " prefix, use as-is + if (preg_match('/^(Package|Component|Module|Plugin|Template|Library)\s*-\s*/i', $name)) { + $fields['display_name'] = $name; + } elseif (!empty($extType)) { + $fields['display_name'] = ucfirst($extType) . ' - ' . $name; + } + } + + // Target Joomla version + if (preg_match('/]*version="([^"]+)"/', $xml, $m)) { + $fields['target_version'] = trim($m[1]); + } else { + // Default for Joomla 5/6 + $fields['target_version'] = '(5|6)\..*'; + } + + // PHP minimum + if (preg_match('/([^<]+)<\/php_minimum>/', $xml, $m)) { + $fields['php_minimum'] = trim($m[1]); + } + // License if (preg_match('/([^<]+)<\/license>/', $xml, $m)) { $fields['license_spdx'] = $this->normalizeLicense(trim($m[1]));