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\Shop; |
||
15 | |||
16 | use Doctrine\Common\Collections\ArrayCollection; |
||
17 | use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException; |
||
18 | use Eccube\Controller\AbstractController; |
||
19 | use Eccube\Entity\Delivery; |
||
20 | use Eccube\Entity\DeliveryFee; |
||
21 | use Eccube\Entity\DeliveryTime; |
||
22 | use Eccube\Entity\PaymentOption; |
||
23 | use Eccube\Event\EccubeEvents; |
||
24 | use Eccube\Event\EventArgs; |
||
25 | use Eccube\Form\Type\Admin\DeliveryType; |
||
26 | use Eccube\Repository\DeliveryFeeRepository; |
||
27 | use Eccube\Repository\DeliveryRepository; |
||
28 | use Eccube\Repository\DeliveryTimeRepository; |
||
29 | use Eccube\Repository\Master\PrefRepository; |
||
30 | use Eccube\Repository\Master\SaleTypeRepository; |
||
31 | use Eccube\Repository\PaymentOptionRepository; |
||
32 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; |
||
33 | use Symfony\Component\HttpFoundation\Request; |
||
34 | use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; |
||
35 | use Symfony\Component\Routing\Annotation\Route; |
||
36 | |||
37 | /** |
||
38 | * Class DeliveryController |
||
39 | */ |
||
40 | class DeliveryController extends AbstractController |
||
41 | { |
||
42 | /** |
||
43 | * @var PaymentOptionRepository |
||
44 | */ |
||
45 | protected $paymentOptionRepository; |
||
46 | |||
47 | /** |
||
48 | * @var DeliveryFeeRepository |
||
49 | */ |
||
50 | protected $deliveryFeeRepository; |
||
51 | |||
52 | /** |
||
53 | * @var PrefRepository |
||
54 | */ |
||
55 | protected $prefRepository; |
||
56 | |||
57 | /** |
||
58 | * @var DeliveryRepository |
||
59 | */ |
||
60 | protected $deliveryRepository; |
||
61 | |||
62 | /** |
||
63 | * @var DeliveryTimeRepository |
||
64 | */ |
||
65 | protected $deliveryTimeRepository; |
||
66 | |||
67 | /** |
||
68 | * @var DeliveryTimeRepository |
||
69 | */ |
||
70 | protected $saleTypeRepository; |
||
71 | |||
72 | /** |
||
73 | * DeliveryController constructor. |
||
74 | * |
||
75 | * @param PaymentOptionRepository $paymentOptionRepository |
||
76 | * @param DeliveryFeeRepository $deliveryFeeRepository |
||
77 | * @param PrefRepository $prefRepository |
||
78 | * @param DeliveryRepository $deliveryRepository |
||
79 | */ |
||
80 | 10 | public function __construct(PaymentOptionRepository $paymentOptionRepository, DeliveryFeeRepository $deliveryFeeRepository, PrefRepository $prefRepository, DeliveryRepository $deliveryRepository, DeliveryTimeRepository $deliveryTimeRepository, SaleTypeRepository $saleTypeRepository) |
|
81 | { |
||
82 | 10 | $this->paymentOptionRepository = $paymentOptionRepository; |
|
83 | 10 | $this->deliveryFeeRepository = $deliveryFeeRepository; |
|
84 | 10 | $this->prefRepository = $prefRepository; |
|
85 | 10 | $this->deliveryRepository = $deliveryRepository; |
|
86 | 10 | $this->deliveryTimeRepository = $deliveryTimeRepository; |
|
87 | 10 | $this->saleTypeRepository = $saleTypeRepository; |
|
88 | } |
||
89 | |||
90 | /** |
||
91 | * @Route("/%eccube_admin_route%/setting/shop/delivery", name="admin_setting_shop_delivery") |
||
92 | * @Template("@admin/Setting/Shop/delivery.twig") |
||
93 | */ |
||
94 | 1 | View Code Duplication | public function index(Request $request) |
95 | { |
||
96 | 1 | $Deliveries = $this->deliveryRepository |
|
97 | 1 | ->findBy([], ['sort_no' => 'DESC']); |
|
98 | |||
99 | 1 | $event = new EventArgs( |
|
100 | [ |
||
101 | 1 | 'Deliveries' => $Deliveries, |
|
102 | ], |
||
103 | 1 | $request |
|
104 | ); |
||
105 | 1 | $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_INDEX_COMPLETE, $event); |
|
106 | |||
107 | return [ |
||
108 | 1 | 'Deliveries' => $Deliveries, |
|
109 | ]; |
||
110 | } |
||
111 | |||
112 | /** |
||
113 | * @Route("/%eccube_admin_route%/setting/shop/delivery/new", name="admin_setting_shop_delivery_new") |
||
114 | * @Route("/%eccube_admin_route%/setting/shop/delivery/{id}/edit", requirements={"id" = "\d+"}, name="admin_setting_shop_delivery_edit") |
||
115 | * @Template("@admin/Setting/Shop/delivery_edit.twig") |
||
116 | */ |
||
117 | 6 | public function edit(Request $request, $id = null) |
|
118 | { |
||
119 | 6 | if (is_null($id)) { |
|
120 | 3 | $SaleType = $this->saleTypeRepository->findOneBy([], ['sort_no' => 'ASC']); |
|
121 | 3 | $Delivery = $this->deliveryRepository->findOneBy([], ['sort_no' => 'DESC']); |
|
122 | |||
123 | 3 | $sortNo = 1; |
|
124 | 3 | if ($Delivery) { |
|
125 | 3 | $sortNo = $Delivery->getSortNo() + 1; |
|
126 | } |
||
127 | |||
128 | 3 | $Delivery = new Delivery(); |
|
129 | $Delivery |
||
130 | 3 | ->setSortNo($sortNo) |
|
131 | 3 | ->setVisible(true) |
|
132 | 3 | ->setSaleType($SaleType); |
|
133 | } else { |
||
134 | 3 | $Delivery = $this->deliveryRepository->find($id); |
|
135 | } |
||
136 | |||
137 | 6 | $originalDeliveryTimes = new ArrayCollection(); |
|
138 | |||
139 | 6 | foreach ($Delivery->getDeliveryTimes() as $deliveryTime) { |
|
140 | $originalDeliveryTimes->add($deliveryTime); |
||
141 | } |
||
142 | |||
143 | // FormType: DeliveryFeeの生成 |
||
144 | 6 | $Prefs = $this->prefRepository |
|
145 | 6 | ->findAll(); |
|
146 | |||
147 | 6 | foreach ($Prefs as $Pref) { |
|
148 | 6 | $DeliveryFee = $this->deliveryFeeRepository |
|
149 | 6 | ->findOneBy( |
|
150 | [ |
||
151 | 6 | 'Delivery' => $Delivery, |
|
152 | 6 | 'Pref' => $Pref, |
|
153 | ] |
||
154 | ); |
||
155 | 6 | if (!$DeliveryFee) { |
|
156 | 6 | $DeliveryFee = new DeliveryFee(); |
|
157 | $DeliveryFee |
||
158 | ->setPref($Pref) |
||
159 | ->setDelivery($Delivery); |
||
0 ignored issues
–
show
|
|||
160 | 6 | } |
|
161 | 6 | if (!$DeliveryFee->getFee()) { |
|
162 | 6 | $Delivery->addDeliveryFee($DeliveryFee); |
|
163 | 6 | } |
|
164 | 6 | } |
|
165 | |||
166 | 6 | $DeliveryFees = $Delivery->getDeliveryFees(); |
|
167 | 6 | $DeliveryFeesIndex = []; |
|
168 | 6 | foreach ($DeliveryFees as $DeliveryFee) { |
|
169 | $Delivery->removeDeliveryFee($DeliveryFee); |
||
170 | $DeliveryFeesIndex[$DeliveryFee->getPref()->getId()] = $DeliveryFee; |
||
171 | 6 | } |
|
172 | 6 | ksort($DeliveryFeesIndex); |
|
173 | foreach ($DeliveryFeesIndex as $timeId => $DeliveryFee) { |
||
174 | 6 | $Delivery->addDeliveryFee($DeliveryFee); |
|
175 | } |
||
176 | 6 | ||
177 | 6 | $builder = $this->formFactory |
|
178 | 6 | ->createBuilder(DeliveryType::class, $Delivery); |
|
179 | 6 | ||
180 | $event = new EventArgs( |
||
181 | 6 | [ |
|
182 | 'builder' => $builder, |
||
183 | 6 | 'Delivery' => $Delivery, |
|
184 | 'Prefs' => $Prefs, |
||
185 | 6 | 'DeliveryFees' => $DeliveryFees, |
|
186 | ], |
||
187 | $request |
||
188 | 6 | ); |
|
189 | 6 | $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_EDIT_INITIALIZE, $event); |
|
190 | 3 | ||
191 | $form = $builder->getForm(); |
||
192 | |||
193 | 6 | // 支払方法をセット |
|
194 | 6 | $Payments = []; |
|
195 | foreach ($Delivery->getPaymentOptions() as $PaymentOption) { |
||
196 | $Payments[] = $PaymentOption->getPayment(); |
||
197 | 6 | } |
|
198 | 4 | ||
199 | $form['delivery_times']->setData($Delivery->getDeliveryTimes()); |
||
200 | 4 | $form['payments']->setData($Payments); |
|
201 | 2 | ||
202 | // 登録ボタン押下 |
||
203 | if ($request->getMethod() === 'POST') { |
||
204 | $form->handleRequest($request); |
||
205 | 2 | ||
206 | if ($form->isValid()) { |
||
207 | $DeliveryData = $form->getData(); |
||
208 | |||
209 | // 配送時間の登録 |
||
210 | 2 | /** @var DeliveryTime $DeliveryTime */ |
|
211 | 2 | foreach ($originalDeliveryTimes as $DeliveryTime) { |
|
212 | if (false === $Delivery->getDeliveryTimes()->contains($DeliveryTime)) { |
||
213 | $this->entityManager->remove($DeliveryTime); |
||
214 | } |
||
215 | 2 | } |
|
216 | 2 | foreach ($DeliveryData['DeliveryTimes'] as $DeliveryTime) { |
|
217 | $DeliveryTime->setDelivery($Delivery); |
||
218 | 2 | } |
|
219 | 1 | ||
220 | 1 | // お支払いの登録 |
|
221 | $PaymentOptions = $this->paymentOptionRepository |
||
222 | 2 | ->findBy(['delivery_id' => $Delivery->getId()]); |
|
223 | 2 | // 消す |
|
224 | foreach ($PaymentOptions as $PaymentOption) { |
||
225 | $DeliveryData->removePaymentOption($PaymentOption); |
||
226 | 2 | $this->entityManager->remove($PaymentOption); |
|
227 | 2 | } |
|
228 | 2 | $this->entityManager->persist($DeliveryData); |
|
229 | $this->entityManager->flush(); |
||
230 | 2 | ||
231 | 2 | // いれる |
|
232 | 2 | $PaymentsData = $form->get('payments')->getData(); |
|
233 | 2 | foreach ($PaymentsData as $PaymentData) { |
|
234 | 2 | $PaymentOption = new PaymentOption(); |
|
235 | 2 | $PaymentOption |
|
236 | ->setPaymentId($PaymentData->getId()) |
||
237 | ->setPayment($PaymentData) |
||
238 | 2 | ->setDeliveryId($DeliveryData->getId()) |
|
239 | ->setDelivery($DeliveryData); |
||
240 | 2 | $DeliveryData->addPaymentOption($PaymentOption); |
|
241 | $this->entityManager->persist($DeliveryData); |
||
242 | 2 | } |
|
243 | |||
244 | 2 | $this->entityManager->persist($DeliveryData); |
|
245 | 2 | ||
246 | 2 | $this->entityManager->flush(); |
|
247 | 2 | ||
248 | $event = new EventArgs( |
||
249 | 2 | [ |
|
250 | 'form' => $form, |
||
251 | 2 | 'Delivery' => $Delivery, |
|
252 | 'Prefs' => $Prefs, |
||
253 | 2 | 'DeliveryFees' => $DeliveryFees, |
|
254 | ], |
||
255 | 2 | $request |
|
256 | ); |
||
257 | $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_EDIT_COMPLETE, $event); |
||
258 | |||
259 | $this->addSuccess('admin.common.save_complete', 'admin'); |
||
260 | 4 | ||
261 | 4 | return $this->redirectToRoute('admin_setting_shop_delivery_edit', ['id' => $Delivery->getId()]); |
|
262 | } |
||
263 | } |
||
264 | |||
265 | return [ |
||
266 | 'form' => $form->createView(), |
||
267 | 'delivery_id' => $Delivery->getId(), |
||
268 | ]; |
||
269 | 1 | } |
|
270 | |||
271 | 1 | /** |
|
272 | * @Route("/%eccube_admin_route%/setting/shop/delivery/{id}/delete", requirements={"id" = "\d+"}, name="admin_setting_shop_delivery_delete", methods={"DELETE"}) |
||
273 | */ |
||
274 | 1 | public function delete(Request $request, Delivery $Delivery) |
|
275 | 1 | { |
|
276 | $this->isTokenValid(); |
||
277 | |||
278 | try { |
||
279 | $this->entityManager->remove($Delivery); |
||
280 | $this->entityManager->flush(); |
||
281 | } catch (ForeignKeyConstraintViolationException $e) { |
||
282 | 1 | $this->addError(trans('admin.common.delete_error_foreign_key', ['%name%' => $Delivery->getName()]), 'admin'); |
|
283 | 1 | ||
284 | 1 | return $this->redirectToRoute('admin_setting_shop_delivery'); |
|
285 | } |
||
286 | 1 | ||
287 | 1 | $sortNo = 1; |
|
288 | 1 | $Delivs = $this->deliveryRepository |
|
289 | 1 | ->findBy([], ['sort_no' => 'ASC']); |
|
290 | |||
291 | foreach ($Delivs as $Deliv) { |
||
292 | if ($Deliv->getId() != $Delivery->getId()) { |
||
293 | 1 | $Deliv->setSortNo($sortNo); |
|
294 | $sortNo++; |
||
295 | 1 | } |
|
296 | } |
||
297 | 1 | ||
298 | 1 | $this->entityManager->flush(); |
|
299 | |||
300 | 1 | $event = new EventArgs( |
|
301 | [ |
||
302 | 1 | 'Delivs' => $Delivs, |
|
303 | 'Delivery' => $Delivery, |
||
304 | 1 | ], |
|
305 | $request |
||
306 | 1 | ); |
|
307 | $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_DELETE_COMPLETE, $event); |
||
308 | |||
309 | $this->addSuccess('admin.common.delete_complete', 'admin'); |
||
310 | |||
311 | return $this->redirectToRoute('admin_setting_shop_delivery'); |
||
312 | } |
||
313 | |||
314 | /** |
||
315 | * @Route("/%eccube_admin_route%/setting/shop/delivery/{id}/visibility", requirements={"id" = "\d+"}, name="admin_setting_shop_delivery_visibility", methods={"PUT"}) |
||
316 | */ |
||
317 | public function visibility(Request $request, Delivery $Delivery) |
||
318 | { |
||
319 | $this->isTokenValid(); |
||
320 | |||
321 | // 表示・非表示を切り替える |
||
322 | if ($Delivery->isVisible()) { |
||
323 | $message = trans('admin.common.to_hide_complete', ['%name%' => $Delivery->getName()]); |
||
324 | $Delivery->setVisible(false); |
||
325 | } else { |
||
326 | $message = trans('admin.common.to_show_complete', ['%name%' => $Delivery->getName()]); |
||
327 | $Delivery->setVisible(true); |
||
328 | } |
||
329 | $this->entityManager->persist($Delivery); |
||
330 | |||
331 | $this->entityManager->flush(); |
||
332 | |||
333 | $event = new EventArgs( |
||
334 | [ |
||
335 | 'Delivery' => $Delivery, |
||
336 | ], |
||
337 | $request |
||
338 | ); |
||
339 | $this->eventDispatcher->dispatch(EccubeEvents::ADMIN_SETTING_SHOP_DELIVERY_VISIBILITY_COMPLETE, $event); |
||
340 | |||
341 | $this->addSuccess($message, 'admin'); |
||
342 | |||
343 | return $this->redirectToRoute('admin_setting_shop_delivery'); |
||
344 | } |
||
345 | |||
346 | 1 | /** |
|
347 | * @Route("/%eccube_admin_route%/setting/shop/delivery/sort_no/move", name="admin_setting_shop_delivery_sort_no_move", methods={"POST"}) |
||
348 | 1 | */ |
|
349 | public function moveSortNo(Request $request) |
||
350 | { |
||
351 | if (!$request->isXmlHttpRequest()) { |
||
352 | 1 | throw new BadRequestHttpException(); |
|
353 | 1 | } |
|
354 | 1 | ||
355 | 1 | if ($this->isTokenValid()) { |
|
356 | 1 | $sortNos = $request->request->all(); |
|
357 | 1 | foreach ($sortNos as $deliveryId => $sortNo) { |
|
358 | $Delivery = $this->deliveryRepository->find($deliveryId); |
||
359 | 1 | $Delivery->setSortNo($sortNo); |
|
360 | $this->entityManager->persist($Delivery); |
||
361 | } |
||
362 | 1 | $this->entityManager->flush(); |
|
363 | } |
||
364 | |||
365 | return $this->json('OK', 200); |
||
366 | } |
||
367 | } |
||
368 |
If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:
If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.