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
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 | $entity = new $entityName(); |
|
136 | 4 | $sortNo = 0; |
|
137 | 4 | $ids = array_filter(array_map( |
|
138 | 4 | function ($v) { |
|
139 | 4 | return $v['id']; |
|
140 | 4 | }, |
|
141 | 4 | $data['data'] |
|
142 | )); |
||
143 | 4 | ||
144 | 4 | foreach ($data['data'] as $key => $value) { |
|
145 | 4 | if ($value['id'] !== null && $value['name'] !== null) { |
|
146 | 4 | $entity->setId($value['id']); |
|
147 | 4 | $entity->setName($value['name']); |
|
148 | 4 | $entity->setSortNo($sortNo++); |
|
149 | 1 | $this->entityManager->merge($entity); |
|
150 | } elseif (!in_array($key, $ids)) { |
||
151 | // remove |
||
152 | $delKey = $this->entityManager->getRepository($entityName)->find($key); |
||
153 | 4 | if ($delKey) { |
|
154 | $this->entityManager->remove($delKey); |
||
155 | } |
||
156 | } |
||
157 | } |
||
158 | |||
159 | 4 | try { |
|
160 | $this->entityManager->flush(); |
||
161 | 4 | ||
162 | $event = new EventArgs( |
||
163 | 4 | [ |
|
164 | 'form' => $form2, |
||
165 | 4 | ], |
|
166 | $request |
||
167 | 4 | ); |
|
168 | 4 | $this->eventDispatcher->dispatch( |
|
169 | 4 | EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_EDIT_COMPLETE, |
|
170 | $event |
||
171 | ); |
||
172 | 4 | ||
173 | $this->addSuccess('admin.common.save_complete', 'admin'); |
||
174 | } catch (\Exception $e) { |
||
175 | // 外部キー制約などで削除できない場合に例外エラーになる |
||
176 | $this->addError('admin.common.save_error', 'admin'); |
||
177 | } |
||
178 | 4 | ||
179 | 4 | return $this->redirectToRoute( |
|
180 | 'admin_setting_system_masterdata_view', ['entity' => $data['masterdata_name']] |
||
181 | ); |
||
182 | } |
||
183 | } |
||
184 | 3 | ||
185 | $builder = $this->formFactory->createBuilder(MasterdataType::class); |
||
186 | 3 | ||
187 | $event = new EventArgs( |
||
188 | 3 | [ |
|
189 | 'builder' => $builder, |
||
190 | 3 | ], |
|
191 | $request |
||
192 | 3 | ); |
|
193 | $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SYSTEM_MASTERDATA_EDIT_FORM_INITIALIZE, $event); |
||
194 | 3 | ||
195 | 3 | $form = $builder->getForm(); |
|
196 | 3 | $parameter = array_merge($request->request->all(), ['masterdata' => $form2['masterdata_name']->getData()]); |
|
197 | $form->submit($parameter); |
||
198 | |||
199 | 3 | return [ |
|
200 | 3 | 'form' => $form->createView(), |
|
201 | 'form2' => $form2->createView(), |
||
202 | ]; |
||
203 | } |
||
204 | } |
||
205 |