<?php
namespace App\Entity;
use App\Repository\ArticleRepository;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity(repositoryClass=ArticleRepository::class)
* @ApiResource(
* normalizationContext={
* "groups"={"article:read"}
* },
* denormalizationContext={
* "groups"={"article:write"}
* },
* itemOperations={
* "get"={
* "security"="is_granted('ROLE_USER')"
* }
* },
* collectionOperations={
* "get"={
* "security"="is_granted('ROLE_USER')"
* }
* }
* )
* @ApiFilter(OrderFilter::class,
* properties={
* "id", "title", "categoryName",
* "homepage", "active",
* "startAt", "endAt",
* "createdAt", "updatedAt"
* }
* )
* @ApiFilter(BooleanFilter::class)
* @ApiFilter(DateFilter::class)
* @ApiFilter(SearchFilter::class)
* @ApiFilter(PropertyFilter::class,
* arguments={
* "parameterName"="fields",
* "overrideDefaultProperties"=true
* }
* )
* @Vich\Uploadable
*/
class Article
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @ApiProperty(identifier=true)
* @Groups({"article:read", "article:read:id"})
*/
private $id = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"article:read", "article:read:title", "article:write"})
* @Assert\NotBlank
*/
private $title;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"article:read", "article:read:categoryName", "article:write"})
*/
private $categoryName;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"article:read", "article:read:shortDescription", "article:write"})
* @Assert\NotBlank
*/
private $shortDescription;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"article:read", "article:read:description", "article:write"})
* @Assert\NotBlank
*/
private $description;
/**
* @ORM\ManyToOne(targetEntity=MediaObject::class, cascade={"persist", "refresh", "remove"})
* @Groups({"article:read", "article:write", "article:read:smallPicture"})
*/
private $smallPicture;
/**
* @ORM\ManyToOne(targetEntity=MediaObject::class, cascade={"persist", "refresh", "remove"})
* @Groups({"article:read", "article:write", "article:read:picture"})
*/
private $picture;
/**
* @ORM\ManyToOne(targetEntity=MediaObject::class, cascade={"persist", "refresh", "remove"})
* @Groups({"article:read", "article:write", "article:read:largePicture"})
*/
private $largePicture;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"article:read", "article:write", "article:read:startAt"})
*/
private $startAt;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"article:read", "article:write", "article:read:endAt"})
*/
private $endAt;
/**
* @ORM\Column(type="boolean", options={"default": "1"})
* @Groups({"article:read", "article:read:homepage", "article:write"})
*/
private $homepage = false;
/**
* @ORM\Column(type="boolean", options={"default": "1"})
* @Groups({"article:read", "article:read:active", "article:write"})
*/
private $active = true;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="create")
* @Groups({"article:read", "article:read:createdAt"})
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
* @Gedmo\Timestampable(on="update")
* @Groups({"article:read", "article:read:updatedAt"})
*/
private $updatedAt;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getCategoryName(): ?string
{
return $this->categoryName;
}
public function setCategoryName(string $categoryName): self
{
$this->categoryName = $categoryName;
return $this;
}
public function getShortDescription(): ?string
{
return $this->shortDescription;
}
public function setShortDescription(string $shortDescription): self
{
$this->shortDescription = $shortDescription;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(string $description): self
{
$this->description = $description;
return $this;
}
public function getSmallPicture(): ?MediaObject
{
return $this->smallPicture;
}
public function setSmallPicture(?MediaObject $smallPicture): self
{
$this->smallPicture = $smallPicture;
return $this;
}
public function getPicture(): ?MediaObject
{
return $this->picture;
}
public function setPicture(?MediaObject $picture): self
{
$this->picture = $picture;
return $this;
}
public function getLargePicture(): ?MediaObject
{
return $this->largePicture;
}
public function setLargePicture(?MediaObject $largePicture): self
{
$this->largePicture = $largePicture;
return $this;
}
public function getStartAt(): ?\DateTime
{
return $this->startAt;
}
public function setStartAt(\DateTime $startAt): self
{
$this->startAt = $startAt;
return $this;
}
public function getEndAt(): ?\DateTime
{
return $this->endAt;
}
public function setEndAt(\DateTime $endAt): self
{
$this->endAt = $endAt;
return $this;
}
public function getHomepage(): ?bool
{
return $this->homepage;
}
public function isHomepage(): ?bool
{
return $this->getHomepage();
}
public function setHomepage(bool $homepage): self
{
$this->homepage = $homepage;
return $this;
}
public function getActive(): ?bool
{
return $this->active;
}
public function isActive(): ?bool
{
return $this->getActive();
}
public function setActive(bool $active): self
{
$this->active = $active;
return $this;
}
public function getCreatedAt(): ?\DateTime
{
return $this->createdAt;
}
public function setCreatedAt(\DateTime $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getUpdatedAt(): ?\DateTime
{
return $this->updatedAt;
}
public function setUpdatedAt(\DateTime $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
}