From b245227f0f3e89b203d1e2c2aea09964d6ab3eb4 Mon Sep 17 00:00:00 2001 From: Tobias Werth Date: Sun, 5 Oct 2025 17:23:18 +0200 Subject: [PATCH 1/2] Fix clarifications for unlinked problems Closes: https://github.com/DOMjudge/domjudge/issues/3032 --- webapp/src/Controller/Jury/ClarificationController.php | 7 ++++++- webapp/src/Twig/TwigExtension.php | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/webapp/src/Controller/Jury/ClarificationController.php b/webapp/src/Controller/Jury/ClarificationController.php index 4c8a6f8fa1..4eda5224e2 100644 --- a/webapp/src/Controller/Jury/ClarificationController.php +++ b/webapp/src/Controller/Jury/ClarificationController.php @@ -193,7 +193,12 @@ public function viewAction(Request $request, int $id): Response $clarcontest = $contest->getShortname(); $data['subjectlink'] = null; if ($clar->getProblem()) { - $concernssubject = $contest->getCid() . "-" . $clar->getProblem()->getProbid(); + if ($clar->getContestProblem()) { + $concernssubject = $contest->getCid() . "-" . $clar->getProblem()->getProbid(); + } else { + // Very special case, this problem is unlinked. + $concernssubject = ""; + } $data['subjectlink'] = $this->generateUrl('jury_problem', ['probId' => $clar->getProblem()->getProbid()]); } elseif ($clar->getCategory()) { $concernssubject = $contest->getCid() . "-" . $clar->getCategory(); diff --git a/webapp/src/Twig/TwigExtension.php b/webapp/src/Twig/TwigExtension.php index c1309fe6b7..60df1de6cc 100644 --- a/webapp/src/Twig/TwigExtension.php +++ b/webapp/src/Twig/TwigExtension.php @@ -1179,9 +1179,9 @@ public function fileTypeIcon(string $type): string return 'fas fa-file-' . $iconName; } - public function problemBadge(ContestProblem $problem, bool $grayedOut = false): string + public function problemBadge(?ContestProblem $problem, bool $grayedOut = false): string { - $rgb = Utils::convertToHex($problem->getColor() ?? '#ffffff'); + $rgb = Utils::convertToHex($problem?->getColor() ?? '#ffffff'); if ($grayedOut || empty($rgb)) { $rgb = Utils::convertToHex('whitesmoke'); } @@ -1197,7 +1197,7 @@ public function problemBadge(ContestProblem $problem, bool $grayedOut = false): $rgb, $border, $foreground, - $problem->getShortname() + $problem?->getShortname() ?? '?' ); } From b3949522645399ecdabfcecadfa13109402e8479 Mon Sep 17 00:00:00 2001 From: Michael Vasseur <14887731+vmcj@users.noreply.github.com> Date: Wed, 24 Sep 2025 22:23:36 +0200 Subject: [PATCH 2/2] Only display clarifications about Problems when the ContestProblem is still linked --- webapp/src/Controller/API/ClarificationController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/webapp/src/Controller/API/ClarificationController.php b/webapp/src/Controller/API/ClarificationController.php index 81f1a560ca..397e2e499b 100644 --- a/webapp/src/Controller/API/ClarificationController.php +++ b/webapp/src/Controller/API/ClarificationController.php @@ -277,8 +277,10 @@ protected function getQueryBuilder(Request $request): QueryBuilder ->leftJoin('clar.sender', 's') ->leftJoin('clar.recipient', 'r') ->leftJoin('clar.problem', 'p') + ->innerJoin('c.problems', 'cp') ->select('clar, c, r, reply, p') ->andWhere('clar.contest = :cid') + ->andWhere('clar.problem IS NULL OR clar.problem = cp.problem') ->setParameter('cid', $this->getContestId($request)) ->orderBy('clar.clarid');