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

Admin/Setting/System/MasterdataController.php (1 issue)

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\Setting\System;
15
16
use Doctrine\Common\Persistence\Mapping\MappingException;
17
use Eccube\Controller\AbstractController;
18
use Eccube\Event\EccubeEvents;
19
use Eccube\Event\EventArgs;
20
use Eccube\Form\Type\Admin\MasterdataEditType;
21
use Eccube\Form\Type\Admin\MasterdataType;
22
use Symfony\Component\Routing\Annotation\Route;
23
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
24
use Symfony\Component\HttpFoundation\Request;
25
26
class MasterdataController extends AbstractController
27
{
28
    /**
29
     * @Route("/%eccube_admin_route%/setting/system/masterdata", name="admin_setting_system_masterdata")
30
     * @Route("/%eccube_admin_route%/setting/system/masterdata/{entity}/edit", name="admin_setting_system_masterdata_view")
31
     * @Template("@admin/Setting/System/masterdata.twig")
32
     */
33 2
    public function index(Request $request, $entity = null)
34
    {
35 2
        $data = [];
36
37 2
        $builder = $this->formFactory->createBuilder(MasterdataType::class);
38
39 2
        $event = new EventArgs(
40
            [
41 2
                'builder' => $builder,
42
            ],
43 2
            $request
44
        );
45 2
        $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_INDEX_INITIALIZE, $event);
46
47 2
        $form = $builder->getForm();
48
49 2
        if ('POST' === $request->getMethod()) {
50 1
            $form->handleRequest($request);
51 1
            if ($form->isValid()) {
52 1
                $event = new EventArgs(
53
                    [
54 1
                        'form' => $form,
55
                    ],
56 1
                    $request
57
                );
58 1
                $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_INDEX_COMPLETE, $event);
59
60 1
                if ($event->hasResponse()) {
61
                    return $event->getResponse();
62
                }
63
64 1
                return $this->redirectToRoute(
65 1
                    'admin_setting_system_masterdata_view', ['entity' => $form['masterdata']->getData()]
66
                );
67
            }
68 2
        } elseif (!is_null($entity)) {
69 1
            $form->submit(['masterdata' => $entity]);
70 1
            if ($form['masterdata']->isValid()) {
71 1
                $entityName = str_replace('-', '\\', $entity);
72
                try {
73 1
                    $masterdata = $this->entityManager->getRepository($entityName)->findBy(
74 1
                        [],
75 1
                        ['sort_no' => 'ASC']
76
                    );
77 1
                    $data['data'] = [];
78 1
                    $data['masterdata_name'] = $entity;
79 1
                    foreach ($masterdata as $value) {
80 1
                        $data['data'][$value['id']]['id'] = $value['id'];
81 1
                        $data['data'][$value['id']]['name'] = $value['name'];
82
                    }
83 1
                    $data['data'][] = [
84 1
                        'id' => '',
85
                        'name' => '',
86
                    ];
87
                } catch (MappingException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
88
                }
89
            }
90
        }
91
92 2
        $builder2 = $this->formFactory->createBuilder(MasterdataEditType::class, $data);
93
94 2
        $event = new EventArgs(
95
            [
96 2
                'builder' => $builder2,
97
            ],
98 2
            $request
99
        );
100 2
        $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_INDEX_FORM2_INITIALIZE, $event);
101
102 2
        $form2 = $builder2->getForm();
103
104
        return [
105 2
            'form' => $form->createView(),
106 2
            'form2' => $form2->createView(),
107
        ];
108
    }
109
110
    /**
111
     * @Route("/%eccube_admin_route%/setting/system/masterdata/edit", name="admin_setting_system_masterdata_edit")
112
     * @Template("@admin/Setting/System/masterdata.twig")
113
     */
114 7
    public function edit(Request $request)
115
    {
116 7
        $builder2 = $this->formFactory->createBuilder(MasterdataEditType::class);
117
118 7
        $event = new EventArgs(
119
            [
120 7
                'builder' => $builder2,
121
            ],
122 7
            $request
123
        );
124 7
        $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_EDIT_INITIALIZE, $event);
125
126 7
        $form2 = $builder2->getForm();
127
128 7
        if ('POST' === $request->getMethod()) {
129 6
            $form2->handleRequest($request);
130
131 6
            if ($form2->isValid()) {
132 4
                $data = $form2->getData();
133
134 4
                $entityName = str_replace('-', '\\', $data['masterdata_name']);
135 4
                $sortNo = 0;
136 4
                $ids = array_filter(array_map(
137 4
                    function ($v) {
138 4
                        return $v['id'];
139 4
                    },
140 4
                    $data['data']
141 4
                ));
142
143 4
                $repository = $this->entityManager->getRepository($entityName);
144 4
145 4
                foreach ($data['data'] as $key => $value) {
146 4
                    if ($value['id'] !== null && $value['name'] !== null) {
147 4
                        $entity = $repository->find($value['id']);
148 4
                        if ($entity === null) {
149 1
                            $entity = new $entityName();
150
                        }
151
                        $entity->setId($value['id']);
152
                        $entity->setName($value['name']);
153 4
                        $entity->setSortNo($sortNo++);
154
                        $this->entityManager->persist($entity);
155
                    } elseif (!in_array($key, $ids)) {
156
                        // remove
157
                        $delKey = $this->entityManager->getRepository($entityName)->find($key);
158
                        if ($delKey) {
159 4
                            $this->entityManager->remove($delKey);
160
                        }
161 4
                    }
162
                }
163 4
164
                try {
165 4
                    $this->entityManager->flush();
166
167 4
                    $event = new EventArgs(
168 4
                        [
169 4
                            'form' => $form2,
170
                        ],
171
                        $request
172 4
                    );
173
                    $this->eventDispatcher->dispatch(
174
                        EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_EDIT_COMPLETE,
175
                        $event
176
                    );
177
178 4
                    $this->addSuccess('admin.common.save_complete', 'admin');
179 4
                } catch (\Exception $e) {
180
                    // 外部キー制約などで削除できない場合に例外エラーになる
181
                    $this->addError('admin.common.save_error', 'admin');
182
                }
183
184 3
                return $this->redirectToRoute(
185
                    'admin_setting_system_masterdata_view', ['entity' => $data['masterdata_name']]
186 3
                );
187
            }
188 3
        }
189
190 3
        $builder = $this->formFactory->createBuilder(MasterdataType::class);
191
192 3
        $event = new EventArgs(
193
            [
194 3
                'builder' => $builder,
195 3
            ],
196 3
            $request
197
        );
198
        $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_EDIT_FORM_INITIALIZE, $event);
199 3
200 3
        $form = $builder->getForm();
201
        $parameter = array_merge($request->request->all(), ['masterdata' => $form2['masterdata_name']->getData()]);
202
        $form->submit($parameter);
203
204
        return [
205
            'form' => $form->createView(),
206
            'form2' => $form2->createView(),
207
        ];
208
    }
209
}
210