diff --git a/assets/controllers/mydropzone_controller.js b/assets/controllers/mydropzone_controller.js index 5df055e..7807d25 100644 --- a/assets/controllers/mydropzone_controller.js +++ b/assets/controllers/mydropzone_controller.js @@ -1,6 +1,7 @@ // mydropzone_controller.js import { Controller } from '@hotwired/stimulus'; +import axios from 'axios'; export default class extends Controller { connect() { @@ -18,19 +19,27 @@ export default class extends Controller { _onConnect(event) { // The dropzone was just created - console.info(event); + // console.info(event); console.info('onconnect'); + // + // axios.get('/book/search/modyfikowany+węgiel').then(response => { + // console.info(response.data); + // }); + } _onChange(event) { // The dropzone just changed console.info(event); console.info('onchange'); + + event.target.closest('form').submit(); + } _onClear(event) { // The dropzone has just been cleared - console.info(event); + // console.info(event); console.info('onclear'); } } \ No newline at end of file diff --git a/src/Controller/BookController.php b/src/Controller/BookController.php index 2a8823d..7f9b099 100644 --- a/src/Controller/BookController.php +++ b/src/Controller/BookController.php @@ -5,6 +5,7 @@ namespace App\Controller; use App\Entity\Book; use App\Entity\File; use App\Form\BookType; +use App\Form\FileType; use App\Repository\BookRepository; use App\Repository\FileRepository; use App\Service\FileService; @@ -83,11 +84,33 @@ class BookController extends AbstractController return new JsonResponse($bookFinder->byUrl(base64_decode($urlInBase64))); } - #[Route('/{id}', name: 'app_book_show', methods: ['GET'])] - public function show(Book $book): Response + #[Route('/{id}', name: 'app_book_show', methods: ['GET', 'POST'])] + public function show(Book $book, Request $request, FileRepository $fileRepository): Response { - return $this->render('book/show.html.twig', [ + $fileForm = $this->createForm(FileType::class); + $fileForm->handleRequest($request); + + if ($fileForm->isSubmitted() && $fileForm->isValid()) { + /** @var \Symfony\Component\HttpFoundation\File\UploadedFile[] $ebooks */ + $ebook = $request->files->get('file')['file']; + $file = new File(); + $file->setFileName(trim($ebook->getClientOriginalName())); + $file->setFileSize($ebook->getSize()); + $file->setExtension($ebook->guessClientExtension()); + $file->setBook($book); + $fileRepository->add($file, true); + + $ebook->move( + $this->getParameter('book_files'), + 'ebook_' . $book->getId() . '_' . + md5($file->getFileName()) . '.' . + $file->getExtension() + ); + } + + return $this->renderForm('book/show.html.twig', [ 'book' => $book, + 'file_form' => $fileForm ]); } @@ -142,12 +165,15 @@ class BookController extends AbstractController } #[Route('/{id}', name: 'app_book_delete', methods: ['POST'])] - public function delete(Request $request, Book $book, BookRepository $bookRepository, FileService $fileService): Response - { + public function delete( + Request $request, + Book $book, + BookRepository $bookRepository, + FileService $fileService + ): Response { if ($this->isCsrfTokenValid('delete' . $book->getId(), $request->request->get('_token'))) { $fileService->removeFiles($book->getFiles()); $bookRepository->remove($book, true); - } return $this->redirectToRoute('app_book_index', [], Response::HTTP_SEE_OTHER); diff --git a/src/Form/FileType.php b/src/Form/FileType.php new file mode 100644 index 0000000..2497f6b --- /dev/null +++ b/src/Form/FileType.php @@ -0,0 +1,39 @@ +add( + 'file', + DropzoneType::class, + [ + 'mapped' => false, + 'data_class' => null, + 'required' => false, + 'attr' => [ + 'data-controller' => 'mydropzone', + 'accept' => ".pdf, .epub, .mobi", + 'placeholder' => 'Drag and drop or browse' + ] + ] + ); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => File::class, + ]); + } +} diff --git a/templates/book/show.html.twig b/templates/book/show.html.twig index 27a63f5..9af5814 100644 --- a/templates/book/show.html.twig +++ b/templates/book/show.html.twig @@ -21,7 +21,7 @@ Description - {{ book.description | nl2br }} + {{ book.description | nl2br }} Publisher @@ -61,6 +61,10 @@ {% endfor %} + {{ form_start(file_form) }} + {{ form_widget(file_form) }} + + {{ form_end(file_form) }} back to list