Skip to content

Commit d10cef6

Browse files
committed
Set login-only URL as parent for other access URLs, except the main one - refs BT#22639
Implemented logic to assign the login-only access URL as the parent for other access URLs, excluding the main URL
1 parent 0c94210 commit d10cef6

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

src/CoreBundle/Entity/Listener/AccessUrlListener.php

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88

99
use Chamilo\CoreBundle\Entity\AccessUrl;
1010
use Chamilo\CoreBundle\Helpers\AccessUrlHelper;
11+
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
12+
use Doctrine\ORM\Event\PostPersistEventArgs;
1113
use Doctrine\ORM\Event\PrePersistEventArgs;
1214

13-
class AccessUrlListener
15+
readonly class AccessUrlListener
1416
{
1517
public function __construct(
16-
private readonly AccessUrlHelper $accessUrlHelper,
18+
private AccessUrlHelper $accessUrlHelper,
19+
private AccessUrlRepository $accessUrlRepo,
1720
) {}
1821

1922
public function prePersist(AccessUrl $accessUrl, PrePersistEventArgs $args): void
@@ -26,7 +29,7 @@ public function prePersist(AccessUrl $accessUrl, PrePersistEventArgs $args): voi
2629
return;
2730
}
2831

29-
if ($loginOnlyAccessUrl = $this->accessUrlHelper->getOnlyLoginAccessUrl()) {
32+
if ($loginOnlyAccessUrl = $this->accessUrlRepo->getOnlyLoginAccessUrl()) {
3033
$accessUrl
3134
->setIsLoginOnly(false)
3235
->setSuperior($loginOnlyAccessUrl)
@@ -45,4 +48,31 @@ public function prePersist(AccessUrl $accessUrl, PrePersistEventArgs $args): voi
4548
->setParentResourceNode($firstAccessUrl->resourceNode->getId())
4649
;
4750
}
51+
52+
public function postPersist(AccessUrl $currentAccessUrl, PostPersistEventArgs $args): void
53+
{
54+
if (!$currentAccessUrl->isLoginOnly()) {
55+
return;
56+
}
57+
58+
$om = $args->getObjectManager();
59+
60+
/** @var array<int, AccessUrl> $all */
61+
$all = $this->accessUrlRepo->findAll();
62+
63+
$firstAccessUrl = $this->accessUrlHelper->getFirstAccessUrl();
64+
65+
foreach ($all as $accessUrl) {
66+
if (in_array($accessUrl->getId(), [$firstAccessUrl->getId(), $currentAccessUrl->getId()])) {
67+
continue;
68+
}
69+
70+
$accessUrl
71+
->setSuperior($currentAccessUrl)
72+
->resourceNode->setParent($currentAccessUrl->resourceNode)
73+
;
74+
}
75+
76+
$om->flush();
77+
}
4878
}

src/CoreBundle/Helpers/AccessUrlHelper.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ public function getFirstAccessUrl(): ?AccessUrl
3737
return $this->accessUrlRepository->find($urlId) ?: null;
3838
}
3939

40-
public function getOnlyLoginAccessUrl(): ?AccessUrl
41-
{
42-
return $this->accessUrlRepository->findOneBy(['isLoginOnly' => true]);
43-
}
44-
4540
public function getCurrent(): ?AccessUrl
4641
{
4742
static $accessUrl;

src/CoreBundle/Repository/Node/AccessUrlRepository.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,9 @@ public function getUserActivePortals(User $user): QueryBuilder
6969
->setParameter('user', $user->getId())
7070
;
7171
}
72+
73+
public function getOnlyLoginAccessUrl(): ?AccessUrl
74+
{
75+
return $this->findOneBy(['isLoginOnly' => true]);
76+
}
7277
}

0 commit comments

Comments
 (0)