Passed
Push — master ( 4ab245...668424 )
by Jason
03:06
created

ElementFeatures::getSummary()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 9
ccs 7
cts 7
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Dynamic\Elements\Features\Elements;
4
5
use DNADesign\Elemental\Models\BaseElement;
6
use Dynamic\Elements\Features\Model\FeatureObject;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter;
9
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
10
use SilverStripe\ORM\FieldType\DBField;
11
use SilverStripe\ORM\FieldType\DBHTMLText;
12
use Symbiote\GridFieldExtensions\GridFieldOrderableRows;
13
14
/**
15
 * Class PageSectionBlock.
16
 *
17
 * @method HasManyList $Features
18
 */
19
class ElementFeatures extends BaseElement
20
{
21
    /**
22
     * @var string
23
     */
24
    private static $icon = 'font-icon-block-banner';
0 ignored issues
show
introduced by
The private property $icon is not used, and could be removed.
Loading history...
25
26
    /**
27
     * @var string
28
     */
29
    private static $table_name = 'ElementFeatures';
0 ignored issues
show
introduced by
The private property $table_name is not used, and could be removed.
Loading history...
30
31
    /**
32
     * @var array
33
     */
34
    private static $db = [
0 ignored issues
show
introduced by
The private property $db is not used, and could be removed.
Loading history...
35
        'Content' => 'HTMLText',
36
        'Alternate' => 'Boolean',
37
    ];
38
39
    /**
40
     * @var array
41
     */
42
    private static $has_many = [
0 ignored issues
show
introduced by
The private property $has_many is not used, and could be removed.
Loading history...
43
        'Features' => FeatureObject::class,
44
    ];
45
46
    /**
47
     * Set to false to prevent an in-line edit form from showing in an elemental area. Instead the element will be
48
     * clickable and a GridFieldDetailForm will be used.
49
     *
50
     * @config
51
     * @var bool
52
     */
53
    private static $inline_editable = false;
0 ignored issues
show
introduced by
The private property $inline_editable is not used, and could be removed.
Loading history...
54
55
    /**
56
     * @param bool $includerelations
57
     * @return array
58
     */
59 1
    public function fieldLabels($includerelations = true)
60
    {
61 1
        $labels = parent::fieldLabels($includerelations);
62
63 1
        $labels['Content'] = _t(__CLASS__.'.ContentLabel', 'Description');
64 1
        $labels['Alternate'] = _t(__CLASS__ . '.AlternateLabel', 'Alternate');
65 1
        $labels['Features'] = _t(__CLASS__ . '.FeaturesLabel', 'Features');
66
67 1
        return $labels;
68
    }
69
70
    /**
71
     * @return \SilverStripe\Forms\FieldList
72
     */
73
    public function getCMSFields()
74
    {
75 1
        $this->beforeUpdateCMSFields(function (FieldList $fields) {
76 1
            $fields->dataFieldByName('Content')
77 1
                ->setRows(8);
78 1
            $fields->dataFieldByName('Alternate')
79 1
                ->setDescription(_t(
80 1
                    __CLASS__ . '.AlternateDescription',
81 1
                    'Alternate image and text alignment'
82
                ));
83
84 1
            if ($this->ID) {
85
                // Features
86 1
                $features = $fields->dataFieldByName('Features');
87 1
                $fields->removeByName('Features');
88
89 1
                $config = $features->getConfig();
90
                $config
91 1
                    ->addComponent(new GridFieldOrderableRows())
92 1
                    ->removeComponentsByType([
93 1
                        GridFieldAddExistingAutocompleter::class,
94
                        GridFieldDeleteAction::class
95
                    ]);
96
97 1
                $fields->addFieldToTab('Root.Main', $features);
98
            }
99 1
        });
100
101 1
        return parent::getCMSFields();
102
    }
103
104
    /**
105
     * @return mixed
106
     */
107 1
    public function getFeaturesList()
108
    {
109 1
        return $this->Features()->sort('Sort');
0 ignored issues
show
Bug introduced by
The method Features() does not exist on Dynamic\Elements\Features\Elements\ElementFeatures. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

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

109
        return $this->/** @scrutinizer ignore-call */ Features()->sort('Sort');
Loading history...
110
    }
111
112
    /**
113
     * @return DBHTMLText
114
     */
115 1
    public function getSummary()
116
    {
117 1
        $count = $this->Features()->count();
118 1
        $label = _t(
119 1
            FeatureObject::class . '.PLURALS',
120 1
            'A Feature|{count} Features',
121 1
            [ 'count' => $count ]
122
        );
123 1
        return DBField::create_field('HTMLText', $label)->Summary(20);
124
    }
125
126
    /**
127
     * @return array
128
     */
129
    protected function provideBlockSchema()
130
    {
131
        $blockSchema = parent::provideBlockSchema();
132
        $blockSchema['content'] = $this->getSummary();
133
        return $blockSchema;
134
    }
135
136
    /**
137
     * @return string
138
     */
139 1
    public function getType()
140
    {
141 1
        return _t(__CLASS__.'.BlockType', 'Features');
142
    }
143
}
144