Failed Conditions
Push — dev/test-plugins ( 7642aa )
by Kiyotaka
06:43
created

PreOrderIdValidator::commit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of EC-CUBE
5
 *
6
 * Copyright(c) LOCKON CO.,LTD. All Rights Reserved.
7
 *
8
 * http://www.lockon.co.jp/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Eccube\Service\PurchaseFlow\Processor;
15
16
use Eccube\Entity\ItemHolderInterface;
17
use Eccube\Entity\Order;
18
use Eccube\Service\CartService;
19
use Eccube\Service\PurchaseFlow\PurchaseContext;
20
use Eccube\Service\PurchaseFlow\PurchaseException;
21
use Eccube\Service\PurchaseFlow\PurchaseProcessor;
22
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
23
24
class PreOrderIdValidator implements PurchaseProcessor
25
{
26
    /**
27
     * @var CartService
28
     */
29
    private $cartService;
30
31
    /**
32
     * PreOrderIdValidator constructor.
33
     *
34
     * @param CartService $cartService
35
     */
36
    public function __construct(CartService $cartService)
37
    {
38
        $this->cartService = $cartService;
39
    }
40
41
    /**
42
     * 受注の仮確定処理を行います。
43
     *
44
     * @param ItemHolderInterface $target
45
     * @param PurchaseContext $context
46
     *
47
     * @throws PurchaseException
48
     */
49
    public function prepare(ItemHolderInterface $target, PurchaseContext $context)
50
    {
51
        // 処理なし
52
    }
53
54
    /**
55
     * 受注の確定処理を行います。
56
     *
57
     * @param ItemHolderInterface $target
58
     * @param PurchaseContext $context
59
     *
60
     * @throws PurchaseException
61
     */
62
    public function commit(ItemHolderInterface $target, PurchaseContext $context)
63
    {
64
        // 処理なし
65
    }
66
67
    /**
68
     * 仮確定した受注データの取り消し処理を行います。
69
     *
70
     * 別のorder_idが渡されてきた場合に処理が継続されないようにするため、
71
     * orderのpre_order_idがsessionのpre_order_idと一致するか確認する
72
     *
73
     * @param ItemHolderInterface $itemHolder
74
     * @param PurchaseContext $context
75
     */
76
    public function rollback(ItemHolderInterface $itemHolder, PurchaseContext $context)
77
    {
78
        // $itemHolderが受注の場合のみチェック
79
        if (!$itemHolder instanceof Order) {
80
            return;
81
        }
82
83
        $Cart = $this->cartService->getCart();
84
85
        // CartがなければBad Requestエラー
86
        if (!$Cart) {
87
            throw new BadRequestHttpException();
88
        }
89
90
        $cartPreOrderId = $this->cartService->getCart()->getPreOrderId();
91
        $orderPreOrderId = $itemHolder->getPreOrderId();
92
93
        // orderのpre_order_idがsessionのpre_order_idが一致していなければBad Requestエラー
94
        if ($cartPreOrderId != $orderPreOrderId) {
95
            throw new BadRequestHttpException();
96
        }
97
    }
98
}
99