8
8
9
9
use Chamilo \CoreBundle \Entity \AccessUrl ;
10
10
use Chamilo \CoreBundle \Helpers \AccessUrlHelper ;
11
+ use Chamilo \CoreBundle \Repository \Node \AccessUrlRepository ;
12
+ use Doctrine \ORM \Event \PostPersistEventArgs ;
11
13
use Doctrine \ORM \Event \PrePersistEventArgs ;
12
14
13
- class AccessUrlListener
15
+ readonly class AccessUrlListener
14
16
{
15
17
public function __construct (
16
- private readonly AccessUrlHelper $ accessUrlHelper ,
18
+ private AccessUrlHelper $ accessUrlHelper ,
19
+ private AccessUrlRepository $ accessUrlRepo ,
17
20
) {}
18
21
19
22
public function prePersist (AccessUrl $ accessUrl , PrePersistEventArgs $ args ): void
@@ -26,7 +29,7 @@ public function prePersist(AccessUrl $accessUrl, PrePersistEventArgs $args): voi
26
29
return ;
27
30
}
28
31
29
- if ($ loginOnlyAccessUrl = $ this ->accessUrlHelper ->getOnlyLoginAccessUrl ()) {
32
+ if ($ loginOnlyAccessUrl = $ this ->accessUrlRepo ->getOnlyLoginAccessUrl ()) {
30
33
$ accessUrl
31
34
->setIsLoginOnly (false )
32
35
->setSuperior ($ loginOnlyAccessUrl )
@@ -45,4 +48,31 @@ public function prePersist(AccessUrl $accessUrl, PrePersistEventArgs $args): voi
45
48
->setParentResourceNode ($ firstAccessUrl ->resourceNode ->getId ())
46
49
;
47
50
}
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
+ }
48
78
}
0 commit comments