Completed
Pull Request — master (#2)
by Matthew
13:57
created

ProductWishList::getFrontEndActions()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 15
c 0
b 0
f 0
rs 10
cc 3
nc 4
nop 1
1
<?php
2
3
namespace Dynamic\Wishlist\Model;
4
5
use Dynamic\AdditionalFormFields\Form\CancelFormAction;
6
use Dynamic\ManageableDataObject\Interfaces\ManageableDataObjectInterface;
7
use Dynamic\ViewableDataObject\VDOInterfaces\ViewableDataObjectInterface;
8
use SilverStripe\Control\Controller;
9
use SilverStripe\Forms\FieldList;
10
use SilverStripe\Forms\FormAction;
11
use SilverStripe\Forms\RequiredFields;
12
use SilverStripe\ORM\DataObject;
13
use SilverStripe\Security\Member;
14
use SilverStripe\Security\Permission;
15
use SilverStripe\Security\PermissionProvider;
16
use SilverStripe\Security\Security;
17
18
/**
19
 * Class ProductWishList
20
 *
21
 * @property string $Title
22
 * @property bool $Private
23
 *
24
 * @property int $MemberID
25
 * @method Member $Member()
26
 *
27
 * @mixin \Dynamic\ViewableDataObject\Extensions\ViewableDataObject
28
 * @mixin \Dynamic\ManageableDataObject\Extensions\ManageableObjectExtension
29
 */
30
class ProductWishList extends DataObject implements PermissionProvider, ViewableDataObjectInterface, ManageableDataObjectInterface
31
{
32
33
    /**
34
     * @var string
35
     */
36
    private static $table_name = 'ProductWishList';
37
38
    /**
39
     * @var array
40
     */
41
    private static $db = [
42
        'Title' => 'Varchar(100)',
43
        'Private' => 'Boolean',
44
    ];
45
46
    /**
47
     * @var array
48
     */
49
    private static $has_one = [
50
        'Member' => Member::class,
51
    ];
52
53
    /**
54
     *
55
     */
56
    public function onBeforeWrite()
57
    {
58
        parent::onBeforeWrite();
59
60
        if (!$this->MemberID > 0) {
61
            $this->MemberID = Security::getCurrentUser()->ID;
62
        }
63
    }
64
65
    /**
66
     * @param array|null $params
67
     *
68
     * @return FieldList
69
     */
70
    public function getFrontEndFields($params = null)
71
    {
72
        $fields = parent::getFrontEndFields($params);
73
74
        $fields->removeByName([
75
            'MemberID',
76
            'MenuTitle',
77
            'URLSegment',
78
            'MetaTitle',
79
            'MetaDescription',
80
        ]);
81
82
        return $fields;
83
    }
84
85
    /**
86
     * @param bool $showCancel
87
     *
88
     * @return FieldList
89
     */
90
    public function getFrontEndActions($showCancel = false)
91
    {
92
        $processTitle = ($this->getIsEditing()) ? "Update {$this->i18n_singular_name()}" : "Create {$this->i18n_singular_name()}";
93
        $actions = FieldList::create(
94
            FormAction::create('doSaveObject')
95
                      ->setTitle($processTitle)
96
        );
97
98
        if ($showCancel === true) {
99
            $actions->insertBefore('action_doSaveObject', CancelFormAction::create('Cancel'));
100
        }
101
102
        $this->extend('updateFrontEndActions', $actions);
103
104
        return $actions;
105
    }
106
107
    /**
108
     * @return RequiredFields
109
     */
110
    public function getFrontEndRequiredFields()
111
    {
112
        $fields = RequiredFields::create([
113
            'Title',
114
        ]);
115
116
        $this->extend('updateFrontEndRequiredFields', $fields);
117
118
        return $fields;
119
    }
120
121
    /**
122
     * @return bool
123
     */
124
    public function getIsEditing()
125
    {
126
        $params = Controller::curr()->getRequest()->latestParams();
127
128
        return isset($params['Action']) && $params['Action'] == 'edit' && isset($params['ID']);
129
    }
130
131
    /**
132
     * set ParentPage for ViewableDataobject
133
     *
134
     * @return \SilverStripe\CMS\Model\SiteTree
135
     */
136
    public function getParentPage()
137
    {
138
        $class = $this->config()->get('listing_page_class');
139
        return $class::get()->first();
140
    }
141
142
    /**
143
     * @return String|bool
144
     */
145
    public function getUpdateLink()
146
    {
147
        return ($this->ID > 0) ? Controller::join_links($this->getParentPage()->Link(), 'edit', $this->ID) : false;
148
    }
149
150
    /**
151
     * set ViewAction for ViewableDataobject
152
     *
153
     * @return string
154
     */
155
    public function getViewAction()
156
    {
157
        return 'view';
158
    }
159
160
    /**
161
     * @return array
162
     */
163
    public function providePermissions()
164
    {
165
        return [
166
            'WishList_EDIT' => [
167
                'name' => 'Edit a Wish List',
168
                'category' => 'Wish List Permissions',
169
            ],
170
            'WishList_DELETE' => [
171
                'name' => 'Delete a Wish List',
172
                'category' => 'Wish List Permissions',
173
            ],
174
            'WishList_CREATE' => [
175
                'name' => 'Create a Wish List',
176
                'category' => 'Wish List Permissions',
177
            ],
178
            'WishList_VIEW' => [
179
                'name' => 'View a Wish List',
180
                'category' => 'Wish List Permissions',
181
            ],
182
        ];
183
    }
184
185
    /**
186
     * @param Member|null $member
187
     *
188
     * @return bool|int
189
     */
190
    public function canEdit($member = null)
191
    {
192
        $member = ($member === null) ? Security::getCurrentUser() : $member;
193
194
        return ((Permission::check('WishList_EDIT', 'any',
195
                        $member) && $member->ID == $this->MemberID) || Permission::check('ADMIN'));
196
    }
197
198
    /**
199
     * @param Member|null $member
200
     *
201
     * @return bool|int
202
     */
203
    public function canDelete($member = null)
204
    {
205
        $member = ($member === null) ? Security::getCurrentUser() : $member;
206
207
        return ((Permission::check('WishList_DELETE', 'any',
208
                        $member) && $member->ID == $this->MemberID) || Permission::check('ADMIN'));
209
    }
210
211
    /**
212
     * @param Member|null $member
213
     * @param array $context
214
     *
215
     * @return bool|int
216
     */
217
    public function canCreate($member = null, $context = array())
218
    {
219
        return Security::getCurrentUser() && Permission::check('WishList_CREATE', 'any', $member);
220
    }
221
222
    /**
223
     * @param Member|null $member
224
     *
225
     * @return bool
226
     */
227
    public function canView($member = null)
228
    {
229
        $member = ($member === null) ? Security::getCurrentUser() : $member;
230
231
        return (!$this->Private) || ((Permission::check('WishList_VIEW', 'any',
232
                        $member) && $member->ID == $this->MemberID) || Permission::check('ADMIN'));
233
    }
234
235
}
236