Passed
Pull Request — master (#6)
by Jason
03:27 queued 01:47
created

ProductExpirationManager::updateCMSFields()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 27
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 21
c 2
b 0
f 0
dl 0
loc 27
rs 9.584
cc 2
nc 2
nop 1
1
<?php
2
3
namespace Dynamic\Foxy\Inventory\Extension;
4
5
use Dynamic\Foxy\Inventory\Model\CartReservation;
6
use SilverStripe\Forms\CheckboxField;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\Forms\GridField\GridField;
9
use SilverStripe\Forms\GridField\GridFieldConfig_RecordViewer;
10
use SilverStripe\Forms\NumericField;
11
use SilverStripe\ORM\DataExtension;
12
use SilverStripe\ORM\ValidationResult;
13
14
class ProductExpirationManager extends DataExtension
15
{
16
    /**
17
     * @var array
18
     */
19
    private static $db = [
0 ignored issues
show
introduced by
The private property $db is not used, and could be removed.
Loading history...
20
        'CartExpiration' => 'Boolean',
21
        'ExpirationMinutes' => 'Int',
22
    ];
23
24
    /**
25
     * @var array
26
     */
27
    private static $has_many = [
0 ignored issues
show
introduced by
The private property $has_many is not used, and could be removed.
Loading history...
28
        'CartReservations' => CartReservation::class,
29
    ];
30
31
    /**
32
     * @param FieldList $fields
33
     */
34
    public function updateCMSFields(FieldList $fields)
35
    {
36
        $expirationFields = [
37
            CheckboxField::create('CartExpiration')
38
                ->setTitle('Cart Product Expiration'),
39
            $duration = NumericField::create('ExpirationMinutes')
40
                ->setTitle('Expiration In Minutes')
41
                ->setDescription(
42
                    "After the time listed above in minutes, this product will be removed from the user's cart"
43
                ),
44
        ];
45
        $duration->displayIf('CartExpiration')->isChecked()->end();
46
        if ($this->owner->CartReservations()->exists()) {
47
            $expirationGrid = GridField::create(
48
                'CartReservations',
49
                'Cart Reservations',
50
                $this->owner->CartReservations()
51
                    ->filter('Expires:GreaterThan', date('Y-m-d H:i:s', strtotime('now')))
52
                    ->sort('Created'),
53
                $cartResConfig = GridFieldConfig_RecordViewer::create()
54
            );
55
            $expirationGrid->displayIf('CartExpiration')->isChecked()->end();
56
            $expirationFields[] = $expirationGrid;
57
        }
58
        $fields->addFieldsToTab(
59
            'Root.Inventory',
60
            $expirationFields
61
        );
62
    }
63
64
    /**
65
     * @param ValidationResult $validationResult
66
     */
67
    public function validate(ValidationResult $validationResult)
68
    {
69
        if ($this->owner->CartExpiration && $this->owner->ExpirationMinutes < 1) {
70
            $validationResult
71
                ->addFieldError(
72
                    'ExpirationMinutes',
73
                    'You must set the "Expiration In Minutes" or disable "Cart Product Expiration"'
74
                );
75
        }
76
    }
77
}
78