1 | <?php |
||
2 | |||
3 | namespace Dynamic\BaseObject\Model; |
||
4 | |||
5 | use DNADesign\Elemental\Forms\TextCheckboxGroupField; |
||
6 | use DNADesign\Elemental\Models\BaseElement; |
||
7 | use Sheadawson\Linkable\Forms\LinkField; |
||
8 | use Sheadawson\Linkable\Models\Link; |
||
9 | use SilverStripe\Assets\Image; |
||
10 | use SilverStripe\CMS\Model\SiteTree; |
||
11 | use SilverStripe\Control\Director; |
||
12 | use SilverStripe\Forms\CheckboxField; |
||
13 | use SilverStripe\Forms\FieldList; |
||
14 | use SilverStripe\Forms\TextField; |
||
15 | use SilverStripe\ORM\DataObject; |
||
16 | use SilverStripe\ORM\ValidationResult; |
||
17 | use SilverStripe\Security\Permission; |
||
18 | use SilverStripe\Versioned\Versioned; |
||
19 | |||
20 | /** |
||
21 | * Class BaseElementObject. |
||
22 | * |
||
23 | * @property string $Title |
||
24 | * @property booelan $ShowTitle |
||
25 | * @property string $Content |
||
26 | * |
||
27 | * @property int $ImageID |
||
28 | * @property int $ElementLinkID |
||
29 | * |
||
30 | * @method Image Image() |
||
31 | * @method Link ElementLink() |
||
32 | * |
||
33 | * @mixin Versioned |
||
34 | */ |
||
35 | class BaseElementObject extends DataObject |
||
36 | { |
||
37 | /** |
||
38 | * @var array |
||
39 | */ |
||
40 | private static $db = array( |
||
41 | 'Title' => 'Varchar(255)', |
||
42 | 'ShowTitle' => 'Boolean', |
||
43 | 'Content' => 'HTMLText', |
||
44 | ); |
||
45 | |||
46 | /** |
||
47 | * @var array |
||
48 | */ |
||
49 | private static $has_one = array( |
||
50 | 'Image' => Image::class, |
||
51 | 'ElementLink' => Link::class, |
||
52 | ); |
||
53 | |||
54 | /** |
||
55 | * @var array |
||
56 | */ |
||
57 | private static $owns = array( |
||
58 | 'Image', |
||
59 | ); |
||
60 | |||
61 | /** |
||
62 | * @var string |
||
63 | */ |
||
64 | private static $default_sort = 'Title ASC'; |
||
65 | |||
66 | /** |
||
67 | * @var array |
||
68 | */ |
||
69 | private static $summary_fields = array( |
||
70 | 'Image.CMSThumbnail' => 'Image', |
||
71 | 'Title' => 'Title', |
||
72 | ); |
||
73 | |||
74 | /** |
||
75 | * @var array |
||
76 | */ |
||
77 | private static $searchable_fields = array( |
||
78 | 'Title' => array( |
||
79 | 'title' => 'Headline', |
||
80 | ), |
||
81 | 'Content' => array( |
||
82 | 'title' => 'Description', |
||
83 | ), |
||
84 | ); |
||
85 | |||
86 | /** |
||
87 | * @var array |
||
88 | */ |
||
89 | private static $extensions = [ |
||
90 | Versioned::class, |
||
91 | ]; |
||
92 | |||
93 | /** |
||
94 | * Adds Publish button. |
||
95 | * |
||
96 | * @var bool |
||
97 | */ |
||
98 | private static $versioned_gridfield_extensions = true; |
||
99 | |||
100 | /** |
||
101 | * @var string |
||
102 | */ |
||
103 | private static $table_name = 'BaseElementObject'; |
||
104 | |||
105 | /** |
||
106 | * @return FieldList |
||
107 | * |
||
108 | * @throws \Exception |
||
109 | */ |
||
110 | public function getCMSFields() |
||
111 | { |
||
112 | 1 | $this->beforeUpdateCMSFields(function ($fields) { |
|
113 | /** @var FieldList $fields */ |
||
114 | 1 | $fields->replaceField( |
|
115 | 1 | 'ElementLinkID', |
|
116 | 1 | LinkField::create('ElementLinkID') |
|
117 | 1 | ->setTitle('Link') |
|
118 | 1 | ->setDescription('Optional. Add a call to action link.') |
|
119 | ); |
||
120 | 1 | $fields->insertBefore($fields->dataFieldByName('ElementLinkID'), 'Content'); |
|
121 | |||
122 | 1 | $fields->removeByName(array( |
|
123 | 1 | 'ElementFeaturesID', |
|
124 | 'Sort', |
||
125 | )); |
||
126 | |||
127 | // Add a combined field for "Title" and "Displayed" checkbox in a Bootstrap input group |
||
128 | 1 | $fields->removeByName('ShowTitle'); |
|
129 | 1 | $fields->replaceField( |
|
130 | 1 | 'Title', |
|
131 | 1 | TextCheckboxGroupField::create( |
|
132 | 1 | TextField::create('Title', _t(BaseElement::class . '.TitleLabel', 'Title (displayed if checked)')), |
|
133 | 1 | CheckboxField::create('ShowTitle', _t(BaseElement::class . '.ShowTitleLabel', 'Displayed')) |
|
134 | 1 | )->setName('TitleAndDisplayed') |
|
135 | ); |
||
136 | // $fields->dataFieldByName('Title')->setDescription('Optional. Display a Title with this feature.'); |
||
0 ignored issues
–
show
|
|||
137 | |||
138 | 1 | $image = $fields->dataFieldByName('Image') |
|
139 | 1 | ->setDescription('Optional. Display an image with this feature.') |
|
140 | 1 | ->setFolderName('Uploads/Elements/Objects'); |
|
141 | 1 | $fields->insertBefore($image, 'Content'); |
|
142 | |||
143 | 1 | $fields->dataFieldByName('Content') |
|
144 | 1 | ->setTitle('Description') |
|
145 | 1 | ->setDescription('Optional. Set a description for this feature.') |
|
146 | 1 | ->setRows(8); |
|
147 | 1 | }); |
|
148 | |||
149 | 1 | return parent::getCMSFields(); |
|
150 | } |
||
151 | |||
152 | /** |
||
153 | * @return SiteTree|null |
||
154 | */ |
||
155 | 4 | public function getPage() |
|
156 | { |
||
157 | 4 | $page = Director::get_current_page(); |
|
158 | // because $page can be a SiteTree or Controller |
||
159 | 4 | return $page instanceof SiteTree ? $page : null; |
|
160 | } |
||
161 | |||
162 | /** |
||
163 | * Basic permissions, defaults to page perms where possible. |
||
164 | * |
||
165 | * @param \SilverStripe\Security\Member|null $member |
||
166 | * @return boolean |
||
167 | */ |
||
168 | 1 | public function canView($member = null) |
|
169 | { |
||
170 | 1 | $extended = $this->extendedCan(__FUNCTION__, $member); |
|
171 | 1 | if ($extended !== null) { |
|
172 | return $extended; |
||
173 | } |
||
174 | |||
175 | 1 | if ($page = $this->getPage()) { |
|
176 | return $page->canView($member); |
||
177 | } |
||
178 | |||
179 | 1 | return Permission::check('CMS_ACCESS', 'any', $member); |
|
180 | } |
||
181 | |||
182 | /** |
||
183 | * Basic permissions, defaults to page perms where possible. |
||
184 | * |
||
185 | * @param \SilverStripe\Security\Member|null $member |
||
186 | * |
||
187 | * @return boolean |
||
188 | */ |
||
189 | 1 | public function canEdit($member = null) |
|
190 | { |
||
191 | 1 | $extended = $this->extendedCan(__FUNCTION__, $member); |
|
192 | 1 | if ($extended !== null) { |
|
193 | return $extended; |
||
194 | } |
||
195 | |||
196 | 1 | if ($page = $this->getPage()) { |
|
197 | return $page->canEdit($member); |
||
198 | } |
||
199 | |||
200 | 1 | return Permission::check('CMS_ACCESS', 'any', $member); |
|
201 | } |
||
202 | |||
203 | /** |
||
204 | * Basic permissions, defaults to page perms where possible. |
||
205 | * |
||
206 | * Uses archive not delete so that current stage is respected i.e if a |
||
207 | * element is not published, then it can be deleted by someone who doesn't |
||
208 | * have publishing permissions. |
||
209 | * |
||
210 | * @param \SilverStripe\Security\Member|null $member |
||
211 | * |
||
212 | * @return boolean |
||
213 | */ |
||
214 | 1 | public function canDelete($member = null) |
|
215 | { |
||
216 | 1 | $extended = $this->extendedCan(__FUNCTION__, $member); |
|
217 | 1 | if ($extended !== null) { |
|
218 | return $extended; |
||
219 | } |
||
220 | |||
221 | 1 | if ($page = $this->getPage()) { |
|
222 | return $page->canArchive($member); |
||
223 | } |
||
224 | |||
225 | 1 | return Permission::check('CMS_ACCESS', 'any', $member); |
|
226 | } |
||
227 | |||
228 | /** |
||
229 | * Basic permissions, defaults to page perms where possible. |
||
230 | * |
||
231 | * @param \SilverStripe\Security\Member|null $member |
||
232 | * @param array $context |
||
233 | * |
||
234 | * @return boolean |
||
235 | */ |
||
236 | 1 | public function canCreate($member = null, $context = array()) |
|
237 | { |
||
238 | 1 | $extended = $this->extendedCan(__FUNCTION__, $member); |
|
239 | 1 | if ($extended !== null) { |
|
240 | return $extended; |
||
241 | } |
||
242 | |||
243 | 1 | return Permission::check('CMS_ACCESS', 'any', $member); |
|
244 | } |
||
245 | } |
||
246 |
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.