src/Domain/Entity/Article.php line 45

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Domain\Entity;
  4. use ApiPlatform\Metadata\ApiResource;
  5. use ApiPlatform\Metadata\Delete;
  6. use ApiPlatform\Metadata\Get;
  7. use ApiPlatform\Metadata\GetCollection;
  8. use ApiPlatform\Metadata\Post;
  9. use ApiPlatform\Metadata\Put;
  10. use App\Application\ApiResources\State\Processor\ArticleCreateProcessor;
  11. use App\Application\ApiResources\State\Processor\ArticlePutProcessor;
  12. use App\Application\Controller\Api\ArticleDuplicateAction;
  13. use App\Domain\Entity\Behavior\Identifiable;
  14. use Doctrine\Common\Collections\ArrayCollection;
  15. use Doctrine\Common\Collections\Collection;
  16. use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
  17. use Gedmo\Timestampable\Traits\Timestampable;
  18. #[ApiResource(
  19.     operations: [
  20.         new Delete(security"is_granted('ROLE_ADMIN')"),
  21.         new GetCollection(paginationEnabledfalsefilters: ['article.search_filter''article.query_filter''soft_delete_filter''article.order_filter']),
  22.         new Get(),
  23.         new Post(
  24.             security"is_granted('ROLE_ADMIN')",
  25.             processorArticleCreateProcessor::class
  26.         ),
  27.         new Put(
  28.             security"is_granted('ROLE_ADMIN')",
  29.             processorArticlePutProcessor::class
  30.         ),
  31.         new Get(
  32.             uriTemplate'/articles/{uuid}/duplicate',
  33.             controllerArticleDuplicateAction::class,
  34.             security"is_granted('ROLE_ADMIN')"
  35.         ),
  36.     ],
  37.     normalizationContext: ['groups' => ['article_read']],
  38.     denormalizationContext: ['groups' => ['article_write']],
  39.     filters: ['translation.groups'],
  40. )]
  41. class Article
  42. {
  43.     public array $MEDIA_TYPES = [
  44.         "blog" => "Blog",
  45.         "facebook" => "Facebook",
  46.         "instagram" => "Instagram",
  47.         "linkedin" => "LinkedIn",
  48.         "site_internet" => "Site internet",
  49.         "tiktok" => "TikTok",
  50.         "youtube" => "YouTube",
  51.     ];
  52.     public $ENTITY_TYPE = ["activity""poi"];
  53.     use Identifiable;
  54.     use SoftDeleteable;
  55.     use Timestampable;
  56.     /** @var Collection<ArticleLocale> */
  57.     public Collection $locales;
  58.     public ?\DateTime $zhistUpdate null;
  59.     /**
  60.      * @param ?Media                    $media
  61.      * @param bool                      $status
  62.      * @param ?string                   $poiType
  63.      * @param string                    $title
  64.      * @param ?string                   $mediaType
  65.      */
  66.     public function __construct(
  67.         public string $title,
  68.         public ?Media $media null,
  69.         public ?string $poiType null,
  70.         public ?string $mediaType null,
  71.         public bool $status false,
  72.         public ?string $entityType null,
  73.     ) {
  74.         $this->locales = new ArrayCollection();
  75.     }
  76.     /**
  77.      * @return string
  78.      */
  79.     public function getType(): string
  80.     {
  81.         return $this->poiType;
  82.     }
  83.     public function addLocale(ArticleLocale $locale): self
  84.     {
  85.         $this->locales->add($locale);
  86.         $locale->setArticle($this);
  87.         return $this;
  88.     }
  89.     public function removeLocale(ArticleLocale $locale): self
  90.     {
  91.         $this->locales->removeElement($locale);
  92.         return $this;
  93.     }
  94.     public function getLocales(): Collection
  95.     {
  96.         return $this->locales;
  97.     }
  98.     public function getFormatedMediaType(string $mediaType): string
  99.     {
  100.         return $this->MEDIA_TYPES[$mediaType];
  101.     }
  102. }