From 2bde1b0660585e16116fbd12c86b53e886b6f3be Mon Sep 17 00:00:00 2001 From: Jonathan Tschanter Date: Fri, 21 Jan 2022 00:14:34 +0100 Subject: Add first layout with simplecss --- src/Controller/Card.php | 101 +++++++++++++++++++++++++++++++++++++++--------- src/Controller/Home.php | 11 ++++-- src/Model/Card.php | 61 +++++++++++++++++++++++++---- src/Router.php | 13 +++++-- 4 files changed, 154 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/Controller/Card.php b/src/Controller/Card.php index d4ee393..e7fa793 100644 --- a/src/Controller/Card.php +++ b/src/Controller/Card.php @@ -8,6 +8,7 @@ use Elements\Model\Card as CardModel; use Elements\Model\CardMeta; use Elements\Model\VoteArtwork; use Elements\Model\VoteCard; +use Elements\Template; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; @@ -15,6 +16,69 @@ use Symfony\Component\HttpFoundation\Response; class Card { + public static function get(Request $request) + { + $route = $request->attributes->get('route'); + $cardId = $route['id']; + + $card = DB::$entityManager->getRepository(CardModel::class)->find($cardId); + + return $card; + } + + public static function getAll(): array + { + // TODO: is that correct? yes - how to call this getAll? + return DB::$entityManager->getRepository(CardModel::class)->findAll(); + } + + public static function listCards(): string + { + // get all cards + $cards = DB::$entityManager->getRepository(CardModel::class)->findAll(); + + return Template::render('card/card_list.twig', [ + 'cards' => $cards + ]); + } + + public static function addCard(): string + { + // TODO: how to access all available meta? + return Template::render('card/card_add.twig', [ + 'fields' => [ + 'name' => 'meta[name]', + 'converted mana cost' => 'meta[cmc]', + 'is uno reverse' => 'meta[is_uno_reverse]', + ], + ]); + } + + public static function displayCard(Request $request): string + { + $route = $request->attributes->get('route'); + $cardId = $route['id']; + + $card = DB::$entityManager->getRepository(CardModel::class)->find($cardId); + + return Template::render('card/card_display.twig', [ + 'card' => $card + ]); + } + + public static function editCard(Request $request) + { + $route = $request->attributes->get('route'); + $cardId = $route['id']; + + $card = DB::$entityManager->getRepository(CardModel::class)->find($cardId); + $metas = DB::$entityManager->getRepository(CardMeta::class)->findAll(); + + return Template::render('card/card_edit.twig', [ + 'card' => $card + ]); + } + public static function add(Request $request) { $card = new CardModel(); @@ -28,19 +92,19 @@ class Card /**@var UploadedFile[] $files*/ if ($files = $request->files->get('images')) { foreach ($files as $file) { - $image = Artwork::fromUploadedFile($file); - - /*TEST*/ - for ($i = 0; $i <= rand(0, 40); $i++) { - $vote = new VoteArtwork(); - $vote->value = rand(-1, 1) >= 0 ? 1 : -1; - $image->addVote($vote); - DB::save($vote); - } - /*TEST*/ - - $card->addArtwork($image); - DB::save($image); + $image = Artwork::fromUploadedFile($file); + + /*TEST*/ + for ($i = 0; $i <= rand(0, 40); $i++) { + $vote = new VoteArtwork(); + $vote->value = rand(-1, 1) >= 0 ? 1 : -1; + $image->addVote($vote); + DB::save($vote); + } + /*TEST*/ + + $card->addArtwork($image); + DB::save($image); } } @@ -55,19 +119,18 @@ class Card DB::save($card); - $response = new RedirectResponse('/'); - + $response = new RedirectResponse('/card/' . $card->id); return $response; } - public static function get(Request $request) + public static function edit(Request $request) { $route = $request->attributes->get('route'); $cardId = $route['id']; - $card = DB::$entityManager->getRepository(CardModel::class)->find($cardId); + // TODO: like add but edit - return $card->getMeta('name'); + $response = new RedirectResponse('/card/' . $cardId); + return $response; } } - diff --git a/src/Controller/Home.php b/src/Controller/Home.php index 1c1500c..7eda5ee 100644 --- a/src/Controller/Home.php +++ b/src/Controller/Home.php @@ -21,11 +21,16 @@ class Home return Template::render('home.twig', [ 'fields' => [ - 'name' => 'meta[name]', - 'converted mana cost' => 'meta[cmc]', - 'is uno reverse' => 'meta[is_uno_reverse]', + 'name' => 'meta[name]', + 'converted mana cost' => 'meta[cmc]', + 'is uno reverse' => 'meta[is_uno_reverse]', ], ]); } + + public static function dashboard() + { + return Template::render('dashboard.twig', []); + } } diff --git a/src/Model/Card.php b/src/Model/Card.php index abaa06e..59d2639 100644 --- a/src/Model/Card.php +++ b/src/Model/Card.php @@ -104,24 +104,71 @@ class Card // if meta is already hydrated if ($this->meta->isInitialized()) { $meta = $this->meta->unwrap() - #->findFirst(fn (CardMeta $item) => $item->key === $key); - ->filter(fn ($item) => $item->key === $key)->first(); - + #->findFirst(fn (CardMeta $item) => $item->key === $key); + ->filter(fn ($item) => $item->key === $key)->first(); return $meta->value ?? null; } // get directly from db otherwise $result = DB::$entityManager ->createQuery( - 'SELECT cm.value - FROM Elements\Model\CardMeta cm - WHERE cm.key = :key AND cm.card = :card' + 'SELECT cm.value + FROM Elements\Model\CardMeta cm + WHERE cm.key = :key AND cm.card = :card' ) ->setParameter('key', $key) ->setParameter('card', $this) ->getOneOrNullResult(); - return $result['value'] ?? null; + return $result['value'] ?? null; + } + + /** + * @return CardMeta[] + */ + public function getAllMeta() + { + // TODO: do we need this? + // if meta is already hydrated + if ($this->meta->isInitialized()) { + return $this->meta; + } + + // get directly from db otherwise + $result = DB::$entityManager + ->createQuery( + 'SELECT cm + FROM Elements\Model\CardMeta cm + WHERE cm.card = :card' + ) + ->setParameter('card', $this) + ->getArrayResult(); + + return $result; + } + + /** + * @return Artwork[] + */ + public function getAllArtworks() + { + // TODO: do we need this? + // if artworks are already hydrated + if ($this->artworks->isInitialized()) { + return $this->artworks; + } + + // get directly from db otherwise + $result = DB::$entityManager + ->createQuery( + 'SELECT aw + FROM Elements\Model\Artwork aw + WHERE aw.card = :card' + ) + ->setParameter('card', $this) + ->getArrayResult(); + + return $result; } /** diff --git a/src/Router.php b/src/Router.php index 5635d5c..aad6122 100644 --- a/src/Router.php +++ b/src/Router.php @@ -27,9 +27,16 @@ class Router $response = new Response(); $this->routes = new RouteCollection(); - $this->addRoute('GET', '/', [Home::class, 'index']); - $this->addRoute('GET', '/card/{id}', [Card::class, 'get']); - $this->addRoute('POST', '/card/add', [Card::class, 'add']); + $this->addRoute('GET', '/', [Home::class, 'index']); + $this->addRoute('GET', '/dashboard', [Home::class, 'dashboard']); + + // card + $this->addRoute('GET', '/card/list', [Card::class, 'listCards']); + $this->addRoute('GET', '/card/add', [Card::class, 'addCard']); + $this->addRoute('GET', '/card/{id}', [Card::class, 'displayCard']); + $this->addRoute('GET', '/card/{id}/edit', [Card::class, 'editCard']); + $this->addRoute('POST', '/card/add', [Card::class, 'add']); + $this->addRoute('POST', '/card/{id}/edit', [Card::class, 'edit']); $context = new RequestContext(); $context->fromRequest($request); -- cgit v1.2.3