public function getInstalledAction()
{
$packages = [];
$bundles = [];
$fs = $this->localFilesystem;
if ($fs->has('composer.json')) {
$composer = $fs->read('composer.json');
if ($composer) {
$composer = json_decode($composer, true);
$installedVersions = [];
if ($fs->has('composer.lock')) {
$locker = $fs->read('composer.lock');
$locker = json_decode($locker, true);
if ($locker) {
foreach ($locker['packages'] as $package) {
$version = $package['version'];
$ref = false;
if ('dev-master' === $version) {
if ($package['source']) {
$ref = substr($package['source']['reference'], 0, 7);
} else {
if ($package['dist']) {
$ref = substr($package['source']['reference'], 0, 7);
}
}
}
if ($ref) {
$version = ['version' => $version, 'reference' => $ref];
}
$installedVersions[strtolower($package['name'])] = $version;
}
}
}
$packages = [];
foreach ((array) $composer['require'] as $name => $version) {
if ('php' == $name) {
continue;
}
$package = ['name' => $name, 'version' => $version, 'installed' => @$installedVersions[strtolower($name)]];
$packages[] = $package;
}
}
}
$bundleClasses = array_merge($this->getBundlesFromPath('vendor'), $this->getBundlesFromPath('src'));
if ($bundleClasses) {
foreach ($bundleClasses as $bundle) {
if (!class_exists($bundle)) {
continue;
}
$reflection = new \ReflectionClass($bundle);
$current = realpath($this->jarves->getRootDir() . '/../');
$path = substr(dirname($reflection->getFileName()), strlen($current) + 1);
if (false !== strpos($path, 'vendor/')) {
$expl = explode('/', $path);
$package = $expl[1] . '/' . $expl[2];
} else {
$package = 'local ./src/';
}
$bundleInfo = ['class' => $bundle, 'package' => $package, 'path' => $reflection->getFileName(), 'active' => $this->jarves->isActiveBundle($bundle)];
$bundles[] = $bundleInfo;
}
}
return ['packages' => $packages, 'bundles' => $bundles];
}