<?php namespace App\Entity; use App\Entity\Interfaces\AddressInterface; use App\Repository\AddressRepository; use App\Traits\AddressTrait; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use ReflectionClass; /** * @ORM\Entity(repositoryClass=AddressRepository::class) */ class Address implements AddressInterface { const TYPE_BILLING_ADDRESS = 'billing_address'; const TYPE_SHIPPING_ADDRESS = 'shipping_address'; use AddressTrait; /** * @ORM\ManyToOne(targetEntity=User::class, inversedBy="addresses") * @ORM\JoinColumn(nullable=false) */ private $user; /** * @ORM\Column(type="string", length=255, options={"default": self::TYPE_SHIPPING_ADDRESS}) */ private $addressType = self::TYPE_SHIPPING_ADDRESS; /** * @ORM\OneToMany(targetEntity=CartItemShipping::class, mappedBy="shippingAddress") */ private $cartItemShippings; /** * @ORM\Column(type="boolean", nullable=true) */ private $preferred; /** * @ORM\Column(type="text", nullable=true) */ private $comment; public function __construct() { $this->cartItemShippings = new ArrayCollection(); } /** * @return array */ public static function getAddressTypes(): array { $typesAddress = []; $reflect = new ReflectionClass( __CLASS__ ); foreach ($reflect->getConstants() as $k => $const ) { if ( preg_match( "/^(TYPE)/", $k ) ) { $typesAddress[ $const ] = str_replace( "_", ".", $const ); } } return $typesAddress; } /* * ============================================================================================ * =============================== FONCTIONS CUSTOM =========================================== * ============================================================================================ */ public function __toString() { return $this->getName(); } /* * ============================================================================================ * ============================== FIN FONCTIONS CUSTOM ======================================== * ============================================================================================ */ /** * @return User|null */ public function getUser(): ?User { return $this->user; } public function setUser( ?User $user ): self { $this->user = $user; return $this; } public function getAddressType(): ?string { return $this->addressType; } public function setAddressType( ?string $addressType ): self { $this->addressType = $addressType; return $this; } /** * @return Collection|CartItemShipping[] */ public function getCartItemShippings(): Collection { return $this->cartItemShippings; } public function addCartItemShipping( CartItemShipping $cartItemShipping ): self { if ( !$this->cartItemShippings->contains( $cartItemShipping ) ) { $this->cartItemShippings[] = $cartItemShipping; $cartItemShipping->setShippingAddress( $this ); } return $this; } public function removeCartItemShipping( CartItemShipping $cartItemShipping ): self { if ( $this->cartItemShippings->removeElement( $cartItemShipping ) ) { // set the owning side to null (unless already changed) if ( $cartItemShipping->getShippingAddress() === $this ) { $cartItemShipping->setShippingAddress( NULL ); } } return $this; } public function getPreferred(): ?bool { return $this->preferred; } public function setPreferred( ?bool $preferred ): self { $this->preferred = $preferred; return $this; } public function getComment(): ?string { return $this->comment; } public function setComment( ?string $comment ): self { $this->comment = $comment; return $this; } }