Skip to content

Commit 84c71eb

Browse files
Merge pull request #5694 from christianbeeznest/courses-access-url
Course: Filter courses by access URL if multiple URLs enabled
2 parents 214dc63 + ea18bb5 commit 84c71eb

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

public/main/admin/course_edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@
310310
$visibility = $course['visibility'];
311311

312312
if (isset($course['duration'])) {
313-
$course['duration'] = $course['duration'] * 60;
313+
$course['duration'] = (int) $course['duration'] * 60;
314314
}
315315

316316
// @todo should be check in the CidReqListener

src/CoreBundle/DataProvider/Extension/CourseRelUserExtension.php

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,19 @@
99
use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
1010
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
1111
use ApiPlatform\Metadata\Operation;
12+
use Chamilo\CoreBundle\Entity\AccessUrlRelCourse;
1213
use Chamilo\CoreBundle\Entity\CourseRelUser;
1314
use Chamilo\CoreBundle\Entity\User;
15+
use Chamilo\CoreBundle\ServiceHelper\AccessUrlHelper;
1416
use Doctrine\ORM\QueryBuilder;
1517
use Symfony\Bundle\SecurityBundle\Security;
1618
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
1719

18-
// use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
19-
20-
final class CourseRelUserExtension implements QueryCollectionExtensionInterface // , QueryItemExtensionInterface
20+
final class CourseRelUserExtension implements QueryCollectionExtensionInterface
2121
{
2222
public function __construct(
23-
private readonly Security $security
23+
private readonly Security $security,
24+
private readonly AccessUrlHelper $accessUrlHelper
2425
) {}
2526

2627
public function applyToCollection(
@@ -30,13 +31,34 @@ public function applyToCollection(
3031
?Operation $operation = null,
3132
array $context = []
3233
): void {
34+
if ($this->accessUrlHelper->isMultiple()) {
35+
$accessUrl = $this->accessUrlHelper->getCurrent();
36+
$rootAlias = $queryBuilder->getRootAliases()[0];
37+
if (isset($context['filters']['sticky']) && $context['filters']['sticky']) {
38+
$queryBuilder
39+
->innerJoin(
40+
AccessUrlRelCourse::class,
41+
'url_rel',
42+
'WITH',
43+
'url_rel.course = ' . $rootAlias
44+
)
45+
->andWhere('url_rel.url = :access_url_id')
46+
->setParameter('access_url_id', $accessUrl->getId());
47+
} else {
48+
$queryBuilder
49+
->innerJoin("$rootAlias.course", 'c')
50+
->innerJoin('c.urls', 'url_rel')
51+
->andWhere('url_rel.url = :access_url_id')
52+
->setParameter('access_url_id', $accessUrl->getId());
53+
}
54+
}
55+
3356
if ($this->security->isGranted('ROLE_ADMIN')) {
3457
return;
3558
}
3659

3760
if (CourseRelUser::class === $resourceClass) {
38-
// Blocks a ROLE_USER to access CourseRelUsers from another User.
39-
if ('collection_query' === $operation->getName()) {
61+
if ('collection_query' === $operation?->getName()) {
4062
/** @var User|null $user */
4163
if (null === $user = $this->security->getUser()) {
4264
throw new AccessDeniedException('Access Denied.');
@@ -51,12 +73,6 @@ public function applyToCollection(
5173
$this->addWhere($queryBuilder, $resourceClass);
5274
}
5375

54-
/*public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
55-
{
56-
error_log('applyToItem');
57-
$this->addWhere($queryBuilder, $resourceClass);
58-
}*/
59-
6076
private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
6177
{
6278
if (CourseRelUser::class !== $resourceClass) {

0 commit comments

Comments
 (0)