1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Cita\Modular\Traits; |
4
|
|
|
|
5
|
|
|
use SilverStripe\Forms\TextField; |
6
|
|
|
use SilverStripe\Forms\LiteralField; |
7
|
|
|
use SilverStripe\Forms\HeaderField; |
8
|
|
|
use Symbiote\GridFieldExtensions\GridFieldAddNewMultiClass; |
9
|
|
|
use Symbiote\GridFieldExtensions\GridFieldOrderableRows; |
10
|
|
|
use SilverStripe\Forms\GridField\GridFieldAddNewButton; |
11
|
|
|
use SilverStripe\Forms\GridField\GridFieldDataColumns; |
12
|
|
|
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor; |
13
|
|
|
use SilverStripe\Forms\GridField\GridFieldDetailForm; |
14
|
|
|
use SilverStripe\Forms\GridField\GridField; |
15
|
|
|
use Symbiote\GridFieldExtensions\GridFieldEditableColumns; |
16
|
|
|
use SilverStripe\Core\ClassInfo; |
17
|
|
|
use Cita\Modular\Model\Block; |
18
|
|
|
use Cita\Modular\Model\FlexBlock; |
19
|
|
|
use SilverStripe\View\ViewableData; |
20
|
|
|
use Cita\Modular\Form\BlockEditForm_ItemRequest; |
21
|
|
|
|
22
|
|
|
trait ModularCommonTrait |
23
|
|
|
{ |
24
|
|
|
private function makeGridField(&$fields) |
25
|
|
|
{ |
26
|
|
|
if (!$this->owner->exists()) { |
27
|
|
|
return; |
28
|
|
|
} |
29
|
|
|
|
30
|
|
|
$fields->removeByName(['ModularBlocks']); |
31
|
|
|
|
32
|
|
|
$classes = $this->filterBlockClasses(ClassInfo::subclassesFor(Block::class)); |
33
|
|
|
$classes = array_values($classes); |
34
|
|
|
|
35
|
|
|
if (empty($classes)) { |
36
|
|
|
return $this->handleNoClassCase(&$fields); |
|
|
|
|
37
|
|
|
} |
38
|
|
|
|
39
|
|
|
$this->buildGridFieldConfig($fields, $classes); |
40
|
|
|
} |
41
|
|
|
|
42
|
|
|
private function buildGridFieldConfig(&$fields, $classes) |
43
|
|
|
{ |
44
|
|
|
$fields->addFieldToTab( |
45
|
|
|
'Root.Main', |
46
|
|
|
GridField::create( |
47
|
|
|
'ModularBlocks', |
48
|
|
|
'Modular blocks', |
49
|
|
|
$this->owner->ModularBlocks(), |
50
|
|
|
$config = GridFieldConfig_RelationEditor::create() |
51
|
|
|
)->setDescription('The blocks you add on this page will be listed under the page\'s main content') |
52
|
|
|
); |
53
|
|
|
|
54
|
|
|
$this->buildGridFieldConfigTable($config, $classes); |
55
|
|
|
|
56
|
|
|
if ($this->owner instanceof FlexBlock) { |
57
|
|
|
$this->createInlineEditors($config); |
58
|
|
|
} |
59
|
|
|
|
60
|
|
|
$config |
61
|
|
|
->getComponentByType(GridFieldDetailForm::class) |
62
|
|
|
->setItemRequestClass(BlockEditForm_ItemRequest::class) |
63
|
|
|
; |
64
|
|
|
} |
65
|
|
|
|
66
|
|
|
private function createInlineEditors(&$config) |
67
|
|
|
{ |
68
|
|
|
$config->addComponent($this->makeEditableField('ColOffset', 'Offset - default')); |
69
|
|
|
$config->addComponent($this->makeEditableField('ColSize', 'Grid size - default')); |
70
|
|
|
$config->addComponent($this->makeEditableField('ColOffsetLg', 'Offset - lg')); |
71
|
|
|
$config->addComponent($this->makeEditableField('ColSizeLg', 'Grid size - lg')); |
72
|
|
|
$config->addComponent($this->makeEditableField('ColOffsetMd', 'Offset - md')); |
73
|
|
|
$config->addComponent($this->makeEditableField('ColSizeMd', 'Grid size - md')); |
74
|
|
|
$config->addComponent($this->makeEditableField('ColSizeSm', 'Grid size - sm')); |
75
|
|
|
$config->addComponent($this->makeEditableField('ColOffsetSm', 'Offset - sm')); |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
private function buildGridFieldConfigTable(&$config, $classes) |
79
|
|
|
{ |
80
|
|
|
$multi = new GridFieldAddNewMultiClass(); |
81
|
|
|
$multi = $multi->setClasses($classes); |
82
|
|
|
|
83
|
|
|
$config |
84
|
|
|
->removeComponentsByType(GridFieldAddNewButton::class) |
85
|
|
|
->addComponent($multi) |
86
|
|
|
->addComponent(new GridFieldOrderableRows('SortOrder')); |
87
|
|
|
|
88
|
|
|
$dataColumns = $config->getComponentByType(GridFieldDataColumns::class); |
89
|
|
|
|
90
|
|
|
$dataFields = $this->owner instanceof FlexBlock ? |
91
|
|
|
[ |
92
|
|
|
'Type' => 'Type', |
93
|
|
|
'Title' => 'Title', |
94
|
|
|
] : [ |
95
|
|
|
'showID' => 'Anchor', |
96
|
|
|
'Type' => 'Type', |
97
|
|
|
'Title' => 'Title', |
98
|
|
|
'BlockSummary' => 'Summary', |
99
|
|
|
] |
100
|
|
|
; |
101
|
|
|
|
102
|
|
|
$dataColumns->setDisplayFields($dataFields)->setFieldCasting([ |
103
|
|
|
'Type' => 'HTMLText->RAW', |
104
|
|
|
]); |
105
|
|
|
} |
106
|
|
|
|
107
|
|
|
private function handleNoClassCase(&$fields) |
108
|
|
|
{ |
109
|
|
|
$fields->addFieldsToTab( |
110
|
|
|
'Root.Main', |
111
|
|
|
[ |
112
|
|
|
HeaderField::create( |
113
|
|
|
'ModularBlocksNotice', |
114
|
|
|
'Modular blocks' |
115
|
|
|
), |
116
|
|
|
LiteralField::create( |
117
|
|
|
'ModularBlocks', |
118
|
|
|
'<p class="alert alert-warning">No block type available for this page type</p>' |
119
|
|
|
), |
120
|
|
|
] |
121
|
|
|
); |
122
|
|
|
} |
123
|
|
|
|
124
|
|
|
private function makeEditableField($fieldName, $fieldTitle) |
125
|
|
|
{ |
126
|
|
|
$field = new GridFieldEditableColumns(); |
127
|
|
|
$field->setDisplayFields(array( |
128
|
|
|
$fieldName => [ |
129
|
|
|
'title' => $fieldTitle, |
130
|
|
|
'field' => TextField::class |
131
|
|
|
] |
132
|
|
|
)); |
133
|
|
|
|
134
|
|
|
return $field; |
135
|
|
|
} |
136
|
|
|
|
137
|
|
|
private function filterBlockClasses($classes) |
138
|
|
|
{ |
139
|
|
|
if (!empty($this->owner->config()->allowed_modulars)) { |
140
|
|
|
$classes = []; |
141
|
|
|
|
142
|
|
|
foreach ($this->owner->config()->allowed_modulars as $modular) { |
143
|
|
|
$classes[strtolower($modular)] = $modular; |
144
|
|
|
} |
145
|
|
|
} elseif (!empty($this->owner->config()->disallowed_modulars)) { |
146
|
|
|
foreach ($this->owner->config()->disallowed_modulars as $modular) { |
147
|
|
|
unset($classes[strtolower($modular)]); |
148
|
|
|
} |
149
|
|
|
} |
150
|
|
|
|
151
|
|
|
unset($classes[strtolower(Block::class)]); |
152
|
|
|
|
153
|
|
|
if ($this->owner instanceof FlexBlock) { |
154
|
|
|
unset($classes[strtolower(FlexBlock::class)]); |
155
|
|
|
} |
156
|
|
|
|
157
|
|
|
return $classes; |
158
|
|
|
} |
159
|
|
|
|
160
|
|
|
public function getModulars() |
161
|
|
|
{ |
162
|
|
|
return ViewableData::create() |
163
|
|
|
->customise(['ModularBlocks' => $this->owner->ModularBlocks()]) |
164
|
|
|
->renderWith( |
165
|
|
|
$this->owner instanceof FlexBlock ? |
166
|
|
|
'Cita\\Modular\\FlexModularList' : 'Cita\\Modular\\ModularList' |
167
|
|
|
) |
168
|
|
|
; |
169
|
|
|
} |
170
|
|
|
} |
171
|
|
|
|
This check looks for function or method calls that always return null and whose return value is used.
The method
getObject()
can return nothing but null, so it makes no sense to use the return value.The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.