src/Entity/Utils/Cloudinary/Media.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Utils\Cloudinary;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Symfony\Component\Validator\Constraints as Assert;
  6. /**
  7.  * Class Media.
  8.  */
  9. #[ORM\Table(name'cloudinary_media')]
  10. #[ORM\Entity(repositoryClass\App\Repository\Utils\Cloudinary\MediaRepository::class)]
  11. class Media
  12. {
  13.     final public const TYPE_SINGLE   'single';
  14.     final public const TYPE_MULTIPLE 'multiple';
  15.     /**
  16.      * Id.
  17.      */
  18.     #[ORM\Id]
  19.     #[ORM\Column(type\Doctrine\DBAL\Types\Types::INTEGER)]
  20.     #[ORM\GeneratedValue]
  21.     protected ?int $id null;
  22.     /**
  23.      * @var \Doctrine\Common\Collections\Collection<\App\Entity\Utils\Cloudinary\MediaModel>
  24.      */
  25.     #[Assert\Valid]
  26.     #[ORM\ManyToMany(targetEntity\App\Entity\Utils\Cloudinary\MediaModel::class, inversedBy'entities'cascade: ['all'])]
  27.     #[ORM\JoinTable(name'cloudinary_media_collection'joinColumns: [new ORM\JoinColumn(name'entity_id'referencedColumnName'id')], inverseJoinColumns: [new ORM\JoinColumn(name'media_id'referencedColumnName'id')])]
  28.     protected \Doctrine\Common\Collections\Collection $medias;
  29.     #[Assert\Valid]
  30.     #[ORM\ManyToOne(targetEntity\App\Entity\Utils\Cloudinary\MediaModel::class, inversedBy'singleEntities'cascade: ['all'])]
  31.     #[ORM\JoinColumn(name'media_id')]
  32.     protected ?MediaModel $singleMedia null;
  33.     /**
  34.      * Media constructor.
  35.      */
  36.     public function __construct()
  37.     {
  38.         $this->medias      = new ArrayCollection();
  39.         $this->singleMedia = new MediaModel();
  40.     }
  41.     public function setId(int $id): void
  42.     {
  43.         $this->id $id;
  44.     }
  45.     public function getId(): ?int
  46.     {
  47.         return $this->id;
  48.     }
  49.     public function getSingleMedia(): MediaModel
  50.     {
  51.         return $this->singleMedia;
  52.     }
  53.     public function setSingleMedia(?MediaModel $singleMedia null): void
  54.     {
  55.         $this->singleMedia $singleMedia;
  56.     }
  57.     public function addMedia(MediaModel $media): void
  58.     {
  59.         $this->medias[] = $media;
  60.         $media->addEntity($this);
  61.     }
  62.     public function removeMedia(MediaModel $media): void
  63.     {
  64.         $this->medias->removeElement($media);
  65.         $media->removeEntity($this);
  66.     }
  67.     public function getMedias(): ArrayCollection
  68.     {
  69.         return $this->medias;
  70.     }
  71.     public function getArrayData(): array
  72.     {
  73.         $data = [];
  74.         if ($this->singleMedia && ($this->singleMedia->getId() || $this->singleMedia->getPublicId())) {
  75.             $data['singleMedia'] = $this->singleMedia->getArrayData();
  76.         } elseif ($this->medias) {
  77.             $medias = [];
  78.             /** @var MediaModel $media */
  79.             foreach ($this->medias as $media) {
  80.                 $medias[] = $media->getArrayData();
  81.             }
  82.             $data['medias'] = $medias;
  83.         }
  84.         return array_merge([
  85.             'id' => $this->id,
  86.         ], $data);
  87.     }
  88.     public function setArrayData(array $data): void
  89.     {
  90.         if (array_key_exists('singleMedia'$data)) {
  91.             if (array_key_exists('id'$data['singleMedia'])) {
  92.                 $media $this->getSingleMedia();
  93.             } else {
  94.                 $media = new MediaModel();
  95.                 $this->setSingleMedia($media);
  96.             }
  97.             $media->setArrayData($data['singleMedia']);
  98.         } elseif (array_key_exists('medias'$data)) {
  99.             foreach ($data['medias'] as $dataImg) {
  100.                 $media = new MediaModel();
  101.                 $media->setArrayData($dataImg);
  102.                 $this->addMedia($media);
  103.             }
  104.         }
  105.     }
  106. }