File: /var/www/dvpis2026/dvpis.kaunokolegija.lt/src/Service/DbDataFilter.php
<?php
namespace App\Service;
use App\Entity\LecturerApprovedActivities;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use App\Entity\Lecturer;
class DbDataFilter
{
protected $user;
protected $lecturer;
public function __construct(
private readonly EntityManagerInterface $em,
private readonly AuthorizationCheckerInterface $authorizationChecker,
private readonly TokenStorageInterface $token,
) {
$this->lecturer = null;
}
public function isPowerUserAndLecturer(): bool
{
if (!$this->getUserInfo()) {
return false;
}
if (in_array('ROLE_LECTURER', $this->user->getRoles(), true)) {
return false;
}
$lecturer = $this->em->getRepository(Lecturer::class)->findOneByEmail($this->user->getEmail());
if (!empty($lecturer)) {
$this->lecturer = $lecturer;
return true;
}
return false;
}
public function isLecturer(): bool
{
if (!$this->getUserInfo()) {
return false;
}
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
if ($this->authorizationChecker->isGranted('ROLE_LECTURER')) {
$lecturer = $this->em->getRepository(Lecturer::class)->findOneByEmail($this->user->getEmail());
if (!empty($lecturer)) {
$this->lecturer = $lecturer;
return true;
}
}
return false;
}
public function getLecturerFromUser()
{
if (empty($this->lecturer)) {
$this->isLecturer();
}
return $this->lecturer;
}
public function enableOnlyLecturerFilter()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
$filters = $this->em->getFilters()->enable('lecturer_filter');
if ($this->isLecturer()) {
$this->em->getFilters()->enable('lecturer_filter');
$lecturer = $this->getLecturerFromUser();
if (!empty($lecturer)) {
$filters->setParameter('lecturer_id', $lecturer->getId());
} else {
$filters->setParameter('lecturer_id', 0);
}
return true;
}
$filters->setParameter('lecturer_id', 0);
return false;
}
public function enableOnlyLecturerApprovedFilter()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
$filters = $this->em->getFilters()->enable('lecturer_filter');
$filters->setParameter('not_approved_plan', 5);
return true;
}
public function enableActiveLecturerFilter()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
$this->em->getFilters()->enable('active_lecturer');
return true;
}
public function isAvailablePlanToChange()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
if ($this->isLecturer()) {
$lecturerApprovedActivities = $this->em->getRepository(LecturerApprovedActivities::class)->findOneBy([
'lecturer' => $this->lecturer,
'type' => 'MEOV_KTV_TMMV'
]);
if (empty($lecturerApprovedActivities)) {
return true;
}
if ($lecturerApprovedActivities->getIsApproved() !== 1) {
return true;
}
}
return false;
}
public function enableOnlyDepartmentFilter()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
if (!$this->getUserInfo()) {
return false;
}
$filters = $this->em->getFilters()->enable('lecturer_filter');
if (!empty($this->user->getDepartment())) {
$lecturer = $this->getLecturerFromUser();
$filters->setParameter('department_id', $this->user->getDepartment()->getId());
if ($lecturer) {
$filters->setParameter('department_lecturer_id', $lecturer->getId());
}
return true;
}
$filters->setParameter('department_id', 0);
return false;
}
public function enableDepartmentFilter()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
if (!$this->getUserInfo()) {
return false;
}
$filters = $this->em->getFilters()->enable('department_filter');
if (!empty($this->user->getDepartment())) {
$filters->setParameter('department_id', $this->user->getDepartment()->getId());
return true;
}
$filters->setParameter('department_id', 0);
return false;
}
public function enableOnlyAcademicUnitFilter()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
if (!$this->getUserInfo()) {
return false;
}
$filters = $this->em->getFilters()->enable('lecturer_filter');
if (!empty($this->user->getAcademicUnit())) {
$filters->setParameter('academic_unit_id', $this->user->getAcademicUnit()->getId());
return true;
}
$filters->setParameter('academic_unit_id', 0);
return false;
}
public function enableAcademicUnitFilter()
{
if ($this->authorizationChecker->isGranted('ROLE_STUDY_DEPARTMENT')) {
return true;
}
if (!$this->getUserInfo()) {
return false;
}
$filters = $this->em->getFilters()->enable('department_filter');
if (!empty($this->user->getAcademicUnit())) {
$filters->setParameter('academic_unit_id', $this->user->getAcademicUnit()->getId());
return true;
}
$filters->setParameter('academic_unit_id', 0);
return false;
}
public function getUserInfo()
{
if (empty($this->token->getToken())) {
return null;
}
$this->user = $this->token->getToken()->getUser();
if ($this->user == "anon.") {
return null;
}
return $this->user;
}
}