99use Chamilo \CoreBundle \Component \Utils \CreateUploadedFile ;
1010use Chamilo \CoreBundle \Entity \AbstractResource ;
1111use Chamilo \CoreBundle \Entity \Course ;
12+ use Chamilo \CoreBundle \Entity \ResourceFile ;
1213use Chamilo \CoreBundle \Entity \ResourceLink ;
1314use Chamilo \CoreBundle \Entity \ResourceNode ;
1415use Chamilo \CoreBundle \Entity \ResourceRight ;
2728use Symfony \Component \HttpFoundation \Request ;
2829use Symfony \Component \HttpKernel \Exception \BadRequestHttpException ;
2930use Symfony \Component \HttpKernel \KernelInterface ;
31+ use Symfony \Contracts \Translation \TranslatorInterface ;
3032use ZipArchive ;
3133
3234class BaseResourceFileAction
@@ -189,7 +191,8 @@ public function handleCreateFileRequest(
189191 ResourceRepository $ resourceRepository ,
190192 Request $ request ,
191193 EntityManager $ em ,
192- string $ fileExistsOption = ''
194+ string $ fileExistsOption = '' ,
195+ TranslatorInterface $ translator = null
193196 ): array {
194197 $ contentData = $ request ->getContent ();
195198
@@ -253,11 +256,23 @@ public function handleCreateFileRequest(
253256 // Check if a document with the same title and parent resource node already exists
254257 $ existingDocument = $ resourceRepository ->findByTitleAndParentResourceNode ($ title , $ parentResourceNodeId );
255258 if ($ existingDocument ) {
256- if ('overwrite ' == $ fileExistsOption ) {
257- // Perform actions when file exists and 'overwrite' option is selected
258- $ resource ->setResourceName ($ title );
259+ if ('overwrite ' === $ fileExistsOption ) {
259260 $ existingDocument ->setTitle ($ title );
260261 $ existingDocument ->setComment ($ comment );
262+
263+ $ resourceNode = $ existingDocument ->getResourceNode ();
264+
265+ $ resourceFile = $ resourceNode ->getFirstResourceFile ();
266+ if ($ resourceFile instanceof ResourceFile) {
267+ $ resourceFile ->setFile ($ uploadedFile );
268+ $ em ->persist ($ resourceFile );
269+ } else {
270+ $ existingDocument ->setUploadFile ($ uploadedFile );
271+ }
272+
273+ $ resourceNode ->setUpdatedAt (new \DateTime ());
274+ $ existingDocument ->setResourceNode ($ resourceNode );
275+
261276 $ em ->persist ($ existingDocument );
262277 $ em ->flush ();
263278
@@ -282,7 +297,7 @@ public function handleCreateFileRequest(
282297
283298 // Return any data you need for further processing
284299 return [
285- 'title ' => $ title ,
300+ 'title ' => $ newTitle ,
286301 'filetype ' => 'file ' ,
287302 'comment ' => $ comment ,
288303 ];
@@ -294,13 +309,10 @@ public function handleCreateFileRequest(
294309 // or perform any other desired actions based on your application's requirements
295310 $ resource ->setResourceName ($ title );
296311 $ flashBag = $ request ->getSession ()->getFlashBag ();
297- $ flashBag ->add ('warning ' , 'Upload Already Exists ' );
312+ $ message = $ translator ? $ translator ->trans ('upload.already_exists ' ) : 'Upload Already Exists ' ;
313+ $ flashBag ->add ('warning ' , $ message );
298314
299- return [
300- 'title ' => $ title ,
301- 'filetype ' => 'file ' ,
302- 'comment ' => $ comment ,
303- ];
315+ throw new BadRequestHttpException ($ translator ? $ translator ->trans ('file.already_exists ' ) : 'The file already exists and was not uploaded. ' );
304316 }
305317
306318 throw new InvalidArgumentException ('Invalid fileExistsOption ' );
@@ -614,8 +626,15 @@ private function formatFolderStructure(array $folderStructure): array
614626 return $ result ;
615627 }
616628
629+ /**
630+ * Generates a unique filename by appending a random suffix.
631+ */
617632 private function generateUniqueTitle (string $ title ): string
618633 {
619- return $ title .'_ ' .uniqid ();
634+ $ info = pathinfo ($ title );
635+ $ filename = $ info ['filename ' ];
636+ $ extension = isset ($ info ['extension ' ]) ? '. ' .$ info ['extension ' ] : '' ;
637+
638+ return $ filename .'_ ' .uniqid ().$ extension ;
620639 }
621640}
0 commit comments