src\Controller\BaseController.php line 237

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Model\User\User;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use LogicException;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
  13. use UnexpectedValueException;
  14. class BaseController extends AbstractController
  15. {
  16.     final public const MENU_DASHBOARD    'dashboard';
  17.     final public const MENU_USERS        'users';
  18.     final public const MENU_PARKING      'parking';
  19.     final public const MENU_CAR          'car';
  20.     final public const MENU_PROFILE      'profile';
  21.     final public const MENU_RESERVATION  'reservation';
  22.     final public const MENU_GATEKEEPER   'gatekeeper';
  23.     final public const MENU_RECEPTION    "reception";
  24.     final public const MENU_CAMERA       "camera";
  25.     final public const MENU_CONFIG       "config";
  26.     final public const MENU_REPORTER     "reporter";
  27.     final public const MENU_RESERVATION_OVERVIEW "reservation-overview";
  28.     final public const SESSION_REFERER "session-referer";
  29.     protected $activeMenu self::MENU_DASHBOARD;
  30.     /**
  31.      * BaseController constructor
  32.      * @return void 
  33.      */
  34.     public function __construct(
  35.       protected EntityManagerInterface $entityManager
  36.       protected  UrlMatcherInterface $matcher
  37.     )
  38.     {
  39.       
  40.     }
  41.     /**
  42.      * BaseController render injection
  43.      * @param string $view 
  44.      * @param array $parameters 
  45.      * @param Response|null $response 
  46.      * @return Response 
  47.      * @throws LogicException 
  48.      * @throws UnexpectedValueException 
  49.      */
  50.     public function render(string $view, array $parameters = [], Response $response null): response 
  51.     {
  52.       $parameters['activeMenu'] = $this->activeMenu;
  53.       return parent::render($view$parameters$response);
  54.     }
  55.     public static function hasPriviledge(?User $whoUser $against)
  56.     {
  57.         if($who == null || $against == null)
  58.         {
  59.             return false;
  60.         }
  61.         if (! $who->getIsActive()) {
  62.           return false;
  63.         }
  64.         if($who == $against)
  65.         {
  66.             return true;
  67.         }
  68.         $userRoles $who->getRoles();
  69.         if(in_array(User::ROLE_ADMIN$userRoles))
  70.         {
  71.             return true;
  72.         }
  73.         if(in_array(User::ROLE_RECEPTION$userRoles) || (in_array(User::ROLE_REPORTER$userRoles) || in_array(User::ROLE_COMPANYADMIN$userRoles)))
  74.         {
  75.             /*if (in_array(User::ROLE_ADMIN, $against->getRoles())) {
  76.               return false;
  77.             }*/
  78.             if($who->getCompanies()->isEmpty())
  79.             {
  80.                 return false;
  81.             }
  82.             $intersetction array_intersect($who->getCompanies()->toArray(), $against->getCompanies()->toArray());
  83.             if(! empty($intersetction))
  84.             {
  85.                 return true;
  86.             }
  87.         }
  88.         return false;
  89.     }
  90.     public static function getCompanyIdsOrEmptyForAdmin(?User $user): ?array
  91.     {
  92.       if($user == null)
  93.       {
  94.         return null;
  95.       }
  96.       $companies = [];
  97.       if(!in_array(User::ROLE_ADMIN$user->getRoles()))
  98.       {
  99.         if(in_array(User::ROLE_RECEPTION$user->getRoles()) || in_array(User::ROLE_COMPANYADMIN$user->getRoles()) || in_array(User::ROLE_REPORTER$user->getRoles()))
  100.         {
  101.           if(!$user->getCompanies()->isEmpty())
  102.           {
  103.             foreach($user->getCompanies() as $comp)
  104.             {
  105.                 $companies[] = $comp->getId();
  106.             }
  107.           }
  108.         }
  109.         else
  110.         {
  111.           return null;
  112.         }
  113.        
  114.       }
  115.       return $companies;
  116.     }
  117.     public static function getCompaniesOrEmptyForAdmin(User $user): ?Collection
  118.     {
  119.       if($user == null)
  120.       {
  121.         return null;
  122.       }
  123.       $companies = new ArrayCollection();
  124.       if(!in_array(User::ROLE_ADMIN$user->getRoles()))
  125.       {
  126.         if( in_array(User::ROLE_RECEPTION$user->getRoles()) || 
  127.             in_array(User::ROLE_COMPANYADMIN$user->getRoles())
  128.         )
  129.         {
  130.           $companies $user->getCompanies();
  131.         }
  132.         else
  133.         {
  134.           return null;
  135.         }
  136.        
  137.       }
  138.       return $companies;
  139.     }
  140.     
  141.     #[Route(path'/'name'home')]
  142.     public function homePage(Request $request)
  143.     {
  144.       $this->clearReferer($request);
  145.       $currentUser $this->getUser();      
  146.       if($currentUser == null)
  147.       {
  148.         return $this->redirectToRoute('app_login');
  149.       }
  150.       $roles $currentUser->getRoles();
  151.       if(in_array(User::ROLE_ADMIN,$roles))
  152.       {
  153.         return $this->redirectToRoute('dashboard');
  154.       }
  155.       else if(in_array(User::ROLE_GATE$roles))
  156.       {
  157.         return $this->redirectToRoute("gatekeeper");
  158.       }
  159.       else if(in_array(User::ROLE_RECEPTION,$roles))
  160.       {
  161.         return $this->redirectToRoute('reception_create_visitor');
  162.       }
  163.       else if(in_array(User::ROLE_REPORTER,$roles))
  164.       {
  165.         return $this->redirectToRoute("report");
  166.       }
  167.       return $this->redirectToRoute("user_reservations");
  168.       
  169.     }    
  170.     public function updateReferer(Request $request)
  171.     {
  172.       $session $request->getSession();
  173.       if(!$session->has(self::SESSION_REFERER))
  174.       {
  175.         if($request->headers->get('referer') !== null)
  176.         {
  177.           try{
  178.             $referer $request->headers->get('referer');
  179.             $basePath $request->getSchemeAndHttpHost();
  180.             $strPos strlen($basePath);
  181.             $path substr($referer$strPos);
  182.             $strPos strpos($path"?");
  183.             if($strPos !== false)
  184.             {
  185.               $path substr($path,0,$strPos);
  186.             }
  187.             //$path = str_replace($request->getBaseUrl(), '', $lastPath);
  188.            
  189.             $parameters $this->matcher->match($path);
  190.             $route $parameters['_route'];
  191.             $currentRoute $request->getRequestUri();
  192.             $parameters2 $this->matcher->match($currentRoute);
  193.             $route2 $parameters2['_route'];
  194.             if($route != $route2)
  195.             {
  196.               $session->set(self::SESSION_REFERER$referer);
  197.             }
  198.             else
  199.             {
  200.               $session->set(self::SESSION_REFERER$this->generateUrl("home"));
  201.             }
  202.               
  203.           }
  204.           catch(\Exception $e)
  205.           {
  206.             $session->set(self::SESSION_REFERER$this->generateUrl("home"));
  207.           }
  208.          
  209.         }
  210.         else
  211.         {
  212.           $session->set(self::SESSION_REFERER$this->generateUrl("home"));
  213.         }
  214.         
  215.       }
  216.     }
  217.     public function clearReferer(Request $request)
  218.     {
  219.       $session $request->getSession();
  220.       $session->remove(self::SESSION_REFERER);
  221.       
  222.      
  223.     }
  224.     public function getReferer(Request $request): ?string
  225.     {
  226.       $session $request->getSession();
  227.       $referer =  $session->get(self::SESSION_REFERER);
  228.       $this->clearReferer($request);
  229.       if($referer === null)
  230.       {
  231.         $referer $this->generateUrl('home');
  232.       }
  233.       return $referer;
  234.     }
  235. }