diff --git a/webapp/migrations/Version20250907161952.php b/webapp/migrations/Version20250907161952.php new file mode 100644 index 0000000000..725a7959ba --- /dev/null +++ b/webapp/migrations/Version20250907161952.php @@ -0,0 +1,36 @@ +addSql('ALTER TABLE submission ADD source VARCHAR(255) NOT NULL DEFAULT \'unknown\' COMMENT \'Where did we receive this submission from?\''); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE submission DROP source'); + } + + public function isTransactional(): bool + { + return false; + } +} diff --git a/webapp/src/Entity/Submission.php b/webapp/src/Entity/Submission.php index 74f481c4d0..0167b67386 100644 --- a/webapp/src/Entity/Submission.php +++ b/webapp/src/Entity/Submission.php @@ -102,6 +102,12 @@ class Submission extends BaseApiEntity implements #[Serializer\Groups([ARC::GROUP_NONSTRICT])] private ?string $importError = null; + #[ORM\Column(options: [ + 'comment' => 'Where did we receive this submission from?', + ])] + #[Serializer\Exclude] + private SubmissionSource $source = SubmissionSource::UNKNOWN; + #[ORM\ManyToOne(inversedBy: 'submissions')] #[ORM\JoinColumn(name: 'cid', referencedColumnName: 'cid', onDelete: 'CASCADE')] #[Serializer\Exclude] @@ -553,4 +559,15 @@ public function getFileForApi(): array { return array_filter([$this->fileForApi]); } + + public function setSource(SubmissionSource $source): Submission + { + $this->source = $source; + return $this; + } + + public function getSource(): SubmissionSource + { + return $this->source; + } } diff --git a/webapp/src/Service/SubmissionService.php b/webapp/src/Service/SubmissionService.php index 7bca8c9460..df101ff85b 100644 --- a/webapp/src/Service/SubmissionService.php +++ b/webapp/src/Service/SubmissionService.php @@ -700,7 +700,8 @@ public function submitSolution( ->setOriginalSubmission($originalSubmission) ->setEntryPoint($entryPoint) ->setExternalid($externalId) - ->setImportError($importError); + ->setImportError($importError) + ->setSource($source); // Add expected results from source. We only do this for jury submissions // to prevent accidental auto-verification of team submissions.