<?php
namespace App\Entity;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Annotations\Annotation\IgnoreAnnotation;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Exception;
use Symfony\Component\Serializer\Annotation\Ignore;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Poll
*
* @ORM\Table(name="poll")
* @ORM\Entity(repositoryClass="App\Repository\PollRepository")
*/
class Poll
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private int $id;
/**
* @ORM\Column(name="title", type="string", length=255)
*
* @Assert\NotBlank()
*/
private string $title;
/**
* @ORM\Column(name="description", type="text")
*
* @Assert\NotBlank()
*/
private string $description;
/**
* @ORM\Column(name="creator", type="string", length=255)
*/
private string $creator;
/**
* @ORM\Column(name="endsAt", type="datetime")
*
* @Assert\NotBlank()
*/
private DateTime|null $endsAt;
/**
* @ORM\Column(name="startsAt", type="datetime")
*
* @Assert\NotBlank()
*/
private DateTime|null $startsAt;
/**
*
* @ORM\ManyToOne(targetEntity="App\Entity\Building", inversedBy="polls")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="building_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
* })
*/
#[Ignore]
private Building $building;
/**
*
* @var Collection<int, PollOption>
* @ORM\OneToMany(targetEntity="App\Entity\PollOption", mappedBy="poll", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private Collection $pollOptions;
/**
* @ORM\Column(name="createdAt", type="datetime")
*/
private DateTime|null $createdAt = null;
/**
* @ORM\Column(name="updateAt", type="datetime")
*/
private DateTime|null $updateAt;
/**
* @ORM\Column(type="string", nullable=true)
*
* @Assert\File(mimeTypes={ "application/pdf" })
*/
private UploadedFile|File|string|null $file = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $fileName = null;
/**
* Poll constructor.
*/
public function __construct()
{
$this->pollOptions = new ArrayCollection();
$this->incrementCreatedAt();
}
/**
* Get id
*
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @return Building
*/
public function getBuilding(): Building
{
return $this->building;
}
/**
* @param Building $building
*/
public function setBuilding(Building $building): void
{
$this->building = $building;
}
/**
* @return string
*/
public function getCreator(): string
{
return $this->creator;
}
/**
* @param string $creator
*/
public function setCreator(string $creator): void
{
$this->creator = $creator;
}
/**
* @return DateTime|null
*/
public function getEndsAt(): ?DateTime
{
return $this->endsAt;
}
/**
* @param DateTime|null $endsAt
*/
public function setEndsAt(?DateTime $endsAt): void
{
$this->endsAt = $endsAt;
}
/**
*
* @return bool
* @throws Exception
*/
public function hasEnded(): bool
{
return self::checkTime($this->endsAt);
}
/**
* @param DateTime $time
*
* @return bool
* @throws Exception
*/
public static function checkTime(DateTime $time): bool
{
return $time < new DateTime();
}
/**
* @return DateTime|null
*/
public function getCreatedAt(): ?DateTime
{
return $this->createdAt;
}
/**
* @param DateTime $createdAt
*/
public function setCreatedAt(DateTime $createdAt): void
{
$this->createdAt = $createdAt;
}
/**
* @return DateTime|null
*/
public function getUpdateAt(): ?DateTime
{
return $this->updateAt;
}
/**
* @param DateTime|null $updateAt
*/
public function setUpdateAt(DateTime|null $updateAt): void
{
$this->updateAt = $updateAt;
}
/**
* @return string
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @param string $title
*/
public function setTitle(string $title): void
{
$this->title = $title;
}
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @param string $description
*/
public function setDescription(string $description): void
{
$this->description = $description;
}
/**
* @return Collection<int, PollOption>
*/
public function getPollOptions(): Collection
{
return $this->pollOptions;
}
/**
* @param Collection<int, PollOption> $pollOptions
*/
public function setPollOptions(Collection $pollOptions): void
{
$this->pollOptions = $pollOptions;
}
public function addPollOption(PollOption $pollOption): self
{
if (!$this->pollOptions->contains($pollOption)) {
$this->pollOptions[] = $pollOption;
$pollOption->setPoll($this);
}
return $this;
}
public function removePollOption(PollOption $pollOption): self
{
if ($this->pollOptions->contains($pollOption)) {
$this->pollOptions->removeElement($pollOption);
}
return $this;
}
/**
* @ORM\PrePersist
*/
public function incrementCreatedAt(): void
{
if (null === $this->createdAt) {
$this->createdAt = new DateTime();
}
$this->updateAt = new DateTime();
}
public function __toString()
{
return (string) $this->getTitle();
}
public function getStartsAt(): ?DateTime
{
return $this->startsAt;
}
public function setStartsAt(?DateTime $startsAt): void
{
$this->startsAt = $startsAt;
}
public function getFile(): File|string|UploadedFile|null
{
return $this->file;
}
public function setFile(File|string|UploadedFile|null $file): void
{
$this->file = $file;
}
public function getFileName(): ?string
{
return $this->fileName;
}
public function setFileName(?string $fileName): self
{
$this->fileName = $fileName;
return $this;
}
}