src/CoreBundle/Controller/PageController.php line 30

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