From 8318b383368ed638a6f305c81dd6eec6179b46bd Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Tue, 1 Dec 2020 18:54:15 -0800 Subject: [PATCH 01/11] adds ability to export multiple lists to file. --- assets/js/ui.decks.js | 10 ++++++ src/Controller/BuilderController.php | 39 +++++++++++++++++++++++ templates/Builder/decks.html.twig | 10 ++++++ templates/Builder/download_list.html.twig | 9 ++++++ translations/messages.de.yml | 3 ++ translations/messages.en.yml | 3 ++ translations/messages.es.yml | 3 ++ 7 files changed, 77 insertions(+) create mode 100644 templates/Builder/download_list.html.twig diff --git a/assets/js/ui.decks.js b/assets/js/ui.decks.js index 354e75ba..50a62059 100755 --- a/assets/js/ui.decks.js +++ b/assets/js/ui.decks.js @@ -63,6 +63,14 @@ }, 500); }; + ui.download_selected = function(ids) + { + var $form = $('#download-deck-list-form'); + var $input = $('#download-deck-list-id'); + $input.val(ids.join('-')); + $form.submit(); + }; + ui.tag_remove_process = function tag_remove_process(event) { event.preventDefault(); @@ -187,6 +195,8 @@ case 'btn-delete-selected': ui.confirm_delete_all(ids); break; + case 'btn-download-selected': + ui.download_selected(ids); } return false; }; diff --git a/src/Controller/BuilderController.php b/src/Controller/BuilderController.php index e5de9b82..b76e42a7 100755 --- a/src/Controller/BuilderController.php +++ b/src/Controller/BuilderController.php @@ -463,6 +463,45 @@ public function deleteAction(Request $request, SessionInterface $session) return $this->redirect($this->generateUrl('decks_list')); } + /** + * @Route("/deck/download_list", name="deck_download_list", methods={"POST"}) + * @param Request $request + * @param SessionInterface $session + * @return Response + */ + public function downloadListAction(Request $request, SessionInterface $session) + { + /* @var $em EntityManager */ + $em = $this->getDoctrine()->getManager(); + $ids = explode('-', $request->get('ids')); + $decks = $em->getRepository(Deck::class)->findBy(['id' => $ids]); + + $currentUserId = $this->getUser()->getId(); + $decks = array_values(array_filter($decks, function (DeckInterface $deck) use ($currentUserId) { + return $currentUserId === $deck->getUser()->getId(); + })); + + $exports = []; + foreach ($decks as $deck) { + $content = $this->renderView('Export/default.txt.twig', [ "deck" => $deck->getTextExport() ]); + $exports[] = str_replace("\n", "\r\n", $content); + } + + $response = new Response(); + $response->headers->set('Content-Type', 'text/plain'); + $response->headers->set( + 'Content-Disposition', + $response->headers->makeDisposition( + ResponseHeaderBag::DISPOSITION_ATTACHMENT, + 'decks.txt' + ) + ); + + $response->setContent(implode("\r\n===\r\n", $exports)); + + return $response; + } + /** * @Route("/deck/delete_list", name="deck_delete_list", methods={"POST"}) * @param Request $request diff --git a/templates/Builder/decks.html.twig b/templates/Builder/decks.html.twig index 01d89a96..a32e07a0 100755 --- a/templates/Builder/decks.html.twig +++ b/templates/Builder/decks.html.twig @@ -54,6 +54,15 @@