Skip to content

Commit 54b999f

Browse files
authored
Update FileManagerController.php
1 parent 35693f7 commit 54b999f

File tree

1 file changed

+117
-60
lines changed

1 file changed

+117
-60
lines changed

src/Controller/FileManagerController.php

Lines changed: 117 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Update 20250917
55
* src/Controller/FileManagerController.php
66
*/
7-
namespace Anfallnorr\FileManagerSystem\Controller;
7+
namespace App\Controller;
88

99
use Anfallnorr\FileManagerSystem\Form\CreateFolderType;
1010
use Anfallnorr\FileManagerSystem\Form\MoveFileType;
@@ -24,26 +24,32 @@
2424
// use Symfony\Component\String\Slugger\AsciiSlugger;
2525
use Symfony\Contracts\Translation\TranslatorInterface;
2626

27-
class FileManagerController extends AbstractController
27+
final class HomeController extends AbstractController
2828
{
2929
public function __construct(
3030
private FileManagerService $fmService,
3131
private TranslatorInterface $translator
3232
) {
3333
$fmService
34-
->setDefaultDirectory('/var/uploads')
35-
->setRelativeDirectory('/var/uploads');
34+
->setDefaultDirectory('/var/uploads') // ->setDefaultDirectory($directory = '/var/uploads')
35+
->setRelativeDirectory('/var/uploads'); // ->setRelativeDirectory($directory = '/var/uploads');
36+
// $fmService->setDefaultDirectory('/var/uploads');
37+
// $fmService->setRelativeDirectory('/var/uploads');
38+
/* if (!is_dir($fmService->getDefaultDirectory())) {
39+
throw $this->createNotFoundException('Folder ' . $fmService->getRelativeDirectory() . ' not found');
40+
} */
3641
}
3742

38-
/* #[Route('/', name: 'app_index')]
43+
#[Route('/', name: 'app_index')]
3944
public function index()
4045
{
4146
return $this->redirectToRoute('app_file_manager');
42-
} */
47+
}
4348

44-
#[Route('/file-manager/{folder}', name: 'app_file_manager', defaults: ['folder' => ''], methods: ['POST', 'GET'], requirements: ['folder' => '.+'])]
49+
#[Route('/home/{folder}', name: 'app_file_manager', defaults: ['folder' => ''], methods: ['POST', 'GET'], requirements: ['folder' => '.+'])]
4550
public function home(Request $request, string $folder): Response
4651
{
52+
// dd('toto');
4753
// $fmService = $this->fmService;
4854

4955
// dd($this->fmService->getRelativeDirectory());
@@ -64,16 +70,23 @@ public function home(Request $request, string $folder): Response
6470
$breadcrumb = explode('/', $folder);
6571

6672
// Retrieve global files and folders first before changing the default path
67-
$allFolders = $this->fmService->getDirs($path = '/', $excludeDir = "", $depth = null);
73+
// $allFolders = $this->fmService->getDirs($path = '/', $excludeDir = "", $depth = null);
74+
$allFolders = $this->fmService->getDirsTree($path = '/', $excludeDir = "", $depth = null);
6875
$allFiles = $this->fmService->getFiles($path = '/', $depth = null);
6976

7077
if (!empty($folder)) {
71-
$this->fmService->setDefaultDirectory('/var/uploads/' . $folder); // Example for personnal folder space: '/var/uploads/' . $his->getUser()->getId()
78+
// $this->fmService->setDefaultDirectory('/public/uploads/' . $folder); // Example for personnal folder space: '/var/uploads/' . $his->getUser()->getId()
79+
$this->fmService->setDefaultDirectory($this->fmService->getRelativeDirectory() . '/' . $folder); // $this->fmService->setDefaultDirectory($directory = $this->fmService->getRelativeDirectory() . '/' . $folder); // Example for personnal folder space: '/var/uploads/' . $his->getUser()->getId()
7280
}
73-
81+
// dump($this->fmService->getDefaultDirectory());
82+
// dump($this->getParameter('kernel.project_dir'));
83+
// dump($this->getParameter('kernel.project_dir') . $this->fmService->getRelativeDirectory());
84+
// dd($this->fmService->getRelativeDirectory());
85+
86+
7487
// Check if path is a valid folder
7588
/* if (!is_dir($this->fmService->getDefaultDirectory())) {
76-
throw $this->createNotFoundException('Folder not found');
89+
throw $this->createNotFoundException('Folder ' . $this->fmService->getRelativeDirectory() . ' not found');
7790
} */
7891

7992
$uploadUrl = $this->generateUrl('app_file_manager', [
@@ -82,35 +95,33 @@ public function home(Request $request, string $folder): Response
8295

8396
$folders = $this->fmService->getDirs();
8497
$files = $this->fmService->getFiles();
85-
98+
8699
// Folder creation
87100
$createFolderForm = $this->createForm(CreateFolderType::class);
88101
$createFolderForm->handleRequest($request);
89-
102+
90103
if ($createFolderForm->isSubmitted() && $createFolderForm->isValid()) {
91104
$folderName = $createFolderForm->get('folderName')->getData();
92105

93-
if (!$this->fmService->exists($folderName)) {
106+
if (!$this->fmService->exists($folderName, false)) { // if (!$this->fmService->exists($filePath = $folderName, $absolute = false)) {
94107
// $this->fmService->createDir($folderName);
95-
$created = $this->fmService->createDir($folderName, true);
96-
97-
$this->addFlash(
98-
'success',
99-
$this->translator->trans('file_manager.folder_created_successfully')
100-
);
108+
$created = $this->fmService->createDir($folderName, true); // $created = $this->fmService->createDir($directory = $folderName, $return = true);
109+
110+
$flashType = 'success';
111+
$flashMessage = $this->translator->trans('file_manager.folder_created_successfully');
101112
} else {
102-
$this->addFlash(
103-
'warning',
104-
$this->translator->trans('file_manager.the_folder_already_exists', ['%foldername%' => $folderName])
105-
);
113+
$flashType = 'warning';
114+
$flashMessage = $this->translator->trans('file_manager.the_folder_already_exists', ['%foldername%' => $folderName]);
106115
}
107116

117+
$this->addFlash($flashType, $flashMessage);
118+
108119

109120
return new Response(
110-
$this->renderView('@FileManagerSystem/_partials/elements/folders-list.html.twig', [
121+
$this->renderView('_partials/elements/folders-list.html.twig', [
111122
'folders' => $created,
112123
'current_folder' => $folder,
113-
]) . $this->renderView('@FileManagerSystem/_partials/elements/stream-flash.html.twig'),
124+
]) . $this->renderView('_partials/elements/stream-flash.html.twig'),
114125
200,
115126
['Content-Type' => 'text/vnd.turbo-stream.html'] // Le type de contenu pour Turbo Stream
116127
);
@@ -134,7 +145,7 @@ public function home(Request $request, string $folder): Response
134145
if ($files) {
135146
try {
136147
// $uploaded = $this->fmService->upload($files, $this->fmService->getDefaultDirectory(), "", false);
137-
$uploaded = $this->fmService->upload($files, $this->fmService->getDefaultDirectory(), "", true);
148+
$uploaded = $this->fmService->upload($files, $this->fmService->getDefaultDirectory(), "", true); // $uploaded = $this->fmService->upload($files = $files, $folder = $this->fmService->getDefaultDirectory(), $newName = "", $return = true);
138149

139150
$this->addFlash(
140151
'success',
@@ -148,12 +159,11 @@ public function home(Request $request, string $folder): Response
148159
}
149160
}
150161

151-
152162
return new Response(
153-
$this->renderView('@FileManagerSystem/_partials/elements/files-list.html.twig', [
163+
$this->renderView('_partials/elements/files-list.html.twig', [
154164
'files' => $uploaded,
155165
'current_folder' => $folder,
156-
]) . $this->renderView('@FileManagerSystem/_partials/elements/stream-flash.html.twig'),
166+
]) . $this->renderView('_partials/elements/stream-flash.html.twig'),
157167
200,
158168
['Content-Type' => 'text/vnd.turbo-stream.html']
159169
);
@@ -202,7 +212,7 @@ public function home(Request $request, string $folder): Response
202212
}
203213

204214

205-
return $this->render('@FileManagerSystem/file-manager/index.html.twig', [
215+
return $this->render('home/index.html.twig', [
206216
'folder_form' => $createFolderForm,
207217
'file_form' => $uploadFileForm,
208218
'move_file_form' => $moveFileForm,
@@ -217,11 +227,12 @@ public function home(Request $request, string $folder): Response
217227
]);
218228
}
219229

220-
#[Route('/file-manager/file/serve/{filename}/{folder}', name: 'app_file_manager_serve', defaults: ['folder' => ''], requirements: ['folder' => '.+'])]
230+
#[Route('/file/serve/{filename}/{folder}', name: 'app_file_manager_serve', defaults: ['folder' => ''], requirements: ['folder' => '.+'])]
221231
public function serveFile(string $filename, string $folder): BinaryFileResponse
222232
{
223233
// File directory
224234
// $fmService = $this->fmService;
235+
// $fmService->setDefaultDirectory('/var/uploads');
225236

226237
// Base directory (this should now handle both cases)
227238
$baseDirectory = $this->fmService->getDefaultDirectory();
@@ -231,9 +242,11 @@ public function serveFile(string $filename, string $folder): BinaryFileResponse
231242
if (empty($folder)) {
232243
$filePath = $baseDirectory . '/' . $filename;
233244
} else {
245+
// $filePath = $baseDirectory . '/' . $folder . '/' . $filename;
234246
$filePath = rtrim($baseDirectory, '/') . '/' . trim($folder, '/') . '/' . ltrim($filename, '/');
235247
}
236248

249+
// dd($filePath);
237250
if (!file_exists($filePath)) {
238251
throw $this->createNotFoundException('Fichier introuvable.');
239252
// throw $this->createNotFoundException('File not found');
@@ -246,6 +259,55 @@ public function serveFile(string $filename, string $folder): BinaryFileResponse
246259
]);
247260
}
248261

262+
#[Route('/file/download/{filename}/{folder}', name: 'app_file_manager_download_file', defaults: ['folder' => ''], requirements: ['folder' => '.+'])]
263+
public function downloadFile(string $filename, string $folder): BinaryFileResponse
264+
{
265+
/* // File directory
266+
$baseDirectory = $this->fmService->getDefaultDirectory();
267+
268+
// Full path of the requested file
269+
if (empty($folder)) {
270+
$filePath = $baseDirectory . '/' . $filename;
271+
} else {
272+
$filePath = rtrim($baseDirectory, '/') . '/' . trim($folder, '/') . '/' . ltrim($filename, '/');
273+
}
274+
// dd($filePath);
275+
276+
if (!file_exists($filePath)) {
277+
throw $this->createNotFoundException('Fichier introuvable.');
278+
}
279+
280+
// Retourne le fichier en téléchargement
281+
$response = new BinaryFileResponse($filePath);
282+
$response->setContentDisposition(
283+
ResponseHeaderBag::DISPOSITION_ATTACHMENT, // ATTACHMENT => force download
284+
$filename // nom de fichier suggéré pour le navigateur
285+
);
286+
287+
return $response; */
288+
return $this->fmService->download($filename, $folder);
289+
/* if ($this->fmService->download($filename, $folder)) {
290+
return $this->redirectToRoute('app_file_manager', [
291+
'folder' => $folder
292+
]);
293+
} */
294+
}
295+
296+
// #[Route('/file/download/bulk/{folder}', name: 'app_file_manager_download_bulk_file', methods: ['POST'], defaults: ['folder' => ''], requirements: ['folder' => '.+'])]
297+
#[Route('/file/mass-download/{folder}', name: 'app_file_manager_download_bulk_file', methods: ['POST'], defaults: ['folder' => ''], requirements: ['folder' => '.+'])]
298+
public function massDownload(Request $request): BinaryFileResponse
299+
{
300+
$files = json_decode($request->get('filesToDownload'));
301+
$folders = json_decode($request->get('foldersToDownload'));
302+
// $files = $request->request->get('files', []); // tableau de noms de fichiers
303+
// $folders = $request->request->get('folder', null);
304+
// dd($files);
305+
dump($files);
306+
dd($folders);
307+
308+
return $this->fmService->downloadBulk($files, $folder);
309+
}
310+
249311
/* #[Route('/file/move/{filename}/{folder}', name: 'app_file_manager_move', defaults: ['folder' => ''], requirements: ['folder' => '.+'])]
250312
public function moveFile(string $filename, string $folder): BinaryFileResponse
251313
{
@@ -273,9 +335,10 @@ public function moveFile(string $filename, string $folder): BinaryFileResponse
273335
]);
274336
} */
275337

276-
#[Route('/file-manager/file/delete/{filename}/{folder}', name: 'app_file_manager_delete_file', defaults: ['folder' => ''], methods: ['DELETE'], requirements: ['folder' => '.+'])]
338+
#[Route('/file/delete/{filename}/{folder}', name: 'app_file_manager_delete_file', defaults: ['folder' => ''], methods: ['DELETE'], requirements: ['folder' => '.+'])]
277339
public function deleteFile(string $filename, string $folder): Response
278340
{
341+
// dd($filename);
279342
// File directory
280343
// $fmService = $this->fmService;
281344

@@ -286,8 +349,12 @@ public function deleteFile(string $filename, string $folder): Response
286349
$filePath = $filename;
287350
}
288351

289-
if ($this->fmService->exists($filePath)) {
290-
$this->fmService->remove($filePath);
352+
// dump($filename);
353+
// dump($folder);
354+
// dd($filePath);
355+
if ($this->fmService->exists($filePath, false)) { // if ($this->fmService->exists($filePath = $filePath, $absolute = false)) {
356+
// dd($filePath);
357+
$this->fmService->remove($filePath); // $this->fmService->remove($relativePath = $filePath);
291358

292359
$this->addFlash(
293360
'success',
@@ -306,7 +373,7 @@ public function deleteFile(string $filename, string $folder): Response
306373
]);
307374
}
308375

309-
#[Route('/file-manager/folder/delete/{dirname}/{folder}', name: 'app_file_manager_delete_folder', defaults: ['folder' => ''], methods: ['DELETE'], requirements: ['folder' => '.+'])]
376+
#[Route('/folder/delete/{dirname}/{folder}', name: 'app_file_manager_delete_folder', defaults: ['folder' => ''], methods: ['DELETE'], requirements: ['folder' => '.+'])]
310377
public function deleteFolder(string $folder, string $dirname): Response
311378
{
312379
// File directory
@@ -319,8 +386,8 @@ public function deleteFolder(string $folder, string $dirname): Response
319386
$filePath = $dirname;
320387
}
321388

322-
if ($this->fmService->exists($filePath)) {
323-
$this->fmService->remove($filePath);
389+
if ($this->fmService->exists($filePath)) { // if ($this->fmService->exists($filePath = $filePath, $absolute = false)) {
390+
$this->fmService->remove($filePath); // $this->fmService->remove($relativePath = $filePath);
324391

325392
$this->addFlash(
326393
'success',
@@ -339,7 +406,7 @@ public function deleteFolder(string $folder, string $dirname): Response
339406
]);
340407
}
341408

342-
#[Route('/file-manager/files/mass-delete/{folder}', name: 'app_file_manager_mass_delete_folder', defaults: ['folder' => ''], methods: ['DELETE'], requirements: ['folder' => '.+'])]
409+
#[Route('/files/mass-delete/{folder}', name: 'app_file_manager_mass_delete_folder', defaults: ['folder' => ''], methods: ['DELETE'], requirements: ['folder' => '.+'])]
343410
public function massDelete(Request $request, string $folder): Response
344411
{
345412
$foldersToDelete = json_decode($request->get('foldersToDelete'));
@@ -354,23 +421,18 @@ public function massDelete(Request $request, string $folder): Response
354421
} else {
355422
$folderPath = $file;
356423
}
357-
358-
if ($this->fmService->exists($folderPath)) {
359-
$this->fmService->remove($folderPath);
424+
425+
if ($this->fmService->exists($folderPath)) { // if ($this->fmService->exists($filePath = $folderPath, $absolute = false)) {
426+
$this->fmService->remove($folderPath); // $this->fmService->remove($relativePath = $folderPath);
360427
}
361428
}
362-
429+
363430
$this->addFlash(
364431
'success',
365432
$this->translator->trans('file_manager.folders_successfully_mass_deleted')
366433
);
367-
}/* else {
368-
$this->addFlash(
369-
'warning',
370-
$this->translator->trans('file_manager.no_folders_selected')
371-
);
372-
} */
373-
434+
}
435+
374436
if (!empty($filesToDelete)) {
375437
foreach ($filesToDelete as $file) {
376438
// Chemin complet du fichier demandé
@@ -379,22 +441,17 @@ public function massDelete(Request $request, string $folder): Response
379441
} else {
380442
$filePath = $file;
381443
}
382-
383-
if ($this->fmService->exists($filePath)) {
384-
$this->fmService->remove($filePath);
444+
445+
if ($this->fmService->exists($filePath)) { // if ($this->fmService->exists($filePath = $filePath, $absolute = false)) {
446+
$this->fmService->remove($filePath); // $this->fmService->remove($relativePath = $filePath);
385447
}
386448
}
387-
449+
388450
$this->addFlash(
389451
'success',
390452
$this->translator->trans('file_manager.files_successfully_mass_deleted')
391453
);
392-
}/* else {
393-
$this->addFlash(
394-
'warning',
395-
$this->translator->trans('file_manager.no_files_selected')
396-
);
397-
} */
454+
}
398455
} else {
399456
$this->addFlash(
400457
'warning',

0 commit comments

Comments
 (0)