src/Entity/Post.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiResource;
  4. use App\Repository\PostRepository;
  5. use DateTime;
  6. use DateTimeInterface;
  7. use Doctrine\Common\Collections\ArrayCollection;
  8. use Doctrine\Common\Collections\Collection;
  9. use Doctrine\DBAL\Types\Types;
  10. use Doctrine\ORM\Mapping as ORM;
  11. use Gedmo\Timestampable\Traits\TimestampableEntity;
  12. use Symfony\Component\Serializer\Annotation\Groups;
  13. use Symfony\Component\Validator\Constraints as Assert;
  14. #[ORM\Entity(repositoryClassPostRepository::class)]
  15. #[ApiResource]
  16. class Post
  17. {
  18.     const TYPE_ARTICLE 'article';
  19.     const TYPE_EVENT 'event';
  20.     const STATUS_DRAFT 'draft';
  21.     const STATUS_ONLINE 'online';
  22.     const STATUS_ARCHIVED 'archived';
  23.     #[ORM\Id]
  24.     #[ORM\GeneratedValue]
  25.     #[ORM\Column]
  26.     #[Groups([
  27.         'read:club:collection:getPosts',
  28.     ])]
  29.     private ?int $id null;
  30.     use TimestampableEntity;
  31.     #[ORM\Column(length255)]
  32.     #[Assert\NotBlank]
  33.     #[Groups([
  34.         'read:club:collection:getPosts',
  35.     ])]
  36.     private ?string $title null;
  37.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  38.     #[Groups([
  39.         'read:club:collection:getPosts',
  40.     ])]
  41.     private ?string $content null;
  42.     #[ORM\ManyToOne(inversedBy'posts')]
  43.     #[ORM\JoinColumn(nullabletrueonDelete"SET NULL")]
  44.     private ?Club $club null;
  45.     #[ORM\ManyToOne(inversedBy'posts')]
  46.     #[ORM\JoinColumn(nullabletrueonDelete"SET NULL")]
  47.     #[Groups([
  48.         'read:club:collection:getPosts',
  49.     ])]
  50.     private ?User $author null;
  51.     #[ORM\OneToMany(mappedBy'post'targetEntityPhoto::class, cascade: ["persist"])]
  52.     private Collection $photos;
  53.     #[ORM\Column(length255)]
  54.     #[Assert\NotBlank]
  55.     #[Groups([
  56.         'read:club:collection:getPosts',
  57.     ])]
  58.     private ?string $type null;
  59.     #[ORM\Column(typeTypes::DATETIME_MUTABLEnullabletrue)]
  60.     private ?DateTimeInterface $eventDate null;
  61.     #[ORM\Column(length255)]
  62.     private ?string $status null;
  63.     public function __construct()
  64.     {
  65.         $this->photos = new ArrayCollection();
  66.         $this->type self::TYPE_ARTICLE;
  67.         $this->status self::STATUS_DRAFT;
  68.     }
  69.     public static function getTypeList(): array
  70.     {
  71.         return [
  72.             self::TYPE_ARTICLE => 'Article',
  73.             self::TYPE_EVENT => 'Évènement',
  74.         ];
  75.     }
  76.     public function getTypeLabel(): ?string
  77.     {
  78.         $list self::getTypeList();
  79.         return ($this->type != null && array_key_exists($this->type$list) ? $list[$this->type] : null);
  80.     }
  81.     public static function getStatusList(): array
  82.     {
  83.         return [
  84.             self::STATUS_DRAFT => 'Brouillon',
  85.             self::STATUS_ONLINE => 'En ligne',
  86.             self::STATUS_ARCHIVED => 'Archivé',
  87.         ];
  88.     }
  89.     public function getStatusLabel(): ?string
  90.     {
  91.         $list self::getStatusList();
  92.         return ($this->status != null && array_key_exists($this->status$list) ? $list[$this->status] : null);
  93.     }
  94.     public function getStatusClass(): ?string
  95.     {
  96.         return match ($this->status) {
  97.             self::STATUS_DRAFT => 'primary',
  98.             self::STATUS_ONLINE => 'success',
  99.             self::STATUS_ARCHIVED => 'light',
  100.             default => null,
  101.         };
  102.     }
  103.     #[Groups([
  104.         'read:club:collection:getPosts',
  105.     ])]
  106.     public function getCreatedAt(): ?DateTime
  107.     {
  108.         return $this->createdAt;
  109.     }
  110.     #[Groups([
  111.         'read:club:collection:getPosts',
  112.     ])]
  113.     public function getImageUrl(): string
  114.     {
  115.         $mainPhoto $this->getMainPhoto();
  116.         if ($mainPhoto) {
  117.             return $mainPhoto->getImageLarge()->getUrl();
  118.         }
  119.         return 'https://localbeez.ri7.fr/assets/img/image_placeholder.jpg';
  120.     }
  121.     public function getMainPhoto()
  122.     {
  123.         foreach ($this->photos as $p) {
  124.             if ($p->isMain()) {
  125.                 return $p;
  126.             }
  127.         }
  128.         if (sizeof($this->photos) > 0) {
  129.             return $this->photos[0];
  130.         }
  131.         return false;
  132.     }
  133.     #[Groups([
  134.         'read:club:collection:getPosts',
  135.     ])]
  136.     public function getSmallImageUrl(): string
  137.     {
  138.         $mainPhoto $this->getMainPhoto();
  139.         if ($mainPhoto) {
  140.             return $mainPhoto->getImageSmall()->getUrl();
  141.         }
  142.         return 'https://localbeez.ri7.fr/assets/img/image_placeholder.jpg';
  143.     }
  144.     #[Groups([
  145.         'read:club:collection:getPosts',
  146.     ])]
  147.     public function getMediumImageUrl(): string
  148.     {
  149.         $mainPhoto $this->getMainPhoto();
  150.         if ($mainPhoto) {
  151.             return $mainPhoto->getImageMedium()->getUrl();
  152.         }
  153.         return 'https://localbeez.ri7.fr/assets/img/image_placeholder.jpg';
  154.     }
  155.     public function getId(): ?int
  156.     {
  157.         return $this->id;
  158.     }
  159.     public function getTitle(): ?string
  160.     {
  161.         return $this->title;
  162.     }
  163.     public function setTitle(string $title): self
  164.     {
  165.         $this->title $title;
  166.         return $this;
  167.     }
  168.     public function getContent(): ?string
  169.     {
  170.         return $this->content;
  171.     }
  172.     public function setContent(?string $content): self
  173.     {
  174.         $this->content $content;
  175.         return $this;
  176.     }
  177.     public function getClub(): ?Club
  178.     {
  179.         return $this->club;
  180.     }
  181.     public function setClub(?Club $club): self
  182.     {
  183.         $this->club $club;
  184.         return $this;
  185.     }
  186.     public function getAuthor(): ?User
  187.     {
  188.         return $this->author;
  189.     }
  190.     public function setAuthor(?User $author): self
  191.     {
  192.         $this->author $author;
  193.         return $this;
  194.     }
  195.     /**
  196.      * @return Collection<int, Photo>
  197.      */
  198.     public function getPhotos(): Collection
  199.     {
  200.         return $this->photos;
  201.     }
  202.     public function addPhoto(Photo $photo): self
  203.     {
  204.         if (!$this->photos->contains($photo)) {
  205.             $this->photos->add($photo);
  206.             $photo->setPost($this);
  207.         }
  208.         return $this;
  209.     }
  210.     public function removePhoto(Photo $photo): self
  211.     {
  212.         if ($this->photos->removeElement($photo)) {
  213.             // set the owning side to null (unless already changed)
  214.             if ($photo->getPost() === $this) {
  215.                 $photo->setPost(null);
  216.             }
  217.         }
  218.         return $this;
  219.     }
  220.     public function getType(): ?string
  221.     {
  222.         return $this->type;
  223.     }
  224.     public function setType(?string $type): self
  225.     {
  226.         $this->type $type;
  227.         return $this;
  228.     }
  229.     public function getEventDate(): ?DateTimeInterface
  230.     {
  231.         return $this->eventDate;
  232.     }
  233.     public function setEventDate(?DateTimeInterface $eventDate): self
  234.     {
  235.         $this->eventDate $eventDate;
  236.         return $this;
  237.     }
  238.     public function getStatus(): ?string
  239.     {
  240.         return $this->status;
  241.     }
  242.     public function setStatus(string $status): static
  243.     {
  244.         $this->status $status;
  245.         return $this;
  246.     }
  247. }