<?php
namespace App\Entity\MediaLibrary;
use App\Annotation\SiteAware;
use App\Entity\AbstractBase;
use App\Entity\Interfaces\DocumentInterface;
use App\Entity\Interfaces\ImageInterface;
use App\Entity\Interfaces\PublishedInterface;
use App\Entity\Interfaces\SiteInterface;
use App\Entity\MiniAbstractBase;
use App\Entity\Traits\HasDocumentTrait;
use App\Entity\Traits\HasImageTrait;
use App\Entity\Traits\NameTrait;
use App\Entity\Traits\PublishedTrait;
use App\Entity\Traits\SiteTrait;
use App\Entity\User;
use App\Repository\MediaLibraries\CooperativeMediaRepository;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Table(name="vulco_cooperative_media", indexes={@ORM\Index(name="cooperative_media_site_idx", columns={"site"})})
* @ORM\Entity(repositoryClass=CooperativeMediaRepository::class)
* @Gedmo\SoftDeleteable(fieldName="removedAt", timeAware=false)
* @SiteAware(siteFieldName="site")
* @Vich\Uploadable
*/
class CooperativeMedia extends AbstractBase implements SiteInterface, PublishedInterface, DocumentInterface, ImageInterface
{
use NameTrait;
use SiteTrait;
use PublishedTrait;
use HasDocumentTrait;
use HasImageTrait;
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
private string $name;
/**
* @Vich\UploadableField(mapping="cooperative_media_document", fileNameProperty="documentName")
*/
private ?File $document = null;
/**
* @Vich\UploadableField(mapping="cooperative_media_image", fileNameProperty="imageName")
*/
private ?File $image = null;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", orphanRemoval=true)
* @ORM\JoinTable(name="vulco_cooperative_media_downloads",
* joinColumns={@ORM\JoinColumn(name="cooperative_media_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
* )
*/
private ?Collection $downloads;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\MediaLibrary\CooperativeMediaCategory", inversedBy="medias", fetch="EAGER")
* @ORM\JoinColumn(name="cooperative_media_category_id", referencedColumnName="id")
*/
private CooperativeMediaCategory $cooperativeMediaCategory;
public function getDownloads(): ?Collection
{
return $this->downloads;
}
public function setDownloads(Collection $downloads): self
{
$this->downloads = $downloads;
return $this;
}
public function addDownload(User $user): self
{
if (!$this->downloads->contains($user)) {
$this->downloads->add($user);
}
return $this;
}
public function removeDownload(User $user): self
{
if ($this->downloads->contains($user)) {
$this->downloads->remove($user);
}
return $this;
}
public function countDownloads(): int
{
if (null !== $this->getDownloads()) {
return count($this->getDownloads());
}
return 0;
}
public function getCooperativeMediaCategory(): CooperativeMediaCategory
{
return $this->cooperativeMediaCategory;
}
public function setCooperativeMediaCategory(CooperativeMediaCategory $cooperativeMediaCategory): self
{
$this->cooperativeMediaCategory = $cooperativeMediaCategory;
return $this;
}
public function __toString(): string
{
return $this->id ? $this->getName() : MiniAbstractBase::DEFAULT_EMPTY_STRING;
}
}