Location::fieldLabels()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
c 0
b 0
f 0
dl 0
loc 10
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Dynamic\Locator;
4
5
use Dynamic\Locator\Model\LocationCategory;
6
use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter;
7
use SilverStripe\ORM\DataObject;
8
use SilverStripe\ORM\ManyManyList;
9
use SilverStripe\Security\PermissionProvider;
10
use SilverStripe\Forms\FieldList;
11
use SilverStripe\Forms\EmailField;
12
use SilverStripe\Security\Permission;
13
use Symbiote\GridFieldExtensions\GridFieldAddExistingSearchButton;
14
15
/**
16
 * Class Location
17
 *
18
 * @property string $Title
19
 * @property bool $Featured
20
 * @property string $Website
21
 * @property string $Phone
22
 * @property string $Email
23
 * @property string $EmailAddress
24
 * @property string $Fax
25
 * @property int $Import_ID
26
 *
27
 * @method ManyManyList Categories
28
 */
29
class Location extends DataObject implements PermissionProvider
30
{
31
    /**
32
     * @var string
33
     */
34
    private static $singular_name = 'Location';
0 ignored issues
show
introduced by
The private property $singular_name is not used, and could be removed.
Loading history...
35
36
    /**
37
     * @var string
38
     */
39
    private static $plural_name = 'Locations';
0 ignored issues
show
introduced by
The private property $plural_name is not used, and could be removed.
Loading history...
40
41
    /**
42
     * @var array
43
     */
44
    private static $db = [
0 ignored issues
show
introduced by
The private property $db is not used, and could be removed.
Loading history...
45
        'Title' => 'Varchar(255)',
46
        'Featured' => 'Boolean',
47
        'Website' => 'Varchar(255)',
48
        'Phone' => 'Varchar(40)',
49
        'Email' => 'Varchar(255)',
50
        'Fax' => 'Varchar(45)',
51
        'Import_ID' => 'Int',
52
    ];
53
54
    private static $many_many = [
0 ignored issues
show
introduced by
The private property $many_many is not used, and could be removed.
Loading history...
55
        'Categories' => LocationCategory::class,
56
    ];
57
58
    /**
59
     * @var string
60
     */
61
    private static $table_name = 'Location';
0 ignored issues
show
introduced by
The private property $table_name is not used, and could be removed.
Loading history...
62
63
    /**
64
     * @var array
65
     */
66
    private static $casting = [
0 ignored issues
show
introduced by
The private property $casting is not used, and could be removed.
Loading history...
67
        'distance' => 'Decimal(9,3)',
68
    ];
69
70
    /**
71
     * @var string
72
     */
73
    private static $default_sort = 'Title';
0 ignored issues
show
introduced by
The private property $default_sort is not used, and could be removed.
Loading history...
74
75
    /**
76
     * api access via Restful Server module
77
     *
78
     * @var bool
79
     */
80
    private static $api_access = true;
0 ignored issues
show
introduced by
The private property $api_access is not used, and could be removed.
Loading history...
81
82
    /**
83
     * search fields for Model Admin
84
     *
85
     * @var array
86
     */
87
    private static $searchable_fields = [
0 ignored issues
show
introduced by
The private property $searchable_fields is not used, and could be removed.
Loading history...
88
        'Title',
89
        'Address',
90
        'City',
91
        'State',
92
        'PostalCode',
93
        'Country',
94
        'Website',
95
        'Phone',
96
        'Email',
97
        'Featured',
98
    ];
99
100
    /**
101
     * columns for grid field
102
     *
103
     * @var array
104
     */
105
    private static $summary_fields = [
0 ignored issues
show
introduced by
The private property $summary_fields is not used, and could be removed.
Loading history...
106
        'Title',
107
        'Address',
108
        'Address2',
109
        'City',
110
        'State',
111
        'PostalCode',
112
        'CountryCode',
113
        'Phone' => 'Phone',
114
        'Fax' => 'Fax',
115
        'Email' => 'Email',
116
        'Website' => 'Website',
117
        'Featured',
118
        'CategoryList',
119
        'Lat',
120
        'Lng',
121
        'Import_ID',
122
    ];
123
124
    /**
125
     * Coords status for $summary_fields
126
     *
127
     * @return string
128
     */
129
    public function getCoords()
130
    {
131
        return ($this->Lat != 0 && $this->Lng != 0) ? 'true' : 'false';
0 ignored issues
show
Bug Best Practice introduced by
The property Lat does not exist on Dynamic\Locator\Location. Since you implemented __get, consider adding a @property annotation.
Loading history...
Bug Best Practice introduced by
The property Lng does not exist on Dynamic\Locator\Location. Since you implemented __get, consider adding a @property annotation.
Loading history...
Bug Best Practice introduced by
It seems like you are loosely comparing $this->Lng of type mixed|null to 0; this is ambiguous as not only 0 == 0 is true, but null == 0 is true, too. Consider using a strict comparison ===.
Loading history...
Bug Best Practice introduced by
It seems like you are loosely comparing $this->Lat of type mixed|null to 0; this is ambiguous as not only 0 == 0 is true, but null == 0 is true, too. Consider using a strict comparison ===.
Loading history...
132
    }
133
134
    /**
135
     * @return string
136
     */
137
    public function getCategoryList()
138
    {
139
        if ($this->Categories()->count()) {
140
            return implode(', ', $this->Categories()->column('Name'));
141
        }
142
143
        return '';
144
    }
145
146
    /**
147
     * @return bool|string
148
     */
149
    public function getCountryCode()
150
    {
151
        if ($this->Country) {
0 ignored issues
show
Bug Best Practice introduced by
The property Country does not exist on Dynamic\Locator\Location. Since you implemented __get, consider adding a @property annotation.
Loading history...
152
            return strtoupper($this->Country);
153
        }
154
155
        return false;
156
    }
157
158
    /**
159
     * custom labels for fields
160
     *
161
     * @param bool $includerelations
162
     * @return array|string
163
     */
164
    public function fieldLabels($includerelations = true)
165
    {
166
        $labels = parent::fieldLabels($includerelations);
167
        $labels['Title'] = 'Name';
168
        $labels['Address2'] = 'Address 2';
169
        $labels['PostalCode'] = 'Postal Code';
170
        $labels['Categories.Name'] = 'Categories';
171
        $labels['Featured.NiceAsBoolean'] = 'Featured';
172
173
        return $labels;
174
    }
175
176
    /**
177
     * @return FieldList
178
     */
179
    public function getCMSFields()
180
    {
181
        $this->beforeUpdateCMSFields(function ($fields) {
182
            $fields->removeByName([
183
                'Import_ID',
184
                'LinkTracking',
185
                'FileTracking',
186
            ]);
187
188
            $fields->dataFieldByName('Website')
189
                ->setAttribute('placeholder', 'http://');
190
191
            $fields->replaceField('Email', EmailField::create('Email'));
192
193
            $featured = $fields->dataFieldByName('Featured')
194
                ->setDescription('Location will display near the top of the results list');
195
            $fields->insertAfter(
196
                'Fax',
197
                $featured
198
            );
199
200
            if ($this->ID) {
201
                $categories = $fields->dataFieldByName('Categories');
202
                $config = $categories->getConfig();
203
                $config->removeComponentsByType([
204
                    GridFieldAddExistingAutocompleter::class,
205
                ])
206
                    ->addComponents([
207
                        new GridFieldAddExistingSearchButton(),
208
                    ]);
209
            }
210
        });
211
212
        $fields = parent::getCMSFields();
213
214
        // allow to be extended via DataExtension
215
        $this->extend('updateLocationFields', $fields);
216
217
        return $fields;
218
    }
219
220
    /**
221
     * @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...
222
     * @param array $context
223
     * @return bool
224
     */
225
    public function canView($member = null, $context = [])
0 ignored issues
show
Unused Code introduced by
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

225
    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...
226
    {
227
        return true;
228
    }
229
230
    /**
231
     * @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...
232
     * @param array $context
233
     * @return bool|int
234
     */
235
    public function canEdit($member = null, $context = [])
0 ignored issues
show
Unused Code introduced by
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

235
    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...
236
    {
237
        return Permission::check('Location_EDIT', 'any', $member);
238
    }
239
240
    /**
241
     * @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...
242
     * @param array $context
243
     * @return bool|int
244
     */
245
    public function canDelete($member = null, $context = [])
0 ignored issues
show
Unused Code introduced by
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

245
    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...
246
    {
247
        return Permission::check('Location_DELETE', 'any', $member);
248
    }
249
250
    /**
251
     * @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...
252
     * @param array $context
253
     * @return bool|int
254
     */
255
    public function canCreate($member = null, $context = [])
256
    {
257
        return Permission::check('Location_CREATE', 'any', $member);
258
    }
259
260
    /**
261
     * @return array
262
     */
263
    public function providePermissions()
264
    {
265
        return [
266
            'Location_EDIT' => 'Edit a Location',
267
            'Location_DELETE' => 'Delete a Location',
268
            'Location_CREATE' => 'Create a Location',
269
        ];
270
    }
271
272
    /**
273
     * @return string
274
     */
275
    public function getWebsiteURL()
276
    {
277
        $url = $this->Website;
278
279
        $this->extend('updateWebsiteURL', $url);
280
281
        return $url;
282
    }
283
}
284