From 9a84daf16d92a5129eb169ac14f9b219e81c5d90 Mon Sep 17 00:00:00 2001 From: Kentaro Ohkouchi Date: Tue, 10 Dec 2019 15:06:48 +0900 Subject: [PATCH] =?UTF-8?q?Customer=20=E3=81=AE=20Serializable=20=E5=AE=9F?= =?UTF-8?q?=E8=A3=85=E3=81=AB=E4=BC=B4=E3=81=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 配列でセッションに保存し, オブジェクトに復元するよう修正 - OrderHelper::getNonMember() でセッションキーを指定できるよう修正 --- .../NonMemberShoppingController.php | 15 +-------- .../Form/Type/ShippingMultipleItemType.php | 12 +++++-- src/Eccube/Service/OrderHelper.php | 31 ++++++++++++++----- .../Processor/DeliveryFeePreprocessor.php | 5 +-- .../ShoppingControllerWithNonmemberTest.php | 2 +- 5 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/Eccube/Controller/NonMemberShoppingController.php b/src/Eccube/Controller/NonMemberShoppingController.php index 5daf7b093f3..7a81cb709f1 100644 --- a/src/Eccube/Controller/NonMemberShoppingController.php +++ b/src/Eccube/Controller/NonMemberShoppingController.php @@ -106,22 +106,9 @@ public function index(Request $request) log_info('非会員お客様情報登録開始'); $data = $form->getData(); - $Customer = new Customer(); - $Customer - ->setName01($data['name01']) - ->setName02($data['name02']) - ->setKana01($data['kana01']) - ->setKana02($data['kana02']) - ->setCompanyName($data['company_name']) - ->setEmail($data['email']) - ->setPhonenumber($data['phone_number']) - ->setPostalcode($data['postal_code']) - ->setPref($data['pref']) - ->setAddr01($data['addr01']) - ->setAddr02($data['addr02']); // 非会員用セッションを作成 - $this->session->set(OrderHelper::SESSION_NON_MEMBER, $Customer); + $this->session->set(OrderHelper::SESSION_NON_MEMBER, $data); $this->session->set(OrderHelper::SESSION_NON_MEMBER_ADDRESSES, serialize([])); $event = new EventArgs( diff --git a/src/Eccube/Form/Type/ShippingMultipleItemType.php b/src/Eccube/Form/Type/ShippingMultipleItemType.php index b1c58fd21e1..f835f6a65db 100644 --- a/src/Eccube/Form/Type/ShippingMultipleItemType.php +++ b/src/Eccube/Form/Type/ShippingMultipleItemType.php @@ -18,6 +18,7 @@ use Eccube\Entity\Customer; use Eccube\Entity\CustomerAddress; use Eccube\Repository\Master\PrefRepository; +use Eccube\Service\OrderHelper; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; @@ -61,6 +62,11 @@ class ShippingMultipleItemType extends AbstractType */ protected $entityManager; + /** + * @var OrderHelper + */ + protected $orderHelper; + /** * ShippingMultipleItemType constructor. * @@ -75,7 +81,8 @@ public function __construct( AuthorizationCheckerInterface $authorizationChecker, TokenStorageInterface $tokenStorage, PrefRepository $prefRepository, - EntityManagerInterface $entityManager + EntityManagerInterface $entityManager, + OrderHelper $orderHelper ) { $this->eccubeConfig = $eccubeConfig; $this->session = $session; @@ -83,6 +90,7 @@ public function __construct( $this->tokenStorage = $tokenStorage; $this->prefRepository = $prefRepository; $this->entityManager = $entityManager; + $this->orderHelper = $orderHelper; } /** @@ -117,7 +125,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) } else { $CustomerAddresses = []; // 非会員の場合は、セッションに保持されている注文者住所とお届け先住所をマージしてリストを作成 - if ($NonMember = $this->session->get('eccube.front.shopping.nonmember')) { + if ($NonMember = $this->orderHelper->getNonMember('eccube.front.shopping.nonmember')) { $CustomerAddress = new CustomerAddress(); $CustomerAddress->setFromCustomer($NonMember); diff --git a/src/Eccube/Service/OrderHelper.php b/src/Eccube/Service/OrderHelper.php index c7a252e6bf2..760b462f961 100644 --- a/src/Eccube/Service/OrderHelper.php +++ b/src/Eccube/Service/OrderHelper.php @@ -236,17 +236,34 @@ public function getPurchaseProcessingOrder($preOrderId = null) * セッションに保持されている非会員情報を取得する. * 非会員購入時に入力されたお客様情報を返す. * - * @return Customer + * @param string $session_key + * @return Customer|null */ - public function getNonMember() + public function getNonMember($session_key = self::SESSION_NON_MEMBER) { - $NonMember = $this->session->get(self::SESSION_NON_MEMBER); - if ($NonMember && $NonMember->getPref()) { - $Pref = $this->prefRepository->find($NonMember->getPref()->getId()); - $NonMember->setPref($Pref); + $data = $this->session->get($session_key); + if (empty($data)) { + return null; + } + $Customer = new Customer(); + $Customer + ->setName01($data['name01']) + ->setName02($data['name02']) + ->setKana01($data['kana01']) + ->setKana02($data['kana02']) + ->setCompanyName($data['company_name']) + ->setEmail($data['email']) + ->setPhonenumber($data['phone_number']) + ->setPostalcode($data['postal_code']) + ->setAddr01($data['addr01']) + ->setAddr02($data['addr02']); + + if (!empty($data['pref'])) { + $Pref = $this->prefRepository->find($data['pref']); + $Customer->setPref($Pref); } - return $NonMember; + return $Customer; } /** diff --git a/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php b/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php index c3566276853..8cd01d2fd84 100644 --- a/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php +++ b/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php @@ -127,15 +127,16 @@ private function saveDeliveryFeeItem(ItemHolderInterface $itemHolder) } } - /** @var DeliveryFee $DeliveryFee */ + /** @var DeliveryFee|null $DeliveryFee */ $DeliveryFee = $this->deliveryFeeRepository->findOneBy([ 'Delivery' => $Shipping->getDelivery(), 'Pref' => $Shipping->getPref(), ]); + $fee = is_object($DeliveryFee) ? $DeliveryFee->getFee() : 0; $OrderItem = new OrderItem(); $OrderItem->setProductName($DeliveryFeeType->getName()) - ->setPrice($DeliveryFee->getFee() + $deliveryFeeProduct) + ->setPrice($fee + $deliveryFeeProduct) ->setQuantity(1) ->setOrderItemType($DeliveryFeeType) ->setShipping($Shipping) diff --git a/tests/Eccube/Tests/Web/ShoppingControllerWithNonmemberTest.php b/tests/Eccube/Tests/Web/ShoppingControllerWithNonmemberTest.php index 3a78cd6ff79..98d2d805856 100644 --- a/tests/Eccube/Tests/Web/ShoppingControllerWithNonmemberTest.php +++ b/tests/Eccube/Tests/Web/ShoppingControllerWithNonmemberTest.php @@ -138,7 +138,7 @@ public function testNonmemberInputWithPost() $formData = $this->createNonmemberFormData(); $this->scenarioInput($formData); - $Nonmember = self::$container->get('session')->get('eccube.front.shopping.nonmember'); + $Nonmember = self::$container->get(OrderHelper::class)->getNonMember('eccube.front.shopping.nonmember'); $this->assertNotNull($Nonmember); $this->assertNotNull(self::$container->get('session')->get('eccube.front.shopping.nonmember.customeraddress'));