src/CoreBundle/Controller/PageController.php line 29

Open in your IDE?
  1. <?php
  2. namespace Core\Controller;
  3. use Core\Controller\Traits\BaseController;
  4. use Core\Entity\ComingSoonConfiguration;
  5. use Core\Entity\MaintenanceConfiguration;
  6. use Core\Service\History\HistoryMessage;
  7. use Core\Service\Session\Session;
  8. use Shopping\Controller\Traits\BaseShoppingController;
  9. use Shopping\Entity\Category;
  10. use Shopping\Entity\Product;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use User\Controller\Traits\BaseUserController;
  16. use User\Entity\AuthorizationType;
  17. use function MongoDB\BSON\toJSON;
  18. class PageController extends AbstractController
  19. {
  20.     use BaseController;
  21.     use BaseUserController;
  22.     /**
  23.      * Router de l'application, toutes les routes arrivent au router
  24.      */
  25.     public function router(Request $request)
  26.     {
  27.         // Initialisation par default du controller
  28.         $request $this->initializeController($request);
  29.         // Utilisation d'une redirection détectée
  30.         if ($this->vars['redirection']['isRedirection']) {
  31.             return $this->redirect($this->vars['redirection']['url'], $this->vars['redirection']['status']);
  32.         }
  33.         if($this->vars['controller'] != null) {
  34.             // Clé d'authorization
  35.             $authorization_key $this->vars['controller']['controller_action'];
  36.             // Pages autorisées à passer au travers des "Maintenance" et "Coming Soon"
  37.             $pages_allowed = [
  38.                 'User\Controller\PageController::connect',
  39.                 'User\Controller\PageController::disconnect',
  40.                 'User\Controller\PageController::forgotpassword',
  41.                 'User\Controller\PageController::forgotpasswordreset',
  42.                 'Core\Controller\PageController::maintenance',
  43.                 'Core\Controller\PageController::error',
  44.                 'Core\Controller\PageController::error404',
  45.                 'Core\Controller\PageController::error403',
  46.                 'User\Controller\PageController::userdesactive',
  47.             ];
  48.             // Utilisation de la page de maintenance et que l'utilisateur n'a pas les authorisations de modifier la page et donc de passer à travers pour voir le site
  49.             if ($this->vars['configuration']->getUseMaintenance() && !in_array($this->vars['controller'], $pages_allowed) && $this->vars['controller']['controller_action'] != 'maintenance' &&
  50.                 !$this->checkAuthorization($request, ['authorization' => 'maintenance''type' => AuthorizationType::EDIT])) {
  51.                 $uri $this->vars['uri']['protocol'] . $this->vars['uri']['host'] .
  52.                     $this->vars['pages']['list']['maintenance']->translate($this->vars['languages']['locale'])->getUri();
  53.                 // Redirection 302 vers le controller correspondant à la page de maintenance
  54.                 return $this->redirect($uri302);
  55.             }
  56.             // Vérification si l'utilisteur est désactivé
  57.             $redirection $this->checkUserDesactive();
  58.             if (!in_array($this->vars['controller'], $pages_allowed) && $redirection != false) {
  59.                 return $this->redirect($redirection302);
  60.             }
  61.             // Utilisation d'une page standard et vérification que l'utilisateur à les authorisations de voir la page
  62.             if ($this->checkAuthorization($request, ['authorization' => $authorization_key'type' => AuthorizationType::VIEW])) {
  63.                 // Configuration de la page
  64.                 $this->setPageSettings($request$this->vars['controller']['controller_action']);
  65.                 // Accès normal à l'application via un template
  66.                 if($this->vars['controller']['controller_entity'] == 'PageDefault'){
  67.                     if (method_exists(ucfirst($this->vars['controller']['controller_namespace']), $this->vars['controller']['controller_action'])) {
  68.                       return $this->forward(ucfirst($this->vars['controller']['controller_namespace']).'::' .$this->vars['controller']['controller_action'], [
  69.                           'vars' => $this->vars
  70.                       ]);
  71.                     }
  72.                     return $this->forward(ucfirst($this->vars['controller']['controller_namespace']) . '::templateAuto' , [
  73.                         'vars' => $this->vars
  74.                     ]);
  75.                 }
  76.                 // Accès normal à l'application via une page personnalisée
  77.                 return $this->forward($this->vars['controller']['controller_namespace'] . '::' $this->vars['controller']['controller_action'], [
  78.                     'vars' => $this->vars
  79.                 ]);
  80.             }
  81.             // Connexion recquise - Renvoi vers la page de connexion car l'utilisateur n'a pas les authorisations recquises
  82.             if (!$this->checkAuthorization($request, ['authorization' => $authorization_key'type' => AuthorizationType::VIEW])) {
  83.                 // Mise en session de la page demandée
  84.                 $this->session->set('user_page_redirect'$this->vars['uri']['full']);
  85.                 // Page de connexion
  86.                 $uri $this->vars['uri']['protocol'] . $this->vars['uri']['host'] .
  87.                     $this->vars['pages']['list']['page_default_5ffd7ab83644b']->translate($this->vars['languages']['locale'])->getUri();
  88.                 // Une connexion est obligatoire
  89.                 return $this->redirect($uri302);
  90.             }
  91.         }
  92.         // Recherche d'une URL personnalisée ( ex: produit, actualité, ... )
  93.         ////////////////////
  94.         // Accès normal à l'application via une url personnalisée
  95.         $response $this->findByCustomUrl($request);
  96.         if ($response['pageFound']) {
  97.             // Configuration de la page
  98.             $this->setPageSettings($request$response['forward']['controllerName']);
  99.             // Initialisation de variables communes aux controllers et spécifique à l'application
  100.             $this->controllerForward('App\Controller\PageController::initialize');
  101.             // Transmission au controller correspondant à l'URL personnalisée
  102.             return $this->forward($response['forward']['controller_namespace'] . '::' $response['forward']['controller_action'] , $response['forward']['parameters']);
  103.         }
  104.         // Page introuvable - Renvoi vers la page d'erreur 404
  105.         return $this->redirectNotFoundException($request);
  106.     }
  107.     /**
  108.      * Recherche de l'utilisation d'une URL personnalisé ( ex: pour un produit, une actualité, ... )
  109.      */
  110.     public function findByCustomUrl(Request $request)
  111.     {
  112.         // Forward
  113.         $controllerName null;
  114.         $forwardController null;
  115.         $forwardParameters = [];
  116.         // Page
  117.         $pageFound false;
  118.         // Slug
  119.         $slug trim($request->getRequestUri(), '/');
  120.         if (preg_match('#^(.){2}/(.)+$#'$slug$matches)) {
  121.             $slug substr($slug3);
  122.         }
  123.         // TODO Recherche d'une page via un champs url personnalisé
  124.         return [
  125.             'forward' => [
  126.                 'name' => $controllerName,
  127.                 'controller' => $forwardController,
  128.                 'parameters' => $forwardParameters,
  129.             ],
  130.             'slug' => $slug,
  131.             'pageFound' => $pageFound,
  132.         ];
  133.     }
  134.     /**
  135.      * Effectue un forward personnalisé
  136.      */
  137.     private function controllerForward($route$options = [])
  138.     {
  139.         return $this->forward($routearray_merge([
  140.             'vars' => $this->vars
  141.         ], $options));
  142.     }
  143.     /**
  144.      * Page de maintenance
  145.      */
  146.     public function maintenance(Request $request)
  147.     {
  148.         return $this->generateTemplate('@core/app/maintenance');
  149.     }
  150. }