Test Setup Failed
Pull Request — master (#197)
by Gorrie
01:07
created

src/Reports/ElementTypeReport.php (1 issue)

1
<?php
2
3
namespace DNADesign\Elemental\Reports;
4
5
use DNADesign\Elemental\Models\BaseElement;
6
use SilverStripe\Core\ClassInfo;
7
use SilverStripe\Core\Injector\Injector;
8
use SilverStripe\Forms\GridField\GridField;
9
use SilverStripe\ORM\ArrayList;
10
use SilverStripe\Reports\Report;
11
use SilverStripe\View\ArrayData;
12
use SilverStripe\View\Requirements;
13
14
class ElementTypeReport extends Report
15
{
16
    public function title()
17
    {
18
        return _t(__CLASS__ . '.Title', 'Content block types');
19
    }
20
21
    public function sourceRecords($params = [])
0 ignored issues
show
The parameter $params is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

21
    public function sourceRecords(/** @scrutinizer ignore-unused */ $params = [])

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
22
    {
23
        $classes = $this->getElementTypes();
24
        $output = ArrayList::create();
25
26
        foreach ($classes as $class) {
27
            /** @var BaseElement $element */
28
            $element = Injector::inst()->create($class);
29
30
            $output->push(ArrayData::create([
31
                'Icon' => $element->getIcon(),
32
                'Type' => $element->getType(),
33
                'TypeNice' => $element->getTypeNice(),
34
                'ClassName' => $element->sanitiseClassName($class),
35
                'Total' => $class::get()->count(),
36
            ]));
37
        }
38
39
        return $output;
40
    }
41
42
    /**
43
     * Return an array of all valid classes that extend BaseElement
44
     *
45
     * @return string[]
46
     */
47
    protected function getElementTypes()
48
    {
49
        $classes = ClassInfo::subclassesFor(BaseElement::class);
50
        $output = [];
51
52
        foreach ($classes as $className) {
53
            if ($className === BaseElement::class) {
54
                continue;
55
            }
56
57
            $output[] = $className;
58
        }
59
60
        return $output;
61
    }
62
63
    public function columns()
64
    {
65
        $inUseReport = new ElementsInUseReport;
66
67
        return [
68
            'Icon' => [
69
                'title' => '',
70
            ],
71
            'Type' => [
72
                'title' => _t(__CLASS__ . '.Type', 'Content Type'),
73
                'formatting' => function ($value, $item) use ($inUseReport) {
74
                    return sprintf(
75
                        '<a class="grid-field__link" href="%s" title="%s">%s</a>',
76
                        $inUseReport->getLink('?filters[ClassName]='. $item->ClassName),
77
                        $item->Type,
78
                        $item->TypeNice
79
                    );
80
                },
81
            ],
82
            'Total' => [
83
                'title' => _t(__CLASS__ . '.Total', 'Total'),
84
            ],
85
        ];
86
    }
87
88
    /**
89
     * Add elemental CSS and a unique class name to the GridField
90
     *
91
     * @return GridField
92
     */
93
    public function getReportField()
94
    {
95
        Requirements::css('dnadesign/silverstripe-elemental:client/dist/styles/bundle.css');
96
97
        /** @var GridField $field */
98
        $field = parent::getReportField();
99
        $field->addExtraClass('elemental-report__grid-field');
100
101
        return $field;
102
    }
103
}
104