@@ -42,19 +42,17 @@ public function getDescription(string $resourceClass): array
4242 'property ' => null ,
4343 'type ' => 'string ' ,
4444 'required ' => false ,
45- 'description ' => 'Course identifier ' ,
45+ 'description ' => 'Session identifier ' ,
4646 ],
4747 ];
4848 }
4949
5050 /**
51- * @param mixed $value
52- *
5351 * @throws ReflectionException
5452 */
5553 protected function filterProperty (
5654 string $ property ,
57- $ value ,
55+ $ value ,
5856 QueryBuilder $ queryBuilder ,
5957 QueryNameGeneratorInterface $ queryNameGenerator ,
6058 string $ resourceClass ,
@@ -65,41 +63,44 @@ protected function filterProperty(
6563 return ;
6664 }
6765
68- $ reflection = new ReflectionClass ($ resourceClass );
66+ $ alias = $ queryBuilder ->getRootAliases ()[0 ];
67+ $ session = $ this ->getSession ();
6968
69+ $ reflection = new ReflectionClass ($ resourceClass );
7070 $ loadBaseSessionContent = \in_array (
7171 ResourceShowCourseResourcesInSessionInterface::class,
7272 $ reflection ->getInterfaceNames (),
7373 true
7474 );
7575
76- // Session was set with a kernel request from CoreBundle\EventListener\CidReqListener class
77- $ session = $ this ->getSession ();
76+ $ joins = $ queryBuilder ->getDQLPart ('join ' );
77+
78+ if (empty ($ joins [$ alias ]) || !array_filter ($ joins [$ alias ], fn ($ j ) => $ j ->getAlias () === 'resourceNode ' )) {
79+ $ queryBuilder ->leftJoin ($ alias . '.resourceNode ' , 'resourceNode ' );
80+ }
81+
82+ if (empty ($ joins ['resourceNode ' ]) || !array_filter ($ joins ['resourceNode ' ], fn ($ j ) => $ j ->getAlias () === 'resourceLink ' )) {
83+ $ queryBuilder ->leftJoin ('resourceNode.resourceLinks ' , 'resourceLink ' );
84+ }
7885
7986 if (null === $ session ) {
8087 $ queryBuilder ->andWhere (
8188 $ queryBuilder ->expr ()->orX (
82- $ queryBuilder -> expr ()-> isNull ( ' resource_links .session' ) ,
83- $ queryBuilder -> expr ()-> eq ( ' resource_links .session' , 0 )
89+ ' resourceLink .session IS NULL ' ,
90+ ' resourceLink .session = 0 '
8491 )
8592 );
8693 } elseif ($ loadBaseSessionContent ) {
87- $ queryBuilder
88- ->andWhere (
89- $ queryBuilder ->expr ()->orX (
90- $ queryBuilder ->expr ()->eq ('resource_links.session ' , ':session ' ),
91- $ queryBuilder ->expr ()->isNull ('resource_links.session ' )
92- )
94+ $ queryBuilder ->andWhere (
95+ $ queryBuilder ->expr ()->orX (
96+ 'resourceLink.session = :session ' ,
97+ 'resourceLink.session IS NULL '
9398 )
94- ->setParameter ('session ' , $ session ?->getId())
95- ;
99+ )->setParameter ('session ' , $ session ->getId ());
96100 } else {
97101 $ queryBuilder
98- ->andWhere (
99- $ queryBuilder ->expr ()->eq ('resource_links.session ' , ':session ' )
100- )
101- ->setParameter ('session ' , $ session ?->getId())
102- ;
102+ ->andWhere ('resourceLink.session = :session ' )
103+ ->setParameter ('session ' , $ session ->getId ());
103104 }
104105 }
105106}
0 commit comments