HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/dvpis2025/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;
    }
}