Issues (13)

src/Module/AllPackageVersions.php (2 issues)

1
<?php
2
3
namespace BiffBangPow\SSMonitor\Client\Module;
4
5
use BiffBangPow\SSMonitor\Client\Core\ClientCommon;
6
use BiffBangPow\SSMonitor\Client\Core\ClientInterface;
7
use SilverStripe\Core\Config\Configurable;
8
use SilverStripe\Core\Injector\Injector;
9
use SilverStripe\Core\Manifest\VersionProvider;
10
use SilverStripe\ORM\ArrayList;
11
use SilverStripe\View\ArrayData;
12
use SilverStripe\View\SSViewer;
13
14
class AllPackageVersions implements ClientInterface
15
{
16
17
    use ClientCommon;
18
    use Configurable;
19
20
    /**
21
     * @config
22
     * @var string
23
     */
24
    private static $client_title = 'All installed vendor packages';
0 ignored issues
show
The private property $client_title is not used, and could be removed.
Loading history...
25
26
    /**
27
     * @var string
28
     */
29
    private string $clientName = 'allpackages';
0 ignored issues
show
The private property $clientName is not used, and could be removed.
Loading history...
30
31
    public function getResult()
32
    {
33
        $packages = [];
34
35
        /**
36
         * @var VersionProvider $versionProvider
37
         */
38
        $ref = new \ReflectionClass(VersionProvider::class);
39
        $refMethod = $ref->getMethod('getComposerLock');
40
        $refMethod->setAccessible(true);
41
42
        $lockContents = $refMethod->invoke(new VersionProvider());
43
44
        if (isset($lockContents['packages'])) {
45
            foreach ($lockContents['packages'] as $package) {
46
                $packageName = $package['name'];
47
                $version = $package['version'];
48
                $packages[$packageName] = $version;
49
            }
50
        }
51
52
        return [
53
            $this->getClientName() => $packages
54
        ];
55
    }
56
57
    /**
58
     *
59
     * @return \SilverStripe\ORM\FieldType\DBHTMLText
60
     * @throws \Exception
61
     */
62
    public function forTemplate()
63
    {
64
        $data = $this->getResult();
65
        $versions = ArrayList::create();
66
67
        foreach ($data[$this->getClientName()] as $packageName => $version) {
68
            $versions->push([
69
                'PackageName' => $packageName,
70
                'PackageVersion' => $version
71
            ]);
72
        }
73
74
        $viewer = new SSViewer('BiffBangPow/SSMonitor/Client/Module/AllPackageVersions');
75
        $html = $viewer->process(ArrayData::create([
76
            'Title' => $this->getClientTitle(),
77
            'Packages' => $versions
78
        ]));
79
80
        return $html;
81
    }
82
83
}
84