Skip to content

Commit 60006a0

Browse files
Use enum for submission source
1 parent 87448ca commit 60006a0

File tree

10 files changed

+44
-22
lines changed

10 files changed

+44
-22
lines changed

webapp/src/Controller/API/SubmissionController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use App\Entity\Language;
1010
use App\Entity\Submission;
1111
use App\Entity\SubmissionFile;
12+
use App\Entity\SubmissionSource;
1213
use App\Entity\Team;
1314
use App\Entity\User;
1415
use App\Service\ConfigurationService;
@@ -331,7 +332,7 @@ public function addSubmissionAction(
331332
// Now submit the solution.
332333
$submission = $this->submissionService->submitSolution(
333334
$team, $user, $problem, $problem->getContest(), $language,
334-
$files, 'API', null, null, $entryPoint, $submissionId, $time, $message
335+
$files, SubmissionSource::API, null, null, $entryPoint, $submissionId, $time, $message
335336
);
336337

337338
// Clean up temporary if needed.

webapp/src/Controller/BaseController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use App\Entity\ExternalIdFromInternalIdInterface;
1111
use App\Entity\Problem;
1212
use App\Entity\RankCache;
13-
use App\Entity\ScoreboardType;
1413
use App\Entity\ScoreCache;
1514
use App\Entity\Team;
1615
use App\Entity\TeamCategory;
@@ -168,8 +167,9 @@ protected function getDatabaseRelations(array $files): array {
168167
$parts = explode('/', $file);
169168
$shortClass = str_replace('.php', '', $parts[count($parts) - 1]);
170169
$class = sprintf('App\\Entity\\%s', $shortClass);
171-
if (class_exists($class) && !in_array($class,
172-
[RankCache::class, ScoreCache::class, BaseApiEntity::class, ScoreboardType::class])) {
170+
if (class_exists($class) &&
171+
!in_array($class, [RankCache::class, ScoreCache::class, BaseApiEntity::class]) &&
172+
!enum_exists($class)) {
173173
$metadata = $this->em->getClassMetadata($class);
174174

175175
$tableRelations = [];

webapp/src/Controller/Jury/SubmissionController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use App\Entity\Problem;
1818
use App\Entity\Submission;
1919
use App\Entity\SubmissionFile;
20+
use App\Entity\SubmissionSource;
2021
use App\Entity\Team;
2122
use App\Entity\TeamAffiliation;
2223
use App\Entity\TeamCategory;
@@ -1014,7 +1015,7 @@ public function editSourceAction(Request $request, Submission $submission, #[Map
10141015
$submission->getContest(),
10151016
$language,
10161017
$filesToSubmit,
1017-
'edit/resubmit',
1018+
SubmissionSource::EDIT_RESUBMIT,
10181019
$this->getUser()->getUserIdentifier(),
10191020
$submission->getOriginalSubmission() ?? $submission,
10201021
$entryPoint,

webapp/src/Controller/Team/SubmissionController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use App\Entity\Language;
88
use App\Entity\Problem;
99
use App\Entity\Submission;
10+
use App\Entity\SubmissionSource;
1011
use App\Entity\Testcase;
1112
use App\Form\Type\SubmitProblemType;
1213
use App\Service\ConfigurationService;
@@ -84,7 +85,7 @@ public function createAction(Request $request, ?Problem $problem = null): Respon
8485
}
8586
$entryPoint = $form->get('entry_point')->getData() ?: null;
8687
$submission = $this->submissionService->submitSolution(
87-
$team, $this->dj->getUser(), $problem->getProbid(), $contest, $language, $files, 'team page', null,
88+
$team, $this->dj->getUser(), $problem->getProbid(), $contest, $language, $files, SubmissionSource::TEAM_PAGE, null,
8889
null, $entryPoint, null, null, $message
8990
);
9091

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace App\Entity;
4+
5+
enum SubmissionSource: string
6+
{
7+
case API = 'API';
8+
case EDIT_RESUBMIT = 'edit/resubmit';
9+
case PROBLEM_IMPORT = 'problem import';
10+
case SHADOWING = 'shadowing';
11+
case TEAM_PAGE = 'team page';
12+
case UNKNOWN = 'unknown';
13+
14+
}

webapp/src/Service/ExternalContestSourceService.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
use App\Entity\Language;
3131
use App\Entity\Problem;
3232
use App\Entity\Submission;
33+
use App\Entity\SubmissionSource;
3334
use App\Entity\Team;
3435
use App\Entity\TeamAffiliation;
3536
use App\Entity\TeamCategory;
@@ -1551,7 +1552,7 @@ protected function importSubmission(Event $event, EventData $data): void
15511552
contest: $contest,
15521553
language: $language,
15531554
files: $filesToSubmit,
1554-
source: 'shadowing',
1555+
source: SubmissionSource::SHADOWING,
15551556
entryPoint: $entryPoint,
15561557
externalId: $submissionId,
15571558
submitTime: $submitTime,

webapp/src/Service/ImportProblemService.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use App\Entity\ProblemAttachmentContent;
1212
use App\Entity\ProblemStatementContent;
1313
use App\Entity\Submission;
14+
use App\Entity\SubmissionSource;
1415
use App\Entity\Team;
1516
use App\Entity\Testcase;
1617
use App\Entity\TestcaseContent;
@@ -757,7 +758,7 @@ public function importZippedProblem(
757758
]
758759
);
759760
$submission = $this->submissionService->submitSolution(
760-
$team, $jury_user, $contestProblem, $contest, $languageToUse, $filesToSubmit, 'problem import', null,
761+
$team, $jury_user, $contestProblem, $contest, $languageToUse, $filesToSubmit, SubmissionSource::PROBLEM_IMPORT, null,
761762
null, $entry_point, null, null, $submissionMessage
762763
);
763764

webapp/src/Service/SubmissionService.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use App\Entity\Problem;
1212
use App\Entity\Submission;
1313
use App\Entity\SubmissionFile;
14+
use App\Entity\SubmissionSource;
1415
use App\Entity\Team;
1516
use App\Entity\User;
1617
use App\Utils\FreezeData;
@@ -438,7 +439,7 @@ public function submitSolution(
438439
Contest|int $contest,
439440
Language|string $language,
440441
array $files,
441-
?string $source = null,
442+
SubmissionSource $source = SubmissionSource::UNKNOWN,
442443
?string $juryMember = null,
443444
Submission|int|null $originalSubmission = null,
444445
?string $entryPoint = null,
@@ -569,7 +570,7 @@ public function submitSolution(
569570

570571
if (!empty($entryPoint) && !preg_match(self::FILENAME_REGEX, $entryPoint)) {
571572
$message = sprintf("Entry point '%s' contains illegal characters.", $entryPoint);
572-
if ($forceImportInvalid || $source === 'shadowing') {
573+
if ($forceImportInvalid || $source === SubmissionSource::SHADOWING) {
573574
$importError = $message;
574575
} else {
575576
return null;
@@ -610,15 +611,15 @@ public function submitSolution(
610611
}
611612
if (!preg_match(self::FILENAME_REGEX, $file->getClientOriginalName())) {
612613
$message = sprintf("Illegal filename '%s'.", $file->getClientOriginalName());
613-
if ($forceImportInvalid || $source === 'shadowing') {
614+
if ($forceImportInvalid || $source === SubmissionSource::SHADOWING) {
614615
$importError = $message;
615616
} else {
616617
return null;
617618
}
618619
}
619620
$totalSize += $file->getSize();
620621

621-
if ($source !== 'shadowing' && $language->getFilterCompilerFiles()) {
622+
if ($source !== SubmissionSource::SHADOWING && $language->getFilterCompilerFiles()) {
622623
$matchesExtension = false;
623624
foreach ($language->getExtensions() as $extension) {
624625
if (str_ends_with($file->getClientOriginalName(), '.' . $extension)) {
@@ -632,7 +633,7 @@ public function submitSolution(
632633
}
633634
}
634635

635-
if ($source !== 'shadowing' && $language->getFilterCompilerFiles() && $extensionMatchCount === 0) {
636+
if ($source !== SubmissionSource::SHADOWING && $language->getFilterCompilerFiles() && $extensionMatchCount === 0) {
636637
$message = sprintf(
637638
"None of the submitted files match any of the allowed " .
638639
"extensions for %s (allowed: %s)",
@@ -647,7 +648,7 @@ public function submitSolution(
647648

648649
if ($totalSize > $sourceSize * 1024) {
649650
$message = sprintf("Submission file(s) are larger than %d kB.", $sourceSize);
650-
if ($forceImportInvalid || $source === 'shadowing') {
651+
if ($forceImportInvalid || $source === SubmissionSource::SHADOWING) {
651652
$importError = $message;
652653
} else {
653654
return null;
@@ -660,7 +661,7 @@ public function submitSolution(
660661
// SQL transaction time below.
661662
// Only do this for problem import submissions, as we do not want this for re-submitted submissions nor
662663
// submissions that come through the API, e.g. when doing a replay of an old contest.
663-
if ($this->dj->checkrole('jury') && $source == 'problem import') {
664+
if ($this->dj->checkrole('jury') && $source === SubmissionSource::PROBLEM_IMPORT) {
664665
$results = null;
665666
foreach ($files as $file) {
666667
$fileResult = self::getExpectedResults(file_get_contents($file->getRealPath()),
@@ -726,7 +727,7 @@ public function submitSolution(
726727
$this->em->flush();
727728

728729
$this->dj->maybeCreateJudgeTasks($judging,
729-
$source === 'problem import' ? JudgeTask::PRIORITY_LOW : JudgeTask::PRIORITY_DEFAULT);
730+
$source === SubmissionSource::PROBLEM_IMPORT ? JudgeTask::PRIORITY_LOW : JudgeTask::PRIORITY_DEFAULT);
730731
}
731732

732733
$this->em->wrapInTransaction(function () use ($contest, $submission) {
@@ -755,7 +756,7 @@ public function submitSolution(
755756
$language->getLangid(), $problem->getProblem()->getProbid()));
756757

757758
$this->dj->auditlog('submission', $submission->getSubmitid(), 'added',
758-
'via ' . ($source ?? 'unknown'), null, $contest->getCid());
759+
'via ' . $source->value, null, $contest->getCid());
759760

760761
if (Utils::difftime((float)$contest->getEndtime(), $submitTime) <= 0) {
761762
$this->logger->info(

webapp/tests/Unit/Controller/Jury/QueueTaskControllerTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use App\Entity\Problem;
1111
use App\Entity\QueueTask;
1212
use App\Entity\Submission;
13+
use App\Entity\SubmissionSource;
1314
use App\Entity\Team;
1415
use App\Service\ConfigurationService;
1516
use App\Service\DOMJudgeService;
@@ -196,7 +197,7 @@ protected function addSubmission(string $team, string $problem): Submission
196197
return $this->submissionService->submitSolution(
197198
$team, null, $problem, $contest, 'c',
198199
[new UploadedFile(__FILE__, "foo.c", null, null, true)],
199-
null, null, null, null, null, null, $msg
200+
SubmissionSource::UNKNOWN, null, null, null, null, null, $msg
200201
);
201202
}
202203

webapp/tests/Unit/Integration/QueuetaskIntegrationTest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use App\Entity\JudgeTask;
88
use App\Entity\Problem;
99
use App\Entity\QueueTask;
10+
use App\Entity\SubmissionSource;
1011
use App\Entity\Team;
1112
use App\Entity\TeamCategory;
1213
use App\Entity\Testcase;
@@ -157,7 +158,7 @@ protected function setUp(): void
157158
self::getContainer()->get('security.untracked_token_storage')->setToken($token);
158159
}
159160

160-
private function submit(?float $time, ?Team $team = null, ?Problem $problem = null, string $source = 'team page'): QueueTask
161+
private function submit(?float $time, ?Team $team = null, ?Problem $problem = null, SubmissionSource $source = SubmissionSource::TEAM_PAGE): QueueTask
161162
{
162163
$contest = $this->em->getRepository(Contest::class)->find($this->contest->getCid());
163164
$team ??= $this->teams[0];
@@ -323,15 +324,15 @@ public function testPriorities(): void
323324
{
324325
$time = Utils::now();
325326

326-
$normal = $this->submit($time, $this->teams[0], null, 'team page');
327+
$normal = $this->submit($time, $this->teams[0], null, SubmissionSource::TEAM_PAGE);
327328
self::assertEquals((int)$time, $normal->getTeamPriority());
328329
self::assertEquals(JudgeTask::PRIORITY_DEFAULT, $normal->getPriority());
329330

330-
$api = $this->submit($time, $this->teams[1], null, 'api');
331+
$api = $this->submit($time, $this->teams[1], null, SubmissionSource::API);
331332
self::assertEquals((int)$time, $api->getTeamPriority());
332333
self::assertEquals(JudgeTask::PRIORITY_DEFAULT, $api->getPriority());
333334

334-
$problem_import = $this->submit($time, $this->teams[2], null, 'problem import');
335+
$problem_import = $this->submit($time, $this->teams[2], null, SubmissionSource::PROBLEM_IMPORT);
335336
self::assertEquals((int)$time, $problem_import->getTeamPriority());
336337
self::assertEquals(JudgeTask::PRIORITY_LOW, $problem_import->getPriority());
337338
}

0 commit comments

Comments
 (0)