Documents: Fix student visibility.

pull/4017/head
Julio 5 years ago
parent 200e1aa740
commit a3dca33e73
  1. 2
      src/CoreBundle/Controller/CoursesController.php
  2. 25
      src/CoreBundle/Repository/ResourceRepository.php
  3. 7
      src/CoreBundle/Security/Authorization/Voter/ResourceNodeVoter.php
  4. 3
      tests/CourseBundle/Repository/CQuizRepositoryTest.php

@ -42,7 +42,7 @@ class CoursesController extends AbstractController
$parent = $course;
foreach ($pathList as $pathPart) {
$pathPart = Urlizer::urlize($pathPart);
$document = $documentRepository->findCourseResourceBySlug($pathPart, $parent->getResourceNode(), $course);
$document = $documentRepository->findCourseResourceBySlugIgnoreVisibility($pathPart, $parent->getResourceNode(), $course);
if (null !== $document) {
$parent = $document;
}

@ -152,6 +152,23 @@ abstract class ResourceRepository extends ServiceEntityRepository
return $qb->getQuery()->getOneOrNullResult();
}
/**
* Find resources ignoring the visibility.
*/
public function findCourseResourceBySlugIgnoreVisibility(
string $title,
ResourceNode $parentNode,
Course $course,
Session $session = null,
CGroup $group = null
): ?ResourceInterface {
$qb = $this->getResourcesByCourseIgnoreVisibility($course, $session, $group, $parentNode);
$this->addSlugQueryBuilder($title, $qb);
$qb->setMaxResults(1);
return $qb->getQuery()->getOneOrNullResult();
}
/**
* @return ResourceInterface[]
*/
@ -371,6 +388,14 @@ abstract class ResourceRepository extends ServiceEntityRepository
return $qb;
}
public function getResourcesByCourseIgnoreVisibility(Course $course, Session $session = null, CGroup $group = null, ResourceNode $parentNode = null): QueryBuilder
{
$qb = $this->getResources($parentNode);
$this->addCourseSessionGroupQueryBuilder($course, $session, $group, $qb);
return $qb;
}
/**
* Get resources only from the base course.
*/

@ -140,6 +140,13 @@ class ResourceNodeVoter extends Voter
$sessionId = (int) $request->get('sid');
$groupId = (int) $request->get('gid');
// Try Session values.
if (empty($courseId) && $request->hasSession()) {
$courseId = (int) $request->getSession()->get('cid');
$sessionId = (int) $request->getSession()->get('sid');
$groupId = (int) $request->getSession()->get('gid');
}
$links = $resourceNode->getResourceLinks();
$linkFound = 0;

@ -130,6 +130,9 @@ class CQuizRepositoryTest extends AbstractApiTest
$found = $repo->findCourseResourceBySlug('exercise-1', $course->getResourceNode(), $course);
$this->assertNotNull($found);
$found = $repo->findCourseResourceBySlugIgnoreVisibility('exercise-1', $course->getResourceNode(), $course);
$this->assertNotNull($found);
$found = $repo->findCourseResourceBySlug('exercise-1', $course->getResourceNode(), $course);
$this->assertNotNull($found);

Loading…
Cancel
Save