Skip to content

Commit 0576250

Browse files
as6325400vmcj
authored andcommitted
download file when submission is single source
add spaces before/after, change method name, change download content type Update webapp/src/Service/SubmissionService.php Co-authored-by: MCJ Vasseur <[email protected]> Update webapp/src/Controller/Team/SubmissionController.php Co-authored-by: MCJ Vasseur <[email protected]> Update webapp/src/Service/SubmissionService.php Co-authored-by: MCJ Vasseur <[email protected]>
1 parent a277691 commit 0576250

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

webapp/src/Controller/Team/SubmissionController.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ public function downloadAction(int $submitId): Response
242242
$submitId));
243243
}
244244

245+
if ($this->submissionService->getSubmissionFileCount($submission) === 1) {
246+
return $this->submissionService->getSubmissionFileResponse($submission);
247+
}
248+
245249
return $this->submissionService->getSubmissionZipResponse($submission);
246250
}
247251
}

webapp/src/Service/SubmissionService.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,4 +768,31 @@ public function getSubmissionZipResponse(Submission $submission): StreamedRespon
768768

769769
return Utils::streamZipFile($tmpfname, 's' . $submission->getSubmitid() . '.zip');
770770
}
771+
772+
public function getSubmissionFileResponse(Submission $submission): StreamedResponse
773+
{
774+
/** @var SubmissionFile[] $files */
775+
$files = $submission->getFiles();
776+
777+
if (count($files) !== 1) {
778+
throw new ServiceUnavailableHttpException(null, 'Submission does not contain exactly one file.');
779+
}
780+
781+
$file = $files[0];
782+
$filename = $file->getFilename();
783+
$sourceCode = $file->getSourcecode();
784+
785+
return new StreamedResponse(function () use ($sourceCode) {
786+
echo $sourceCode;
787+
}, 200, [
788+
'Content-Type' => 'text/plain',
789+
'Content-Disposition' => 'attachment; filename="' . $filename . '"',
790+
'Content-Length' => strlen($sourceCode),
791+
]);
792+
}
793+
794+
public function getSubmissionFileCount(Submission $submission): int
795+
{
796+
return count($submission->getFiles());
797+
}
771798
}

0 commit comments

Comments
 (0)