44 * Update 20250917
55 * src/Controller/FileManagerController.php
66 */
7- namespace Anfallnorr \ FileManagerSystem \Controller ;
7+ namespace App \Controller ;
88
99use Anfallnorr \FileManagerSystem \Form \CreateFolderType ;
1010use Anfallnorr \FileManagerSystem \Form \MoveFileType ;
2424// use Symfony\Component\String\Slugger\AsciiSlugger;
2525use 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