diff options
author | Daniel Weipert <code@drogueronin.de> | 2022-01-14 18:21:36 +0100 |
---|---|---|
committer | Daniel Weipert <code@drogueronin.de> | 2022-01-14 18:21:36 +0100 |
commit | 4cacc94240944ff316104bfd1b5e8e00fad14517 (patch) | |
tree | 2559dc3aa121d70bd645ff0a2fe56e1ae0695daa /src/Model/Artwork.php | |
parent | 9c0893cb65df986b9edf0f48a6d4d2d65f27b8ef (diff) |
Add Artworks, Votes and better routing
Diffstat (limited to 'src/Model/Artwork.php')
-rw-r--r-- | src/Model/Artwork.php | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/Model/Artwork.php b/src/Model/Artwork.php new file mode 100644 index 0000000..25f6ee5 --- /dev/null +++ b/src/Model/Artwork.php @@ -0,0 +1,101 @@ +<?php + +namespace Elements\Model; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\DBAL\Schema\Column; +use Doctrine\DBAL\Schema\Table; +use Doctrine\ORM\Mapping\Entity; +use Doctrine\ORM\Mapping\GeneratedValue; +use Doctrine\ORM\Mapping\Id; +use Doctrine\ORM\Mapping\ManyToOne; +use Doctrine\ORM\PersistentCollection; +use Elements\DB; +use Symfony\Component\HttpFoundation\File\UploadedFile; + +#[Entity] +#[Table(name: 'artworks')] +/** + * @Entity + * @Table(name="artworks") + */ +class Artwork +{ + #[Id] + #[Column(type: 'integer')] + #[GeneratedValue] + /** + * @Id + * @Column(type="integer") + * @GeneratedValue + */ + public int $id; + + #[Column(type: 'string')] + /** + * @Column(type="string") + */ + public string $path; + + #[ManyToOne(targetEntity: Card::class, inversedBy: 'artworks')] + /** + * @ManyToOne(targetEntity="Card", inversedBy="artworks", cascade={"persist"}) + */ + public Card $card; + + #[OneToMany(targetEntity: VoteArtwork::class, mappedBy: 'artwork')] + /** + * @OneToMany(targetEntity="VoteArtwork", mappedBy="artwork") + */ + public Collection|ArrayCollection|PersistentCollection $votes; + + /** + * Artwork constructor. + */ + public function __construct(string $path) + { + $this->path = $path; + $this->votes = new ArrayCollection(); + } + + /** + * @param UploadedFile $file + * + * @return self + */ + public static function fromUploadedFile(UploadedFile $file): self + { + $artworksDir = dirname(dirname(__DIR__)) . '/public/artworks/'; + $path = str_replace($_SERVER['DOCUMENT_ROOT'], '', $artworksDir . $file->getClientOriginalName()); + $file->move($artworksDir, $file->getClientOriginalName()); + + return new self($path); + } + + /** + * @param VoteArtwork $vote + */ + public function addVote(VoteArtwork $vote) + { + $vote->artwork = $this; + $this->votes[] = $vote; + } + + /** + * @return int + */ + public function getVotesTotal(): int + { + $result = DB::$entityManager + ->createQuery( + 'SELECT sum(v.value) as total + FROM Elements\Model\VoteArtwork v + WHERE v.artwork = :artwork' + ) + ->setParameter('artwork', $this) + ->getOneOrNullResult(); + + return $result['total'] ?? 0; + } +} + |