Completed
Pull Request — master (#373)
by Nic
06:00
created

FoxyStripeSetting::getCheckoutTypes()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 7
rs 10
c 0
b 0
f 0
ccs 2
cts 2
cp 1
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Dynamic\FoxyStripe\Model;
4
5
use Dynamic\CountryDropdownField\Fields\CountryDropdownField;
6
use Dynamic\FoxyStripe\Admin\FoxyStripeAdmin;
7
use Psr\Log\LoggerInterface;
8
use SilverStripe\Control\Director;
9
use SilverStripe\Core\Injector\Injector;
10
use SilverStripe\Forms\CheckboxField;
11
use SilverStripe\Forms\DropdownField;
12
use SilverStripe\Forms\FieldList;
13
use SilverStripe\Forms\FormAction;
14
use SilverStripe\Forms\GridField\GridField;
15
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
16
use SilverStripe\Forms\HeaderField;
17
use SilverStripe\Forms\HiddenField;
18
use SilverStripe\Forms\LiteralField;
19
use SilverStripe\Forms\NumericField;
20
use SilverStripe\Forms\ReadonlyField;
21
use SilverStripe\Forms\Tab;
22
use SilverStripe\Forms\TabSet;
23
use SilverStripe\Forms\TextField;
24
use SilverStripe\ORM\DataObject;
25
use SilverStripe\ORM\DB;
26
use SilverStripe\ORM\ValidationException;
27
use SilverStripe\Security\Permission;
28
use SilverStripe\Security\PermissionProvider;
29
use SilverStripe\Security\Security;
30
use SilverStripe\View\TemplateGlobalProvider;
31
32
/**
33
 * Class FoxyStripeSetting
34
 * @package Dynamic\FoxyStripe\Model
35
 *
36
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreTitle
37
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreName
38
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreURL
39
 * @property \SilverStripe\ORM\FieldType\DBVarchar ReceiptURL
40
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreEmail
41
 * @property \SilverStripe\ORM\FieldType\DBVarchar FromEmail
42
 * @property \SilverStripe\ORM\FieldType\DBVarchar StorePostalCode
43
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreCountry
44
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreRegion
45
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreLocaleCode
46
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreLogoURL
47
 * @property \SilverStripe\ORM\FieldType\DBVarchar CheckoutType
48
 * @property \SilverStripe\ORM\FieldType\DBBoolean BccEmail
49
 * @property \SilverStripe\ORM\FieldType\DBBoolean UseWebhook
50
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreKey
51
 * @property \SilverStripe\ORM\FieldType\DBBoolean CartValidation
52
 * @property \SilverStripe\ORM\FieldType\DBBoolean UseSingleSignOn
53
 * @property \SilverStripe\ORM\FieldType\DBBoolean AllowMultiship
54
 * @property \SilverStripe\ORM\FieldType\DBVarchar StoreTimezone
55
 * @property \SilverStripe\ORM\FieldType\DBBoolean MultiGroup
56
 * @property \SilverStripe\ORM\FieldType\DBInt ProductLimit
57
 * @property \SilverStripe\ORM\FieldType\DBInt MaxQuantity
58
 * @property \SilverStripe\ORM\FieldType\DBVarchar client_id
59
 * @property \SilverStripe\ORM\FieldType\DBVarchar client_secret
60
 * @property \SilverStripe\ORM\FieldType\DBVarchar access_token
61
 * @property \SilverStripe\ORM\FieldType\DBVarchar refresh_token
62
 */
63
class FoxyStripeSetting extends DataObject implements PermissionProvider, TemplateGlobalProvider
64
{
65
    /**
66
     * @var string
67
     */
68
    private static $singular_name = 'FoxyStripe Setting';
0 ignored issues
show
introduced by
The private property $singular_name is not used, and could be removed.
Loading history...
69
70
    /**
71
     * @var string
72
     */
73
    private static $plural_name = 'FoxyStripe Settings';
0 ignored issues
show
introduced by
The private property $plural_name is not used, and could be removed.
Loading history...
74
75
    /**
76
     * @var string
77
     */
78
    private static $description = 'Update the settings for your store';
0 ignored issues
show
introduced by
The private property $description is not used, and could be removed.
Loading history...
79
80
    /**
81
     * @var array
82
     */
83
    private static $db = [
0 ignored issues
show
introduced by
The private property $db is not used, and could be removed.
Loading history...
84
        'StoreTitle' => 'Varchar(255)',
85
        'StoreName' => 'Varchar(255)',
86
        'CustomSSL' => 'Boolean',
87
        'RemoteDomain' => 'Varchar(255)',
88
        'StoreURL' => 'Varchar(255)',
89
        'ReceiptURL' => 'Varchar(255)',
90
        'StoreEmail' => 'Varchar(255)',
91
        'FromEmail' => 'Varchar(255)',
92
        'StorePostalCode' => 'Varchar(10)',
93
        'StoreCountry' => 'Varchar(100)',
94
        'StoreRegion' => 'Varchar(100)',
95
        'StoreLocaleCode' => 'Varchar(10)',
96
        'StoreLogoURL' => 'Varchar(255)',
97
        'CheckoutType' => 'Varchar(50)',
98
        'BccEmail' => 'Boolean',
99
        'UseWebhook' => 'Boolean',
100
        'StoreKey' => 'Varchar(60)',
101
        'CartValidation' => 'Boolean',
102
        'UseSingleSignOn' => 'Boolean',
103
        'AllowMultiship' => 'Boolean',
104
        'StoreTimezone' => 'Varchar(100)',
105
        'MultiGroup' => 'Boolean',
106
        'ProductLimit' => 'Int',
107
        'MaxQuantity' => 'Int',
108
        'EnableAPI' => 'Boolean',
109
        'client_id' => 'Varchar(255)',
110
        'client_secret' => 'Varchar(255)',
111
        'access_token' => 'Varchar(255)',
112
        'refresh_token' => 'Varchar(255)',
113
        'EnableSidecart' => 'Boolean',
114
    ];
115
116
    // Set Default values
117
    private static $defaults = [
0 ignored issues
show
introduced by
The private property $defaults is not used, and could be removed.
Loading history...
118
        'ProductLimit' => 10,
119
        'EnableSidecart' => 1,
120
    ];
121
122
    /**
123
     * @var string
124
     */
125
    private static $table_name = 'FoxyStripeSetting';
0 ignored issues
show
introduced by
The private property $table_name is not used, and could be removed.
Loading history...
126
127
    /**
128
     * Default permission to check for 'LoggedInUsers' to create or edit pages.
129
     *
130
     * @var array
131
     * @config
132
     */
133
    private static $required_permission = ['CMS_ACCESS_CMSMain', 'CMS_ACCESS_LeftAndMain'];
0 ignored issues
show
introduced by
The private property $required_permission is not used, and could be removed.
Loading history...
134
135
    /**
136
     * @return FieldList
137
     */
138 1
    public function getCMSFields()
139
    {
140 1
        $fields = FieldList::create(
141 1
            TabSet::create(
142 1
                'Root',
143 1
                $tabMain = Tab::create(
144 1
                    'Main'
145
                )
146
            ),
147 1
            HiddenField::create('ID')
148
        );
149 1
        $tabMain->setTitle('Settings');
150
151
        // settings tab
152 1
        $fields->addFieldsToTab('Root.Main', [
153
            // Store Details
154 1
            HeaderField::create('StoreDetails', _t('FoxyStripeSiteConfig.StoreDetails', 'Store Settings'), 3),
155 1
            LiteralField::create('DetailsIntro', _t(
156 1
                'FoxyStripeSiteConfig.DetailsIntro',
157 1
                '<p>Maps to data in your 
158
                        <a href="https://admin.foxycart.com/admin.php?ThisAction=EditStore" target="_blank">
159
                            FoxyCart store settings
160
                        </a>.'
161
            )),
162 1
            TextField::create('StoreTitle')
163 1
                ->setTitle(_t('FoxyStripeSiteConfig.StoreTitle', 'Store Name'))
164 1
                ->setDescription(_t(
165 1
                    'FoxyStripeSiteConfig.StoreTitleDescription',
166 1
                    'The name of your store as you\'d like it displayed to your customers'
167
                )),
168 1
            CheckboxField::create('CustomSSL', 'Use custom SSL'),
169 1
            TextField::create('RemoteDomain')
170 1
                ->setTitle(_t('FoxyStripeSiteConfig.RemoteDomain', 'Store Remote Domain'))
171 1
                ->setDescription(_t(
172 1
                    'FoxyStripeSiteConfig.RemoteDomainDescription',
173 1
                    'custom subdomain for FoxyCart'
174
                ))
175 1
                ->displayIf('CustomSSL')->isChecked()->end(),
176 1
            TextField::create('StoreName')
177 1
                ->setTitle(_t('FoxyStripeSiteConfig.StoreName', 'Store Domain'))
178 1
                ->setDescription(_t(
179 1
                    'FoxyStripeSiteConfig.StoreNameDescription',
180 1
                    'This is a unique FoxyCart subdomain for your cart, checkout, and receipt'
181
                ))
182 1
                ->hideIf('CustomSSL')->isChecked()->end(),
183 1
            TextField::create('StoreURL')
184 1
                ->setTitle(_t('FoxyStripeSiteConfig.StoreURL', 'Store URL'))
185 1
                ->setDescription(_t(
186 1
                    'FoxyStripeSiteConfig.StoreURLDescription',
187 1
                    'The URL of your online store'
188
                )),
189 1
            TextField::create('ReceiptURL')
190 1
                ->setTitle(_t('FoxyStripeSiteConfig.ReceiptURL', 'Receipt URL'))
191 1
                ->setDescription(_t(
192 1
                    'FoxyStripeSiteConfig.ReceiptURLDescription',
193 1
                    'By default, FoxyCart sends customers back to the page referrer after completing a purchase. 
194
                            Instead, you can set a specific URL here.'
195
                )),
196 1
            TextField::create('StoreEmail')
197 1
                ->setTitle(_t('FoxyStripeSiteConfig.StoreEmail', 'Store Email'))
198 1
                ->setDescription(_t(
199 1
                    'FoxyStripeSiteConfig.StoreEmailDescription',
200 1
                    'This is the email address of your store. By default, this will be the from address for your 
201
                            store receipts. '
202
                )),
203 1
            TextField::create('FromEmail')
204 1
                ->setTitle(_t('FoxyStripeSiteConfig.FromEmail', 'From Email'))
205 1
                ->setDescription(_t(
206 1
                    'FoxyStripeSiteConfig.FromEmailDescription',
207 1
                    'Used for when you want to specify a different from email than your store\'s email address'
208
                )),
209 1
            TextField::create('StorePostalCode', 'Postal Code'),
210 1
            CountryDropdownField::create('StoreCountry', 'Country'),
211 1
            TextField::create('StoreRegion', 'State/Region'),
212 1
            TextField::create('StoreLocaleCode', 'Locale Code')
213 1
                ->setDescription('example: en_US'),
214 1
            TextField::create('StoreTimezone', 'Store timezone'),
215 1
            TextField::create('StoreLogoURL', 'Logo URL')
216 1
                ->setAttribute('placeholder', 'http://'),
217
        ]);
218
219 1
        $fields->addFieldsToTab('Root.Advanced', [
220 1
            HeaderField::create('AdvanceHeader', _t(
221 1
                'FoxyStripeSiteConfig.AdvancedHeader',
222 1
                'Advanced Settings'
223 1
            ), 3),
224 1
            LiteralField::create('AdvancedIntro', _t(
225 1
                'FoxyStripeSiteConfig.AdvancedIntro',
226 1
                '<p>Maps to data in your 
227
                    <a href="https://admin.foxycart.com/admin.php?ThisAction=EditAdvancedFeatures" target="_blank">
228
                        FoxyCart advanced store settings
229
                    </a>.</p>'
230
            )),
231 1
            DropdownField::create('CheckoutType', 'Checkout Type', $this->getCheckoutTypes()),
232 1
            CheckboxField::create('BccEmail', 'BCC Admin Email')
233 1
                ->setDescription('bcc all receipts to store\'s email address'),
234 1
            CheckboxField::create('UseWebhook', 'Use Webhook')
235 1
                ->setDescription('record order history in CMS, allows customers to view their order history'),
236 1
            ReadonlyField::create('WebhookURL', 'Webhook URL', self::getDataFeedLink()),
237 1
            ReadonlyField::create('StoreKey', 'Webhook Key', self::getDataFeedLink()),
238 1
            CheckboxField::create('CartValidation', 'Use cart validation'),
239 1
            CheckboxField::create('UseSingleSignOn', 'Use single sign on')
240 1
                ->setDescription('Sync user accounts between FoxyCart and your website'),
241 1
            ReadonlyField::create('SingleSignOnURL', 'Single sign on URL', self::getSSOLink()),
242 1
            CheckboxField::create('AllowMultiship', 'Allow multiple shipments per order'),
243
        ]);
244
245
        // configuration warning
246 1
        if (FoxyCart::store_name_warning() !== null) {
247
            $fields->insertBefore(LiteralField::create(
248
                'StoreSubDomainHeaderWarning',
249
                _t(
250
                    'FoxyStripeSiteConfig.StoreSubDomainHeadingWarning',
251
                    '<p class="message error">Store Domain must be entered below
252
                        </a></p>'
253
                )
254
            ), 'StoreDetails');
255
        }
256
257
        // products tab
258 1
        $fields->addFieldsToTab('Root.Products', [
259 1
            HeaderField::create('ProductHeader', _t(
260 1
                'FoxyStripeSiteConfig.ProductHeader',
261 1
                'Products'
262 1
            ), 3),
263 1
            CheckboxField::create('MultiGroup')
264 1
                ->setTitle(_t('FoxyStripeSiteConfig.MultiGroup', 'Multiple Groups'))
265 1
                ->setDescription(_t(
266 1
                    'FoxyStripeSiteConfig.MultiGroupDescription',
267 1
                    'Allows products to be shown in multiple Product Groups'
268
                )),
269 1
            HeaderField::create('ProductGroupHD', _t(
270 1
                'FoxyStripeSiteConfig.ProductGroupHD',
271 1
                'Product Groups'
272 1
            ), 3),
273 1
            NumericField::create('ProductLimit')
274 1
                ->setTitle(_t('FoxyStripeSiteConfig.ProductLimit', 'Products per Page'))
275 1
                ->setDescription(_t(
276 1
                    'FoxyStripeSiteConfig.ProductLimitDescription',
277 1
                    'Number of Products to show per page on a Product Group'
278
                )),
279 1
            HeaderField::create('ProductQuantityHD', _t(
280 1
                'FoxyStripeSiteConfig.ProductQuantityHD',
281 1
                'Product Form Max Quantity'
282 1
            ), 3),
283 1
            NumericField::create('MaxQuantity')
284 1
                ->setTitle(_t('FoxyStripeSiteConfig.MaxQuantity', 'Max Quantity'))
285 1
                ->setDescription(_t(
286 1
                    'FoxyStripeSiteConfig.MaxQuantityDescription',
287 1
                    'Sets max quantity for product form dropdown (add to cart form - default 10)'
288
                )),
289
        ]);
290
291
        // categories tab
292 1
        $fields->addFieldsToTab('Root.Categories', [
293 1
            HeaderField::create('CategoryHD', _t('FoxyStripeSiteConfig.CategoryHD', 'FoxyStripe Categories'), 3),
294 1
            LiteralField::create('CategoryDescrip', _t(
295 1
                'FoxyStripeSiteConfig.CategoryDescrip',
296 1
                '<p>FoxyCart Categories offer a way to give products additional behaviors that cannot be 
297
                        accomplished by product options alone, including category specific coupon codes, 
298
                        shipping and handling fees, and email receipts. 
299
                        <a href="https://wiki.foxycart.com/v/2.0/categories" target="_blank">
300
                            Learn More
301
                        </a></p>
302
                        <p>Categories you\'ve created in FoxyStripe must also be created in your 
303
                            <a href="https://admin.foxycart.com/admin.php?ThisAction=ManageProductCategories" 
304
                                target="_blank">FoxyCart Categories</a> admin panel.</p>'
305
            )),
306 1
            GridField::create(
307 1
                'ProductCategory',
308 1
                _t('FoxyStripeSiteConfig.ProductCategory', 'FoxyCart Categories'),
309 1
                ProductCategory::get(),
310 1
                GridFieldConfig_RecordEditor::create()
311
            ),
312
        ]);
313
314
        // option groups tab
315 1
        $fields->addFieldsToTab('Root.Groups', [
316 1
            HeaderField::create('OptionGroupsHead', _t('FoxyStripeSiteConfig', 'Product Option Groups'), 3),
317 1
            LiteralField::create('OptionGroupsDescrip', _t(
318 1
                'FoxyStripeSiteConfig.OptionGroupsDescrip',
319 1
                '<p>Product Option Groups allow you to name a set of product options.</p>'
320
            )),
321 1
            GridField::create(
322 1
                'OptionGroup',
323 1
                _t('FoxyStripeSiteConfig.OptionGroup', 'Product Option Groups'),
324 1
                OptionGroup::get(),
325 1
                GridFieldConfig_RecordEditor::create()
326
            ),
327
        ]);
328
329
        // api tab
330 1
        if (Permission::check('ADMIN')) {
331 1
            $fields->addFieldsToTab('Root.API', [
332 1
                HeaderField::create('APIHD', 'FoxyCart API Settings', 3),
333 1
                CheckboxField::create('EnableAPI', 'Enable FoxyCart API'),
334 1
                TextField::create('client_id', 'FoxyCart Client ID'),
335 1
                TextField::create('client_secret', 'FoxyCart Client Secret'),
336 1
                TextField::create('access_token', 'FoxyCart Access Token'),
337 1
                TextField::create('refresh_token', 'FoxyCart Refresh Token'),
338
            ]);
339
        }
340
341 1
        $fields->addFieldsToTab('Root.Template', [
342 1
            HeaderField::create('TemplateHD', _t('FoxyStripeSiteConfig.TemplateHD', 'Template Options'), 3),
343 1
            CheckboxField::create('EnableSidecart')
344 1
                ->setDescription('Turns on the Sidebar cart. Uncheck to use the full page cart.'),
345
        ]);
346
347 1
        $this->extend('updateCMSFields', $fields);
348
349 1
        return $fields;
350
    }
351
352
    /**
353
     * @return FieldList
354
     */
355
    public function getCMSActions()
356
    {
357
        if (Permission::check('ADMIN') || Permission::check('EDIT_FOXYSTRIPE_SETTING')) {
358
            $actions = new FieldList(
359
                FormAction::create('save_foxystripe_setting', _t('FoxyStripeSetting.SAVE', 'Save'))
360
                    ->addExtraClass('btn-primary font-icon-save')
361
            );
362
        } else {
363
            $actions = FieldList::create();
364
        }
365
        $this->extend('updateCMSActions', $actions);
366
367
        return $actions;
368
    }
369
370
    /**
371
     * @throws \SilverStripe\ORM\ValidationException
372
     */
373 3
    public function requireDefaultRecords()
374
    {
375 3
        parent::requireDefaultRecords();
376 3
        $config = self::current_foxystripe_setting();
377
378 3
        if (!$config) {
0 ignored issues
show
introduced by
$config is of type Dynamic\FoxyStripe\Model\FoxyStripeSetting, thus it always evaluated to true.
Loading history...
379
            self::make_foxystripe_setting();
380
            DB::alteration_message('Added default FoxyStripe Setting', 'created');
381
        }
382
383 3
        if (!$config->StoreKey) {
384 3
            $key = FoxyCart::setStoreKey();
385 3
            while (!ctype_alnum($key)) {
386
                $key = FoxyCart::setStoreKey();
387
            }
388 3
            $config->StoreKey = $key;
0 ignored issues
show
Documentation Bug introduced by
It seems like $key of type string is incompatible with the declared type SilverStripe\ORM\FieldType\DBVarchar of property $StoreKey.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
389 3
            $config->write();
390 3
            DB::alteration_message('Created FoxyCart Store Key ' . $key, 'created');
391
        }
392
    }
393
394
    /**
395
     * @return string
396
     */
397
    public function CMSEditLink()
398
    {
399
        return FoxyStripeAdmin::singleton()->Link();
400
    }
401
402
    /**
403
     * @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...
404
     *
405
     * @return bool|int|null
406
     */
407
    public function canEdit($member = null)
408
    {
409
        if (!$member) {
0 ignored issues
show
introduced by
$member is of type null, thus it always evaluated to false.
Loading history...
410
            $member = Security::getCurrentUser();
411
        }
412
413
        $extended = $this->extendedCan('canEdit', $member);
414
        if ($extended !== null) {
415
            return $extended;
416
        }
417
418
        return Permission::checkMember($member, 'EDIT_FOXYSTRIPE_SETTING');
419
    }
420
421
    /**
422
     * @return array
423
     */
424
    public function providePermissions()
425
    {
426
        return [
427
            'EDIT_FOXYSTRIPE_SETTING' => [
428
                'name' => _t(
429
                    'FoxyStripeSetting.EDIT_FOXYSTRIPE_SETTING',
430
                    'Manage FoxyStripe settings'
431
                ),
432
                'category' => _t(
433
                    'Permissions.PERMISSIONS_FOXYSTRIPE_SETTING',
434
                    'FoxyStripe'
435
                ),
436
                'help' => _t(
437
                    'FoxyStripeSetting.EDIT_PERMISSION_FOXYSTRIPE_SETTING',
438
                    'Ability to edit the settings of a FoxyStripe Store.'
439
                ),
440
                'sort' => 400,
441
            ],
442
        ];
443
    }
444
445
    /**
446
     * Get the current sites {@link GlobalSiteSetting}, and creates a new one
447
     * through {@link make_global_config()} if none is found.
448
     *
449
     * @return FoxyStripeSetting|DataObject
450
     * @throws \SilverStripe\ORM\ValidationException
451
     */
452 49
    public static function current_foxystripe_setting()
453
    {
454 49
        if ($config = self::get()->first()) {
455 49
            return $config;
456
        }
457
458 9
        return self::make_foxystripe_setting();
459
    }
460
461
    /**
462
     * Create {@link GlobalSiteSetting} with defaults from language file.
463
     *
464
     * @return static
465
     */
466 9
    public static function make_foxystripe_setting()
467
    {
468 9
        $config = self::create();
469
        try {
470 9
            $config->write();
471
        } catch (ValidationException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
472
        }
473
474 9
        return $config;
475
    }
476
477
    /**
478
     * Add $GlobalConfig to all SSViewers.
479
     */
480
    public static function get_template_global_variables()
481
    {
482
        return [
483
            'FoxyStripe' => 'current_foxystripe_setting',
484
        ];
485
    }
486
487
    /**
488
     * @return string
489
     */
490 2
    private static function getSSOLink()
491
    {
492 2
        return Director::absoluteBaseURL() . 'foxystripe/sso/';
493
    }
494
495
    /**
496
     * @return string
497
     */
498 2
    private static function getDataFeedLink()
499
    {
500 2
        return Director::absoluteBaseURL() . 'foxystripe/';
501
    }
502
503
    /**
504
     * @return array
505
     */
506 1
    public function getCheckoutTypes()
507
    {
508
        return [
509 1
            'default_account' => 'Allow guest and customer accounts, default to account',
510
            'default_guest' => 'Allow guest and customer accounts, default to guest',
511
            'account_only' => 'Allow customer accounts only',
512
            'guest_only' => 'Allow guests only',
513
        ];
514
    }
515
516
    /**
517
     * @return array
518
     */
519 1
    public function getDataMap()
520
    {
521
        return [
522 1
            'store_name' => $this->StoreTitle,
523 1
            'store_domain' => $this->StoreName,
524 1
            'store_url' => $this->StoreURL,
525 1
            'receipt_continue_url' => $this->ReceiptURL,
526 1
            'store_email' => $this->StoreEmail,
527 1
            'from_email' => $this->FromEmail,
528 1
            'postal_code' => $this->StorePostalCode,
529 1
            'country' => $this->StoreCountry,
530 1
            'region' => $this->StoreRegion,
531 1
            'locale_code' => $this->StoreLocaleCode,
532 1
            'logo_url' => $this->StoreLogoURL,
533 1
            'checkout_type' => $this->CheckoutType,
534 1
            'bcc_on_receipt_email' => $this->BccEmail,
535 1
            'use_webhook' => $this->UseWebhook,
536 1
            'webhook_url' => $this->getDataFeedLink(),
537 1
            'webhook_key' => $this->StoreKey,
538 1
            'use_cart_validation' => $this->CartValidation,
539 1
            'use_single_sign_on' => $this->UseSingleSignOn,
540 1
            'single_sign_on_url' => $this->getSSOLink(),
541
            //'customer_password_hash_type' => 'sha1_salted_suffix',
0 ignored issues
show
Unused Code Comprehensibility introduced by
67% 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...
542
            //'customer_password_hash_config' => 40,
0 ignored issues
show
Unused Code Comprehensibility introduced by
67% 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...
543 1
            'features_multiship' => $this->AllowMultiship,
544
            //'timezone' => $this->StoreTimezone,
0 ignored issues
show
Unused Code Comprehensibility introduced by
63% 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...
545
        ];
546
    }
547
548
    /**
549
     * @return \SilverStripe\ORM\ValidationResult
550
     * @throws ValidationException
551
     */
552 3
    public function validate()
553
    {
554 3
        $message = parent::validate();
555
556
        /*if ($this->UseSingleSignOn && !FoxyStripeClient::is_valid()) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
65% 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...
557
            $message->addError('You must provide the API Integration Settings before using Single Sign On');
558
        }//*/
559
560 3
        return $message;
561
    }
562
563
    /**
564
     * if StoreTitle is empty, grab values from FoxyCart.
565
     *
566
     * example of 2 way sync for future reference
567
     *
568
     * @throws \Psr\Container\NotFoundExceptionInterface
569
     */
570 11
    public function onBeforeWrite()
571
    {
572 11
        parent::onBeforeWrite();
573
574 11
        if ($this->ID && !$this->StoreTitle && $this->access_token) {
0 ignored issues
show
Unused Code introduced by
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
575
            /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
56% 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...
576
            if ($fc = new FoxyStripeClient()) {
577
                $client = $fc->getClient();
578
                $errors = [];
579
580
                $result = $client->get($fc->getCurrentStore());
581
                $this->owner->StoreTitle = $result['store_name'];
582
583
                $errors = array_merge($errors, $client->getErrors($result));
584
                if (count($errors)) {
585
                    Injector::inst()->get(LoggerInterface::class)
586
                        ->error('FoxyStripeSiteConfig::onBeforeWrite errors - ' . json_encode($errors));
587
                }
588
            }
589
            */
590
        }
591
    }
592
593
    /**
594
     * @throws \SilverStripe\ORM\ValidationException
595
     */
596 11
    public function onAfterWrite()
597
    {
598 11
        parent::onAfterWrite();
599
600 11
        if (FoxyStripeClient::is_valid() && $this->isChanged()) {
601
            if ($fc = new FoxyStripeClient()) {
0 ignored issues
show
Unused Code introduced by
The assignment to $fc is dead and can be removed.
Loading history...
Unused Code introduced by
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
602
                //$fc->updateStore($this->getDataMap());
0 ignored issues
show
Unused Code Comprehensibility introduced by
82% 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...
603
            }
604
        }
605
    }
606
}
607