src/Listener/PreRequiredListener.php line 37

Open in your IDE?
  1. <?php
  2.     /******************************************************************************
  3.      * Copyright (c) Echo-numeric 2020-2023.                                      *
  4.      ******************************************************************************/
  5.     namespace App\Listener;
  6.     use App\Entity\CustomProductField;
  7.     use App\Entity\CustomProductTemplate;
  8.     use App\Entity\CustomProductType;
  9.     use App\Entity\Setting;
  10.     use Doctrine\ORM\EntityManagerInterface;
  11.     use Doctrine\ORM\Query\QueryException;
  12.     use Symfony\Component\HttpFoundation\RequestStack;
  13.     class PreRequiredListener
  14.     {
  15.         private EntityManagerInterface $em;
  16.         private RequestStack           $requestStack;
  17.         public function __construct(
  18.             EntityManagerInterface $em,
  19.             RequestStack           $requestStack
  20.         )
  21.         {
  22.             $this->em           $em;
  23.             $this->requestStack $requestStack;
  24.         }
  25.         /**
  26.          * @throws QueryException
  27.          */
  28.         public function onKernelController()
  29.         {
  30.             if ( $_SERVER'APP_ENV' ] === 'test' ) {
  31.                 return;
  32.             }
  33.             $host $_SERVER'HTTP_HOST' ];
  34.             // TODO à mettre en tache cron
  35.             // $this->yamlChecker->check($host, TRUE);
  36.             // si on est sur la route www.dtv.loc/dbb-up, on n'exécute pas les maj et on redirige sur un controller qui update les schemas.
  37.             if ( !( ( str_contains$host'.dtv.loc' ) || $host == 'developpetesventes.loc' )
  38.                     && $this->requestStack->getMainRequest()->get'_route' ) == 'dev_update_bdd' )
  39.             ) {
  40.                 $this->addSettingsIfNotExist();
  41.                 $this->addCustomProductIfNotExist();
  42.             }
  43.         }
  44.         /**
  45.          * Add les settings qui ne sont pas présent
  46.          *
  47.          * @return void
  48.          *
  49.          * @throws QueryException
  50.          */
  51.         private function addSettingsIfNotExist(): void
  52.         {
  53.             $settings $this->getSettingData();
  54.             // Récupère tous les Setting avec leur nom en index du tableau
  55.             $qb $this->em->createQueryBuilder();
  56.             $qb->select's' )
  57.                ->fromSetting::class, 's' )
  58.                ->indexBy's''s.name' )
  59.             ;
  60.             $settingsInBdd $qb->getQuery()->getResult();
  61.             $newSettingCreated FALSE;
  62.             foreach ( $settings as $setting ) {
  63.                 if ( !isset( $settingsInBdd$setting'name' ] ] ) ) {
  64.                     $entry = ( new Setting() )
  65.                         ->setName$setting'name' ] )
  66.                         ->setValue$setting'value' ] )
  67.                         ->setDescription$setting'description' ] )
  68.                         ->setFieldType$setting'fieldType' ] )
  69.                         ->setTitle$setting'title' ] )
  70.                     ;
  71.                     $this->em->persist$entry );
  72.                     $newSettingCreated TRUE;
  73.                 }
  74.             }
  75.             if ( $newSettingCreated ) {
  76.                 $this->em->flush();
  77.             }
  78.         }
  79.         /**
  80.          * @return array[]
  81.          */
  82.         private function getSettingData(): array
  83.         {
  84.             return [
  85.                 [
  86.                     'name'        => 'CLOSE_SITE',
  87.                     'value'       => '0',
  88.                     'description' => 'Fermeture du site',
  89.                     'fieldType'   => 'boolean',
  90.                     'title'       => NULL,
  91.                 ],
  92.                 [
  93.                     'name'        => 'CLOSE_SITE_DATEFROM',
  94.                     'value'       => NULL,
  95.                     'description' => 'Date de fermeture du site',
  96.                     'fieldType'   => 'datetime',
  97.                     'title'       => NULL,
  98.                 ],
  99.                 [
  100.                     'name'        => 'CLOSE_SITE_MESSAGE',
  101.                     'value'       => 'Le site est en maintenance...',
  102.                     'description' => 'Message sur la page de la maintenance',
  103.                     'fieldType'   => 'textarea',
  104.                     'title'       => NULL,
  105.                 ],
  106.                 [
  107.                     'name'        => 'CLOSE_ECOMMERCE_DATEFROM',
  108.                     'value'       => NULL,
  109.                     'description' => 'Date de fermeture du ecommerce',
  110.                     'fieldType'   => 'datetime',
  111.                     'title'       => NULL,
  112.                 ],
  113.                 [
  114.                     'name'        => 'CLOSE_ECOMMERCE_DATETO',
  115.                     'value'       => NULL,
  116.                     'description' => 'Date de réouverture du ecommerce',
  117.                     'fieldType'   => 'datetime',
  118.                     'title'       => NULL,
  119.                 ],
  120.                 [
  121.                     'name'        => 'CLOSE_ECOMMERCE_MESSAGE',
  122.                     'value'       => 'Vous ne pouvez pas <b>commander</b> pour le moment',
  123.                     'description' => 'Message modal lors de l\'ajout au panie',
  124.                     'fieldType'   => 'textarea',
  125.                     'title'       => NULL,
  126.                 ],
  127.                 [
  128.                     'name'        => 'PAYMENT_ALLOWCB_STATUS',
  129.                     'value'       => '0',
  130.                     'description' => 'Complément monétaire',
  131.                     'fieldType'   => 'text',
  132.                     'title'       => NULL,
  133.                 ],
  134.                 [
  135.                     'name'        => 'PAYMENT_ALLOWCB_MINPTS',
  136.                     'value'       => '1',
  137.                     'description' => 'Points minimum pour autoriser un complément monétaire',
  138.                     'fieldType'   => 'text',
  139.                     'title'       => NULL,
  140.                 ],
  141.                 [
  142.                     'name'        => 'PAYMENT_ALLOWCB_RATE',
  143.                     'value'       => '0.8',
  144.                     'description' => 'Taux de conversion',
  145.                     'fieldType'   => 'text',
  146.                     'title'       => NULL,
  147.                 ],
  148.                 [
  149.                     'name'        => 'CGU_NOT_ACCEPTED_TIME',
  150.                     'value'       => '-1 year',
  151.                     'description' => 'Le temps au bout duquel un utilisateur va être archivé s\'il n\'a pas ré-accepté les cgu.',
  152.                     'fieldType'   => 'Text',
  153.                     'title'       => NULL,
  154.                 ],
  155.                 [
  156.                     'name'        => 'HIGHLIGHT_CURRENT',
  157.                     'value'       => '1',
  158.                     'description' => "Le temps fort de l'année en cours",
  159.                     'fieldType'   => 'int',
  160.                     'title'       => NULL,
  161.                 ],
  162.                 [
  163.                     'name'        => 'UNSUBSCRIBE_REASONS',
  164.                     'value' => '{"reasons":{"cessation-of-activity":"Cessation de l’activité","programme-not-attractive-enough":"Je ne trouve pas le programme assez attractif","other":"Autre"}}',
  165.                     'description' => "Liste des motifs pour la désinscription",
  166.                     'fieldType'   => 'json',
  167.                     'title'       => NULL,
  168.                 ],
  169.             ];
  170.         }
  171.         /**
  172.          * Création des données minimum dans la BDD pour les customs Product
  173.          *
  174.          * @return void
  175.          */
  176.         private function addCustomProductIfNotExist(): void
  177.         {
  178.             if ( count$this->em->getRepositoryCustomProductType::class )->findAll() ) > ) {
  179.                 return;
  180.             }
  181.             $typePro = new CustomProductType();
  182.             $typePro->setSlug"service_pro" )
  183.                     ->setName'Services Pros' )
  184.             ;
  185.             $this->em->persist$typePro );
  186.             $typeActivity = new CustomProductType();
  187.             $typeActivity->setSlug"activity" )
  188.                          ->setName'Activités' )
  189.             ;
  190.             $this->em->persist$typeActivity );
  191.             $typeEvent = new CustomProductType();
  192.             $typeEvent->setSlug"event" )
  193.                       ->setName'Evènements' )
  194.             ;
  195.             $this->em->persist$typeEvent );
  196.             $this->buildTemplateService$typePro );
  197.             $this->buildTemplateActivity$typeActivity );
  198.             $this->buildTemplateEvent$typeEvent );
  199.             $this->em->flush();
  200.         }
  201.         /**
  202.          * @param CustomProductType $type
  203.          *
  204.          * @return void
  205.          */
  206.         private function buildTemplateServiceCustomProductType $type )
  207.         {
  208.             $field1 = ( new CustomProductField() )
  209.                 ->setLabel'Société' )
  210.                 ->setType'string' )
  211.                 ->setPosition)
  212.                 ->setRequiredTRUE )
  213.             ;
  214.             $field2 = ( new CustomProductField() )
  215.                 ->setLabel'Nom' )
  216.                 ->setType'string' )
  217.                 ->setPosition)
  218.                 ->setRequiredTRUE )
  219.             ;
  220.             $field3 = ( new CustomProductField() )
  221.                 ->setLabel'Prénom' )
  222.                 ->setType'string' )
  223.                 ->setPosition)
  224.                 ->setRequiredTRUE )
  225.             ;
  226.             $field4 = ( new CustomProductField() )
  227.                 ->setLabel'Email' )
  228.                 ->setType'string' )
  229.                 ->setPosition)
  230.                 ->setRequiredTRUE )
  231.             ;
  232.             $field5 = ( new CustomProductField() )
  233.                 ->setLabel'Description du besoin' )
  234.                 ->setType'text' )
  235.                 ->setPosition)
  236.                 ->setRequiredTRUE )
  237.             ;
  238.             $template = ( new CustomProductTemplate() )
  239.                 ->setName'default' )
  240.                 ->setType$type )
  241.                 ->addField$field1 )
  242.                 ->addField$field2 )
  243.                 ->addField$field3 )
  244.                 ->addField$field4 )
  245.                 ->addField$field5 )
  246.             ;
  247.             $this->em->persist$template );
  248.         }
  249.         /**
  250.          * @param CustomProductType $type
  251.          *
  252.          * @return void
  253.          */
  254.         private function buildTemplateActivityCustomProductType $type )
  255.         {
  256.             $field1 = ( new CustomProductField() )
  257.                 ->setLabel'Votre prénom' )
  258.                 ->setType'string' )
  259.                 ->setPosition)
  260.                 ->setRequiredTRUE )
  261.             ;
  262.             $field2 = ( new CustomProductField() )
  263.                 ->setLabel'Votre nom' )
  264.                 ->setType'string' )
  265.                 ->setPosition)
  266.                 ->setRequiredTRUE )
  267.             ;
  268.             $field3 = ( new CustomProductField() )
  269.                 ->setLabel'Votre téléphone' )
  270.                 ->setType'string' )
  271.                 ->setPosition)
  272.                 ->setRequiredTRUE )
  273.             ;
  274.             $field8 = ( new CustomProductField() )
  275.                 ->setLabel'Nombre de personnes' )
  276.                 ->setType'string' )
  277.                 ->setPosition)
  278.                 ->setRequiredTRUE )
  279.             ;
  280.             $field4 = ( new CustomProductField() )
  281.                 ->setLabel'Votre budget' )
  282.                 ->setType'string' )
  283.                 ->setPosition)
  284.                 ->setRequiredTRUE )
  285.             ;
  286.             $field5 = ( new CustomProductField() )
  287.                 ->setLabel'Lieu' )
  288.                 ->setType'string' )
  289.                 ->setPosition)
  290.                 ->setRequiredTRUE )
  291.             ;
  292.             $field6 = ( new CustomProductField() )
  293.                 ->setLabel'Date souhaitée' )
  294.                 ->setType'date' )
  295.                 ->setPosition)
  296.                 ->setRequiredTRUE )
  297.             ;
  298.             $field7 = ( new CustomProductField() )
  299.                 ->setLabel'Décrivez-nous votre demande' )
  300.                 ->setType'text' )
  301.                 ->setPosition)
  302.                 ->setRequiredTRUE )
  303.             ;
  304.             $template = ( new CustomProductTemplate() )
  305.                 ->setName'default' )
  306.                 ->setType$type )
  307.                 ->addField$field1 )
  308.                 ->addField$field2 )
  309.                 ->addField$field3 )
  310.                 ->addField$field4 )
  311.                 ->addField$field5 )
  312.                 ->addField$field6 )
  313.                 ->addField$field7 )
  314.                 ->addField$field8 )
  315.             ;
  316.             $this->em->persist$template );
  317.         }
  318.         /**
  319.          * @param CustomProductType $type
  320.          *
  321.          * @return void
  322.          */
  323.         private function buildTemplateEventCustomProductType $type )
  324.         {
  325.             $field0 = ( new CustomProductField() )
  326.                 ->setLabel'Ajoutez votre fichier' )
  327.                 ->setType'file' )
  328.                 ->setPosition)
  329.                 ->setRequiredFALSE )
  330.             ;
  331.             $field1 = ( new CustomProductField() )
  332.                 ->setLabel'Prénom' )
  333.                 ->setType'string' )
  334.                 ->setPosition)
  335.                 ->setRequiredTRUE )
  336.             ;
  337.             $field2 = ( new CustomProductField() )
  338.                 ->setLabel'Nom' )
  339.                 ->setType'string' )
  340.                 ->setPosition)
  341.                 ->setRequiredTRUE )
  342.             ;
  343.             $field3 = ( new CustomProductField() )
  344.                 ->setLabel'Email' )
  345.                 ->setType'string' )
  346.                 ->setPosition)
  347.                 ->setRequiredTRUE )
  348.             ;
  349.             $field4 = ( new CustomProductField() )
  350.                 ->setLabel'Téléphone' )
  351.                 ->setType'string' )
  352.                 ->setPosition)
  353.                 ->setRequiredTRUE )
  354.             ;
  355.             $field5 = ( new CustomProductField() )
  356.                 ->setLabel'Société' )
  357.                 ->setType'string' )
  358.                 ->setPosition)
  359.                 ->setRequiredTRUE )
  360.             ;
  361.             $field6 = ( new CustomProductField() )
  362.                 ->setLabel'Adresse' )
  363.                 ->setType'string' )
  364.                 ->setPosition)
  365.                 ->setRequiredTRUE )
  366.             ;
  367.             $field7 = ( new CustomProductField() )
  368.                 ->setLabel'Code postal' )
  369.                 ->setType'string' )
  370.                 ->setPosition)
  371.                 ->setRequiredTRUE )
  372.             ;
  373.             $field8 = ( new CustomProductField() )
  374.                 ->setLabel'Ville' )
  375.                 ->setType'string' )
  376.                 ->setPosition)
  377.                 ->setRequiredTRUE )
  378.             ;
  379.             $field9 = ( new CustomProductField() )
  380.                 ->setLabel"À combien d'adultes venez-vous accompagné ?" )
  381.                 ->setType'string' )
  382.                 ->setPosition)
  383.                 ->setRequiredTRUE )
  384.             ;
  385.             $field10 = ( new CustomProductField() )
  386.                 ->setLabel"Avec combien d'enfants venez-vous accompagné ?" )
  387.                 ->setType'string' )
  388.                 ->setPosition10 )
  389.                 ->setRequiredTRUE )
  390.             ;
  391.             $template = ( new CustomProductTemplate() )
  392.                 ->setName'default' )
  393.                 ->setType$type )
  394.                 ->addField$field0 )
  395.                 ->addField$field1 )
  396.                 ->addField$field2 )
  397.                 ->addField$field3 )
  398.                 ->addField$field4 )
  399.                 ->addField$field5 )
  400.                 ->addField$field6 )
  401.                 ->addField$field7 )
  402.                 ->addField$field8 )
  403.                 ->addField$field9 )
  404.                 ->addField$field10 )
  405.             ;
  406.             $this->em->persist$template );
  407.         }
  408.     }