Passed
Push — master ( 9b6947...49a0cc )
by Jason
02:46
created

src/Model/BaseElementObject.php (1 issue)

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
Unused Code Comprehensibility introduced by
77% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
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