Issues (55)

src/Model/SlideImage.php (24 issues)

1
<?php
2
3
namespace Dynamic\FlexSlider\Model;
4
5
use function GuzzleHttp\Psr7\parse_request;
0 ignored issues
show
The function GuzzleHttp\Psr7\parse_request was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
6
use Sheadawson\Linkable\Forms\EmbeddedObjectField;
7
use Sheadawson\Linkable\Forms\LinkField;
8
use Sheadawson\Linkable\Models\EmbeddedObject;
9
use Sheadawson\Linkable\Models\Link;
10
use SilverStripe\AssetAdmin\Forms\UploadField;
11
use SilverStripe\Assets\Image;
12
use SilverStripe\CMS\Model\SiteTree;
13
use SilverStripe\Dev\Debug;
14
use SilverStripe\Forms\CompositeField;
15
use SilverStripe\Forms\DropdownField;
16
use SilverStripe\Forms\FieldList;
17
use SilverStripe\Forms\TreeDropdownField;
18
use SilverStripe\ORM\DataObject;
19
use SilverStripe\Security\Permission;
20
use SilverStripe\Security\PermissionProvider;
21
use UncleCheese\DisplayLogic\Forms\Wrapper;
22
23
/**
24
 * Class SlideImage
25
 * @package Dynamic\FlexSlider\Model
26
 * @property string $Name
27
 * @property string $Headline
28
 * @property string $Description
29
 * @property int $SortOrder
30
 * @property string $SlideType
31
 * @property int $ImageID
32
 * @property int $VideoID
33
 * @property int $PageID
34
 * @property int $PageLinkID
35
 * @property int $LinkID
36
 */
37
class SlideImage extends DataObject implements PermissionProvider
38
{
39
    /**
40
     * @var string
41
     */
42
    private static $singular_name = 'Slide';
0 ignored issues
show
The private property $singular_name is not used, and could be removed.
Loading history...
43
44
    /**
45
     * @var string
46
     */
47
    private static $plural_name = 'Slides';
0 ignored issues
show
The private property $plural_name is not used, and could be removed.
Loading history...
48
49
    /**
50
     * @var array
51
     */
52
    private static $db = [
0 ignored issues
show
The private property $db is not used, and could be removed.
Loading history...
53
        'Name' => 'Varchar(255)',
54
        'Headline' => 'Varchar(255)',
55
        'Description' => 'Text',
56
        'SortOrder' => 'Int',
57
        'SlideType' => 'Varchar',
58
    ];
59
60
    /**
61
     * @var array
62
     */
63
    private static $has_one = [
0 ignored issues
show
The private property $has_one is not used, and could be removed.
Loading history...
64
        'Image' => Image::class,
65
        'Video' => EmbeddedObject::class,
66
        'Page' => \Page::class,
67
        'PageLink' => SiteTree::class,
68
        'SlideLink' => Link::class,
69
    ];
70
71
    /**
72
     * @var array
73
     */
74
    private static $owns = [
0 ignored issues
show
The private property $owns is not used, and could be removed.
Loading history...
75
        'Image',
76
    ];
77
78
    /**
79
     * @var string
80
     */
81
    private static $table_name = 'SlideImage';
0 ignored issues
show
The private property $table_name is not used, and could be removed.
Loading history...
82
83
    /**
84
     * @var string
85
     */
86
    private static $default_sort = 'SortOrder';
0 ignored issues
show
The private property $default_sort is not used, and could be removed.
Loading history...
87
88
    /**
89
     * Adds Publish button to SlideImage record
90
     *
91
     * @var bool
92
     */
93
    private static $versioned_gridfield_extensions = true;
0 ignored issues
show
The private property $versioned_gridfield_extensions is not used, and could be removed.
Loading history...
94
95
    /**
96
     * @var array
97
     */
98
    private static $defaults = [
0 ignored issues
show
The private property $defaults is not used, and could be removed.
Loading history...
99
        'SlideType' => 'Image',
100
    ];
101
102
    /**
103
     * @var array
104
     */
105
    private static $summary_fields = [
0 ignored issues
show
The private property $summary_fields is not used, and could be removed.
Loading history...
106
        'Image.CMSThumbnail' => 'Image',
107
        'Name' => 'Name',
108
    ];
109
110
    /**
111
     * @var array
112
     */
113
    private static $searchable_fields = [
0 ignored issues
show
The private property $searchable_fields is not used, and could be removed.
Loading history...
114
        'Name',
115
        'Headline',
116
        'Description',
117
    ];
118
119
    /**
120
     * @var int
121
     */
122
    private static $image_size_limit = 512000;
0 ignored issues
show
The private property $image_size_limit is not used, and could be removed.
Loading history...
123
124
    /**
125
     * @var array
126
     */
127
    private static $slide_types = [
0 ignored issues
show
The private property $slide_types is not used, and could be removed.
Loading history...
128
        'Image',
129
        'Video',
130
        'Text',
131
    ];
132
133
    /**
134
     * @param bool $includerelations
135
     * @return array
136
     */
137
    public function fieldLabels($includerelations = true)
138
    {
139
        $labels = parent::fieldLabels($includerelations);
140
141
        $labels['Name'] = _t(__CLASS__ . '.NAME', 'Name');
142
        $labels['Headline'] = _t(__CLASS__ . '.HEADLINE', 'Headline');
143
        $labels['Description'] = _t(__CLASS__ . '.DESCRIPTION', 'Description');
144
        $labels['SlideLinkID'] =  _t(__CLASS__ . '.PAGE_LINK', "Call to action link");
145
        $labels['Image'] = _t(__CLASS__ . '.IMAGE', 'Image');
146
        $labels['SlideType'] = _t(__CLASS__ . '.SlideType', 'Image or Video');
147
        $labels['Video'] = _t(__CLASS__ . '.VideoLabel', 'Video URL');
148
149
        return $labels;
150
    }
151
152
    /**
153
     * @return \SilverStripe\Forms\FieldList
154
     */
155
    public function getCMSFields()
156
    {
157
        $this->beforeUpdateCMSFields(function ($fields) {
158
            $fields->removeByName([
159
                'ShowSlide',
160
                'SortOrder',
161
                'PageID',
162
                'Image',
163
                'SlideType',
164
                'Video',
165
                'VideoID',
166
                'SlideLinkID',
167
            ]);
168
169
            // Name
170
            $fields->dataFieldByName('Name')
171
                ->setDescription(
172
                    _t(__CLASS__ . '.INTERNAL_USE', 'for internal reference only')
173
                );
174
175
            // Headline
176
            $fields->dataFieldByName('Headline')
177
                ->setDescription(
178
                    _t(__CLASS__ . '.USED_IN_TEMPLATE', 'optional, used in template')
179
                );
180
181
            // Description
182
            $fields->dataFieldByName('Description')
183
                ->setDescription(
184
                    _t(__CLASS__ . '.USED_IN_TEMPLATE', 'optional, used in template')
185
                );
186
187
            // Page link
188
            $fields->replaceField(
189
                'PageLinkID',
190
                LinkField::create('SlideLinkID', $this->fieldLabel('SlideLinkID'))
191
            );
192
193
            // Image
194
            $image = UploadField::create('Image', $this->fieldLabel('Image'))
195
                ->setFolderName('Uploads/SlideImages');
196
197
            $image->getValidator()->setAllowedExtensions(['jpg', 'jpeg', 'png', 'gif']);
198
199
            $fields->addFieldToTab(
200
                'Root.Main',
201
                CompositeField::create(FieldList::create(
202
                    DropdownField::create('SlideType', $this->fieldLabel('SlideType'))
203
                        ->setSource($this->getTypeSource()),
204
                    Wrapper::create(
205
                        $image
206
                    )->displayIf('SlideType')->isEqualTo('Image')->orIf('SlideType')->isEqualTo('Video')->end(),
207
                    Wrapper::create(
208
                        $videoField = EmbeddedObjectField::create('Video', $this->fieldLabel('Video'))
209
                            ->setDescription(_t(__CLASS__ . '.VideoDescription', 'Supported links: YouTube, Vimeo'))
210
                    )->displayIf('SlideType')->isEqualTo('Video')->end()
211
                ))->setName('MediaFields'),
212
                'Description'
213
            );
214
        });
215
216
        $fields = parent::getCMSFields();
217
218
        $this->extend('updateSlideImageFields', $fields);
219
220
        return $fields;
221
    }
222
223
    /**
224
     * @return \SilverStripe\ORM\ValidationResult
225
     */
226
    public function validate()
227
    {
228
        $result = parent::validate();
229
230
        if (!$this->Name) {
231
            $result->addError(
232
                _t(__CLASS__ . '.NAME_REQUIRED', 'A Name is required before you can save')
233
            );
234
        }
235
236
        $types = $this->getTypeSource();
237
238
        if (isset($types['Video']) && $this->SlideType == 'Video' && !$this->VideoID) {
239
            $result->addError(
240
                _t(__CLASS__ . '.VIDEO_REQUIRED', 'An Video Link is required before you can save')
241
            );
242
        }
243
244
        if (isset($types['Image']) && $this->SlideType == 'Image' && !$this->ImageID) {
245
            $result->addError(
246
                _t(__CLASS__ . '.IMAGE_REQUIRED', 'An Image is required before you can save')
247
            );
248
        }
249
250
        if (isset($types['Text']) && $this->SlideType == 'Text' && !$this->Description) {
251
            $result->addError(
252
                _t(__CLASS__ . '.DESCRIPTION_REQUIRED', 'A Description is required before you can save')
253
            );
254
        }
255
256
        return $result;
257
    }
258
259
    /**
260
     * @return array
261
     */
262
    public function providePermissions()
263
    {
264
        return [
265
            'Slide_EDIT' => 'Slide Edit',
266
            'Slide_DELETE' => 'Slide Delete',
267
            'Slide_CREATE' => 'Slide Create',
268
        ];
269
    }
270
271
    /**
272
     * @param null $member
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $member is correct as it would always require null to be passed?
Loading history...
273
     * @param array $context
274
     *
275
     * @return bool|int
276
     */
277
    public function canCreate($member = null, $context = [])
278
    {
279
        return Permission::check('Slide_CREATE', 'any', $member);
280
    }
281
282
    /**
283
     * @param null $member
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $member is correct as it would always require null to be passed?
Loading history...
284
     * @param array $context
285
     *
286
     * @return bool|int
287
     */
288
    public function canEdit($member = null, $context = [])
0 ignored issues
show
The parameter $context 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

288
    public function canEdit($member = null, /** @scrutinizer ignore-unused */ $context = [])

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...
289
    {
290
        return Permission::check('Slide_EDIT', 'any', $member);
291
    }
292
293
    /**
294
     * @param null $member
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $member is correct as it would always require null to be passed?
Loading history...
295
     * @param array $context
296
     *
297
     * @return bool|int
298
     */
299
    public function canDelete($member = null, $context = [])
0 ignored issues
show
The parameter $context 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

299
    public function canDelete($member = null, /** @scrutinizer ignore-unused */ $context = [])

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...
300
    {
301
        return Permission::check('Slide_DELETE', 'any', $member);
302
    }
303
304
    /**
305
     * @param null $member
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $member is correct as it would always require null to be passed?
Loading history...
306
     * @param array $context
307
     *
308
     * @return bool
309
     */
310
    public function canView($member = null, $context = [])
0 ignored issues
show
The parameter $context 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

310
    public function canView($member = null, /** @scrutinizer ignore-unused */ $context = [])

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...
311
    {
312
        return true;
313
    }
314
315
    /**
316
     * @return array
317
     */
318
    public function getTypeSource()
319
    {
320
        $types = $this->config()->get('slide_types');
321
        asort($types);
322
        return array_combine($types, $types);
323
    }
324
325
    /**
326
     * @param null $template
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $template is correct as it would always require null to be passed?
Loading history...
327
     * @param null $customFields
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $customFields is correct as it would always require null to be passed?
Loading history...
328
     * @return \SilverStripe\ORM\FieldType\DBHTMLText
329
     */
330
    public function renderWith($template = null, $customFields = null)
331
    {
332
        if ($template === null) {
0 ignored issues
show
The condition $template === null is always true.
Loading history...
333
            $template = static::class;
334
            $template = ($this->SlideType) ? $template . "_{$this->SlideType}" : '';
335
        }
336
337
        return parent::renderWith($template);
338
    }
339
340
    /**
341
     * @return \SilverStripe\ORM\FieldType\DBHTMLText
342
     */
343
    public function forTemplate()
344
    {
345
        return $this->renderWith();
346
    }
347
}
348