Completed
Push — 4.0 ( 268f2c...88f012 )
by Hideki
05:48 queued 10s
created

Admin/Customer/CustomerEditController.php (1 issue)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
/*
4
 * This file is part of EC-CUBE
5
 *
6
 * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
7
 *
8
 * http://www.ec-cube.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\Controller\Admin\Customer;
15
16
use Eccube\Controller\AbstractController;
17
use Eccube\Entity\Master\CustomerStatus;
18
use Eccube\Event\EccubeEvents;
19
use Eccube\Event\EventArgs;
20
use Eccube\Form\Type\Admin\CustomerType;
21
use Eccube\Repository\CustomerRepository;
22
use Eccube\Util\StringUtil;
23
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
24
use Symfony\Component\HttpFoundation\Request;
25
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
26
use Symfony\Component\Routing\Annotation\Route;
27
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
28
29
class CustomerEditController extends AbstractController
30
{
31
    /**
32
     * @var CustomerRepository
33
     */
34
    protected $customerRepository;
35
36
    /**
37
     * @var EncoderFactoryInterface
38
     */
39 7
    protected $encoderFactory;
40
41
    public function __construct(
42
        CustomerRepository $customerRepository,
43 7
        EncoderFactoryInterface $encoderFactory
44 7
    ) {
45
        $this->customerRepository = $customerRepository;
46
        $this->encoderFactory = $encoderFactory;
47
    }
48
49
    /**
50
     * @Route("/%eccube_admin_route%/customer/new", name="admin_customer_new")
51
     * @Route("/%eccube_admin_route%/customer/{id}/edit", requirements={"id" = "\d+"}, name="admin_customer_edit")
52 7
     * @Template("@admin/Customer/edit.twig")
53
     */
54 7
    public function index(Request $request, $id = null)
55
    {
56 7
        $this->entityManager->getFilters()->enable('incomplete_order_status_hidden');
57 5
        // 編集
58 5
        if ($id) {
59
            $Customer = $this->customerRepository
60 5
                ->find($id);
61
62
            if (is_null($Customer)) {
63
                throw new NotFoundHttpException();
64 5
            }
65 5
66
            $oldStatusId = $Customer->getStatus()->getId();
67
            // 編集用にデフォルトパスワードをセット
68 2
            $previous_password = $Customer->getPassword();
69 2
            $Customer->setPassword($this->eccubeConfig['eccube_default_password']);
70 2
        // 新規登録
71
        } else {
72
            $Customer = $this->customerRepository->newCustomer();
73
74 7
            $oldStatusId = null;
75 7
        }
76
77 7
        // 会員登録フォーム
78
        $builder = $this->formFactory
79 7
            ->createBuilder(CustomerType::class, $Customer);
80 7
81
        $event = new EventArgs(
82 7
            [
83
                'builder' => $builder,
84 7
                'Customer' => $Customer,
85
            ],
86 7
            $request
87
        );
88 7
        $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_CUSTOMER_EDIT_INDEX_INITIALIZE, $event);
89
90 7
        $form = $builder->getForm();
91 2
92 2
        $form->handleRequest($request);
93
94 2
        if ($form->isSubmitted() && $form->isValid()) {
95
            log_info('会員登録開始', [$Customer->getId()]);
96 2
97
            $encoder = $this->encoderFactory->getEncoder($Customer);
98
99 2 View Code Duplication
            if ($Customer->getPassword() === $this->eccubeConfig['eccube_default_password']) {
100 1
                $Customer->setPassword($previous_password);
0 ignored issues
show
The variable $previous_password does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
101 1
            } else {
102
                if ($Customer->getSalt() === null) {
103 2
                    $Customer->setSalt($encoder->createSalt());
104
                    $Customer->setSecretKey($this->customerRepository->getUniqueSecretKey());
105
                }
106 2
                $Customer->setPassword($encoder->encodePassword($Customer->getPassword(), $Customer->getSalt()));
107 2
            }
108
109 2
            // 退会ステータスに更新の場合、ダミーのアドレスに更新
110
            $newStatusId = $Customer->getStatus()->getId();
111 2
            if ($oldStatusId != $newStatusId && $newStatusId == CustomerStatus::WITHDRAWING) {
112
                $Customer->setEmail(StringUtil::random(60).'@dummy.dummy');
113 2
            }
114 2
115
            $this->entityManager->persist($Customer);
116 2
            $this->entityManager->flush();
117
118 2
            log_info('会員登録完了', [$Customer->getId()]);
119
120 2
            $event = new EventArgs(
121
                [
122 2
                    'form' => $form,
123 2
                    'Customer' => $Customer,
124
                ],
125
                $request
126
            );
127
            $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_CUSTOMER_EDIT_INDEX_COMPLETE, $event);
128
129
            $this->addSuccess('admin.common.save_complete', 'admin');
130
131 5
            return $this->redirectToRoute('admin_customer_edit', [
132 5
                'id' => $Customer->getId(),
133
            ]);
134
        }
135
136
        return [
137
            'form' => $form->createView(),
138
            'Customer' => $Customer,
139
        ];
140
    }
141
}
142