Calendar: Refactoring to separate function to load personal events

pull/5217/head
Angel Fernando Quiroz Campos 2 years ago
parent d7b605be20
commit aadedea48b
  1. 37
      src/CoreBundle/DataProvider/Extension/CCalendarEventExtension.php
  2. 60
      src/CoreBundle/ServiceHelper/CidReqHelper.php

@ -12,8 +12,11 @@ use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use ApiPlatform\Metadata\Operation;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\ServiceHelper\CidReqHelper;
use Chamilo\CoreBundle\Settings\SettingsManager;
use Chamilo\CourseBundle\Entity\CCalendarEvent;
use Doctrine\ORM\QueryBuilder;
use phpDocumentor\Reflection\Types\Integer;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Security;
@ -23,7 +26,8 @@ final class CCalendarEventExtension implements QueryCollectionExtensionInterface
public function __construct(
private readonly Security $security,
private readonly RequestStack $requestStack
private readonly CidReqHelper $cidReqHelper,
private readonly SettingsManager $settingsManager,
) {}
public function applyToCollection(
@ -42,8 +46,19 @@ final class CCalendarEventExtension implements QueryCollectionExtensionInterface
return;
}
/** @var User $user */
$courseId = $this->cidReqHelper->getCourseId();
$sessionId = $this->cidReqHelper->getSessionId();
$groupId = $this->cidReqHelper->getGroupId();
/** @var ?User $user */
$user = $this->security->getUser();
$inCourseBase = !empty($courseId);
$inSession = !empty($sessionId);
$inCourseSession = $inCourseBase && $inSession;
$inPersonalList = !$inCourseBase && !$inCourseSession;
$alias = $qb->getRootAliases()[0];
$qb
@ -51,18 +66,13 @@ final class CCalendarEventExtension implements QueryCollectionExtensionInterface
->leftJoin('node.resourceLinks', 'resource_links')
;
$request = $this->requestStack->getCurrentRequest();
$courseId = $request->query->getInt('cid');
$sessionId = $request->query->getInt('sid');
$groupId = $request->query->getInt('gid');
$inCourseBase = !empty($courseId);
$inSession = !empty($sessionId);
$inCourseSession = $inCourseBase && $inSession;
$inPersonalList = !$inCourseBase && !$inCourseSession;
if ($inPersonalList && $user) {
$this->addPersonalCalendarConditions($qb, $user);
}
}
if ($inPersonalList) {
private function addPersonalCalendarConditions(QueryBuilder $qb, User $user): void
{
$qb
->andWhere(
$qb->expr()->orX(
@ -74,4 +84,3 @@ final class CCalendarEventExtension implements QueryCollectionExtensionInterface
;
}
}
}

@ -0,0 +1,60 @@
<?php
/* For licensing terms, see /license.txt */
declare(strict_types=1);
namespace Chamilo\CoreBundle\ServiceHelper;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\EventListener\CourseListener;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
/**
* @see CourseListener::onKernelRequest()
*/
class CidReqHelper
{
public function __construct(
private readonly RequestStack $requestStack,
) {
}
private function getRequest(): ?Request
{
return $this->requestStack->getCurrentRequest();
}
private function getSessionHandler(): SessionInterface
{
return $this->getRequest()->getSession();
}
public function getSessionId(): ?int
{
return $this->getSessionHandler()->get('sid');
}
public function getSessionEntity(): ?Session
{
return $this->getSessionHandler()->get('session');
}
public function getCourseId()
{
return $this->getSessionHandler()->get('cid');
}
public function getCourseEntity(): ?Course
{
return $this->getSessionHandler()->get('course');
}
public function getGroupId(): ?int
{
return $this->getSessionHandler()->get('gid');
}
}
Loading…
Cancel
Save