summaryrefslogtreecommitdiff
path: root/src/Model/Artwork.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Model/Artwork.php')
-rw-r--r--src/Model/Artwork.php101
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;
+ }
+}
+