選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

55 行
1.7KB

  1. <?php
  2. namespace Lc\CaracoleBundle\Factory\Order;
  3. use Lc\CaracoleBundle\Container\Order\OrderShopContainer;
  4. use Lc\CaracoleBundle\Model\Order\OrderShopInterface;
  5. use Lc\CaracoleBundle\Model\Section\SectionInterface;
  6. use Lc\CaracoleBundle\Model\User\VisitorInterface;
  7. use Lc\SovBundle\Factory\AbstractFactory;
  8. use Lc\SovBundle\Model\User\UserInterface;
  9. class OrderShopFactory extends AbstractFactory
  10. {
  11. public function create(
  12. SectionInterface $section,
  13. UserInterface $user = null,
  14. VisitorInterface $visitor = null
  15. ): OrderShopInterface
  16. {
  17. $orderShop = $this->createBase($section);
  18. $orderShopBelongTo = false;
  19. if (!is_null($user)) {
  20. $orderShopBelongTo = true;
  21. $orderShop->setUser($user);
  22. }
  23. if (!is_null($visitor) && !$orderShop->getUser()) {
  24. $orderShopBelongTo = true;
  25. $orderShop->setVisitor($visitor);
  26. }
  27. if (!$orderShopBelongTo) {
  28. /*
  29. * @TODO : lors de la première visite, le cookie visitor n'étant pas encore sur le navigateur du visiteur,
  30. * visitor et user sont à null. Du coup, on ne peut pas déclencher cette exception. Voir s'il n'est pas
  31. * possible d'avoir directement un visitor lors de la première visite.
  32. */
  33. // throw new \ErrorException('La commande doit être liée à un utilisateur ou à un visiteur.');
  34. }
  35. return $orderShop;
  36. }
  37. public function createBase(SectionInterface $section): OrderShopInterface
  38. {
  39. $class = OrderShopContainer::getEntityFqcn();
  40. $orderShop = new $class;
  41. $orderShop->setSection($section);
  42. return $orderShop;
  43. }
  44. }