2323use ProcessMaker \Http \Resources \ApiResource ;
2424use ProcessMaker \Models \Media ;
2525use ProcessMaker \Models \ProcessRequest ;
26+ use ProcessMaker \Models \TaskDraft ;
2627
2728class ProcessRequestFileController extends Controller
2829{
@@ -85,18 +86,25 @@ class ProcessRequestFileController extends Controller
8586 */
8687 public function index (Request $ laravel_request , ProcessRequest $ request )
8788 {
88- $ media = \ProcessMaker \Models \Media::getFilesRequest ($ request );
89-
9089 //Retrieve input filter variables
9190 $ name = $ laravel_request ->get ('name ' );
9291 $ id = $ laravel_request ->get ('id ' );
9392 $ filter = $ name ? $ name : $ id ;
9493
94+ $ media = Media::getFilesRequest ($ request , $ id );
95+
9596 // Register the Event
9697 if (!empty ($ filter )) {
9798 FilesAccessed::dispatch ($ filter , $ request );
9899 }
99100
101+ if ($ id && $ media ) {
102+ // We retrieved a single item by ID, so no need to filter.
103+ // Just return a collection with one item.
104+ $ media = [$ media ];
105+ $ filter = false ;
106+ }
107+
100108 // If no filter, return entire collection; otherwise, filter collection
101109 if (!$ filter ) {
102110 return new ResourceCollection ($ media );
@@ -123,7 +131,7 @@ public function index(Request $laravel_request, ProcessRequest $request)
123131 * Display the specified resource.
124132 *
125133 * @param Media $file
126- * @return \Illuminate\Http\ Response
134+ * @return Response
127135 *
128136 * @OA\Get(
129137 * path="/requests/{request_id}/files/{file_id}",
@@ -208,8 +216,8 @@ protected function chunk(FileReceiver $receiver, ProcessRequest $request, Reques
208216 /**
209217 * Store a newly created resource in storage.
210218 *
211- * @param \Illuminate\Http\ Request $request
212- * @return \Illuminate\Http\ Response
219+ * @param Request $request
220+ * @return Response
213221 *
214222 * @OA\Post(
215223 * path="/requests/{request_id}/files",
@@ -294,8 +302,15 @@ private function saveUploadedFile(UploadedFile $file, ProcessRequest $processReq
294302 $ rowId = $ laravelRequest ->input ('row_id ' , null );
295303 $ parent = (int ) $ laravelRequest ->input ('parent ' , null );
296304 $ multiple = $ laravelRequest ->input ('multiple ' , null );
305+ $ taskId = (int ) $ laravelRequest ->input ('task_id ' , 0 );
297306
298- foreach ($ parentRequest ->getMedia () as $ mediaItem ) {
307+ $ model = $ parentRequest ;
308+ if ($ taskId ) {
309+ // The draft may not exist yet. Create it now if it doesn't exist.
310+ $ model = TaskDraft::firstOrCreate (['task_id ' => $ taskId ], ['data ' => []]);
311+ }
312+
313+ foreach ($ model ->getMedia () as $ mediaItem ) {
299314 if (
300315 $ mediaItem ->getCustomProperty ('data_name ' ) == $ data_name &&
301316 $ mediaItem ->getCustomProperty ('parent ' ) == $ parent &&
@@ -309,7 +324,7 @@ private function saveUploadedFile(UploadedFile $file, ProcessRequest $processReq
309324 }
310325
311326 // save the file and return any response you need
312- $ media = $ parentRequest
327+ $ media = $ model
313328 ->addMedia ($ file )
314329 ->withCustomProperties ([
315330 'data_name ' => $ data_name ,
@@ -319,6 +334,21 @@ private function saveUploadedFile(UploadedFile $file, ProcessRequest $processReq
319334 ])
320335 ->toMediaCollection ();
321336
337+ if ($ taskId ) {
338+ // Model is a TaskDraft. Save the new file ID in the draft's data.
339+ $ data = $ model ->data ;
340+ $ data [$ data_name ] = $ media ->id ;
341+ $ model ->data = $ data ;
342+ $ model ->saveOrFail ();
343+
344+ // Set the process request the file should belong to after saving.
345+ // Note that this is the $parentRequest and may be different than
346+ // the task->processRequest.
347+ $ media ->setCustomProperty ('parent_process_request_id ' , $ parentRequest ->id );
348+ $ media ->setCustomProperty ('is_multiple ' , (bool ) $ multiple );
349+ $ media ->saveOrFail ();
350+ }
351+
322352 // Register the Event
323353 FilesCreated::dispatch ($ media ->id , $ processRequest );
324354
@@ -329,7 +359,7 @@ private function saveUploadedFile(UploadedFile $file, ProcessRequest $processReq
329359 * Remove the specified resource from storage.
330360 *
331361 * @param Media $file
332- * @return \Illuminate\Http\ Response
362+ * @return Response
333363 *
334364 * @internal param int $id
335365 *
@@ -365,7 +395,7 @@ private function saveUploadedFile(UploadedFile $file, ProcessRequest $processReq
365395 */
366396 public function destroy (Request $ laravel_request , ProcessRequest $ request , $ fileId )
367397 {
368- $ file = \ ProcessMaker \ Models \ Media::getFilesRequest ($ request)-> find ( $ fileId );
398+ $ file = Media::getFilesRequest ($ request, $ fileId );
369399
370400 if (!$ file ) {
371401 return abort (response (__ ('File ID does not exist ' ), 404 ));
0 commit comments