<?phpnamespace Bidcoz\Bundle\CoreBundle\Entity\Proxy;use Bidcoz\Bundle\CoreBundle\Entity\Auction\Item;use Bidcoz\Bundle\CoreBundle\Util\TextManipulator;use Symfony\Component\Validator\Constraints as Assert;use Symfony\Component\Validator\Context\ExecutionContextInterface;/** * A proxy object to create a bid. */class ItemPurchaseProxy{ /** * @Assert\Range(min=".01") * @Assert\NotNull */ protected $amount = 0; /** * @Assert\Range(min=1) * @Assert\NotNull */ protected $quantity = 1; /** * @Assert\NotNull */ protected $item; protected $emails = []; public function __construct(Item $item) { $this->item = $item; if ($item->isFixedPrice()) { $this->amount = $item->getFixedPrice(); } } public function getItem() { return $this->item; } public function setAmount($amount) { $this->amount = $amount; } public function getAmount() { return $this->amount; } public function setQuantity($quantity) { $this->quantity = $quantity; } public function getQuantity() { if ($this->item->getCollectEmail()) { return count($this->emails); } return $this->quantity; } public function setEmails(string $emails) { $this->emails = TextManipulator::parseEmails($emails); } public function getEmails() { return implode(', ', $this->emails); } public function getEmailByIndex(int $idx) { return $this->emails[$idx]; } /** * @Assert\Callback */ public function validate(ExecutionContextInterface $context, $payload) { if (!$this->item->getCollectEmail()) { return; } if ($this->item->isDonation()) { return; } if (0 === count($this->emails)) { $context->buildViolation('Must provide at least one email address.') ->atPath('emails') ->addViolation(); } }}