Skip to content

Commit 8492526

Browse files
committed
Expose samples/problemset after the contest start
1 parent f4be923 commit 8492526

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
@@ -34,9 +34,11 @@ public function __construct(
3434
* Get the query builder used for getting contests.
3535
*
3636
* @param bool $onlyActive return only contests that are active
37+
* @param bool $filterBeforeContest return only contests that have started
3738
*/
38-
protected function getContestQueryBuilder(bool $onlyActive = false): QueryBuilder
39-
{
39+
protected function getContestQueryBuilder(
40+
bool $onlyActive = false, bool $filterBeforeContest = true
41+
): QueryBuilder {
4042
$now = Utils::now();
4143
$qb = $this->em->createQueryBuilder();
4244
$qb
@@ -63,6 +65,10 @@ protected function getContestQueryBuilder(bool $onlyActive = false): QueryBuilde
6365
} else {
6466
$qb->andWhere('c.public = 1');
6567
}
68+
if ($filterBeforeContest) {
69+
$qb->andWhere('c.starttime <= :now')
70+
->setParameter('now', $now);
71+
}
6672
}
6773

6874
return $qb;
@@ -77,7 +83,10 @@ protected function getContestId(Request $request): int
7783
throw new BadRequestHttpException('cid parameter missing');
7884
}
7985

80-
$qb = $this->getContestQueryBuilder($request->query->getBoolean('onlyActive', false));
86+
$qb = $this->getContestQueryBuilder(
87+
onlyActive: $request->query->getBoolean('onlyActive', false),
88+
filterBeforeContest: false
89+
);
8190
$qb
8291
->andWhere(sprintf('c.%s = :cid', $this->getContestIdField()))
8392
->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
@@ -179,7 +179,7 @@ public function singleAction(Request $request, string $cid): Response
179179
public function bannerAction(Request $request, string $cid): Response
180180
{
181181
/** @var Contest|null $contest */
182-
$contest = $this->getQueryBuilder($request)
182+
$contest = $this->getQueryBuilder($request, filterBeforeContest: false)
183183
->andWhere(sprintf('%s = :id', $this->getIdField()))
184184
->setParameter('id', $cid)
185185
->getQuery()
@@ -934,10 +934,10 @@ public function samplesDataZipAction(Request $request): Response
934934
return $this->dj->getSamplesZipForContest($contest);
935935
}
936936

937-
protected function getQueryBuilder(Request $request): QueryBuilder
937+
protected function getQueryBuilder(Request $request, bool $filterBeforeContest = true): QueryBuilder
938938
{
939939
try {
940-
return $this->getContestQueryBuilder($request->query->getBoolean('onlyActive', false));
940+
return $this->getContestQueryBuilder($request->query->getBoolean('onlyActive', false), $filterBeforeContest);
941941
} catch (TypeError) {
942942
throw new BadRequestHttpException('\'onlyActive\' must be a boolean.');
943943
}
@@ -954,7 +954,7 @@ protected function getIdField(): string
954954
*/
955955
protected function getContestWithId(Request $request, string $id): Contest
956956
{
957-
$queryBuilder = $this->getQueryBuilder($request)
957+
$queryBuilder = $this->getQueryBuilder($request, filterBeforeContest: false)
958958
->andWhere(sprintf('%s = :id', $this->getIdField()))
959959
->setParameter('id', $id);
960960

@@ -971,7 +971,7 @@ protected function getContestWithId(Request $request, string $id): Contest
971971
private function getContestAndCheckIfLocked(Request $request, string $cid): Contest
972972
{
973973
/** @var Contest|null $contest */
974-
$contest = $this->getQueryBuilder($request)
974+
$contest = $this->getQueryBuilder($request, filterBeforeContest: false)
975975
->andWhere(sprintf('%s = :id', $this->getIdField()))
976976
->setParameter('id', $cid)
977977
->getQuery()

0 commit comments

Comments
 (0)