CartController::up()   A
last analyzed

Complexity

Conditions 4
Paths 18

Size

Total Lines 58
Code Lines 30

Duplication

Lines 58
Ratio 100 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
cc 4
eloc 30
nc 18
nop 3
dl 58
loc 58
rs 9.0077
c 0
b 0
f 0
ccs 0
cts 0
cp 0
crap 20

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/*
3
 * This file is part of EC-CUBE
4
 *
5
 * Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved.
6
 *
7
 * http://www.lockon.co.jp/
8
 *
9
 * This program is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU General Public License
11
 * as published by the Free Software Foundation; either version 2
12
 * of the License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with this program; if not, write to the Free Software
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
 */
23
24
25
namespace Eccube\Controller;
26
27
use Eccube\Application;
28
use Eccube\Event\EccubeEvents;
29
use Eccube\Event\EventArgs;
30
use Eccube\Exception\CartException;
31
use Symfony\Component\HttpFoundation\Request;
32
33 1
class CartController extends AbstractController
0 ignored issues
show
introduced by
Missing class doc comment
Loading history...
34
{
35
    /**
36
     * カート画面.
37
     *
38
     * @param Application $app
39
     * @param Request $request
0 ignored issues
show
introduced by
Expected 5 spaces after parameter type; 1 found
Loading history...
40
     * @return \Symfony\Component\HttpFoundation\Response
41 1
     */
42 1
    public function index(Application $app, Request $request)
43 1
    {
44
        $Cart = $app['eccube.service.cart']->getCart();
45
46
        // FRONT_CART_INDEX_INITIALIZE
47
        $event = new EventArgs(
48
            array(),
49
            $request
50
        );
51
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_INDEX_INITIALIZE, $event);
52
53
        /* @var $BaseInfo \Eccube\Entity\BaseInfo */
54
        /* @var $Cart \Eccube\Entity\Cart */
55
        $BaseInfo = $app['eccube.repository.base_info']->get();
56
57
        $isDeliveryFree = false;
58
        $least = 0;
59
        $quantity = 0;
60
        if ($BaseInfo->getDeliveryFreeAmount()) {
61
            if ($BaseInfo->getDeliveryFreeAmount() <= $Cart->getTotalPrice()) {
62
                // 送料無料(金額)を超えている
63 1
                $isDeliveryFree = true;
64
            } else {
65
                $least = $BaseInfo->getDeliveryFreeAmount() - $Cart->getTotalPrice();
66
            }
67
        }
68
69 1
        if ($BaseInfo->getDeliveryFreeQuantity()) {
70
            if ($BaseInfo->getDeliveryFreeQuantity() <= $Cart->getTotalQuantity()) {
71 1
                // 送料無料(個数)を超えている
72
                $isDeliveryFree = true;
73 1
            } else {
74
                $quantity = $BaseInfo->getDeliveryFreeQuantity() - $Cart->getTotalQuantity();
75
            }
76
        }
77
78
        // FRONT_CART_INDEX_COMPLETE
79
        $event = new EventArgs(
80
            array(),
81 1
            $request
82
        );
83
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_INDEX_COMPLETE, $event);
84 1
85
        if ($event->hasResponse()) {
86 1
            return $event->getResponse();
87
        }
88
89
        return $app->render(
90
            'Cart/index.twig',
91
            array(
92
                'Cart' => $Cart,
93
                'least' => $least,
94 1
                'quantity' => $quantity,
95
                'is_delivery_free' => $isDeliveryFree,
96
            )
97 1
        );
98
    }
99 1
100
    /**
101
     * カートに商品を追加する.
102
     *
103
     * @param Application $app
104
     * @param Request $request
0 ignored issues
show
introduced by
Expected 5 spaces after parameter type; 1 found
Loading history...
105
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
106
     */
107 1
    public function add(Application $app, Request $request)
108
    {
109
        $productClassId = $request->get('product_class_id');
110 1
        $quantity = $request->request->has('quantity') ? $request->get('quantity') : 1;
111
112 1
        // FRONT_CART_ADD_INITIALIZE
113
        $event = new EventArgs(
114
            array(
115
                'productClassId' => $productClassId,
116
                'quantity' => $quantity,
117
            ),
118
            $request
119 1
        );
120
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_ADD_INITIALIZE, $event);
121 1
122
        try {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
123
124
            $productClassId = $event->getArgument('productClassId');
125
            $quantity = $event->getArgument('quantity');
126
127
            log_info('カート追加処理開始', array('product_class_id' => $productClassId, 'quantity' => $quantity));
128 1
129
            $app['eccube.service.cart']->addProduct($productClassId, $quantity)->save();
130
131
            log_info('カート追加処理完了', array('product_class_id' => $productClassId, 'quantity' => $quantity));
132
133
            // FRONT_CART_ADD_COMPLETE
134
            $event = new EventArgs(
135
                array(
136
                    'productClassId' => $productClassId,
137
                    'quantity' => $quantity,
138
                ),
139
                $request
140
            );
141
            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_ADD_COMPLETE, $event);
142
143
            if ($event->hasResponse()) {
144
                return $event->getResponse();
145
            }
146
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
147
        } catch (CartException $e) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
148
149
            log_info('カート追加エラー', array($e->getMessage()));
150
151
            // FRONT_CART_ADD_EXCEPTION
152
            $event = new EventArgs(
153
                array(
154
                    'exception' => $e,
155
                ),
156
                $request
157
            );
158
            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_ADD_EXCEPTION, $event);
159
160
            if ($event->hasResponse()) {
161
                return $event->getResponse();
162
            }
163
164
            $app->addRequestError($e->getMessage());
165
        }
166
167
        return $app->redirect($app->url('cart'));
168
    }
169
170
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$productClassId" missing
Loading history...
171
     * カートに入っている商品の個数を1増やす.
172
     *
173
     * @param Application $app
0 ignored issues
show
introduced by
Expected 4 spaces after parameter type; 1 found
Loading history...
174
     * @param Request $request
0 ignored issues
show
introduced by
Expected 8 spaces after parameter type; 1 found
Loading history...
175
     * @param $productClassId
0 ignored issues
show
introduced by
Missing parameter name
Loading history...
176
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
177
     */
178 View Code Duplication
    public function up(Application $app, Request $request, $productClassId)
179
    {
180
        $this->isTokenValid($app);
181
182
        // FRONT_CART_UP_INITIALIZE
183
        $event = new EventArgs(
184
            array(
185
                'productClassId' => $productClassId,
186
            ),
187
            $request
188
        );
189
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_UP_INITIALIZE, $event);
190
191
        try {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
192
193
            log_info('カート加算処理開始', array('product_class_id' => $productClassId));
194
195
            $productClassId = $event->getArgument('productClassId');
196
197
            $app['eccube.service.cart']->upProductQuantity($productClassId)->save();
198
199
            // FRONT_CART_UP_COMPLETE
200
            $event = new EventArgs(
201
                array(
202
                    'productClassId' => $productClassId,
203
                ),
204
                $request
205
            );
206
            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_UP_COMPLETE, $event);
207
208
            if ($event->hasResponse()) {
209
                return $event->getResponse();
210
            }
211
212
            log_info('カート加算処理完了', array('product_class_id' => $productClassId));
213
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
214
        } catch (CartException $e) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
215
216
            log_info('カート加算エラー', array($e->getMessage()));
217
218
            // FRONT_CART_UP_EXCEPTION
219
            $event = new EventArgs(
220
                array(
221
                    'exception' => $e,
222
                ),
223
                $request
224
            );
225
            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_UP_EXCEPTION, $event);
226
227
            if ($event->hasResponse()) {
228
                return $event->getResponse();
229
            }
230
231
            $app->addRequestError($e->getMessage());
232
        }
233
234
        return $app->redirect($app->url('cart'));
235
    }
236
237
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$productClassId" missing
Loading history...
238
     * カートに入っている商品の個数を1減らす.
239
     * マイナスになる場合は, 商品をカートから削除する.
240
     *
241
     * @param Application $app
0 ignored issues
show
introduced by
Expected 4 spaces after parameter type; 1 found
Loading history...
242
     * @param Request $request
0 ignored issues
show
introduced by
Expected 8 spaces after parameter type; 1 found
Loading history...
243
     * @param $productClassId
0 ignored issues
show
introduced by
Missing parameter name
Loading history...
244
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
245
     */
246 View Code Duplication
    public function down(Application $app, Request $request, $productClassId)
247
    {
248
        $this->isTokenValid($app);
249
250
        // FRONT_CART_DOWN_INITIALIZE
251
        $event = new EventArgs(
252
            array(
253
                'productClassId' => $productClassId,
254
            ),
255
            $request
256
        );
257
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_DOWN_INITIALIZE, $event);
258
259
        try {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
260
261
            log_info('カート減算処理開始', array('product_class_id' => $productClassId));
262
263
            $productClassId = $event->getArgument('productClassId');
264
            $app['eccube.service.cart']->downProductQuantity($productClassId)->save();
265
266
            // FRONT_CART_UP_COMPLETE
267
            $event = new EventArgs(
268
                array(
269
                    'productClassId' => $productClassId,
270
                ),
271
                $request
272
            );
273
            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_DOWN_COMPLETE, $event);
274
275
            if ($event->hasResponse()) {
276
                return $event->getResponse();
277
            }
278
279
            log_info('カート減算処理完了', array('product_class_id' => $productClassId));
280
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
281
        } catch (CartException $e) {
282
            log_info('カート減算エラー', array($e->getMessage()));
283
284
            // FRONT_CART_DOWN_EXCEPTION
285
            $event = new EventArgs(
286
                array(
287
                    'exception' => $e,
288
                ),
289
                $request
290
            );
291
            $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_DOWN_EXCEPTION, $event);
292
293
            if ($event->hasResponse()) {
294
                return $event->getResponse();
295
            }
296
297
            $app->addRequestError($e->getMessage());
298
        }
299
300
        return $app->redirect($app->url('cart'));
301
    }
302
303
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$productClassId" missing
Loading history...
304
     * カートに入っている商品を削除する.
305
     *
306
     * @param Application $app
0 ignored issues
show
introduced by
Expected 4 spaces after parameter type; 1 found
Loading history...
307
     * @param Request $request
0 ignored issues
show
introduced by
Expected 8 spaces after parameter type; 1 found
Loading history...
308
     * @param $productClassId
0 ignored issues
show
introduced by
Missing parameter name
Loading history...
309
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
310
     */
311
    public function remove(Application $app, Request $request, $productClassId)
312
    {
313
        $this->isTokenValid($app);
314
315
        log_info('カート削除処理開始', array('product_class_id' => $productClassId));
316
317
        // FRONT_CART_REMOVE_INITIALIZE
318
        $event = new EventArgs(
319
            array(
320
                'productClassId' => $productClassId,
321
            ),
322
            $request
323
        );
324
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_REMOVE_INITIALIZE, $event);
325
326
        $productClassId = $event->getArgument('productClassId');
327
        $app['eccube.service.cart']->removeProduct($productClassId)->save();
328
329
        log_info('カート削除処理完了', array('product_class_id' => $productClassId));
330
331
        // FRONT_CART_REMOVE_COMPLETE
332
        $event = new EventArgs(
333
            array(
334
                'productClassId' => $productClassId,
335
            ),
336
            $request
337
        );
338
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_REMOVE_COMPLETE, $event);
339
340
        if ($event->hasResponse()) {
341
            return $event->getResponse();
342
        }
343
344
        return $app->redirect($app->url('cart'));
345
    }
346
347
    /**
0 ignored issues
show
introduced by
Doc comment for parameter "$quantity" missing
Loading history...
introduced by
Doc comment for parameter "$productClassId" missing
Loading history...
348
     * カートに商品を個数を指定して設定する.
349
     *
350
     * @param Application $app
0 ignored issues
show
introduced by
Expected 4 spaces after parameter type; 1 found
Loading history...
351
     * @param Request $request
0 ignored issues
show
introduced by
Expected 8 spaces after parameter type; 1 found
Loading history...
352
     * @param $productClassId
0 ignored issues
show
introduced by
Missing parameter name
Loading history...
353
     * @param $quantity
0 ignored issues
show
introduced by
Missing parameter name
Loading history...
354
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
355
     * @throws CartException
356
     *
357
     * @deprecated since 3.0.0, to be removed in 3.1
358
     */
359
    public function setQuantity(Application $app, Request $request, $productClassId, $quantity)
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
360
    {
361
        $this->isTokenValid($app);
362
363
        $app['eccube.service.cart']->setProductQuantity($productClassId, $quantity)->save();
364
365
        return $app->redirect($app->url('cart'));
366
    }
367
368
    /**
369
     * カートをロック状態に設定し、購入確認画面へ遷移する.
370
     *
371
     * @param Application $app
372
     * @param Request $request
0 ignored issues
show
introduced by
Expected 5 spaces after parameter type; 1 found
Loading history...
373
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
374
     */
375
    public function buystep(Application $app, Request $request)
376
    {
377
        // FRONT_CART_BUYSTEP_INITIALIZE
378
        $event = new EventArgs(
379
            array(),
380
            $request
381
        );
382
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_BUYSTEP_INITIALIZE, $event);
383
384
        $app['eccube.service.cart']->lock();
385
        $app['eccube.service.cart']->save();
386
387
        // FRONT_CART_BUYSTEP_COMPLETE
388
        $event = new EventArgs(
389
            array(),
390
            $request
391
        );
392
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_BUYSTEP_COMPLETE, $event);
393
394
        if ($event->hasResponse()) {
395
            return $event->getResponse();
396
        }
397
398
        return $app->redirect($app->url('shopping'));
399
    }
400
}
401