src/Controller/AnnuairesExpertsEspaceAdministrationController.php line 82

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Controller;
  7. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  8. use Symfony\Component\HttpFoundation\{
  9.     Request,
  10.     JsonResponse,
  11.     Response
  12. };
  13. use App\Services\ManagerEntity\{
  14.     CertificationsExpertManagers,
  15.     BlogsManagers,
  16.     EquipeManagers,
  17.     ReferencementsManagers
  18. };
  19. use App\Form\Type\FormChoices;
  20. use App\Form\Type\ExpertEspaceAdmin\{
  21.     ReferencementType,
  22.     MessageBlogType,
  23.     EquipeType,
  24.     BlogType
  25. };
  26. use App\Helper\Utils;
  27. use App\Entity\{
  28.     ServicesPrestataire,
  29.     AbonnementsPrestataireGestion,
  30.     Societes,
  31.     Pays,
  32.     EquipesPrestataire,
  33.     BuzzRoles,
  34.     BuzzOperations,
  35.     SocietesPrestataire,
  36.     BuzzActualites,
  37.     Utilisateur,
  38.     SecteursActivitePrestataireNew
  39. };
  40. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  41. use App\Exception\{
  42.     InvalidParametersException,
  43.     NotFound,
  44.     MissingMandatoryParams
  45. };
  46. use Doctrine\ORM\EntityManagerInterface;
  47. use App\Services\Mailer;
  48. use Psr\Log\LoggerInterface;
  49. use App\Services\MetaTag;
  50. use App\Services\ManagerEntity\AbonnementService;
  51. class AnnuairesExpertsEspaceAdministrationController extends EntityUsingController {
  52.     public const MAX_AGE 43200// 12heures
  53.     private $cem;
  54.     private $rm;
  55.     private $bm;
  56.     private $em;
  57.     private $eqm;
  58.     private $aboService;
  59.     /**
  60.      * 
  61.      * @param CertificationsExpertManagers $cem
  62.      */
  63.     public function __construct(EntityManagerInterface $emCertificationsExpertManagers $cemReferencementsManagers $rmBlogsManagers $bmEquipeManagers $eqmMailer $mailerLoggerInterface $loggerMetaTag $metaTagAbonnementService $aboService) {
  64.         $this->cem $cem;
  65.         $this->rm $rm;
  66.         $this->bm $bm;
  67.         $this->em $em;
  68.         $this->eqm $eqm;
  69.         $this->mailer $mailer;
  70.         $this->logger $logger;
  71.         $this->metaTag $metaTag;
  72.         $this->aboService $aboService;
  73.     }
  74.     public function index(Request $request$codePays): Response {
  75.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  76.         $coordonneesFacturation $this->aboService->isValidCoordonneesFacturation($this->getUser());
  77.         // $etatCB = $this->checkIfCBactiveOrNot();
  78.         if ($coordonneesFacturation && $this->aboService->getEtatAbonnement($this->getUser()) == "actif") { // si CoordonneesFacturation OK + CB OK => on créé  societe_prestataire
  79.             $sp $this->em->getRepository(Utilisateur::class)->getSocietePrestataireByLogin($this->getUser()->getLogin());
  80.             if (!$sp) {// si pas de SO en liaison avec cet utilisateur
  81.                 $sp = new SocietesPrestataire();
  82.                 $sp->_set("login_utilisateur"$this->getUser()->getLogin());
  83.                 $sp->_set("adresse"$this->getUser()->_get("factur_adresse") ?? NULL);
  84.                 $sp->_set("code_postal"$this->getUser()->_get("factur_code_postal") ?? NULL);
  85.                 $sp->_set("ville"$this->getUser()->_get("factur_ville") ?? NULL);
  86.                 $sp->_set("pays"$this->getUser()->_get("factur_pays") ?? NULL);
  87.                 $sp->_set("raison_sociale"$this->getUser()->_get("factur_nom_societe") ?? NULL);
  88.                 $sp->_set("mode_reglement_abonnement""cb");
  89.                 $sp->_set("nb_prestations_sans_cb"0);
  90.                 $sp->_set("nb_coordonnees_par_service"1);
  91.                 $sp->_set("etat_abonnement""actif");
  92.                 $this->em->persist($sp);
  93.                 $this->em->flush();
  94.             }
  95.             $idSocietePrestataire $sp->getId();
  96.             if ($idSocietePrestataire) {
  97.                 $queryBuilder1 $this->em->createQueryBuilder();
  98.                 $query1 $queryBuilder1->update(AbonnementsPrestataireGestion::class, 'e')
  99.                         ->set('e.id_societe_prestataire'':ph')->setParameter('ph'$idSocietePrestataire)
  100.                         ->where('e.id_utilisateur = :id')->setParameter('id', (int) $this->getUser()->getId())
  101.                         ->getQuery();
  102.                 $query1->execute();
  103.                 $queryBuilder2 $this->em->createQueryBuilder();
  104.                 $query2 $queryBuilder2->update(Utilisateur::class, 'u')
  105.                         ->set('u.id_societe_prestataire'':pp')->setParameter('pp'$idSocietePrestataire)
  106.                         ->where('u.id_utilisateur = :id')->setParameter('id', (int) $this->getUser()->getId())
  107.                         ->getQuery();
  108.                 $query2->execute();
  109.             }
  110.         }
  111.         $etat_abonnement $this->aboService->getEtatAbonnement($this->getUser());
  112.         $metaTag $this->metaTag
  113.                 ->setTitle("Admin Annuaire des experts")
  114.                 ->setDescription("Espace d'administration de l'annuaire des experts");
  115.         $response $this->render(
  116.                 'annuaires/experts/espace_administration/index.html.twig',
  117.                 [
  118.                     "etat_abonnement" => $etat_abonnement'metaTag' => $metaTag,
  119.                     "coordonneesFacturation" => $coordonneesFacturation,
  120.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  121.                 ]
  122.         );
  123.         $response->setPrivate();
  124.         $response->headers->addCacheControlDirective('must-revalidate'true);
  125.         return $response;
  126.     }
  127.     public function faq(Request $request$codePays): Response {
  128.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  129.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  130.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  131.         }
  132.         $metaTag $this->metaTag
  133.                 ->setTitle("FAQ Annuaire des experts")
  134.                 ->setDescription("Consultez les FAQ pour notre annuaire des experts");
  135.         $response $this->render(
  136.                 'annuaires/experts/espace_administration/faq/faq.html.twig',
  137.                 [
  138.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController''metaTag' => $metaTag,
  139.                 ]
  140.         );
  141.         $response->setPrivate();
  142.         $response->headers->addCacheControlDirective('must-revalidate'true);
  143.         return $response;
  144.     }
  145.     public function certifications(Request $request$codePays): Response {
  146.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  147.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  148.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  149.         }
  150.         $filters $request->query->all();
  151.         $certifications = ($this->getUser()) ? $this->cem->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters) : [];
  152.         $id_type_certification $this->cem->getAllTypeCertificationExpert();
  153.         $metaTag $this->metaTag
  154.                 ->setTitle("Vos certifications")
  155.                 ->setDescription("Vos certifications dans l'annuaire des experts");
  156.         $response $this->render(
  157.                 'annuaires/experts/espace_administration/certifications/certifications.html.twig',
  158.                 [
  159.                     "certifications" => $certifications'metaTag' => $metaTag,
  160.                     "id_type_certification" => $id_type_certification,
  161.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  162.                 ]
  163.         );
  164.         $response->setPrivate();
  165.         $response->headers->addCacheControlDirective('must-revalidate'true);
  166.         return $response;
  167.     }
  168.     /**
  169.      * 
  170.      * @param Request $request
  171.      * @param type $action
  172.      * @param type $id
  173.      * @param type $codePays
  174.      * @return Response
  175.      */
  176.     public function gestionCertification(Request $request$action$id$codePays): Response {
  177.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  178.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  179.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  180.         }
  181.         if ($request->getMethod() == Request::METHOD_POST) {  //  AJOUT 
  182.             $types_certifications $request->request->get('types_certifications');
  183.             $valeur_certification $request->request->get('valeur_certification');
  184.             $this->cem->ajoutCertification($types_certifications$valeur_certification);
  185.         } else { //delete
  186.             $this->cem->supprimerCertificationById($id);
  187.         }
  188.         $uri $request->server->get('HTTP_REFERER');
  189.         return $this->redirect($uri);
  190.     }
  191.     public function statistiques(Request $request$codePays): Response {
  192.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  193.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  194.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  195.         }
  196.         $response $this->render(
  197.                 'annuaires/experts/espace_administration/statistiques.html.twig',
  198.                 [
  199.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  200.                 ]
  201.         );
  202.         $response->setPrivate();
  203.         $response->headers->addCacheControlDirective('must-revalidate'true);
  204.         return $response;
  205.     }
  206.     public function referencement(Request $request$codePays): Response {
  207.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  208.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  209.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  210.         }
  211.         $filters $request->query->all();
  212.         $listReferencements $this->rm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
  213.         $metaTag $this->metaTag
  214.                 ->setTitle("Vos prestations")
  215.                 ->setDescription("Liste de vos prestations référencées dans l'annuaire des experts");
  216.         $autorisation $this->rm->autorisationNouveauReferencement();
  217.         $response $this->render(
  218.                 'annuaires/experts/espace_administration/referencement/referencement.html.twig',
  219.                 [
  220.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  221.                     'metaTag' => $metaTag'autorisation' => $autorisation,
  222.                     "listReferencements" => $listReferencements
  223.                 ]
  224.         );
  225.         $response->setPrivate();
  226.         $response->headers->addCacheControlDirective('must-revalidate'true);
  227.         return $response;
  228.     }
  229.     public function ajoutEquipe(Request $request$codePays$directory_storage_photos_equipes_prestataires): Response {
  230.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  231.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  232.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  233.         }
  234.         $form $this->createForm(EquipeType::class, null, [
  235.             'action' => $this->generateUrl(
  236.                     $request->attributes->get('_route'),
  237.                     [
  238.                         'codePays' => $codePays,
  239.                     ]
  240.             ),
  241.             'method' => 'POST',
  242.         ]);
  243.         $form->handleRequest($request);
  244.         if ($form->isSubmitted()) {
  245.             if ($form->isValid()) {
  246.                 $idMembre $this->eqm->gestionEquipe($form->getData());
  247.                 $nomMembre $form->get("nom")->getData();
  248.                 $prenomMembre $form->get("prenom")->getData();
  249.                 $file $form->get('image')->getData();
  250.                 if ($file) {
  251.                     $newFilename Utils::slugify($nomMembre) . "-" Utils::slugify($prenomMembre) . "-" $idMembre '.' $file->guessExtension();
  252.                     try {
  253.                         $file->move($directory_storage_photos_equipes_prestataires$newFilename);
  254.                         $lienFicheMmebre "https://www.fusacq.com/administration/annuaire_prestataire_admin/membre.php?id_membre=$idMembre&from=liste_membres.php&mode=demande_publication";
  255.                         $contenu "</br>" .
  256.                                 "<a href='$lienFicheMmebre' target='_blank' >Liens vers sa fiche dans  l'admin</a>" .
  257.                                 "</br>" .
  258.                                 "<a href='https://www.fusacq.com/administration/annuaire_prestataire_admin/liste_membres.php?mode=demande_publication'  target='_blank' > Lien vers la liste des membres en demande de publication <a>";
  259.                         $varTemplate = ["contenu" => $contenu];
  260.                         $objectMail $nomMembre " " $prenomMembre " (" $idMembre ") a envoyé son photo pour traitement";
  261.                         $this->mailer->sendmail(
  262.                                 Mailer::$senderAdress['notification'],
  263.                                 Mailer::$receiverAdress['mail_alerte'],
  264.                                 null,
  265.                                 null,
  266.                                 $objectMail,
  267.                                 null,
  268.                                 null,
  269.                                 'mails/templates/alerte_interne.html.twig',
  270.                                 $varTemplate,
  271.                                 null
  272.                         );
  273.                         $this->eqm->updateImageMembre($newFilename$idMembre);
  274.                     } catch (FileException $e) {
  275.                         $this->logger->error('Échec upload photo membre', [
  276.                             'membre_id' => $idMembre,
  277.                             'filename' => $newFilename,
  278.                             'exception' => $e->getMessage()
  279.                         ]);
  280.                     }
  281.                 }
  282.                 return $this->redirectToRoute('annuaires_experts_espace_admin_equipe', ['codePays' => $codePays]);
  283.             } else {
  284.                 $this->addFlash('echec'"Certains champs sont vides ou invalides.");
  285.             }
  286.         }
  287.         $response $this->render(
  288.                 'annuaires/experts/espace_administration/equipe/ajout_equipe.html.twig',
  289.                 [
  290.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  291.                     'form' => $form->createView(), "data" => $form->getData()
  292.                 ]
  293.         );
  294.         return $response;
  295.     }
  296.     public function modifierEquipe(Request $request$id$codePays$directory_storage_photos_equipes_prestataires): Response {
  297.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  298.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  299.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  300.         }
  301.         $object $this->em->getRepository(EquipesPrestataire::class)->getDetail((int) $id);
  302.         if (!empty($object) && \array_key_exists('genre'$object)) {
  303.             $normalized FormChoices::normalizeGenreEquipe($object['genre']);
  304.             if (null !== $normalized) {
  305.                 $object['genre'] = $normalized;
  306.             }
  307.         }
  308.         $id_services $this->em->getRepository(EquipesPrestataire::class)->getListIdServicePrestataireByIdMembre((int) $id) ?? [];
  309.         $form $this->createForm(EquipeType::class, array_merge($object, ["id_service_prestataire_checkbox" => $id_services]), [
  310.             'action' => $this->generateUrl(
  311.                     $request->attributes->get('_route'),
  312.                     [
  313.                         "codePays" => $codePays,
  314.                         "id" => $id
  315.                     ]
  316.             ),
  317.             'method' => 'POST',
  318.         ]);
  319.         $form->handleRequest($request);
  320.         if ($form->isSubmitted()) {
  321.             if ($form->isValid()) {
  322.                 $idMembre $this->eqm->gestionEquipe(array_merge($form->getData(), ["old_id_service_prestataire_checkbox" => $id_services]), $id);
  323.                 $nomMembre $form->get("nom")->getData();
  324.                 $prenomMembre $form->get("prenom")->getData();
  325.                 $file $form->get('image')->getData();
  326.                 if ($file) {
  327.                     $newFilename Utils::slugify($nomMembre) . "-" Utils::slugify($prenomMembre) . "-" $idMembre '.' $file->guessExtension();
  328.                     try {
  329.                         $file->move($directory_storage_photos_equipes_prestataires$newFilename);
  330.                         $lienFicheMmebre "https://www.fusacq.com/administration/annuaire_prestataire_admin/membre.php?id_membre=$idMembre&from=liste_membres.php&mode=demande_publication";
  331.                         $contenu "</br>" .
  332.                                 "<a href='$lienFicheMmebre' target='_blank' >Liens vers sa fiche dans  l'admin</a>" .
  333.                                 "</br>" .
  334.                                 "<a href='https://www.fusacq.com/administration/annuaire_prestataire_admin/liste_membres.php?mode=demande_publication'  target='_blank' > Lien vers la liste des membres en demande de publication <a>";
  335.                         $varTemplate = ["contenu" => $contenu];
  336.                         $objectMail $nomMembre " " $prenomMembre " (" $idMembre ") a envoyé son photo pour traitement";
  337.                         $this->mailer->sendmail(
  338.                                 Mailer::$senderAdress['notification'],
  339.                                 Mailer::$receiverAdress['mail_alerte'],
  340.                                 null,
  341.                                 null,
  342.                                 $objectMail,
  343.                                 null,
  344.                                 null,
  345.                                 'mails/templates/alerte_interne.html.twig',
  346.                                 $varTemplate,
  347.                                 null
  348.                         );
  349.                         $this->eqm->updateImageMembre($newFilename$idMembre);
  350.                     } catch (FileException $e) {
  351.                         $this->logger->error('Échec upload photo membre', [
  352.                             'membre_id' => $idMembre,
  353.                             'filename' => $newFilename,
  354.                             'exception' => $e->getMessage()
  355.                         ]);
  356.                     }
  357.                 }
  358.                 return $this->redirectToRoute('annuaires_experts_espace_admin_equipe', ['codePays' => $codePays]);
  359.             } else {
  360.                 $this->addFlash('echec'"Certains champs sont vides ou invalides.");
  361.             }
  362.         }
  363.         $response $this->render(
  364.                 'annuaires/experts/espace_administration/equipe/modifier_equipe.html.twig',
  365.                 [
  366.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  367.                     'form' => $form->createView(),
  368.                     'data' => $form->getData(),
  369.                     'detail_membre' => $object,
  370.                 ]
  371.         );
  372.         return $response;
  373.     }
  374.     /**
  375.      * 
  376.      * @param Request $request
  377.      * @param type $codePays
  378.      * @return Response
  379.      */
  380.     public function ajoutReferencement(Request $request$codePays): Response {
  381.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  382.         if ($this->rm->autorisationNouveauReferencement() == false) {
  383.             throw new AccessDeniedException();
  384.         }
  385.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  386.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  387.         }
  388.         $form $this->createForm(ReferencementType::class, null, [
  389.             'action' => $this->generateUrl(
  390.                     $request->attributes->get('_route'),
  391.                     [
  392.                         'codePays' => $codePays,
  393.                     ]
  394.             ),
  395.             'method' => 'POST''statut' => NULL
  396.         ]);
  397.         if ($request->isMethod('POST')) {
  398.             $form->submit($request->request->get($form->getName()));
  399.             if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[0]) { // enregistrer temporairement 
  400.                 $form->clearErrors(true);
  401.                 $data $form->getData();
  402.                 $this->addFlash('success''Votre prestation a bien été enregistrée. Vous pouvez la compléter ultérieurement');
  403.                 $idSp $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[0]]));
  404.                 if ($idSp === NULL) {
  405.                     return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  406.                 }
  407.                 return $this->redirectToRoute('annuaires_experts_espace_admin_modif_referencement',
  408.                                 [
  409.                                     'codePays' => $codePays,
  410.                                     "id" => $idSp
  411.                 ]);
  412.             }
  413.             if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[1]) {  // mettre en ligne
  414.                 if ($form->isValid()) {
  415.                     $data $form->getData();
  416.                     $idSp $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[1]]));
  417.                     if ($idSp === NULL) {
  418.                         return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  419.                     }
  420.                     return $this->redirectToRoute('annuaires_experts_espace_admin_referencement', ['codePays' => $codePays]);
  421.                 } else {
  422.                     $this->addFlash('echec'"Votre prestation ne peut pas être publiée. Certains champs sont vides ou invalides.");
  423.                 }
  424.             }
  425.         }
  426.         $nbCoordonneesAgence max(1$this->em->getRepository(Utilisateur::class)->getNbCoordonneesParServiceSocietePrestataireByLogin($this->getUser()->getLogin()));
  427.         $metaTag $this->metaTag
  428.                 ->setTitle("Ajouter une prestation")
  429.                 ->setDescription("Ajouter une prestation dans l'annuaire des experts");
  430.         $response $this->render(
  431.                 'annuaires/experts/espace_administration/referencement/ajout_referencement.html.twig',
  432.                 [
  433.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  434.                     'metaTag' => $metaTag,
  435.                     'form' => $form->createView(), "data" => $form->getData(),
  436.                     "nbCoordonneesAgence" => $nbCoordonneesAgence
  437.                 ]
  438.         );
  439.         $response->setPrivate();
  440.         $response->headers->addCacheControlDirective('must-revalidate'true);
  441.         return $response;
  442.     }
  443.     /**
  444.      * 
  445.      * @param Request $request
  446.      * @param type $id
  447.      * @param type $codePays
  448.      * @return Response
  449.      * @throws MissingMandatoryParams
  450.      * @throws type
  451.      */
  452.     public function modifReferencement(Request $request$id$codePays): Response {
  453.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  454.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  455.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  456.         }
  457.         if (!$id) {
  458.             throw new MissingMandatoryParams("missing mandatory param id   services prestataire");
  459.         }
  460.         $object $this->getDoctrine()->getRepository(ServicesPrestataire::class)->getServicesPrestataireWithCoordonnesById((int) $id);
  461.         if (!$object) {
  462.             throw $this->createNotFoundException(' ServicesPrestataire    introuvable avec id ' $id);
  463.         }
  464.         $idsNomSecteursParents = (isset($object[0]["id_secteur_new"])) ? $this->getDoctrine()->getRepository(SecteursActivitePrestataireNew::class)->getIdsNomsSecteurParentsByPointeur($object[0]["id_secteur_new"]) : NULL;
  465.         if (!empty($idsNomSecteursParents)) {
  466.             $dataObject array_merge($objectUtils::firstValInArray($idsNomSecteursParents));   // on prend le premier si on a plusieurs
  467.         } else {
  468.             $dataObject array_merge(
  469.                     $object,
  470.                     ["id_secteur_activite1" => NULL,
  471.                         "id_secteur_activite2" => NULL,
  472.                         "id_secteur_activite3" => NULL
  473.                     ]
  474.             );
  475.         }
  476.         $form $this->createForm(ReferencementType::class, $dataObject, [
  477.             'action' => $this->generateUrl(
  478.                     $request->attributes->get('_route'),
  479.                     [
  480.                         "id" => $id,
  481.                         'codePays' => $codePays,
  482.                     ]
  483.             ),
  484.             'method' => 'POST''statut' => $dataObject[0]['statut'] ?? NULL,
  485.         ]);
  486.         if ($request->isMethod('POST')) {
  487.             $form->submit($request->request->get($form->getName()));
  488.             if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[0]) { // enregistrer temporairement 
  489.                 $form->clearErrors(true);
  490.                 $data $form->getData();
  491.                 $idSp $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[0]]), $id);
  492.                 if ($idSp === NULL) {
  493.                     return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  494.                 }
  495.                 $this->addFlash('success''Votre prestation a bien été enregistrée. Vous pouvez la compléter ultérieurement');
  496.             }
  497.             if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[1]) {  // mettre en ligne
  498.                 if ($form->isValid()) {
  499.                     $data $form->getData();
  500.                     $idSp $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[1]]), $id);
  501.                     if ($idSp === NULL) {
  502.                         return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  503.                     }
  504.                     return $this->redirectToRoute('annuaires_experts_espace_admin_referencement', ['codePays' => $codePays]);
  505.                 } else {
  506.                     $this->addFlash('echec'"Votre prestation ne peut pas être publiée. Certains champs sont vides ou invalides.");
  507.                 }
  508.             }
  509.         }
  510.         $nbCoordonneesAgence max(1$this->em->getRepository(Utilisateur::class)->getNbCoordonneesParServiceSocietePrestataireByLogin($this->getUser()->getLogin()));
  511.         $metaTag $this->metaTag
  512.                 ->setTitle("Modifier une prestation")
  513.                 ->setDescription("Modifier une prestation dans l'annuaire des experts");
  514.         $response $this->render(
  515.                 'annuaires/experts/espace_administration/referencement/modif_referencement.html.twig',
  516.                 [
  517.                     "controller_name" => 'AnnuairesExpertsEspaceAdministrationController',
  518.                     "form" => $form->createView(), 'metaTag' => $metaTag,
  519.                     "prestation" => $dataObject"data" => $form->getData(),
  520.                     "nbCoordonneesAgence" => $nbCoordonneesAgence,
  521.                     "idsNomSecteursParents" => $idsNomSecteursParents
  522.                 ]
  523.         );
  524.         $response->setPrivate();
  525.         $response->headers->addCacheControlDirective('must-revalidate'true);
  526.         return $response;
  527.     }
  528.     public function changeStatutReferencement(Request $request$id$statut$codePays): Response {
  529.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  530.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  531.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  532.         }
  533.         $this->rm->modifierStatut($id$statut);
  534.         $filters $request->query->all();
  535.         $listReferencements $this->rm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
  536.         $response $this->render(
  537.                 'annuaires/experts/espace_administration/referencement/referencement.html.twig',
  538.                 [
  539.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  540.                     "listReferencements" => $listReferencements
  541.                 ]
  542.         );
  543.         $response->setPrivate();
  544.         $response->headers->addCacheControlDirective('must-revalidate'true);
  545.         return $response;
  546.     }
  547.     public function equipe(Request $request$codePays): Response {
  548.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  549.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  550.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  551.         }
  552.         $filters $request->query->all();
  553.         $equipe $this->eqm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
  554.         if ($equipe === NULL) { // PAS DE S.P.
  555.             return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  556.         }
  557.         $mode = ($filters["mode"]) ?? "alphabetique";
  558.         $nbReferencements $this->rm->nbReferencementByLogin($this->getUser()->getLogin());
  559.         $metaTag $this->metaTag
  560.                 ->setTitle("Votre équipe")
  561.                 ->setDescription("Liste des membres de votre équipe dans l'annuaire des experts");
  562.         $response $this->render(
  563.                 'annuaires/experts/espace_administration/equipe/equipe.html.twig',
  564.                 [
  565.                     "controller_name" => 'AnnuairesExpertsEspaceAdministrationController',
  566.                     "equipe" => $equipe"nbReferencements" => $nbReferencements,
  567.                     'metaTag' => $metaTag,
  568.                     "mode" => $mode
  569.                 ]
  570.         );
  571.         $response->setPrivate();
  572.         $response->headers->addCacheControlDirective('must-revalidate'true);
  573.         return $response;
  574.     }
  575.     public function changeStatutEquipe(Request $request$id$statut$codePays): Response {
  576.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  577.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  578.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  579.         }
  580.         $filters $request->query->all();
  581.         $this->eqm->modifierStatut($id$statut);
  582.         $equipe $this->eqm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
  583.          if ($equipe === NULL) { // PAS DE S.P.
  584.             return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  585.         }
  586.         $nbReferencements $this->rm->nbReferencementByLogin($this->getUser()->getLogin());
  587.         $mode = ($filters["mode"]) ?? "alphabetique";
  588.         $response $this->render(
  589.                 'annuaires/experts/espace_administration/equipe/equipe.html.twig',
  590.                 [
  591.                     "controller_name" => 'AnnuairesExpertsEspaceAdministrationController',
  592.                     "equipe" => $equipe"nbReferencements" => $nbReferencements,
  593.                     "mode" => $mode
  594.                 ]
  595.         );
  596.         $response->setPrivate();
  597.         $response->headers->addCacheControlDirective('must-revalidate'true);
  598.         return $response;
  599.     }
  600.     /**
  601.      * 
  602.      * @param Request $request
  603.      * @param type $idService
  604.      * @param type $listMembreIds
  605.      * @param type $codePays
  606.      * @return JsonResponse
  607.      */
  608.     public function changeOrdreMembreEquipe(Request $request$idService$listMembreIds$codePays) {
  609.         $result $this->eqm->changeOrdreMembreEquipe($idService$listMembreIds);
  610.         return new JsonResponse([
  611.             'success' => $result
  612.         ]);
  613.     }
  614.     public function blog(Request $request$codePays): Response {
  615.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  616.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  617.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  618.         }
  619.         $filters $request->query->all();
  620.         $ranges $this->bm->rangeDatesByIdSocietePrestataireLogin($this->getUser()->getLogin());
  621.         if ($ranges === NULL) { // PAS DE S.P.
  622.             return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  623.         }
  624.         $ranges array_filter($ranges); // pour eviter le pb utilisateur  sans blog  et donc sa ns filtre
  625.         $listBlogs $this->bm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
  626.         if ($listBlogs === NULL) { // PAS DE S.P.
  627.             return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  628.         }
  629.         $nbReferencements $this->rm->nbReferencementByLogin($this->getUser()->getLogin());
  630.         $metaTag $this->metaTag
  631.                 ->setTitle("Vos blogs")
  632.                 ->setDescription("Liste de vos blogs dans l'annuaire des experts");
  633.         $response $this->render(
  634.                 'annuaires/experts/espace_administration/blog/blog.html.twig',
  635.                 [
  636.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController''metaTag' => $metaTag,
  637.                     "listBlogs" => $listBlogs"ranges" => $ranges"nbReferencements" => $nbReferencements
  638.                 ]
  639.         );
  640.         $response->setPrivate();
  641.         $response->headers->addCacheControlDirective('must-revalidate'true);
  642.         return $response;
  643.     }
  644.     public function ajoutBlog(Request $request$codePays): Response {
  645.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  646.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  647.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  648.         }
  649.         $form $this->createForm(BlogType::class, null, [
  650.             "id_actualite" => NULL,
  651.             'action' => $this->generateUrl(
  652.                     $request->attributes->get('_route'),
  653.                     [
  654.                         'codePays' => $codePays,
  655.                     ]
  656.             ),
  657.             'method' => 'POST',
  658.         ]);
  659.         if ($request->isMethod('POST')) {
  660.             $form->submit($request->request->get($form->getName()));
  661.             if ($form->isSubmitted()) {
  662.                 if ($form->isValid()) {
  663.                     $idSp $this->bm->gestionBlog($form->getData());
  664.                     if($idSp === NULL ){ // PAS DE S.P.
  665.                          return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  666.                     }
  667.                     return $this->redirectToRoute('annuaires_experts_espace_admin_blog', ['codePays' => $codePays]);
  668.                 } else {
  669.                     $this->addFlash('echec'"Certains champs sont vides ou invalides.");
  670.                 }
  671.             }
  672.         }
  673.         $metaTag $this->metaTag
  674.                 ->setTitle("Nouveau blog")
  675.                 ->setDescription("Espace d'administration de l'annuaire des experts");
  676.         $response $this->render(
  677.                 'annuaires/experts/espace_administration/blog/ajout_blog.html.twig',
  678.                 [
  679.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  680.                     'form' => $form->createView(), 'metaTag' => $metaTag"data" => $form->getData()
  681.                 ]
  682.         );
  683.         return $response;
  684.     }
  685.     public function modifBlog(Request $request$id_message$codePays): Response {
  686.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  687.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  688.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  689.         }
  690.         $dataObject $this->getDoctrine()->getRepository(BuzzActualites::class)->getBuzzActuWithOperationDetails((int) $id_message);
  691.         $idSocietePrestataireCurrentUser $this->em->getRepository(Utilisateur::class)->getIdSocietePrestataireByLogin($this->getUser()->getLogin());
  692.         if (!$dataObject["id_societe_prestataire"] || $idSocietePrestataireCurrentUser != $dataObject["id_societe_prestataire"]) {
  693.             throw new AccessDeniedException("Ce message ne vous appartient pas!");
  694.         }
  695.         if (array_key_exists("id_operation"$dataObject) && array_key_exists("type_operation"$dataObject)) {
  696.             $dataObject["date"] = (!empty($dataObject["date_operation"])) ? $dataObject["date_operation"] : $dataObject["date"];
  697.             if ($dataObject["id_operation"] && in_array($dataObject["type_operation"], array_keys(BuzzOperations::TYPE_OPERATION_COMPLEXE))) {
  698.                 $societeAcquereur $this->getDoctrine()->getRepository(BuzzRoles::class)
  699.                         ->getSocieteAcquereurByIdOperation($dataObject["id_operation"], Societes::IMPORTANT_COLUMNS); //colonne: id_pays,raison_sociale,siren..
  700.                 $societeAcquereur["id_pays"] = ($societeAcquereur["id_pays"]) ? $societeAcquereur["id_pays"] : $dataObject["id_pays_acq"];
  701.                 $societeAchetee $this->getDoctrine()->getRepository(BuzzRoles::class)
  702.                         ->getSocieteAcheteeByIdOperation($dataObject["id_operation"], Societes::IMPORTANT_COLUMNS); //colonne: id_pays,raison_sociale,siren..
  703.                 $dataObject array_merge(
  704.                         $dataObject,
  705.                         array_combine(array_map(fn($item) => $item "_acq"array_keys($societeAcquereur)), array_values($societeAcquereur)),
  706.                         array_combine(array_map(fn($item) => $item "_societe_achetee"array_keys($societeAchetee)), array_values($societeAchetee)),
  707.                 );
  708.             }
  709.         }
  710.         $form $this->createForm(BlogType::class, $dataObject, [
  711.             "id_actualite" => $dataObject["id_actualite"] ?? NULL,
  712.             'action' => $this->generateUrl(
  713.                     $request->attributes->get('_route'),
  714.                     [
  715.                         "id_message" => $id_message,
  716.                         'codePays' => $codePays,
  717.                     ]
  718.             ),
  719.             'method' => 'POST',
  720.         ]);
  721.         if ($request->isMethod('POST')) {
  722.             $form->submit($request->request->get($form->getName()));
  723.             if ($form->isSubmitted()) {
  724.                 if ($form->isValid()) {
  725.                     $idSp $this->bm->gestionBlog($form->getData(), $id_message);
  726.                      if($idSp === NULL ){ // PAS DE S.P.
  727.                          return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  728.                     }
  729.                     return $this->redirectToRoute('annuaires_experts_espace_admin_blog', ['codePays' => $codePays]);
  730.                 } else {
  731.                     $this->addFlash('echec'"Certains champs sont vides ou invalides.");
  732.                 }
  733.             }
  734.         }
  735.         $metaTag $this->metaTag
  736.                 ->setTitle("Nouveau blog")
  737.                 ->setDescription("Espace d'administration de l'annuaire des experts");
  738.         $response $this->render(
  739.                 'annuaires/experts/espace_administration/blog/modif_blog.html.twig',
  740.                 [
  741.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  742.                     'form' => $form->createView(),
  743.                     'metaTag' => $metaTag,
  744.                     "data" => $form->getData(),
  745.                     "dataObject" => $dataObject// etat initial des données dans la base
  746.                 ]
  747.         );
  748.         $response->setPrivate();
  749.         return $response;
  750.     }
  751.     public function changeStatutBlog(Request $request$id$statut$codePays): Response {
  752.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  753.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  754.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  755.         }
  756.         $this->bm->modifierStatut($id$statut);
  757.         $filters $request->query->all();
  758.         $listBlogs $this->bm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
  759.          if ($listBlogs === NULL) { // PAS DE S.P.
  760.             return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
  761.         }
  762.         $response $this->render(
  763.                 'annuaires/experts/espace_administration/blog/blog.html.twig',
  764.                 [
  765.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  766.                     "listBlogs" => $listBlogs
  767.                 ]
  768.         );
  769.         $response->setPrivate();
  770.         $response->headers->addCacheControlDirective('must-revalidate'true);
  771.         return $response;
  772.     }
  773.     public function ajoutMessageBlog(Request $request$codePays): Response {
  774.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  775.         $sp $this->getDoctrine()->getRepository(Utilisateur::class)->getSocietePrestataireByLogin($this->getUser()->getLogin());
  776.         if (!$sp) {
  777.             throw new AccessDeniedException("AccessDeniedException ,Utilisateur authentifié mais sans societe prestataire!");
  778.         }
  779.         if (!$this->aboService->isAbonnementActif($this->getUser())) {
  780.             return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
  781.         }
  782.         $parametres_blog_site $sp->getParametres();
  783.         parse_str("" $parametres_blog_site$style);
  784.         $values["largeur_tableau"] = ($style["width_table_blog"]) ?? "700";
  785.         $values["couleur_titre"] = ($style["couleur_titre_blog"]) ?? "#000000";
  786.         $values["taille_titre"] = ($style["size_titre_blog"]) ?? "14";
  787.         $values["couleur_texte"] = ($style["couleur_texte_blog"]) ?? "#000000";
  788.         $values["taille_texte"] = ($style["size_texte_blog"]) ?? "12";
  789.         $values["nb_items"] = ($style["nb_items"]) ?? "10";
  790.         $values["style"] = ($style["style"]) ?? "";
  791.         $form $this->createForm(MessageBlogType::class, $values, [
  792.             'action' => $this->generateUrl(
  793.                     $request->attributes->get('_route'),
  794.                     [
  795.                         'codePays' => $codePays,
  796.                     ]
  797.             ),
  798.             'method' => 'POST',
  799.         ]);
  800.         $this->bm->generationCodeAccesBlog($sp);
  801.         if ($request->isMethod('POST')) {
  802.             $form->submit($request->request->get($form->getName()));
  803.             if ($form->isSubmitted()) {
  804.                 if ($form->isValid()) {
  805.                     $this->bm->ajoutMessageBlog($form->getData(), $sp);
  806.                     $this->addFlash('success'"Les parametres sont enregistrés");
  807.                 } else {
  808.                     $this->addFlash('echec'"Certains champs sont vides ou invalides.");
  809.                 }
  810.             }
  811.         }
  812.         $scripts sprintf('<script language="javascript" src="%s"></script>'$this->bm->getJavascriptLinkFileBySP($sp));
  813.         $scripts .= "\t\n<script>var code = donne_code_affichage_tableau(tableau_blog);document.write(code);</script>";
  814.         $metaTag $this->metaTag
  815.                 ->setTitle("Vos blogs")
  816.                 ->setDescription("Liste de vos blogs dans l'annuaire des experts");
  817.         $response $this->render(
  818.                 'annuaires/experts/espace_administration/blog/ajout_message_blog.html.twig',
  819.                 [
  820.                     'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
  821.                     'form' => $form->createView(), "scripts" => $scripts,
  822.                     "data" => $form->getData(), 'metaTag' => $metaTag,
  823.                 ]
  824.         );
  825.         $response->setPrivate();
  826.         $response->headers->addCacheControlDirective('must-revalidate'true);
  827.         return $response;
  828.     }
  829. }