mirror of
https://github.com/joomla-extensions/jedchecker.git
synced 2024-11-13 16:56:36 +00:00
introduce JEDCheckerHelper::findManifests to get "real" manifest files, sorted by depth
This commit is contained in:
parent
f2552dd9ab
commit
6cee91b678
@ -23,6 +23,71 @@ abstract class JEDCheckerHelper
|
||||
const CLEAN_COMMENTS = 2;
|
||||
const CLEAN_STRINGS = 4;
|
||||
|
||||
/**
|
||||
* Returns XML manifest files in the package (sorted by depth)
|
||||
*
|
||||
* @param string $basedir Extension's directory
|
||||
*
|
||||
* @return string[]
|
||||
* @since 3.0
|
||||
*/
|
||||
public static function findManifests($basedir)
|
||||
{
|
||||
// Find all XML files of the extension
|
||||
$files = JFolder::files($basedir, '\.xml$', true, true);
|
||||
|
||||
$excludeList = array();
|
||||
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$xml = simplexml_load_file($file);
|
||||
|
||||
if (!$xml || ($xml->getName() !== 'extension' && $xml->getName() !== 'install'))
|
||||
{
|
||||
// Exclude non-install-manifest XML files
|
||||
$excludeList[] = $file;
|
||||
}
|
||||
elseif ((string) $xml['type'] === 'component' && isset($xml->administration->files['folder']))
|
||||
{
|
||||
// Exclude possible duplicates of manifest in components
|
||||
$excludeList[] = dirname($file) . '/' . trim($xml->administration->files['folder'], ' /') . '/' . basename($file);
|
||||
}
|
||||
elseif ((string) $xml['type'] === 'file' && isset($xml->fileset->files))
|
||||
{
|
||||
// Exclude possible duplicates of file-type extension manifest
|
||||
foreach ($xml->fileset->files as $child)
|
||||
{
|
||||
if (isset($child['folder']))
|
||||
{
|
||||
$excludeList[] = dirname($file) . '/' . trim($child['folder'], ' /') . '/' . basename($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$files = array_diff($files, $excludeList);
|
||||
usort($files, array(__CLASS__, 'sortPathsCmp'));
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort directories by depth
|
||||
*
|
||||
* @param string $path1 1st path to compare
|
||||
* @param string $path2 2nd path to compare
|
||||
*
|
||||
* @return integer
|
||||
* @since 3.0
|
||||
*/
|
||||
public static function sortPathsCmp($path1, $path2)
|
||||
{
|
||||
$depth1 = substr_count($path1, '/');
|
||||
$depth2 = substr_count($path2, '/');
|
||||
|
||||
return ($depth1 === $depth2) ? strcmp($path1, $path2) : ($depth1 - $depth2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Split text into lines
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user