From bc4ce0a5d7e4e3c3a3e9254d91f53ecbbc39c373 Mon Sep 17 00:00:00 2001 From: Jason Gessner Date: Thu, 20 Jan 2022 23:04:27 -0600 Subject: [PATCH 01/20] Make all the deck routes work for ids and uuids. --- .../Controller/BuilderController.php | 194 ++++++++++++++---- src/AppBundle/Controller/SocialController.php | 71 ++++++- src/AppBundle/Resources/config/routing.yml | 77 ++++++- 3 files changed, 289 insertions(+), 53 deletions(-) diff --git a/src/AppBundle/Controller/BuilderController.php b/src/AppBundle/Controller/BuilderController.php index 7d22c143..f0defe61 100755 --- a/src/AppBundle/Controller/BuilderController.php +++ b/src/AppBundle/Controller/BuilderController.php @@ -401,6 +401,21 @@ public function meteorimportAction(Request $request, EntityManagerInterface $ent return $this->redirect($this->generateUrl('decks_list')); } + /** + * @param Deck $deck + * @param Judge $judge + * @param CardsData $cardsData + * @return Response + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("deck", class="AppBundle:Deck", options={"mapping": {"deck_uuid": "uuid"}}) + */ + public function textExportByUuidAction(Deck $deck, Judge $judge, CardsData $cardsData) + { + return $this->textExport($deck, $judge, $cardsData); + } + /** * @param Deck $deck * @param Judge $judge @@ -411,7 +426,20 @@ public function meteorimportAction(Request $request, EntityManagerInterface $ent * * @ParamConverter("deck", class="AppBundle:Deck", options={"id" = "deck_id"}) */ - public function textexportAction(Deck $deck, Judge $judge, CardsData $cardsData) + public function textExportByIdAction(Deck $deck, Judge $judge, CardsData $cardsData) + { + return $this->textExport($deck, $judge, $cardsData); + } + + /** + * @param Deck $deck + * @param Judge $judge + * @param CardsData $cardsData + * @return Response + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + */ + public function textExport(Deck $deck, Judge $judge, CardsData $cardsData) { if ($this->getUser()->getId() != $deck->getUser()->getId()) { throw $this->createAccessDeniedException(); @@ -543,6 +571,19 @@ public function textexportAction(Deck $deck, Judge $judge, CardsData $cardsData) return $response; } + /** + * @param Deck $deck + * @return Response + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("deck", class="AppBundle:Deck", options={"mapping": {"deck_uuid": "uuid"}}) + */ + public function octgnExportByUuidAction(Deck $deck) + { + return $this->octgnExport($deck); + } + /** * @param Deck $deck * @return Response @@ -551,7 +592,16 @@ public function textexportAction(Deck $deck, Judge $judge, CardsData $cardsData) * * @ParamConverter("deck", class="AppBundle:Deck", options={"id" = "deck_id"}) */ - public function octgnexportAction(Deck $deck) + public function octgnExportByIdAction(Deck $deck) + { + return $this->octgnExport($deck); + } + + /** + * @param Deck $deck + * @return Response + */ + public function octgnExport(Deck $deck) { if ($this->getUser()->getId() != $deck->getUser()->getId()) { throw $this->createAccessDeniedException(); @@ -583,24 +633,14 @@ public function octgnexportAction(Deck $deck) return new Response('no identity found'); } - return $this->octgnexport("$name.o8d", $identity, $rd, $deck->getDescription()); - } + $filename = "$name.o8d"; - /** - * @param string $filename - * @param array $identity - * @param array $rd - * @param string $description - * @return Response - */ - public function octgnexport(string $filename, array $identity, array $rd, string $description) - { $content = $this->renderView( '/octgn.xml.twig', [ "identity" => $identity, "rd" => $rd, - "description" => strip_tags($description), + "description" => strip_tags($deck->getDescription()), ] ); @@ -735,18 +775,8 @@ public function deleteListAction(Request $request, EntityManagerInterface $entit return $this->redirect($this->generateUrl('decks_list')); } - /** - * @param int $deck_id - * @param EntityManagerInterface $entityManager - * @return Response - * @throws \Doctrine\DBAL\DBALException - * - * @IsGranted("IS_AUTHENTICATED_REMEMBERED") - */ - public function editAction(int $deck_id, EntityManagerInterface $entityManager) - { - $dbh = $entityManager->getConnection(); - $rows = $dbh->executeQuery(" + private function editQueryBase() { + return " SELECT d.id, d.name, @@ -762,10 +792,13 @@ public function editAction(int $deck_id, EntityManagerInterface $entityManager) LEFT JOIN mwl m ON d.mwl_id=m.id LEFT JOIN user u ON d.user_id=u.id LEFT JOIN side s ON d.side_id=s.id - WHERE d.id=? - ", [ - $deck_id, - ])->fetchAll(); + "; + } + + private function edit(EntityManagerInterface $entityManager, array $queryWithArgs) + { + $dbh = $entityManager->getConnection(); + $rows = $dbh->executeQuery($queryWithArgs[0], $queryWithArgs[1])->fetchAll(); $deck = $rows[0]; @@ -782,7 +815,7 @@ public function editAction(int $deck_id, EntityManagerInterface $entityManager) FROM deckslot s JOIN card c ON s.card_id=c.id WHERE s.deck_id=?", [ - $deck_id, + $deck['id'], ])->fetchAll(); $cards = []; @@ -799,7 +832,7 @@ public function editAction(int $deck_id, EntityManagerInterface $entityManager) c.saved FROM deckchange c WHERE c.deck_id=? AND c.saved=1 - ORDER BY date_creation DESC", [$deck_id])->fetchAll(); + ORDER BY date_creation DESC", [$deck['id']])->fetchAll(); // recreating the versions with the variation info, starting from $preversion $preversion = $cards; @@ -840,7 +873,7 @@ public function editAction(int $deck_id, EntityManagerInterface $entityManager) c.saved FROM deckchange c WHERE c.deck_id=? AND c.saved=0 - ORDER BY date_creation ASC", [$deck_id])->fetchAll(); + ORDER BY date_creation ASC", [$deck['id']])->fetchAll(); // recreating the snapshots with the variation info, starting from $postversion $postversion = $cards; @@ -886,7 +919,7 @@ public function editAction(int $deck_id, EntityManagerInterface $entityManager) ORDER BY d.date_creation ASC", [ - $deck_id, + $deck['id'], ] )->fetchAll(); @@ -905,7 +938,7 @@ public function editAction(int $deck_id, EntityManagerInterface $entityManager) ORDER BY d.date_creation ASC", [ - $deck_id, + $deck['id'], ] )->fetchAll(); @@ -924,6 +957,32 @@ public function editAction(int $deck_id, EntityManagerInterface $entityManager) ); } + /** + * @param string $deck_uuid + * @param EntityManagerInterface $entityManager + * @return Response + * @throws \Doctrine\DBAL\DBALException + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + */ + public function editByUuidAction(string $deck_uuid, EntityManagerInterface $entityManager) + { + return $this->edit($entityManager, [$this->editQueryBase() . " WHERE d.uuid = ?", [$deck_uuid]]); + } + + /** + * @param int $deck_id + * @param EntityManagerInterface $entityManager + * @return Response + * @throws \Doctrine\DBAL\DBALException + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + */ + public function editByIdAction(int $deck_id, EntityManagerInterface $entityManager) + { + return $this->edit($entityManager, [$this->editQueryBase() . " WHERE d.id= ?", [$deck_id]]); + } + public function viewByIdAction(int $deck_id, EntityManagerInterface $entityManager, Judge $judge) { $dbh = $entityManager->getConnection(); $rows = $dbh->executeQuery(" @@ -1150,6 +1209,43 @@ public function copyAction(Decklist $decklist) ); } + /** + * @param Deck $deck + * @return Response + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("deck", class="AppBundle:Deck", options={"mapping": {"deck_uuid": "uuid"}}) + */ + public function duplicateByUuidAction(Deck $deck) + { + if ($this->getUser()->getId() != $deck->getUser()->getId()) { + throw $this->createAccessDeniedException(); + } + + $content = []; + foreach ($deck->getSlots() as $slot) { + $content[$slot->getCard()->getCode()] = $slot->getQuantity(); + } + $description = strlen($deck->getDescription()) > 0 ? ("Original deck notes:\n\n" . $deck->getDescription()) : ''; + + $mwl = $deck->getMwl(); + if ($mwl instanceof Mwl) { + $mwl = $mwl->getCode(); + } + + return $this->forward( + 'AppBundle:Builder:save', + [ + 'name' => $deck->getName() . ' (copy)', + 'content' => json_encode($content), + 'description' => $description, + 'deck_id' => $deck->getParent() ? $deck->getParent()->getId() : null, + 'mwl_code' => $mwl, + ] + ); + } + /** * @param Deck $deck * @return Response @@ -1158,7 +1254,7 @@ public function copyAction(Decklist $decklist) * * @ParamConverter("deck", class="AppBundle:Deck", options={"id" = "deck_id"}) */ - public function duplicateAction(Deck $deck) + public function duplicateByIdAction(Deck $deck) { if ($this->getUser()->getId() != $deck->getUser()->getId()) { throw $this->createAccessDeniedException(); @@ -1292,8 +1388,27 @@ public function uploadallAction(Request $request, EntityManagerInterface $entity * * @ParamConverter("deck", class="AppBundle:Deck", options={"id" = "deck_id"}) */ - public function autosaveAction(Deck $deck, Request $request, EntityManagerInterface $entityManager) + public function autosaveByIdAction(Deck $deck, Request $request, EntityManagerInterface $entityManager) { + return $this->autosave($deck, $request, $entityManager); + } + + /** + * @param Deck $deck + * @param Request $request + * @param EntityManagerInterface $entityManager + * @return Response + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("deck", class="AppBundle:Deck", options={"mapping": {"deck_uuid": "uuid"}}) + */ + public function autosaveByUuidAction(Deck $deck, Request $request, EntityManagerInterface $entityManager) + { + return $this->autosave($deck, $request, $entityManager); + } + + private function autosave(Deck $deck, Request $request, EntityManagerInterface $entityManager) { $user = $this->getUser(); if ($user->getId() != $deck->getUser()->getId()) { @@ -1304,8 +1419,7 @@ public function autosaveAction(Deck $deck, Request $request, EntityManagerInterf if (count($diff) != 2) { throw new BadRequestHttpException("Wrong content " . $diff); } - - if (count($diff[0]) || count($diff[1])) { + if (count((array) $diff[0]) || count((array) $diff[1])) { $change = new Deckchange(); $change->setDeck($deck); $change->setVariation(json_encode($diff)); @@ -1317,5 +1431,5 @@ public function autosaveAction(Deck $deck, Request $request, EntityManagerInterf } return new Response(''); - } + } } diff --git a/src/AppBundle/Controller/SocialController.php b/src/AppBundle/Controller/SocialController.php index 7bff4583..5c86e900 100755 --- a/src/AppBundle/Controller/SocialController.php +++ b/src/AppBundle/Controller/SocialController.php @@ -32,6 +32,67 @@ class SocialController extends Controller { + /** + * This function is used to check if a deck can be published from the deck list page. + * + * @param Deck $deck + * @param EntityManagerInterface $entityManager + * @param Judge $judge + * @return JsonResponse + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("deck", class="AppBundle:Deck", options={"mapping": {"deck_uuid": "uuid"}}) + */ + public function publishByUuidAction(Deck $deck, EntityManagerInterface $entityManager, Judge $judge) + { + $response = new JsonResponse(); + + if ($this->getUser()->getId() != $deck->getUser()->getId()) { + throw $this->createAccessDeniedException(); + } + + $analyse = $judge->analyse($deck->getSlots()->toArray()); + + if (isset($analyse['problem'])) { + $response->setData([ + 'allowed' => false, + 'message' => $judge->problem($analyse), + ]); + + return $response; + } + + $new_content = json_encode($deck->getContent()); + $new_signature = md5($new_content); + $old_decklists = $entityManager + ->getRepository('AppBundle:Decklist') + ->findBy([ + 'signature' => $new_signature, + ]); + foreach ($old_decklists as $decklist) { + if (json_encode($decklist->getContent()) == $new_content) { + $url = $this->generateUrl('decklist_detail', [ + 'decklist_id' => $decklist->getId(), + 'decklist_name' => $decklist->getPrettyName(), + ]); + $response->setData([ + 'allowed' => true, + 'message' => 'This deck is already published. Are you sure you want to publish a duplicate?', + ]); + + return $response; + } + } + + $response->setData([ + 'allowed' => true, + 'message' => '', + ]); + + return $response; + } + /** * This function is used to check if a deck can be published from the deck list page. * @@ -44,7 +105,7 @@ class SocialController extends Controller * * @ParamConverter("deck", class="AppBundle:Deck", options={"id" = "deck_id"}) */ - public function publishAction(Deck $deck, EntityManagerInterface $entityManager, Judge $judge) + public function publishByIdAction(Deck $deck, EntityManagerInterface $entityManager, Judge $judge) { $response = new JsonResponse(); @@ -643,7 +704,7 @@ public function voteAction(Request $request, EntityManagerInterface $entityManag * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function textexportAction(Decklist $decklist, Judge $judge, CardsData $cardsData) + public function textExportAction(Decklist $decklist, Judge $judge, CardsData $cardsData) { $response = new Response(); $response->setPublic(); @@ -779,7 +840,7 @@ public function textexportAction(Decklist $decklist, Judge $judge, CardsData $ca * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function octgnexportAction(Decklist $decklist) + public function octgnExportAction(Decklist $decklist) { $response = new Response(); $response->setPublic(); @@ -811,7 +872,7 @@ public function octgnexportAction(Decklist $decklist) return new Response('no identity found'); } - return $this->octgnexport("$name.o8d", $identity, $rd, $decklist->getRawdescription(), $response); + return $this->octgnExport("$name.o8d", $identity, $rd, $decklist->getRawdescription(), $response); } /** @@ -822,7 +883,7 @@ public function octgnexportAction(Decklist $decklist) * @param Response $response * @return Response */ - public function octgnexport(string $filename, array $identity, array $rd, string $description, Response $response) + public function octgnExport(string $filename, array $identity, array $rd, string $description, Response $response) { $content = $this->renderView('/octgn.xml.twig', [ "identity" => $identity, diff --git a/src/AppBundle/Resources/config/routing.yml b/src/AppBundle/Resources/config/routing.yml index 3954af65..788488cf 100755 --- a/src/AppBundle/Resources/config/routing.yml +++ b/src/AppBundle/Resources/config/routing.yml @@ -38,12 +38,22 @@ deck_edit: path: /{_locale}/deck/edit/{deck_id} methods: [GET] defaults: - _controller: AppBundle:Builder:edit + _controller: AppBundle:Builder:editById _locale: en requirements: _locale: \w\w deck_id: \d+ +deck_edit_by_uuid: + path: /{_locale}/deck/edit/{deck_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Builder:editByUuid + _locale: en + requirements: + _locale: \w\w + deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + deck_view: path: /{_locale}/deck/view/{deck_id} methods: [GET] @@ -68,12 +78,22 @@ deck_duplicate: path: /{_locale}/deck/duplicate/{deck_id} methods: [GET] defaults: - _controller: AppBundle:Builder:duplicate + _controller: AppBundle:Builder:duplicateById _locale: en requirements: _locale: \w\w deck_id: \d+ +deck_duplicate_by_uuid: + path: /{_locale}/deck/duplicate/{deck_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Builder:duplicateByUuid + _locale: en + requirements: + _locale: \w\w + deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + decks_list: path: /{_locale}/decks methods: [GET] @@ -87,14 +107,31 @@ deck_publish: path: /deck/can_publish/{deck_id} methods: [GET] defaults: - _controller: AppBundle:Social:publish + _controller: AppBundle:Social:publishById + requirements: deck_id: \d+ +deck_publish_by_uuid: + path: /deck/can_publish/{deck_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Social:publishByUuid + requirements: + deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + deck_autosave: path: /deck/autosave/{deck_id} methods: [POST] defaults: - _controller: AppBundle:Builder:autosave + _controller: AppBundle:Builder:autosaveById + +deck_autosave_by_uuid: + path: /deck/autosave/{deck_uuid} + methods: [POST] + defaults: + _controller: AppBundle:Builder:autosaveByUuid + requirements: + deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' deck_delete: path: /{_locale}/deck/delete @@ -157,18 +194,35 @@ deck_export_octgn: path: /deck/export/octgn/{deck_id} methods: [GET] defaults: - _controller: AppBundle:Builder:octgnexport + _controller: AppBundle:Builder:octgnExportById requirements: deck_id: \d+ +deck_export_octgn_by_uuid: + path: /deck/export/octgn/{deck_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Builder:octgnExportByUuid + requirements: + deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + deck_export_text: path: /deck/export/text/{deck_id} methods: [GET] defaults: - _controller: AppBundle:Builder:textexport + _controller: AppBundle:Builder:textExportById requirements: deck_id: \d+ +deck_export_text_by_uuid: + path: /deck/export/text/{deck_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Builder:textExportByUuid + requirements: + deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + +# XXX deck_copy: path: /{_locale}/deck/copy/{decklist_id} methods: [POST] @@ -179,19 +233,21 @@ deck_copy: _locale: \w\w decklist_id: \d+ +# XXX decklist_export_octgn: path: /decklist/export/octgn/{decklist_id} methods: [GET] defaults: - _controller: AppBundle:Social:octgnexport + _controller: AppBundle:Social:octgnExport requirements: decklist_id: \d+ +# XXX decklist_export_text: path: /decklist/export/text/{decklist_id} methods: [GET] defaults: - _controller: AppBundle:Social:textexport + _controller: AppBundle:Social:textExport requirements: decklist_id: \d+ @@ -226,6 +282,7 @@ decklists_list: _locale: \w\w page: \d+ +# XXX decklist_detail: path: /{_locale}/decklist/{decklist_id}/{decklist_name} methods: [GET] @@ -237,6 +294,7 @@ decklist_detail: _locale: \w\w decklist_id: \d+ +# XXX decklist_detail_no_name: path: /{_locale}/decklist/{decklist_id} methods: [GET] @@ -271,6 +329,7 @@ decklist_comment_hide: defaults: _controller: AppBundle:Social:hidecomment +# XXX decklist_edit: path: /decklist/edit/{decklist_id} methods: [POST] @@ -279,6 +338,7 @@ decklist_edit: requirements: decklist_id: \d+ +# XXX decklist_delete: path: /decklist/delete/{decklist_id} methods: [POST] @@ -801,6 +861,7 @@ cards_sets: requirements: _locale: \w\w +# XXX decklist_moderate: path: /decklist/moderate/{decklist_id}/{status}/{modflag_id} methods: [POST] From e53cbd6bec271d9145065e675d39d9c8b6905189 Mon Sep 17 00:00:00 2001 From: Jason Gessner Date: Thu, 20 Jan 2022 23:10:55 -0600 Subject: [PATCH 02/20] Make decklist copy work by UUID as well. --- .../Controller/BuilderController.php | 28 +++++++++++++++---- src/AppBundle/Resources/config/routing.yml | 13 +++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/AppBundle/Controller/BuilderController.php b/src/AppBundle/Controller/BuilderController.php index f0defe61..266460ae 100755 --- a/src/AppBundle/Controller/BuilderController.php +++ b/src/AppBundle/Controller/BuilderController.php @@ -1190,7 +1190,25 @@ public function listAction(EntityManagerInterface $entityManager, DeckManager $d * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function copyAction(Decklist $decklist) + public function copyByIdAction(Decklist $decklist) + { + return $this->copy($decklist); + } + + /** + * @param Decklist $decklist + * @return Response + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("decklist", class="AppBundle:Decklist", options={"mapping": {"decklist_uuid": "uuid"}}) + */ + public function copyByUuidAction(Decklist $decklist) + { + return $this->copy($decklist); + } + + private function copy(Decklist $decklist) { $content = []; foreach ($decklist->getSlots() as $slot) { @@ -1390,7 +1408,7 @@ public function uploadallAction(Request $request, EntityManagerInterface $entity */ public function autosaveByIdAction(Deck $deck, Request $request, EntityManagerInterface $entityManager) { - return $this->autosave($deck, $request, $entityManager); + return $this->autosave($deck, $request, $entityManager); } /** @@ -1405,10 +1423,10 @@ public function autosaveByIdAction(Deck $deck, Request $request, EntityManagerIn */ public function autosaveByUuidAction(Deck $deck, Request $request, EntityManagerInterface $entityManager) { - return $this->autosave($deck, $request, $entityManager); + return $this->autosave($deck, $request, $entityManager); } - private function autosave(Deck $deck, Request $request, EntityManagerInterface $entityManager) { + private function autosave(Deck $deck, Request $request, EntityManagerInterface $entityManager) { $user = $this->getUser(); if ($user->getId() != $deck->getUser()->getId()) { @@ -1431,5 +1449,5 @@ private function autosave(Deck $deck, Request $request, EntityManagerInterface $ } return new Response(''); - } + } } diff --git a/src/AppBundle/Resources/config/routing.yml b/src/AppBundle/Resources/config/routing.yml index 788488cf..345cba98 100755 --- a/src/AppBundle/Resources/config/routing.yml +++ b/src/AppBundle/Resources/config/routing.yml @@ -222,17 +222,26 @@ deck_export_text_by_uuid: requirements: deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' -# XXX deck_copy: path: /{_locale}/deck/copy/{decklist_id} methods: [POST] defaults: - _controller: AppBundle:Builder:copy + _controller: AppBundle:Builder:copyById _locale: en requirements: _locale: \w\w decklist_id: \d+ +deck_copy_by_uuid: + path: /{_locale}/deck/copy/{decklist_uuid} + methods: [POST] + defaults: + _controller: AppBundle:Builder:copyByUuid + _locale: en + requirements: + _locale: \w\w + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + # XXX decklist_export_octgn: path: /decklist/export/octgn/{decklist_id} From 1510342b3c9974120a437e837be0b1abf4cec7d2 Mon Sep 17 00:00:00 2001 From: Jason Gessner Date: Fri, 21 Jan 2022 00:11:16 -0600 Subject: [PATCH 03/20] Update remaining decklist methods to have UUID version --- src/AppBundle/Controller/SocialController.php | 203 ++++++++++++++---- src/AppBundle/Resources/config/routing.yml | 84 ++++++-- 2 files changed, 228 insertions(+), 59 deletions(-) diff --git a/src/AppBundle/Controller/SocialController.php b/src/AppBundle/Controller/SocialController.php index 5c86e900..9093a332 100755 --- a/src/AppBundle/Controller/SocialController.php +++ b/src/AppBundle/Controller/SocialController.php @@ -196,8 +196,8 @@ public function newAction(Request $request, EntityManagerInterface $entityManage $decklist = new Decklist(); // Note: We are doing the naive thing and just assuming we won't collide. - // If there is a collision, there will be an error returned to the user. - // Sorry, users! v2 will be nicer to you! + // If there is a collision, there will be an error returned to the user. + // Sorry, users! v2 will be nicer to you! $decklist->setUuid(Uuid::uuid4()->toString()); $decklist->setName($name); $decklist->setPrettyname(preg_replace('/[^a-z0-9]+/', '-', mb_strtolower($name))); @@ -260,21 +260,9 @@ public function newAction(Request $request, EntityManagerInterface $entityManage ); } - /** - * @param int $decklist_id - * @param EntityManagerInterface $entityManager - * @return Response - * @throws \Doctrine\DBAL\DBALException - */ - public function viewAction(int $decklist_id, EntityManagerInterface $entityManager) - { - $response = new Response(); - $response->setPublic(); - $response->setMaxAge($this->getParameter('short_cache')); - - $dbh = $entityManager->getConnection(); - $rows = $dbh->executeQuery( - "SELECT + private function getViewQueryBase() { + return + ["SELECT d.id, d.date_update, d.name, @@ -304,19 +292,58 @@ public function viewAction(int $decklist_id, EntityManagerInterface $entityManag JOIN card c ON d.identity_id=c.id JOIN faction f ON d.faction_id=f.id LEFT JOIN tournament t ON d.tournament_id=t.id - WHERE d.id=? - AND d.moderation_status IN (0,1,2) - ", - [ - $decklist_id, - ] + WHERE ", + "AND d.moderation_status IN (0,1,2)"]; + } + + /** + * @param int $decklist_id + * @param EntityManagerInterface $entityManager + * @return Response + * @throws \Doctrine\DBAL\DBALException + */ + public function viewByIdAction(int $decklist_id, EntityManagerInterface $entityManager) + { + $dbh = $entityManager->getConnection(); + $viewQueryBase = $this->getViewQueryBase(); + $rows = $dbh->executeQuery( + $viewQueryBase[0] . " d.id = ?" . $viewQueryBase[1], [$decklist_id] + )->fetchAll(); + + return $this->view($rows, $entityManager); + } + + /** + * @param string $decklist_uuid + * @param EntityManagerInterface $entityManager + * @return Response + * @throws \Doctrine\DBAL\DBALException + */ + public function viewByUuidAction(string $decklist_uuid, EntityManagerInterface $entityManager) + { + $dbh = $entityManager->getConnection(); + $viewQueryBase = $this->getViewQueryBase(); + $rows = $dbh->executeQuery( + $viewQueryBase[0] . " d.uuid = ?" . $viewQueryBase[1], [$decklist_uuid] )->fetchAll(); + return $this->view($rows, $entityManager); + } + + private function view(array $rows, EntityManagerInterface $entityManager) + { + $response = new Response(); + $response->setPublic(); + $response->setMaxAge($this->getParameter('short_cache')); + if (empty($rows)) { throw $this->createNotFoundException(); } + $dbh = $entityManager->getConnection(); + $decklist = $rows[0]; + $decklist_id = $decklist['id']; $comments = $dbh->executeQuery( "SELECT @@ -704,7 +731,25 @@ public function voteAction(Request $request, EntityManagerInterface $entityManag * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function textExportAction(Decklist $decklist, Judge $judge, CardsData $cardsData) + public function textExportByIdAction(Decklist $decklist, Judge $judge, CardsData $cardsData) + { + return $this->textExport($decklist, $judge, $cardsData); + } + + /** + * @param Decklist $decklist + * @param Judge $judge + * @param CardsData $cardsData + * @return Response + * + * @ParamConverter("decklist", class="AppBundle:Decklist", options={"mapping": {"decklist_uuid": "uuid"}}) + */ + public function textExportByUuidAction(Decklist $decklist, Judge $judge, CardsData $cardsData) + { + return $this->textExport($decklist, $judge, $cardsData); + } + + private function textExport(Decklist $decklist, Judge $judge, CardsData $cardsData) { $response = new Response(); $response->setPublic(); @@ -840,7 +885,23 @@ public function textExportAction(Decklist $decklist, Judge $judge, CardsData $ca * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function octgnExportAction(Decklist $decklist) + public function octgnExportByIdAction(Decklist $decklist) + { + return $this->octgnExport($decklist); + } + + /** + * @param Decklist $decklist + * @return Response + * + * @ParamConverter("decklist", class="AppBundle:Decklist", options={"mapping": {"decklist_uuid": "uuid"}}) + */ + public function octgnExportByUuidAction(Decklist $decklist) + { + return $this->octgnExport($decklist); + } + + private function octgnExport(Decklist $decklist) { $response = new Response(); $response->setPublic(); @@ -872,23 +933,12 @@ public function octgnExportAction(Decklist $decklist) return new Response('no identity found'); } - return $this->octgnExport("$name.o8d", $identity, $rd, $decklist->getRawdescription(), $response); - } + $filename = "$name.o8d"; - /** - * @param string $filename - * @param array $identity - * @param array $rd - * @param string $description - * @param Response $response - * @return Response - */ - public function octgnExport(string $filename, array $identity, array $rd, string $description, Response $response) - { $content = $this->renderView('/octgn.xml.twig', [ "identity" => $identity, "rd" => $rd, - "description" => strip_tags($description), + "description" => strip_tags($decklist->getRawdescription()), ]); $response->headers->set('Content-Type', 'application/octgn'); @@ -911,7 +961,29 @@ public function octgnExport(string $filename, array $identity, array $rd, string * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function editAction(Decklist $decklist, Request $request, EntityManagerInterface $entityManager, TextProcessor $textProcessor, ModerationHelper $moderationHelper) + public function editByIdAction(Decklist $decklist, Request $request, EntityManagerInterface $entityManager, TextProcessor $textProcessor, ModerationHelper $moderationHelper) + { + return $this->edit($decklist, $request, $entityManager, $textProcessor, $moderationHelper); + } + + /** + * @param Decklist $decklist + * @param Request $request + * @param EntityManagerInterface $entityManager + * @param TextProcessor $textProcessor + * @param ModerationHelper $moderationHelper + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("decklist", class="AppBundle:Decklist", options={"mapping": {"decklist_uuid": "uuid"}}) + */ + public function editByUuidAction(Decklist $decklist, Request $request, EntityManagerInterface $entityManager, TextProcessor $textProcessor, ModerationHelper $moderationHelper) + { + return $this->edit($decklist, $request, $entityManager, $textProcessor, $moderationHelper); + } + + private function edit(Decklist $decklist, Request $request, EntityManagerInterface $entityManager, TextProcessor $textProcessor, ModerationHelper $moderationHelper) { $user = $this->getUser(); @@ -951,8 +1023,8 @@ public function editAction(Decklist $decklist, Request $request, EntityManagerIn } // Note: We are doing the naive thing and just assuming we won't collide. - // If there is a collision, there will be an error returned to the user. - // Sorry, users! v2 will be nicer to you! + // If there is a collision, there will be an error returned to the user. + // Sorry, users! v2 will be nicer to you! if ($decklist->getUuid() == null) { $decklist->setUuid(Uuid::uuid4()->toString()); } @@ -969,8 +1041,8 @@ public function editAction(Decklist $decklist, Request $request, EntityManagerIn $entityManager->flush(); - return $this->redirect($this->generateUrl('decklist_detail', [ - 'decklist_id' => $decklist->getId(), + return $this->redirect($this->generateUrl('decklist_detail_by_uuid', [ + 'decklist_uuid' => $decklist->getUuid(), 'decklist_name' => $decklist->getPrettyname(), ])); } @@ -984,7 +1056,26 @@ public function editAction(Decklist $decklist, Request $request, EntityManagerIn * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function deleteAction(Decklist $decklist, EntityManagerInterface $entityManager) + public function deleteByIdAction(Decklist $decklist, EntityManagerInterface $entityManager) + { + return $this->delete($decklist, $entityManager); + } + + /** + * @param Decklist $decklist + * @param EntityManagerInterface $entityManager + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * + * @IsGranted("IS_AUTHENTICATED_REMEMBERED") + * + * @ParamConverter("decklist", class="AppBundle:Decklist", options={"mapping": {"decklist_uuid": "uuid"}}) + */ + public function deleteByUuidAction(Decklist $decklist, EntityManagerInterface $entityManager) + { + return $this->delete($decklist, $entityManager); + } + + private function delete(Decklist $decklist, EntityManagerInterface $entityManager) { $user = $this->getUser(); @@ -1362,7 +1453,29 @@ public function activityAction(int $days, EntityManagerInterface $entityManager, * * @ParamConverter("decklist", class="AppBundle:Decklist", options={"id" = "decklist_id"}) */ - public function moderateAction(Decklist $decklist, int $status, int $modflag_id = null, EntityManagerInterface $entityManager, ModerationHelper $moderationHelper) + public function moderateByIdAction(Decklist $decklist, int $status, int $modflag_id = null, EntityManagerInterface $entityManager, ModerationHelper $moderationHelper) + { + return $this->moderate($decklist, $status, $modflag_id, $entityManager, $moderationHelper); + } + + /** + * @param Decklist $decklist + * @param int $status + * @param int|null $modflag_id + * @param EntityManagerInterface $entityManager + * @param ModerationHelper $moderationHelper + * @return JsonResponse + * + * @IsGranted("ROLE_MODERATOR") + * + * @ParamConverter("decklist", class="AppBundle:Decklist", options={"mapping": {"decklist_uuid": "uuid"}}) + */ + public function moderateByUuidAction(Decklist $decklist, int $status, int $modflag_id = null, EntityManagerInterface $entityManager, ModerationHelper $moderationHelper) + { + return $this->moderate($decklist, $status, $modflag_id, $entityManager, $moderationHelper); + } + + private function moderate(Decklist $decklist, int $status, int $modflag_id = null, EntityManagerInterface $entityManager, ModerationHelper $moderationHelper) { $response = new Response(); $response->setPrivate(); diff --git a/src/AppBundle/Resources/config/routing.yml b/src/AppBundle/Resources/config/routing.yml index 345cba98..99ae80cb 100755 --- a/src/AppBundle/Resources/config/routing.yml +++ b/src/AppBundle/Resources/config/routing.yml @@ -242,24 +242,38 @@ deck_copy_by_uuid: _locale: \w\w decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' -# XXX decklist_export_octgn: path: /decklist/export/octgn/{decklist_id} methods: [GET] defaults: - _controller: AppBundle:Social:octgnExport + _controller: AppBundle:Social:octgnExportById requirements: decklist_id: \d+ -# XXX +decklist_export_octgn_by_uuid: + path: /decklist/export/octgn/{decklist_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Social:octgnExportByUuid + requirements: + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + decklist_export_text: path: /decklist/export/text/{decklist_id} methods: [GET] defaults: - _controller: AppBundle:Social:textExport + _controller: AppBundle:Social:textExportById requirements: decklist_id: \d+ +decklist_export_text_by_uuid: + path: /decklist/export/text/{decklist_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Social:textExportByUuid + requirements: + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + decklist_new: path: /{_locale}/deck/publish methods: [POST] @@ -291,29 +305,48 @@ decklists_list: _locale: \w\w page: \d+ -# XXX decklist_detail: path: /{_locale}/decklist/{decklist_id}/{decklist_name} methods: [GET] defaults: - _controller: AppBundle:Social:view + _controller: AppBundle:Social:viewById _locale: en decklist_name: null requirements: _locale: \w\w decklist_id: \d+ -# XXX +decklist_detail_by_uuid: + path: /{_locale}/decklist/{decklist_uuid}/{decklist_name} + methods: [GET] + defaults: + _controller: AppBundle:Social:viewByUuid + _locale: en + decklist_name: null + requirements: + _locale: \w\w + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + decklist_detail_no_name: path: /{_locale}/decklist/{decklist_id} methods: [GET] defaults: - _controller: AppBundle:Social:view + _controller: AppBundle:Social:viewById _locale: en requirements: _locale: \w\w decklist_id: \d+ +decklist_detail_no_name_by_uuid: + path: /{_locale}/decklist/{decklist_uuid} + methods: [GET] + defaults: + _controller: AppBundle:Social:viewByUuid + _locale: en + requirements: + _locale: \w\w + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + decklist_favorite: path: /user/favorite methods: [POST] @@ -338,24 +371,38 @@ decklist_comment_hide: defaults: _controller: AppBundle:Social:hidecomment -# XXX decklist_edit: path: /decklist/edit/{decklist_id} methods: [POST] defaults: - _controller: AppBundle:Social:edit + _controller: AppBundle:Social:editById requirements: decklist_id: \d+ -# XXX +decklist_edit: + path: /decklist/edit/{decklist_uuid} + methods: [POST] + defaults: + _controller: AppBundle:Social:editByUuid + requirements: + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + decklist_delete: path: /decklist/delete/{decklist_id} methods: [POST] defaults: - _controller: AppBundle:Social:delete + _controller: AppBundle:Social:deleteById requirements: decklist_id: \d+ +decklist_delete: + path: /decklist/delete/{decklist_uuid} + methods: [POST] + defaults: + _controller: AppBundle:Social:deleteByUuid + requirements: + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + decklists_diff: path: /{_locale}/decklists/diff/{decklist1_id}/{decklist2_id} methods: [GET] @@ -870,17 +917,26 @@ cards_sets: requirements: _locale: \w\w -# XXX decklist_moderate: path: /decklist/moderate/{decklist_id}/{status}/{modflag_id} methods: [POST] defaults: - _controller: AppBundle:Social:moderate + _controller: AppBundle:Social:moderateById modflag_id: null requirements: decklist_id: \d+ status: \d +decklist_moderate: + path: /decklist/moderate/{decklist_uuid}/{status}/{modflag_id} + methods: [POST] + defaults: + _controller: AppBundle:Social:moderateByUuid + modflag_id: null + requirements: + decklist_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + status: \d + modflags_get: path: /modflags defaults: From 8141d6479d2e60734f6c921464e59d6d83e3097e Mon Sep 17 00:00:00 2001 From: Jason Gessner Date: Fri, 21 Jan 2022 00:32:37 -0600 Subject: [PATCH 04/20] Use decklist_uuid or deck_uuid in route params. refactor deck view actions. --- .../Controller/BuilderController.php | 80 +++++++------------ .../Controller/PublicApi20Controller.php | 8 +- src/AppBundle/Resources/config/routing.yml | 10 +-- 3 files changed, 37 insertions(+), 61 deletions(-) diff --git a/src/AppBundle/Controller/BuilderController.php b/src/AppBundle/Controller/BuilderController.php index 266460ae..8b2f0b93 100755 --- a/src/AppBundle/Controller/BuilderController.php +++ b/src/AppBundle/Controller/BuilderController.php @@ -984,42 +984,22 @@ public function editByIdAction(int $deck_id, EntityManagerInterface $entityManag } public function viewByIdAction(int $deck_id, EntityManagerInterface $entityManager, Judge $judge) { - $dbh = $entityManager->getConnection(); - $rows = $dbh->executeQuery(" - SELECT - d.id, - d.name, - d.description, - m.code, - d.problem, - d.date_update, - s.name side_name, - c.code identity_code, - f.code faction_code, - CASE WHEN u.id=? THEN 1 ELSE 0 END is_owner - FROM deck d - LEFT JOIN mwl m ON d.mwl_id=m.id - LEFT JOIN user u ON d.user_id=u.id - LEFT JOIN side s ON d.side_id=s.id - LEFT JOIN card c ON d.identity_id=c.id - LEFT JOIN faction f ON c.faction_id=f.id - WHERE d.id=? - AND (u.id=? OR u.share_decks=1) - ", [ - $this->getUser() ? $this->getUser()->getId() : null, - $deck_id, - $this->getUser() ? $this->getUser()->getId() : null, - ])->fetchAll(); + return $this->viewAction(["d.id = ?", $deck_id], $entityManager, $judge); + } - if (!count($rows)) { - throw $this->createNotFoundException(); - } - return $this->viewAction($rows[0], $entityManager, $judge); + /** + * @param string $deck_uuid + * @param EntityManagerInterface $entityManager + * @param Judge $judge + * @return Response + * @throws \Doctrine\DBAL\DBALException + */ + public function viewByUuidAction(string $deck_uuid, EntityManagerInterface $entityManager, Judge $judge) { + return $this->viewAction(["d.uuid = ?", $deck_uuid], $entityManager, $judge); } - public function viewByUuidAction(string $uuid, EntityManagerInterface $entityManager, Judge $judge) { - $dbh = $entityManager->getConnection(); - $rows = $dbh->executeQuery(" + private function getViewQueryBase() { + return " SELECT d.id, d.name, @@ -1037,30 +1017,26 @@ public function viewByUuidAction(string $uuid, EntityManagerInterface $entityMan LEFT JOIN side s ON d.side_id=s.id LEFT JOIN card c ON d.identity_id=c.id LEFT JOIN faction f ON c.faction_id=f.id - WHERE d.uuid=? - AND (u.id=? OR u.share_decks=1) - ", [ - $this->getUser() ? $this->getUser()->getId() : null, - $uuid, - $this->getUser() ? $this->getUser()->getId() : null, - ])->fetchAll(); + WHERE (u.id=? OR u.share_decks=1) AND "; + } + + public function viewAction(array $query_elements, EntityManagerInterface $entityManager, Judge $judge) + { + $dbh = $entityManager->getConnection(); + $rows = $dbh->executeQuery( + $this->getViewQueryBase() . $query_elements[0], + [ + $this->getUser() ? $this->getUser()->getId() : null, + $this->getUser() ? $this->getUser()->getId() : null, + $query_elements[1], + ] + )->fetchAll(); if (!count($rows)) { throw $this->createNotFoundException(); } - return $this->viewAction($rows[0], $entityManager, $judge); - } - /** - * @param int $deck_id - * @param EntityManagerInterface $entityManager - * @param Judge $judge - * @return Response - * @throws \Doctrine\DBAL\DBALException - */ - public function viewAction(array $deck, EntityManagerInterface $entityManager, Judge $judge) - { - $dbh = $entityManager->getConnection(); + $deck = $rows[0]; $deck['side_name'] = mb_strtolower($deck['side_name']); diff --git a/src/AppBundle/Controller/PublicApi20Controller.php b/src/AppBundle/Controller/PublicApi20Controller.php index 102c13ef..bdc8eff5 100755 --- a/src/AppBundle/Controller/PublicApi20Controller.php +++ b/src/AppBundle/Controller/PublicApi20Controller.php @@ -419,10 +419,10 @@ public function decklistByIdAction(int $decklist_id, Request $request) * ) * */ - public function decklistByUuidAction(string $uuid, Request $request) + public function decklistByUuidAction(string $decklist_uuid, Request $request) { - return $this->getSingleEntityFromCache("public-api-decklist-" . $uuid, function() use ($uuid) { - return $this->entityManager->getRepository('AppBundle:Decklist')->findOneBy(['uuid' => $uuid]); + return $this->getSingleEntityFromCache("public-api-decklist-" . $decklist_uuid, function() use ($decklist_uuid) { + return $this->entityManager->getRepository('AppBundle:Decklist')->findOneBy(['uuid' => $decklist_uuid]); }, $request); } @@ -493,7 +493,7 @@ public function deckByIdAction(Deck $deck, Request $request) * }, * ) * - * @ParamConverter("deck", class="AppBundle:Deck", options={"mapping": {"uuid": "uuid"}}) + * @ParamConverter("deck", class="AppBundle:Deck", options={"mapping": {"deck_uuid": "uuid"}}) */ public function deckByUuidAction(Deck $deck, Request $request) { diff --git a/src/AppBundle/Resources/config/routing.yml b/src/AppBundle/Resources/config/routing.yml index 99ae80cb..1fa0cb09 100755 --- a/src/AppBundle/Resources/config/routing.yml +++ b/src/AppBundle/Resources/config/routing.yml @@ -65,14 +65,14 @@ deck_view: deck_id: \d+ deck_view_by_uuid: - path: /{_locale}/deck/view/{uuid} + path: /{_locale}/deck/view/{deck_uuid} methods: [GET] defaults: _controller: AppBundle:Builder:viewByUuid _locale: en requirements: _locale: \w\w - uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' + deck_uuid: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' deck_duplicate: path: /{_locale}/deck/duplicate/{deck_id} @@ -755,7 +755,7 @@ api_public_decklist: decklist_id: "\\d+" api_public_decklist_by_uuid: - path: /api/2.0/public/decklist/{uuid} + path: /api/2.0/public/decklist/{decklist_uuid} methods: [GET] defaults: _controller: AppBundle:PublicApi20:decklistByUuid @@ -779,7 +779,7 @@ api_public_deck: deck_id: "\\d+" api_public_deck_by_uuid: - path: /api/2.0/public/deck/{uuid} + path: /api/2.0/public/deck/{deck_uuid} methods: [GET] defaults: _controller: AppBundle:PublicApi20:deckByUuid @@ -813,7 +813,7 @@ api_private_deck_load_by_id: deck_id: "\\d+" api_private_deck_load_by_uuid: - path: /api/2.0/private/deck/{uuid} + path: /api/2.0/private/deck/{deck_uuid} methods: [GET] defaults: _controller: AppBundle:PrivateApi20:loadDeckByUuid From 40c4cbea53d5ceba7940ed018f3251241920a976 Mon Sep 17 00:00:00 2001 From: Jason Gessner Date: Fri, 21 Jan 2022 00:41:26 -0600 Subject: [PATCH 05/20] Update social controller to use uuids in generated urls --- src/AppBundle/Controller/SocialController.php | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/AppBundle/Controller/SocialController.php b/src/AppBundle/Controller/SocialController.php index 9093a332..b4b11c49 100755 --- a/src/AppBundle/Controller/SocialController.php +++ b/src/AppBundle/Controller/SocialController.php @@ -72,8 +72,8 @@ public function publishByUuidAction(Deck $deck, EntityManagerInterface $entityMa ]); foreach ($old_decklists as $decklist) { if (json_encode($decklist->getContent()) == $new_content) { - $url = $this->generateUrl('decklist_detail', [ - 'decklist_id' => $decklist->getId(), + $url = $this->generateUrl('decklist_detail_by_uuid', [ + 'decklist_uuid' => $decklist->getUuid(), 'decklist_name' => $decklist->getPrettyName(), ]); $response->setData([ @@ -133,8 +133,8 @@ public function publishByIdAction(Deck $deck, EntityManagerInterface $entityMana ]); foreach ($old_decklists as $decklist) { if (json_encode($decklist->getContent()) == $new_content) { - $url = $this->generateUrl('decklist_detail', [ - 'decklist_id' => $decklist->getId(), + $url = $this->generateUrl('decklist_detail_by_uuid', [ + 'decklist_uuid' => $decklist->getUuid(), 'decklist_name' => $decklist->getPrettyName(), ]); $response->setData([ @@ -251,9 +251,9 @@ public function newAction(Request $request, EntityManagerInterface $entityManage return $this->redirect( $this->generateUrl( - 'decklist_detail', + 'decklist_detail_by_uuid', [ - 'decklist_id' => $decklist->getId(), + 'decklist_uuid' => $decklist->getUuid(), 'decklist_name' => $decklist->getPrettyname(), ] ) @@ -638,7 +638,7 @@ public function commentAction(Request $request, EntityManagerInterface $entityMa $email_data = [ 'username' => $user->getUsername(), 'decklist_name' => $decklist->getName(), - 'url' => $this->generateUrl('decklist_detail', ['decklist_id' => $decklist->getId(), 'decklist_name' => $decklist->getPrettyname()], UrlGeneratorInterface::ABSOLUTE_URL) . '#' . $comment->getId(), + 'url' => $this->generateUrl('decklist_detail_by_uuid', ['decklist_uuid' => $decklist->getUuid(), 'decklist_name' => $decklist->getPrettyname()], UrlGeneratorInterface::ABSOLUTE_URL) . '#' . $comment->getId(), 'comment' => $comment_html, 'profile' => $this->generateUrl('user_profile', [], UrlGeneratorInterface::ABSOLUTE_URL), ]; @@ -652,8 +652,8 @@ public function commentAction(Request $request, EntityManagerInterface $entityMa } } - return $this->redirect($this->generateUrl('decklist_detail', [ - 'decklist_id' => $decklist_id, + return $this->redirect($this->generateUrl('decklist_detail_by_uuid', [ + 'decklist_uuid' => $decklist_uuid, 'decklist_name' => $decklist->getPrettyname(), ])); } @@ -1058,7 +1058,7 @@ private function edit(Decklist $decklist, Request $request, EntityManagerInterfa */ public function deleteByIdAction(Decklist $decklist, EntityManagerInterface $entityManager) { - return $this->delete($decklist, $entityManager); + return $this->delete($decklist, $entityManager); } /** @@ -1072,7 +1072,7 @@ public function deleteByIdAction(Decklist $decklist, EntityManagerInterface $ent */ public function deleteByUuidAction(Decklist $decklist, EntityManagerInterface $entityManager) { - return $this->delete($decklist, $entityManager); + return $this->delete($decklist, $entityManager); } private function delete(Decklist $decklist, EntityManagerInterface $entityManager) @@ -1455,7 +1455,7 @@ public function activityAction(int $days, EntityManagerInterface $entityManager, */ public function moderateByIdAction(Decklist $decklist, int $status, int $modflag_id = null, EntityManagerInterface $entityManager, ModerationHelper $moderationHelper) { - return $this->moderate($decklist, $status, $modflag_id, $entityManager, $moderationHelper); + return $this->moderate($decklist, $status, $modflag_id, $entityManager, $moderationHelper); } /** @@ -1472,7 +1472,7 @@ public function moderateByIdAction(Decklist $decklist, int $status, int $modflag */ public function moderateByUuidAction(Decklist $decklist, int $status, int $modflag_id = null, EntityManagerInterface $entityManager, ModerationHelper $moderationHelper) { - return $this->moderate($decklist, $status, $modflag_id, $entityManager, $moderationHelper); + return $this->moderate($decklist, $status, $modflag_id, $entityManager, $moderationHelper); } private function moderate(Decklist $decklist, int $status, int $modflag_id = null, EntityManagerInterface $entityManager, ModerationHelper $moderationHelper) From 3c24d9c40cd7a9380e82247187d70125d3a9263e Mon Sep 17 00:00:00 2001 From: Jason Gessner Date: Sun, 23 Jan 2022 15:29:29 -0600 Subject: [PATCH 06/20] Update deck pages, controllers and js to use UUIDs. --- app/Resources/views/Builder/decks.html.twig | 10 +- .../Default/publish_decklist_form.html.twig | 6 +- .../Controller/BuilderController.php | 45 +------ src/AppBundle/Controller/ClaimsController.php | 1 + .../Controller/DecklistsController.php | 1 + src/AppBundle/Controller/SocialController.php | 4 +- src/AppBundle/Controller/TagController.php | 28 ++--- src/AppBundle/Resources/config/routing.yml | 15 +-- src/AppBundle/Service/DeckManager.php | 5 +- web/js/decks.js | 119 ++++++++---------- web/js/publish_deck_form.js | 6 +- 11 files changed, 92 insertions(+), 148 deletions(-) diff --git a/app/Resources/views/Builder/decks.html.twig b/app/Resources/views/Builder/decks.html.twig index 861f1068..26b06c24 100755 --- a/app/Resources/views/Builder/decks.html.twig +++ b/app/Resources/views/Builder/decks.html.twig @@ -103,7 +103,7 @@ var Identity = null,
{% for deck in decks %} - +

{{ deck.name }}{% if deck.message %} {% endif %}

@@ -245,7 +245,7 @@ var Identity = null,
- +

Are you sure that you want to delete the deck ?

@@ -412,7 +412,7 @@ var Identity = null,
- +
@@ -442,7 +442,7 @@ var Identity = null,
- +
@@ -471,7 +471,7 @@ var Identity = null,
- +
diff --git a/app/Resources/views/Default/publish_decklist_form.html.twig b/app/Resources/views/Default/publish_decklist_form.html.twig index f53dcd04..f66f68f9 100644 --- a/app/Resources/views/Default/publish_decklist_form.html.twig +++ b/app/Resources/views/Default/publish_decklist_form.html.twig @@ -9,9 +9,9 @@