diff --git a/webapp/src/Controller/Team/LanguageController.php b/webapp/src/Controller/Team/LanguageController.php index a03bc4e8fe..66d819a93d 100644 --- a/webapp/src/Controller/Team/LanguageController.php +++ b/webapp/src/Controller/Team/LanguageController.php @@ -4,6 +4,7 @@ use App\Controller\BaseController; use App\Entity\Language; +use App\Entity\ContestProblem; use App\Service\ConfigurationService; use App\Service\DOMJudgeService; use App\Service\EventLogService; @@ -33,6 +34,20 @@ public function __construct( parent::__construct($em, $eventLogService, $dj, $kernel); } + /** + * @param Language[] $languages + * @return Language[] + */ + private function addLanguage(array $languages, Language $language, ContestProblem $problem): array + { + $langId = $language->getName(); + if (!isset($languages[$langId])) { + $languages[$langId] = ['problems' => [], 'language' => $language]; + } + $languages[$langId]['problems'][] = $problem; + return $languages; + } + #[Route(path: '', name: 'team_languages')] public function languagesAction(): Response { @@ -40,9 +55,20 @@ public function languagesAction(): Response if (!$languagesEnabled) { throw new BadRequestHttpException("You are not allowed to view this page."); } + $languages = []; $currentContest = $this->dj->getCurrentContest(); - /** @var Language[] $languages */ - $languages = $this->dj->getAllowedLanguagesForContest($currentContest); - return $this->render('team/languages.html.twig', ['languages' => $languages]); + $limited = false; + foreach ($this->dj->getCurrentContest()->getProblems() as $problem) { + foreach ($problem->getProblem()->getLanguages() as $language) { + $languages = $this->addLanguage($languages, $language, $problem); + $limited = true; + } + if (count($problem->getProblem()->getLanguages()) == 0) { + foreach ($this->dj->getAllowedLanguagesForContest($currentContest) as $language) { + $languages = $this->addLanguage($languages, $language, $problem); + } + } + } + return $this->render('team/languages.html.twig', ['languages' => $languages, 'limited' => $limited]); } } diff --git a/webapp/src/Controller/Team/SubmissionController.php b/webapp/src/Controller/Team/SubmissionController.php index 9957883054..f8dc4bdac8 100644 --- a/webapp/src/Controller/Team/SubmissionController.php +++ b/webapp/src/Controller/Team/SubmissionController.php @@ -22,6 +22,7 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\Routing\Attribute\Route; diff --git a/webapp/templates/team/languages.html.twig b/webapp/templates/team/languages.html.twig index 57ce0d361f..042a0f94b5 100644 --- a/webapp/templates/team/languages.html.twig +++ b/webapp/templates/team/languages.html.twig @@ -7,7 +7,9 @@
.{{ ext }}{% if not loop.last %}, {% endif %}
{% endfor %}
+
+ {% if limited %}
+
+ {% for problem in problems %}
+ {{ problem | problemBadge }}
+ {% endfor %}
+
+ {% endif %}
$ {{ lang.compilerVersionCommand }}