Added twig extension to format file size, links to download and delete files attached to the book.

This commit is contained in:
krzysiej
2022-05-24 11:22:35 +02:00
parent 319f6311fc
commit 1f852ac031
5 changed files with 94 additions and 18 deletions

View File

@@ -99,9 +99,9 @@ class BookController extends AbstractController
$ebook->move(
$this->getParameter('book_files'),
'ebook_' . $book->getId() . '_' . md5(
$ebook->getClientOriginalName()
) . '.' . $ebook->guessClientExtension()
'ebook_' . $book->getId() . '_' .
md5($file->getFileName()) . '.' .
$file->getExtension()
);
}
}
@@ -126,16 +126,4 @@ class BookController extends AbstractController
return $this->redirectToRoute('app_book_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/download/{id}', name: 'app_book_download', methods: ['GET'])]
public function downloadBook(Book $book): BinaryFileResponse
{
return $this->file(
$this->getParameter('book_files') . '/' . 'ebook_' . $book->getId() . '.' . pathinfo(
$book->getOriginalFilename(),
PATHINFO_EXTENSION
),
$book->getOriginalFilename()
);
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Controller;
use App\Entity\Book;
use App\Entity\File;
use App\Repository\FileRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class FileController extends AbstractController
{
#[Route('/file', name: 'app_file')]
public function index(): Response
{
return $this->render('file/index.html.twig', [
'controller_name' => 'FileController',
]);
}
#[Route('/file/delete/{id}', name: 'app_file_delete')]
public function delete(
Request $request,
FileRepository $fileRepository,
File $file,
Filesystem $filesystem
): Response {
$filePath = $this->getParameter('book_files') . '/' . 'ebook_' . $file->getBook()->getId() . '_' .
md5($file->getFileName()) . '.' .
$file->getExtension();
$filesystem->remove($filePath);
if (!$filesystem->exists($filePath)) {
$fileRepository->remove($file, 'true');
}
return $this->redirect($request->headers->get('referer'));
}
#[Route('/file/{id}', name: 'app_file_download', methods: ['GET'])]
public function get(File $file)
{
return $this->file(
$filePath = $this->getParameter('book_files') . '/' . 'ebook_' . $file->getBook()->getId() . '_' .
md5($file->getFileName()) . '.' .
$file->getExtension(),
$file->getFileName()
);
}
}

View File

@@ -4,6 +4,7 @@
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
class AppExtension extends AbstractExtension
@@ -15,8 +16,22 @@ class AppExtension extends AbstractExtension
];
}
public function getFilters()
{
return [
new TwigFilter('bytes_format', [$this, 'bytes_format']),
];
}
public function file_exists(string $file): bool
{
return file_exists(ltrim($file, '/'));
}
public function bytes_format(int $bytes): string
{
$base = log($bytes) / log(1024);
$suffix = array("B", "KB", "MB", "GB", "TB")[floor($base)];
return round(pow(1024, $base - floor($base)), 2) . $suffix;
}
}