From b70be33025011976d8c3fb87e0bdd6bc66c198d0 Mon Sep 17 00:00:00 2001 From: Kevin Jilissen Date: Wed, 1 Oct 2025 22:24:50 +0200 Subject: [PATCH 1/4] Change source fetching to single query Also removes some redundant twig variables and prepares the logic for more submissions to diff against. --- .../Controller/Jury/SubmissionController.php | 47 +++++++++---------- .../jury/submission_source.html.twig | 4 +- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/webapp/src/Controller/Jury/SubmissionController.php b/webapp/src/Controller/Jury/SubmissionController.php index acca869506..95cc7d0294 100644 --- a/webapp/src/Controller/Jury/SubmissionController.php +++ b/webapp/src/Controller/Jury/SubmissionController.php @@ -849,22 +849,10 @@ public function sourceAction( ->getQuery() ->getResult(); - $originalSubmission = $originalFiles = null; - - if ($submission->getOriginalSubmission()) { - /** @var Submission $originalSubmission */ - $originalSubmission = $this->em->getRepository(Submission::class)->find($submission->getOriginalSubmission()->getSubmitid()); - - /** @var SubmissionFile[] $files */ - $originalFiles = $this->em->createQueryBuilder() - ->from(SubmissionFile::class, 'file') - ->select('file') - ->andWhere('file.submission = :submission') - ->setParameter('submission', $originalSubmission) - ->orderBy('file.ranknumber') - ->getQuery() - ->getResult(); - + $otherSubmissions = []; + $originalSubmission = $submission->getOriginalSubmission(); + if ($originalSubmission) { + $otherSubmissions[] = $originalSubmission; /** @var Submission $oldSubmission */ $oldSubmission = $this->em->createQueryBuilder() ->from(Submission::class, 's') @@ -900,30 +888,39 @@ public function sourceAction( ->getQuery() ->getOneOrNullResult(); } + if ($oldSubmission !== null) { + $otherSubmissions[] = $oldSubmission; + } /** @var SubmissionFile[] $files */ $oldFiles = $this->em->createQueryBuilder() ->from(SubmissionFile::class, 'file') ->select('file') - ->andWhere('file.submission = :submission') - ->setParameter('submission', $oldSubmission) - ->orderBy('file.ranknumber') + ->andWhere('file.submission in (:submissions)') + ->setParameter('submissions', array_map(fn($s) => $s->getSubmitid(), $otherSubmissions)) + ->orderBy('file.submission, file.ranknumber') ->getQuery() ->getResult(); - $oldFileStats = $oldFiles !== null ? $this->determineFileChanged($files, $oldFiles) : []; - $originalFileStats = $originalFiles !== null ? $this->determineFileChanged($files, $originalFiles) : []; + $otherFiles = []; + foreach ($oldFiles as $f) { + $submitId = $f->getSubmission()->getSubmitid(); + $otherFiles[$submitId] ??= []; + $otherFiles[$submitId][] = $f; + } + + foreach ($otherFiles as $s => $v) { + $otherFiles[$s] = $this->determineFileChanged($files, $v); + } return $this->render('jury/submission_source.html.twig', [ 'submission' => $submission, 'files' => $files, 'oldSubmission' => $oldSubmission, - 'oldFiles' => $oldFiles, - 'oldFileStats' => $oldFileStats, 'originalSubmission' => $originalSubmission, - 'originalFiles' => $originalFiles, - 'originalFileStats' => $originalFileStats, 'allowEdit' => $this->allowEdit(), + 'otherSubmissions' => $otherSubmissions, + 'otherFiles' => $otherFiles, ]); } diff --git a/webapp/templates/jury/submission_source.html.twig b/webapp/templates/jury/submission_source.html.twig index 2ddcf2b4c5..dba2b6cd92 100644 --- a/webapp/templates/jury/submission_source.html.twig +++ b/webapp/templates/jury/submission_source.html.twig @@ -42,7 +42,7 @@ {%- endif %} {% if oldSubmission %} - {%- include 'jury/partials/submission_diff.html.twig' with {oldSubmission: oldSubmission, oldFiles: oldFiles, oldFileStats: oldFileStats} %} + {%- include 'jury/partials/submission_diff.html.twig' with {oldSubmission: oldSubmission, oldFileStats: otherFiles[oldSubmission.submitid]} %} {% else %}