Public Access
feat: detect display_name, target_version, php_minimum in manifest_detect #254
+43
-10
@@ -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) {
|
||||
@@ -316,7 +319,13 @@ class ManifestDetectCli extends CliFramework
|
||||
];
|
||||
if (isset($prefixMap[$extType])) {
|
||||
$prefix = $prefixMap[$extType];
|
||||
if (strpos($element, $prefix) !== 0 && strpos($element, '_') === false) {
|
||||
// Only add prefix if not already present (check all known prefixes)
|
||||
$hasPrefix = false;
|
||||
foreach ($prefixMap as $p) {
|
||||
if (strpos($element, $p) === 0) { $hasPrefix = true; break; }
|
||||
}
|
||||
if (strpos($element, 'plg_') === 0) { $hasPrefix = true; }
|
||||
if (!$hasPrefix) {
|
||||
$element = $prefix . $element;
|
||||
}
|
||||
} elseif ($extType === 'plugin') {
|
||||
@@ -349,6 +358,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('/<targetplatform\s[^>]*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>([^<]+)<\/php_minimum>/', $xml, $m)) {
|
||||
$fields['php_minimum'] = trim($m[1]);
|
||||
}
|
||||
|
||||
// License
|
||||
if (preg_match('/<license>([^<]+)<\/license>/', $xml, $m)) {
|
||||
$fields['license_spdx'] = $this->normalizeLicense(trim($m[1]));
|
||||
|
||||
Reference in New Issue
Block a user