src/Domain/Entity/Activity.php line 101

Open in your IDE?
  1. <?php
  2. namespace App\Domain\Entity;
  3. use ApiPlatform\Metadata\ApiResource;
  4. use ApiPlatform\Metadata\Delete;
  5. use ApiPlatform\Metadata\Get;
  6. use ApiPlatform\Metadata\GetCollection;
  7. use ApiPlatform\Metadata\Post;
  8. use ApiPlatform\Metadata\Put;
  9. use App\Application\ApiResources\State\Processor\ActivityCreateProcessor;
  10. use App\Application\ApiResources\State\Processor\PostMediaProcessor;
  11. use App\Application\Controller\Api\Activity\ActivityIncrementClickCounterController;
  12. use App\Application\Controller\Api\Activity\ActivityIncrementDetailViewCounterController;
  13. use App\Application\Controller\Api\Activity\ContactAction;
  14. use App\Application\Controller\Api\Activity\DeleteAction;
  15. use App\Application\Controller\Api\Activity\SearchAction;
  16. use App\Application\Controller\Api\Activity\UpdateAction;
  17. use App\Application\Controller\Api\Activity\ValidateAction;
  18. use App\Application\Controller\Api\GoogleTranslateAction;
  19. use App\Application\Dto\Activity\ActivityFormInput;
  20. use App\Application\Dto\Activity\ActivityMediaInput;
  21. use App\Application\Dto\Activity\ActivitySearchOutput;
  22. use App\Application\Service\URLService;
  23. use App\Domain\Entity\Behavior\Identifiable;
  24. use App\Domain\Entity\Enumeration\ActivityType;
  25. use App\Domain\Entity\Translation\ActivityTranslation;
  26. use DateTime;
  27. use Doctrine\Common\Collections\ArrayCollection;
  28. use Doctrine\Common\Collections\Collection;
  29. use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
  30. use Gedmo\Timestampable\Traits\Timestampable;
  31. use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
  32. /**
  33.  * Class Activity
  34.  *
  35.  * @package App\Domain\Entity
  36.  */
  37. #[ApiResource(
  38.     operations: [
  39.         new GetCollection(
  40.             uriTemplate'/activities/elastic',
  41.             controllerSearchAction::class,
  42.             outputActivitySearchOutput::class,
  43.             name'elastic_activities',
  44.         ),
  45.         new GetCollection(filters: [
  46.             'activity.query_filter',
  47.             'activity.query_or_filter',
  48.             'activity.search_filter',
  49.             'activity.boolean_filter',
  50.             'activity.order_filter',
  51.             'soft_delete_filter',
  52.         ]),
  53.         new Delete(controllerDeleteAction::class, security"is_granted('ROLE_ADMIN')"),
  54.         new Get(name'get_activity'),
  55.         new Post(
  56.             uriTemplate'/activities/{uuid}/increment_detail_view_counter',
  57.             controllerActivityIncrementDetailViewCounterController::class
  58.         ),
  59.         new Post(
  60.             uriTemplate'/activities/{uuid}/increment_click_counter',
  61.             controllerActivityIncrementClickCounterController::class,
  62.         ),
  63.         new Post(
  64.             uriTemplate'/activities',
  65.             inputFormats: ['multipart'],
  66.             inputActivityFormInput::class,
  67.             processorActivityCreateProcessor::class
  68.         ),
  69.         new Post(
  70.             uriTemplate'/activities/translate',
  71.             controllerGoogleTranslateAction::class,
  72.             security"is_granted('ROLE_ADMIN')",
  73.             name'post_activity_translate'
  74.         ),
  75.         new Post(
  76.             uriTemplate'/activities/{uuid}/contact',
  77.             controllerContactAction::class,
  78.             name'post_activity_contact'
  79.         ),
  80.         new Post(
  81.             uriTemplate'/activities/{uuid}/medias',
  82.             security"is_granted('ROLE_ADMIN')",
  83.             inputActivityMediaInput::class,
  84.             processorPostMediaProcessor::class,
  85.         ),
  86.         new Put(
  87.             uriTemplate'/activities/{uuid}/validate',
  88.             controllerValidateAction::class,
  89.             security"is_granted('ROLE_ADMIN')",
  90.             name'put_activity_validate'
  91.         ),
  92.         new Put(controllerUpdateAction::class, security"is_granted('ROLE_ADMIN') or object.ownerPro.id == user.id"),
  93.     ],
  94.     normalizationContext: ['groups' => ['activity_read']],
  95.     denormalizationContext: ['groups' => ['activity_write']]
  96. )]
  97. class Activity extends AbstractTranslatable
  98. {
  99.     use Identifiable;
  100.     use Timestampable;
  101.     use SoftDeleteable;
  102.     public const AMOUNT_PRO 99.0;
  103.     public const VAT_AMOUNT_PRO 118.80;
  104.     public const ACTIVITY_PREMIUM 'activity_premium';
  105.     /** @var Collection */
  106.     public Collection $medias;
  107.     public ?string $remoteId null;
  108.     public ?DateTime $zhistUpdate null;
  109.     public function __construct(
  110.         public ?Address $address null,
  111.         public ?ActivityType $type null,
  112.         public ?Locale $authorLocale null,
  113.         public ?Media $logo null,
  114.         public ?Media $mainPicture null,
  115.         public ?Person $author null,
  116.         public ?DateTime $premiumStartDate null,
  117.         public ?DateTime $premiumEndDate null,
  118.         public ?Person $ownerPro null,
  119.         public ?string $telephone null,
  120.         public ?string $website null,
  121.         public ?string $email null,
  122.         public bool $certified false,
  123.         public ?bool $free null,
  124.     ) {
  125.         parent::__construct();
  126.         $this->medias = new ArrayCollection();
  127.         $this->website URLService::formatUrl($this->website);
  128.     }
  129.     public function setWebsite(?string $url): void
  130.     {
  131.         $this->website URLService::formatUrl($url);
  132.     }
  133.     public function getTitle(?string $locale null): ?string
  134.     {
  135.         return $this->getTranslationType($locale)->getTitle();
  136.     }
  137.     public function setTitle(?string $value): void
  138.     {
  139.         $this->getTranslationType()->setTitle($value);
  140.     }
  141.     public function getDescription(): ?string
  142.     {
  143.         return $this->getTranslationType()->getDescription();
  144.     }
  145.     public function setDescription(?string $value): void
  146.     {
  147.         $this->getTranslationType()->setDescription($value);
  148.     }
  149.     public function isElasticSearchPublishable(): bool
  150.     {
  151.         return $this->certified && $this->deletedAt === null;
  152.     }
  153.     public function createTranslation(): ActivityTranslation
  154.     {
  155.         return new ActivityTranslation();
  156.     }
  157.     public function getMedias(): array
  158.     {
  159.         return $this->medias->toArray();
  160.     }
  161.     public function addMedia(Media $media): void
  162.     {
  163.         if (!$this->medias->contains($media)) {
  164.             $this->medias->add($media);
  165.         }
  166.     }
  167.     public function removeMedia(Media $media): void
  168.     {
  169.         if ($this->medias->contains($media)) {
  170.             $this->medias->removeElement($media);
  171.         }
  172.     }
  173.     public function getTranslationType(?string $locale null): ActivityTranslation
  174.     {
  175.         return $this->getTranslation($locale);
  176.     }
  177. }