Completed
Pull Request — master (#12)
by Nic
13:56
created

ProductPageDataExtension::updateCMSFields()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 24
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

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