Skip to content

Commit d6dd982

Browse files
committed
Display all languages in the contest in teaminterface
Also limit the languages in case the problem has different languages.
1 parent 74a851b commit d6dd982

File tree

4 files changed

+39
-5
lines changed

4 files changed

+39
-5
lines changed

webapp/src/Controller/Team/LanguageController.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,25 @@ public function languagesAction(): Response
4040
if (!$languagesEnabled) {
4141
throw new BadRequestHttpException("You are not allowed to view this page.");
4242
}
43+
$languages = [];
4344
$currentContest = $this->dj->getCurrentContest();
44-
/** @var Language[] $languages */
45-
$languages = $this->dj->getAllowedLanguagesForContest($currentContest);
46-
return $this->render('team/languages.html.twig', ['languages' => $languages]);
45+
$limited = false;
46+
foreach ($this->dj->getCurrentContest()->getProblems() as $problem) {
47+
foreach ($problem->getProblem()->getLanguages() as $language) {
48+
$langId = $language->getName();
49+
if (!isset($languages[$langId])) {
50+
$languages[$langId] = ['problems' => [], 'contestlang' => false, 'language' => $language];
51+
}
52+
$languages[$langId]['problems'][] = $problem;
53+
$limited = true;
54+
}
55+
}
56+
foreach ($this->dj->getAllowedLanguagesForContest($currentContest) as $language) {
57+
if (!isset($languages[$language->getName()])) {
58+
$languages[$language->getName()] = ['problems' => [], 'contestlang' => true, 'language' => $language];
59+
}
60+
$languages[$language->getName()]['contestlang'] = true;
61+
};
62+
return $this->render('team/languages.html.twig', ['languages' => $languages, 'limited' => $limited]);
4763
}
4864
}

webapp/src/Controller/Team/SubmissionController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Symfony\Component\HttpFoundation\File\UploadedFile;
2323
use Symfony\Component\HttpFoundation\Request;
2424
use Symfony\Component\HttpFoundation\Response;
25+
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
2526
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
2627
use Symfony\Component\HttpKernel\KernelInterface;
2728
use Symfony\Component\Routing\Attribute\Route;
@@ -60,6 +61,7 @@ public function createAction(Request $request, ?Problem $problem = null): Respon
6061
$data = [];
6162
if ($problem !== null) {
6263
$data['problem'] = $problem;
64+
$data['languages'] = $problem->getLanguages();
6365
}
6466
$form = $this->formFactory
6567
->createBuilder(SubmitProblemType::class, $data)

webapp/src/Form/Type/SubmitProblemType.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
5454
];
5555
$builder->add('problem', EntityType::class, $problemConfig);
5656

57-
$languages = $this->dj->getAllowedLanguagesForContest($contest);
57+
$languages = (empty($options['data']['languages']->toArray()) ? $this->dj->getAllowedLanguagesForContest($contest) : $options['data']['languages']);
5858
$builder->add('language', EntityType::class, [
5959
'class' => Language::class,
6060
'choices' => $languages,

webapp/templates/team/languages.html.twig

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77

88
<div class="container">
99
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-2 g-2">
10-
{% for lang in languages %}
10+
{% for langarray in languages %}
11+
{% set lang = langarray['language'] %}
12+
{% set problems = langarray['problems'] %}
13+
{% set contestlang = langarray['contestlang'] %}
1114
<div class="col">
1215
<div class="card">
1316
<div class="card-body">
@@ -18,6 +21,19 @@
1821
{% for ext in lang.extensions %}
1922
<code>.{{ ext }}</code>{% if not loop.last %}, {% endif %}
2023
{% endfor %}
24+
</span>
25+
{% if limited %}
26+
<span style="float: right; font-size:50%;">
27+
{% if contestlang %}
28+
<span class="badge problem-badge" style="background-color: #fff; border: 1px solid #000">
29+
<span style="color: #000">All</span>
30+
</span>
31+
{% endif %}
32+
{% for problem in problems %}
33+
{{ problem | problemBadge }}
34+
{% endfor %}
35+
</span>
36+
{% endif %}
2137
</h2>
2238
</div>
2339
{% if lang.compilerVersion and lang.compilerVersionCommand %}

0 commit comments

Comments
 (0)