diff --git a/UPGRADE-1.12.md b/UPGRADE-1.12.md index 4fabe5c594..3d27bf2b48 100644 --- a/UPGRADE-1.12.md +++ b/UPGRADE-1.12.md @@ -3,7 +3,11 @@ ## Main update 1. Service `sylius.twig.extension.taxes` has been deprecated. Use methods `getTaxExcludedTotal` and `getTaxIncludedTotal` - from `Sylius\Component\Core\Model\Order` instead. + from `Sylius\Component\Core\Model\Order` instead. + +2. Both `getCreatedByGuest` and `setCreatedByGuest` methods were deprecated on `\Sylius\Component\Core\Model\Order`. +Please use `isCreatedByGuest` instead of the first one. The latter is a part of the `setCustomerWithAuthorization` logic +and should be used only this way. ### Asset management changes diff --git a/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/BlameCartHandler.php b/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/BlameCartHandler.php index b1a8804493..2f822ec9fc 100644 --- a/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/BlameCartHandler.php +++ b/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/BlameCartHandler.php @@ -50,8 +50,7 @@ final class BlameCartHandler implements MessageHandlerInterface throw new \InvalidArgumentException('There is an assigned customer to this cart'); } - $cart->setCustomer($user->getCustomer()); - $cart->setCreatedByGuest(false); + $cart->setCustomerWithAuthorization($user->getCustomer()); $this->orderProcessor->process($cart); } diff --git a/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/PickupCartHandler.php b/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/PickupCartHandler.php index dc4f5c5343..e7383adf53 100644 --- a/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/PickupCartHandler.php +++ b/src/Sylius/Bundle/ApiBundle/CommandHandler/Cart/PickupCartHandler.php @@ -73,9 +73,8 @@ final class PickupCartHandler implements MessageHandlerInterface $cart->setTokenValue($pickupCart->tokenValue ?? $this->generator->generateUriSafeString(10)); if ($customer !== null) { - $cart->setCustomer($customer); + $cart->setCustomerWithAuthorization($customer); $cart->setBillingAddress($this->getDefaultAddress($customer)); - $cart->setCreatedByGuest(false); } $this->orderManager->persist($cart); diff --git a/src/Sylius/Bundle/ApiBundle/EventListener/ApiCartBlamerListener.php b/src/Sylius/Bundle/ApiBundle/EventListener/ApiCartBlamerListener.php index a648f77c5f..1f38fe6d60 100644 --- a/src/Sylius/Bundle/ApiBundle/EventListener/ApiCartBlamerListener.php +++ b/src/Sylius/Bundle/ApiBundle/EventListener/ApiCartBlamerListener.php @@ -45,7 +45,7 @@ final class ApiCartBlamerListener } $cart = $this->getCart(); - if (null === $cart || !$cart->getCreatedByGuest()) { + if (null === $cart || !$cart->isCreatedByGuest()) { return; } diff --git a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/BlameCartHandlerSpec.php b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/BlameCartHandlerSpec.php index 1a4b29c67b..aa5478f043 100644 --- a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/BlameCartHandlerSpec.php +++ b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/BlameCartHandlerSpec.php @@ -57,8 +57,7 @@ final class BlameCartHandlerSpec extends ObjectBehavior $user->getCustomer()->willReturn($customer); - $cart->setCustomer($customer)->shouldBeCalled(); - $cart->setCreatedByGuest(false)->shouldBeCalled(); + $cart->setCustomerWithAuthorization($customer)->shouldBeCalled(); $orderProcessor->process($cart)->shouldBeCalled(); diff --git a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/PickupCartHandlerSpec.php b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/PickupCartHandlerSpec.php index 9ddfc5efb3..f903d8c110 100644 --- a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/PickupCartHandlerSpec.php +++ b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Cart/PickupCartHandlerSpec.php @@ -90,8 +90,7 @@ final class PickupCartHandlerSpec extends ObjectBehavior $channel->getLocales()->willReturn(new ArrayCollection([$locale->getWrappedObject()])); $cartFactory->createNew()->willReturn($cart); - $cart->setCustomer($customer)->shouldBeCalled(); - $cart->setCreatedByGuest(false)->shouldBeCalled(); + $cart->setCustomerWithAuthorization($customer)->shouldBeCalled(); $cart->setBillingAddress($address)->shouldBeCalled(); $cart->setChannel($channel)->shouldBeCalled(); $cart->setCurrencyCode('USD')->shouldBeCalled(); @@ -136,8 +135,7 @@ final class PickupCartHandlerSpec extends ObjectBehavior $channel->getLocales()->willReturn(new ArrayCollection([$locale->getWrappedObject()])); $cartFactory->createNew()->willReturn($cart); - $cart->setCustomer($customer)->shouldBeCalled(); - $cart->setCreatedByGuest(false)->shouldBeCalled(); + $cart->setCustomerWithAuthorization($customer)->shouldBeCalled(); $cart->setBillingAddress(null)->shouldBeCalled(); $cart->setChannel($channel)->shouldBeCalled(); $cart->setCurrencyCode('USD')->shouldBeCalled(); diff --git a/src/Sylius/Bundle/ApiBundle/spec/EventListener/ApiCartBlamerListenerSpec.php b/src/Sylius/Bundle/ApiBundle/spec/EventListener/ApiCartBlamerListenerSpec.php index 6ff8153ca1..12e3118cce 100644 --- a/src/Sylius/Bundle/ApiBundle/spec/EventListener/ApiCartBlamerListenerSpec.php +++ b/src/Sylius/Bundle/ApiBundle/spec/EventListener/ApiCartBlamerListenerSpec.php @@ -75,7 +75,7 @@ final class ApiCartBlamerListenerSpec extends ObjectBehavior ): void { $sectionResolver->getSection()->willReturn($shopApiOrdersSubSectionSection); $cartContext->getCart()->willReturn($cart); - $cart->getCreatedByGuest()->willReturn(true); + $cart->isCreatedByGuest()->willReturn(true); $token->getUser()->willReturn($user); $user->getCustomer()->willReturn($customer); @@ -104,7 +104,7 @@ final class ApiCartBlamerListenerSpec extends ObjectBehavior ): void { $sectionResolver->getSection()->willReturn($shopApiOrdersSubSectionSection); $cartContext->getCart()->willReturn($cart); - $cart->getCreatedByGuest()->willReturn(false); + $cart->isCreatedByGuest()->willReturn(false); $cart->setCustomer(Argument::any())->shouldNotBeCalled(); diff --git a/src/Sylius/Bundle/ShopBundle/EventListener/ShopCartBlamerListener.php b/src/Sylius/Bundle/ShopBundle/EventListener/ShopCartBlamerListener.php index 78b6c0740c..f4d51ae7f8 100644 --- a/src/Sylius/Bundle/ShopBundle/EventListener/ShopCartBlamerListener.php +++ b/src/Sylius/Bundle/ShopBundle/EventListener/ShopCartBlamerListener.php @@ -65,8 +65,7 @@ final class ShopCartBlamerListener return; } - $cart->setCustomer($user->getCustomer()); - $cart->setCreatedByGuest(false); + $cart->setCustomerWithAuthorization($user->getCustomer()); } /** diff --git a/src/Sylius/Bundle/ShopBundle/spec/EventListener/ShopCartBlamerListenerSpec.php b/src/Sylius/Bundle/ShopBundle/spec/EventListener/ShopCartBlamerListenerSpec.php index 6fdeec301a..b6d9b213a8 100644 --- a/src/Sylius/Bundle/ShopBundle/spec/EventListener/ShopCartBlamerListenerSpec.php +++ b/src/Sylius/Bundle/ShopBundle/spec/EventListener/ShopCartBlamerListenerSpec.php @@ -88,8 +88,7 @@ final class ShopCartBlamerListenerSpec extends ObjectBehavior $userEvent->getUser()->willReturn($user); $user->getCustomer()->willReturn($customer); - $cart->setCustomer($customer)->shouldBeCalled(); - $cart->setCreatedByGuest(false)->shouldBeCalled(); + $cart->setCustomerWithAuthorization($customer)->shouldBeCalled(); $this->onImplicitLogin($userEvent); } @@ -110,8 +109,7 @@ final class ShopCartBlamerListenerSpec extends ObjectBehavior $token->getUser()->willReturn($user); $user->getCustomer()->willReturn($customer); - $cart->setCustomer($customer)->shouldBeCalled(); - $cart->setCreatedByGuest(false)->shouldBeCalled(); + $cart->setCustomerWithAuthorization($customer)->shouldBeCalled(); $this->onInteractiveLogin(new InteractiveLoginEvent($request->getWrappedObject(), $token->getWrappedObject())); } @@ -129,8 +127,7 @@ final class ShopCartBlamerListenerSpec extends ObjectBehavior $cartContext->getCart()->willReturn($cart); $cart->getCustomer()->willReturn($customer); - $cart->setCustomer(Argument::any())->shouldNotBeCalled(); - $cart->setCreatedByGuest(false)->shouldNotBeCalled(); + $cart->setCustomerWithAuthorization(Argument::any())->shouldNotBeCalled(); $this->onInteractiveLogin(new InteractiveLoginEvent($request->getWrappedObject(), $token->getWrappedObject())); } @@ -147,8 +144,7 @@ final class ShopCartBlamerListenerSpec extends ObjectBehavior $cartContext->getCart()->willReturn($cart); $token->getUser()->willReturn('anon.'); - $cart->setCustomer(Argument::any())->shouldNotBeCalled(); - $cart->setCreatedByGuest(false)->shouldNotBeCalled(); + $cart->setCustomerWithAuthorization(Argument::any())->shouldNotBeCalled(); $this->onInteractiveLogin(new InteractiveLoginEvent($request->getWrappedObject(), $token->getWrappedObject())); } diff --git a/src/Sylius/Component/Core/Cart/Context/ShopBasedCartContext.php b/src/Sylius/Component/Core/Cart/Context/ShopBasedCartContext.php index 4f51d3afa0..433087ed07 100644 --- a/src/Sylius/Component/Core/Cart/Context/ShopBasedCartContext.php +++ b/src/Sylius/Component/Core/Cart/Context/ShopBasedCartContext.php @@ -90,11 +90,7 @@ final class ShopBasedCartContext implements CartContextInterface private function setCustomerAndAddressOnCart(OrderInterface $cart, CustomerInterface $customer): void { - $cart->setCustomer($customer); - - if ($this->createdByGuestFlagResolver !== null) { - $cart->setCreatedByGuest($this->createdByGuestFlagResolver->resolveFlag()); - } + $this->setCustomer($cart, $customer); $defaultAddress = $customer->getDefaultAddress(); if (null !== $defaultAddress) { @@ -103,4 +99,15 @@ final class ShopBasedCartContext implements CartContextInterface $cart->setBillingAddress($clonedAddress); } } + + private function setCustomer(OrderInterface $cart, CustomerInterface $customer): void + { + if ($this->createdByGuestFlagResolver !== null && !$this->createdByGuestFlagResolver->resolveFlag()) { + $cart->setCustomerWithAuthorization($customer); + + return; + } + + $cart->setCustomer($customer); + } } diff --git a/src/Sylius/Component/Core/Model/Order.php b/src/Sylius/Component/Core/Model/Order.php index 1698c87b66..1b0899d150 100644 --- a/src/Sylius/Component/Core/Model/Order.php +++ b/src/Sylius/Component/Core/Model/Order.php @@ -115,6 +115,12 @@ class Order extends BaseOrder implements OrderInterface $this->customer = $customer; } + public function setCustomerWithAuthorization(?BaseCustomerInterface $customer): void + { + $this->setCustomer($customer); + $this->createdByGuest = false; + } + public function getChannel(): ?BaseChannelInterface { return $this->channel; @@ -472,13 +478,22 @@ class Order extends BaseOrder implements OrderInterface return $total; } - public function getCreatedByGuest(): bool + public function isCreatedByGuest(): bool { return $this->createdByGuest; } + public function getCreatedByGuest(): bool + { + @trigger_error('This method is deprecated since Sylius 1.12 and it will be removed in Sylius 2.0. Please use `isCreatedByGuest` instead.'); + + return $this->isCreatedByGuest(); + } + public function setCreatedByGuest(bool $createdByGuest): void { + @trigger_error('This method is deprecated since Sylius 1.12 and it will be removed in Sylius 2.0. This flag should be changed only through `setCustomerWithAuthorization` method.'); + $this->createdByGuest = $createdByGuest; } } diff --git a/src/Sylius/Component/Core/Model/OrderInterface.php b/src/Sylius/Component/Core/Model/OrderInterface.php index 4fc5effe47..b54aa9a034 100644 --- a/src/Sylius/Component/Core/Model/OrderInterface.php +++ b/src/Sylius/Component/Core/Model/OrderInterface.php @@ -17,6 +17,7 @@ use Doctrine\Common\Collections\Collection; use Sylius\Component\Channel\Model\ChannelAwareInterface; use Sylius\Component\Channel\Model\ChannelInterface as BaseChannelInterface; use Sylius\Component\Customer\Model\CustomerAwareInterface; +use Sylius\Component\Customer\Model\CustomerInterface as BaseCustomerInterface; use Sylius\Component\Order\Model\OrderInterface as BaseOrderInterface; use Sylius\Component\Payment\Model\PaymentsSubjectInterface; use Sylius\Component\Promotion\Model\CountablePromotionSubjectInterface; @@ -117,6 +118,10 @@ interface OrderInterface extends public function setCustomerIp(?string $customerIp): void; + public function setCustomerWithAuthorization(?BaseCustomerInterface $customer): void; + + public function isCreatedByGuest(): bool; + public function getCreatedByGuest(): bool; public function setCreatedByGuest(bool $createdByGuest): void; diff --git a/src/Sylius/Component/Core/spec/Cart/Context/ShopBasedCartContextSpec.php b/src/Sylius/Component/Core/spec/Cart/Context/ShopBasedCartContextSpec.php index 0a47ef46d2..a105b245ec 100644 --- a/src/Sylius/Component/Core/spec/Cart/Context/ShopBasedCartContextSpec.php +++ b/src/Sylius/Component/Core/spec/Cart/Context/ShopBasedCartContextSpec.php @@ -189,7 +189,7 @@ final class ShopBasedCartContextSpec extends ObjectBehavior $this->getCart()->shouldReturn($secondCart); } - function it_sets_created_by_guest_flag_as_false_if_order_is_created_by_logged_in_customer( + function it_creates_order_for_authorized_user( CartContextInterface $cartContext, ShopperContextInterface $shopperContext, CreatedByGuestFlagResolverInterface $createdByGuestFlagResolver, @@ -202,8 +202,6 @@ final class ShopBasedCartContextSpec extends ObjectBehavior $createdByGuestFlagResolver->resolveFlag()->willReturn(false); - $cart->setCreatedByGuest(false)->shouldBeCalled(); - $cartContext->getCart()->shouldBeCalledTimes(1)->willReturn($cart); $shopperContext->getChannel()->willReturn($channel); @@ -217,40 +215,7 @@ final class ShopBasedCartContextSpec extends ObjectBehavior $cart->setChannel($channel)->shouldBeCalled(); $cart->setCurrencyCode('PLN')->shouldBeCalled(); $cart->setLocaleCode('pl')->shouldBeCalled(); - $cart->setCustomer($customer)->shouldBeCalled(); - - $this->getCart()->shouldReturn($cart); - } - - function it_sets_created_by_guest_flag_as_true_if_order_is_created_by_anonymous_user( - CartContextInterface $cartContext, - ShopperContextInterface $shopperContext, - CreatedByGuestFlagResolverInterface $createdByGuestFlagResolver, - OrderInterface $cart, - ChannelInterface $channel, - CurrencyInterface $currency, - CustomerInterface $customer - ): void { - $this->beConstructedWith($cartContext, $shopperContext, $createdByGuestFlagResolver); - - $createdByGuestFlagResolver->resolveFlag()->willReturn(true); - - $cart->setCreatedByGuest(true)->shouldBeCalled(); - - $cartContext->getCart()->shouldBeCalledTimes(1)->willReturn($cart); - - $shopperContext->getChannel()->willReturn($channel); - $shopperContext->getLocaleCode()->willReturn('pl'); - $shopperContext->getCustomer()->willReturn($customer); - $customer->getDefaultAddress()->willReturn(null); - - $channel->getBaseCurrency()->willReturn($currency); - $currency->getCode()->willReturn('PLN'); - - $cart->setChannel($channel)->shouldBeCalled(); - $cart->setCurrencyCode('PLN')->shouldBeCalled(); - $cart->setLocaleCode('pl')->shouldBeCalled(); - $cart->setCustomer($customer)->shouldBeCalled(); + $cart->setCustomerWithAuthorization($customer)->shouldBeCalled(); $this->getCart()->shouldReturn($cart); } diff --git a/src/Sylius/Component/Core/spec/Model/OrderSpec.php b/src/Sylius/Component/Core/spec/Model/OrderSpec.php index 8c8cd83d91..977e0bc72b 100644 --- a/src/Sylius/Component/Core/spec/Model/OrderSpec.php +++ b/src/Sylius/Component/Core/spec/Model/OrderSpec.php @@ -49,12 +49,30 @@ final class OrderSpec extends ObjectBehavior $this->getCustomer()->shouldReturn(null); } - function its_allows_defining_customer(CustomerInterface $customer): void + function it_allows_defining_customer(CustomerInterface $customer): void { $this->setCustomer($customer); $this->getCustomer()->shouldReturn($customer); } + function it_allows_defining_authorized_customer(CustomerInterface $customer): void + { + $this->setCustomerWithAuthorization($customer); + $this->getCustomer()->shouldReturn($customer); + $this->isCreatedByGuest()->shouldReturn(false); + } + + function its_created_by_guest_customer_by_default(): void + { + $this->isCreatedByGuest()->shouldReturn(true); + } + + function it_allows_to_mutate_create_by_guest_field(): void + { + $this->setCreatedByGuest(false); + $this->isCreatedByGuest()->shouldReturn(false); + } + function its_customer_can_be_nullable(): void { $this->setCustomer(null);