Completed
Push — master ( 002f4d...61bfd8 )
by Matthew
22:24 queued 07:35
created

src/Extension/ProductPageControllerExtension.php (2 issues)

1
<?php
2
3
namespace Dynamic\FoxyStripe\Extension;
4
5
use Dynamic\FoxyStripe\Model\ProductCartReservation;
6
use Dynamic\FoxyStripe\Page\ProductPage;
7
use SilverStripe\Control\Controller;
8
use SilverStripe\Control\HTTPRequest;
9
use SilverStripe\Core\Extension;
10
use SilverStripe\Dev\Debug;
11
use SilverStripe\ORM\FieldType\DBDatetime;
12
use SilverStripe\View\Requirements;
13
14
/**
15
 * Class ProductPageControllerExtension
16
 * @package Dynamic\Sheeps\ProductCartExpiry\Extension
17
 */
18
class ProductPageControllerExtension extends Extension
19
{
20
    /**
21
     *
22
     */
23
    public function onAfterInit()
24
    {
25
        Requirements::javascript('dynamic/foxystripe-inventory: client/dist/javascript/scripts.min.js');
26
    }
27
28
    /**
29
     * @var array
30
     */
31
    private static $allowed_actions = [
0 ignored issues
show
The private property $allowed_actions is not used, and could be removed.
Loading history...
32
        'reserveproduct' => '->validReservation',
33
    ];
34
35
    /**
36
     * @param HTTPRequest|null $request
37
     * @return bool
38
     */
39
    public function validReservation(HTTPRequest $request = null)
40
    {
41
        if (!$request instanceof HTTPRequest) {
42
            $request = Controller::curr()->getRequest();
0 ignored issues
show
The assignment to $request is dead and can be removed.
Loading history...
43
        }
44
45
46
        return true;
47
    }
48
49
    /**
50
     * @param HTTPRequest $request
51
     */
52
    public function reserveproduct(HTTPRequest $request)
53
    {
54
        $code = $request->getVar('code');
55
        $id = $request->getVar('id');
56
        $expires = $request->getVar('expires');
57
58
        if (!$code || !$id || !$expires) {
59
            return false;
60
        }
61
62
        if (!$this->isProductReserved($code, $id, $expires)) {
63
            $this->addProductReservation($code, $id, $expires);
64
        }
65
    }
66
67
    /**
68
     * @param $code
69
     * @param $id
70
     * @param $expires
71
     * @return bool
72
     * @throws \SilverStripe\ORM\ValidationException
73
     */
74
    protected function addProductReservation($code, $id, $expires)
75
    {
76
        $product = ProductPage::get()->filter('Code', $code)->first();
77
78
        $reservation = ProductCartReservation::create();
79
        $reservation->ReservationCode = $this->getReservationHash($code, $id, $expires);
80
        $reservation->CartProductID = $id;
81
        $reservation->Code = $code;
82
        $reservation->Expires = date('Y-m-d H:i:s', $expires);
83
        if ($product !== null) {
84
            $reservation->ProductID = $product->ID;
85
        }
86
87
        return $reservation->write() > 0;
88
    }
89
90
    /**
91
     * @param $code
92
     * @param $id
93
     * @param $expires
94
     * @return \SilverStripe\ORM\DataObject
95
     */
96
    protected function isProductReserved($code, $id, $expires)
97
    {
98
        return ProductCartReservation::get()->filter('ReservationCode', $this->getReservationHash($code, $id, $expires))->first();
99
    }
100
101
    /**
102
     * @param $code
103
     * @param $id
104
     * @param $expires
105
     * @return string
106
     */
107
    protected function getReservationHash($code, $id, $expires)
108
    {
109
        return md5($code.$id.$expires);
110
    }
111
}
112