Skip to content

Commit e2eaca5

Browse files
committed
Expose samples/problemset after the contest start
(cherry picked from commit 8492526)
1 parent 43ecaaa commit e2eaca5

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

webapp/src/Controller/API/AbstractApiController.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ public function __construct(
3333
* Get the query builder used for getting contests.
3434
*
3535
* @param bool $onlyActive return only contests that are active
36+
* @param bool $filterBeforeContest return only contests that have started
3637
*/
37-
protected function getContestQueryBuilder(bool $onlyActive = false): QueryBuilder
38-
{
38+
protected function getContestQueryBuilder(
39+
bool $onlyActive = false, bool $filterBeforeContest = true
40+
): QueryBuilder {
3941
$now = Utils::now();
4042
$qb = $this->em->createQueryBuilder();
4143
$qb
@@ -62,6 +64,10 @@ protected function getContestQueryBuilder(bool $onlyActive = false): QueryBuilde
6264
} else {
6365
$qb->andWhere('c.public = 1');
6466
}
67+
if ($filterBeforeContest) {
68+
$qb->andWhere('c.starttime <= :now')
69+
->setParameter('now', $now);
70+
}
6571
}
6672

6773
return $qb;
@@ -76,7 +82,10 @@ protected function getContestId(Request $request): int
7682
throw new BadRequestHttpException('cid parameter missing');
7783
}
7884

79-
$qb = $this->getContestQueryBuilder($request->query->getBoolean('onlyActive', false));
85+
$qb = $this->getContestQueryBuilder(
86+
onlyActive: $request->query->getBoolean('onlyActive', false),
87+
filterBeforeContest: false
88+
);
8089
$qb
8190
->andWhere('c.externalid = :cid')
8291
->setParameter('cid', $request->attributes->get('cid'));

webapp/src/Controller/API/ContestController.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public function singleAction(Request $request, string $cid): Response
180180
public function bannerAction(Request $request, string $cid): Response
181181
{
182182
/** @var Contest|null $contest */
183-
$contest = $this->getQueryBuilder($request)
183+
$contest = $this->getQueryBuilder($request, filterBeforeContest: false)
184184
->andWhere(sprintf('%s = :id', $this->getIdField()))
185185
->setParameter('id', $cid)
186186
->getQuery()
@@ -950,10 +950,10 @@ public function samplesDataZipAction(Request $request): Response
950950
return $this->dj->getSamplesZipForContest($contest);
951951
}
952952

953-
protected function getQueryBuilder(Request $request): QueryBuilder
953+
protected function getQueryBuilder(Request $request, bool $filterBeforeContest = true): QueryBuilder
954954
{
955955
try {
956-
return $this->getContestQueryBuilder($request->query->getBoolean('onlyActive', true));
956+
return $this->getContestQueryBuilder($request->query->getBoolean('onlyActive', true), $filterBeforeContest);
957957
} catch (TypeError) {
958958
throw new BadRequestHttpException('\'onlyActive\' must be a boolean.');
959959
}
@@ -970,7 +970,7 @@ protected function getIdField(): string
970970
*/
971971
protected function getContestWithId(Request $request, string $id): Contest
972972
{
973-
$queryBuilder = $this->getQueryBuilder($request)
973+
$queryBuilder = $this->getQueryBuilder($request, filterBeforeContest: false)
974974
->andWhere(sprintf('%s = :id', $this->getIdField()))
975975
->setParameter('id', $id);
976976

@@ -987,7 +987,7 @@ protected function getContestWithId(Request $request, string $id): Contest
987987
private function getContestAndCheckIfLocked(Request $request, string $cid): Contest
988988
{
989989
/** @var Contest|null $contest */
990-
$contest = $this->getQueryBuilder($request)
990+
$contest = $this->getQueryBuilder($request, filterBeforeContest: false)
991991
->andWhere(sprintf('%s = :id', $this->getIdField()))
992992
->setParameter('id', $cid)
993993
->getQuery()

0 commit comments

Comments
 (0)