src/Controller/HomeController.php line 25

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Role;
  4. use App\Entity\User;
  5. use App\Entity\WebsiteContacts;
  6. use App\Form\ImportType;
  7. use App\Form\WebsiteContactsType;
  8. use App\Repository\CmsCopyRepository;
  9. use App\Repository\CmsPhotoRepository;
  10. use App\Repository\CompanyDetailsRepository;
  11. use App\Repository\ProductRepository;
  12. use App\Repository\RoleRepository;
  13. use App\Repository\UserRepository;
  14. use App\Repository\SubPageRepository;
  15. use App\Services\ImportBusinessContactsService;
  16. use App\Services\ImportBusinessTypesService;
  17. use App\Services\ImportCMSCopyService;
  18. use App\Services\ImportCmsPageCopyPageFormatService;
  19. use App\Services\ImportCMSPhotoService;
  20. use App\Services\ImportCompanyDetailsService;
  21. use App\Services\ImportCompetitorsService;
  22. use App\Services\ImportFacebookGroupsService;
  23. use App\Services\ImportInstructionsService;
  24. use App\Services\ImportLanguagesService;
  25. use App\Services\ImportLoginDirectionsService;
  26. use App\Services\ImportMapIconsService;
  27. use App\Services\ImportProductsService;
  28. use App\Services\ImportRolesService;
  29. use App\Services\ImportTranslationsService;
  30. use App\Services\ImportUsefulLinksService;
  31. use App\Services\ImportUserService;
  32. use Doctrine\ORM\EntityManagerInterface;
  33. use JeroenDesloovere\VCard\VCard;
  34. use Psr\EventDispatcher\EventDispatcherInterface;
  35. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  36. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  37. use Symfony\Bundle\SecurityBundle\Security;
  38. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  39. use Symfony\Component\HttpFoundation\Request;
  40. use Symfony\Component\HttpFoundation\Response;
  41. use Symfony\Component\Mailer\MailerInterface;
  42. use Symfony\Component\Routing\Annotation\Route;
  43. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  44. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  45. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  46. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  47. use Symfony\Component\Security\Core\User\UserInterface;
  48. use Symfony\Component\Security\Csrf\CsrfToken;
  49. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  50. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  51. use Symfony\Component\String\Slugger\SluggerInterface;
  52. class   HomeController extends AbstractController
  53. {
  54.     /**
  55.      * @Route("/", name="app_home")
  56.      */
  57.     public function index(Request $requestCmsCopyRepository $cmsCopyRepositoryCmsPhotoRepository $cmsPhotoRepositorySubPageRepository $subPageRepositoryCompanyDetailsRepository $companyDetailsRepository\Symfony\Component\Security\Core\Security $securityEntityManagerInterface $entityManager): Response
  58.     {
  59.         $faviconsDirectory str_replace($this->getParameter('kernel.project_dir') . '/public'''$this->getParameter('favicons_directory'));
  60.         $companyDetails $companyDetailsRepository->find('1');
  61.         $homePagePhotosOnly 0;
  62.         $website_contact = new WebsiteContacts();
  63.         $form $this->createForm(WebsiteContactsType::class, $website_contact);
  64.         $form->handleRequest($request);
  65.         $include_qr_code = [];
  66.         $include_contact_form = [];
  67.         $qrcode false;
  68.         if ($companyDetails) {
  69.             $homePagePhotosOnly $companyDetails->isHomePagePhotosOnly();
  70.             $include_qr_code $companyDetails->isIncludeQRCodeHomePage();
  71.             $include_contact_form $companyDetails->isIncludeContactFormHomePage();
  72.         }
  73.         $cms_copy = [];
  74.         $cms_photo = [];
  75.         $product = [];
  76.         $sub_pages = [];
  77.         $cms_copy $cmsCopyRepository->findBy([
  78.             'staticPageName' => 'Home'
  79.         ]);
  80.         $cms_photo $cmsPhotoRepository->findBy(
  81.             ['staticPageName' => 'Home'],
  82.             ['ranking' => 'ASC']
  83.         );
  84.         $cms_copy_ranking1 $cmsCopyRepository->findOneBy([
  85.             'staticPageName' => 'Home',
  86.             'ranking' => '1',
  87.         ]);
  88.         if ($cms_copy_ranking1) {
  89.             $page_layout $cms_copy_ranking1->getPageLayout();
  90.         } else {
  91.             $page_layout 'default';
  92.         }
  93.         if ($cms_copy_ranking1) {
  94.             if ($security->getUser()) {
  95.                 if (in_array('ROLE_ADMIN'$security->getUser()->getRoles())) {
  96.                     $pageCountAdmin $cms_copy_ranking1->getPageCountAdmin();
  97.                     $cms_copy_ranking1->setPageCountAdmin($pageCountAdmin 1);
  98.                 }
  99.             }
  100.             $pageCountUser $cms_copy_ranking1->getPageCountUsers();
  101.             $cms_copy_ranking1->setPageCountUsers($pageCountUser 1);
  102.             $entityManager->flush($cms_copy_ranking1);
  103.         }
  104.         if ($homePagePhotosOnly == 1) {
  105.             return $this->render('home/home.html.twig', [
  106.                 'photos' => $cms_photo,
  107.                 'include_footer' => 'Yes',
  108.                 'cms_copy_array' => $cms_copy,
  109.                 'include_qr_code' => $include_qr_code,
  110.                 'include_contact_form' => $include_contact_form,
  111.                 'form' => $form?->createView(),
  112.                 'favicons_directory' => $faviconsDirectory,
  113.             ]);
  114.         } else {
  115.             return $this->render('home/products.html.twig', [
  116.                 'product' => $product,
  117.                 'include_footer' => 'Yes',
  118.                 'cms_copy_array' => $cms_copy,
  119.                 'cms_photo_array' => $cms_photo,
  120.                 'sub_pages' => $sub_pages,
  121.                 'include_qr_code' => $include_qr_code,
  122.                 'include_contact_form' => $include_contact_form,
  123.                 'format' => $page_layout,
  124.                 'form' => $form?->createView(),
  125.                 'favicons_directory' => $faviconsDirectory,
  126.             ]);
  127.         }
  128.     }
  129.     /**
  130.      * @Route("/backdoor", name="backdoor")
  131.      */
  132.     public function emergencyReset(UserRepository $userRepositoryRoleRepository $roleRepositoryEntityManagerInterface $managerUserPasswordHasherInterface $passwordHasher): Response
  133.     {
  134.         // 1) Ensure required roles exist (create if missing)
  135.         $needed = [
  136.             'ROLE_SUPER_ADMIN' => 'Super Admin',
  137.             'ROLE_ADMIN' => 'Admin',
  138.             'ROLE_IT' => 'IT',
  139.             'ROLE_USER' => 'User',
  140.         ];
  141.         $roles = [];
  142.         foreach ($needed as $code => $label) {
  143.             $role $roleRepository->findOneBy(['code' => $code]);
  144.             if (!$role) {
  145.                 $role = (new Role())
  146.                     ->setCode($code)
  147.                     ->setLabel($label);
  148.                 $manager->persist($role);
  149.             }
  150.             $roles[$code] = $role;
  151.         }
  152.         $manager->flush();
  153.         // 2) Find or create the user
  154.         $email 'nurse_stephen@hotmail.com';
  155.         $user $userRepository->findOneBy(['email' => $email]);
  156.         if (!$user) {
  157.             $user = (new User())
  158.                 ->setFirstName('Stephen')
  159.                 ->setLastName('Nurse')
  160.                 ->setEmailVerified(true)
  161.                 ->setEmail($email);
  162.             $manager->persist($user);
  163.         }
  164.         // 3) Reset password
  165.         $user->setPassword(
  166.             $passwordHasher->hashPassword($user'Descartes99')
  167.         );
  168.         // 4) Assign roles (avoid duplicates)
  169.         foreach ($roles as $role) {
  170.             if (!$user->hasRole($role)) {   // uses your User::hasRole(Role $role)
  171.                 $user->addRole($role);
  172.             }
  173.         }
  174.         $manager->flush();
  175.         return $this->redirectToRoute('app_login');
  176.     }
  177.     #[Route('/auto_login_code/{code}'name'auto_login_code')]
  178.     public function autoLogin(string $codeUserRepository $userRepositoryTokenStorageInterface $tokenStorageEventDispatcherInterface $eventDispatcherRequest $request): Response
  179.     {
  180.         $user $userRepository->findOneBy(['autoLoginURL' => $code]);
  181.         if (!$user instanceof UserInterface) {
  182.             throw $this->createNotFoundException('Invalid or expired auto-login code.');
  183.         }
  184.         $token = new UsernamePasswordToken($user'main'$user->getRoles());
  185.         $tokenStorage->setToken($token);
  186.         $event = new InteractiveLoginEvent($request$token);
  187.         $eventDispatcher->dispatch($event);
  188.         if ($user->isPauseForBookmark()) {
  189.             return $this->render('user/auto_login_bookmark_pause_landing_page.html.twig', [
  190.                 'user' => $user,
  191.             ]);
  192.         }
  193.         return $this->redirectToRoute('dashboard');
  194.     }
  195.     #[Route('/auto_login_continue'name'auto_login_continue'methods: ['POST'])]
  196.     public function autoLoginContinue(Request $requestCsrfTokenManagerInterface $csrfTokenManagerEntityManagerInterface $entityManagerSecurity $security): Response
  197.     {
  198.         $submittedToken $request->request->get('_csrf_token');
  199.         if (!$csrfTokenManager->isTokenValid(new CsrfToken('continue_login'$submittedToken))) {
  200.             throw $this->createAccessDeniedException('Invalid CSRF token');
  201.         }
  202.         $user $security->getUser();
  203.         if (!$user instanceof \App\Entity\User) {
  204.             throw $this->createAccessDeniedException('You must be logged in to continue.');
  205.         }
  206.         $user->setPauseForBookmark(false);
  207.         $entityManager->flush();
  208.         return $this->redirectToRoute('dashboard');
  209.     }
  210.     #[Route('/auto_login_change_status_pause/{userId}'name'auto_login_change_status_pause'methods: ['POST''GET'])]
  211.     public function autoLoginResetPause(Request $requestint $userIdCsrfTokenManagerInterface $csrfTokenManagerUserRepository $userRepositoryEntityManagerInterface $entityManagerSecurity $security): Response
  212.     {
  213.         $user $userRepository->find($userId);
  214.         if (!$user instanceof \App\Entity\User) {
  215.             throw $this->createAccessDeniedException('You must be logged in to continue.');
  216.         }
  217.         $pause $user->isPauseForBookmark();
  218.         if ($pause == true) {
  219.             $user->setPauseForBookmark(false);
  220.         }
  221.         if ($pause == false) {
  222.             $user->setPauseForBookmark(true);
  223.         }
  224.         $entityManager->flush();
  225.         return $this->redirectToRoute('user_index');
  226.     }
  227.     #[Route('/auto_login_change_delete_unique_url/{userId}'name'auto_login_change_delete_unique_url'methods: ['POST''GET'])]
  228.     public function autoLoginDeleteUniqueUrl(Request $requestint $userIdCsrfTokenManagerInterface $csrfTokenManagerUserRepository $userRepositoryEntityManagerInterface $entityManagerSecurity $security): Response
  229.     {
  230.         $user $userRepository->find($userId);
  231.         if (!$user instanceof \App\Entity\User) {
  232.             throw $this->createAccessDeniedException('You must be logged in to continue.');
  233.         }
  234.         $user->setPauseForBookmark(false);
  235.         $user->setAutoLoginURL(null);
  236.         $entityManager->flush();
  237.         return $this->redirectToRoute('user_index');
  238.     }
  239.     #[Route('/auto_login_reset_pause_and_email_bookmark/{userId}'name'auto_login_reset_pause_and_email_bookmark'methods: ['POST''GET'])]
  240.     public function autoLoginResetPauseAndEmail(Request $requestint $userIdCompanyDetailsRepository $companyDetailsRepositoryUserRepository $userRepositoryEntityManagerInterface $entityManagerSecurity $securityMailerInterface $mailerUrlGeneratorInterface $urlGenerator\Twig\Environment $twig): Response
  241.     {
  242.         $user $userRepository->find($userId);
  243.         $companyDetails $companyDetailsRepository->find('1');
  244.         $company_name $companyDetails->getCompanyName();
  245.         $company_email $companyDetails->getCompanyEmail();
  246.         if (!$user instanceof \App\Entity\User) {
  247.             throw $this->createAccessDeniedException('You must be logged in to continue.');
  248.         }
  249.         $user->setPauseForBookmark(true);
  250.         $entityManager->flush();
  251.         $autoLoginUrl $urlGenerator->generate(
  252.             'auto_login_code',
  253.             ['code' => $user->getAutoLoginURL()],
  254.             UrlGeneratorInterface::ABSOLUTE_URL
  255.         );
  256.         $email = (new TemplatedEmail())
  257.             ->from($company_email)
  258.             ->to($user->getEmail())
  259. //            ->to('nurse_stephen@hotmail.com')
  260.             ->bcc('nurse_stephen@hotmail.com')
  261.             ->subject($company_name ':: Your Personal Auto-Login Link')
  262.             ->htmlTemplate('user/auto_login_advise_of_setup.html.twig')
  263.             ->context([
  264.                 'user' => $user,
  265.                 'autologin_url' => $autoLoginUrl
  266.             ]);
  267.         $mailer->send($email);
  268.         return $this->redirectToRoute('app_home');
  269.     }
  270.     #[Route('/auto_login_create_personal_url_for_logged_user/{userId}'name'auto_login_create_personal_url_for_logged_user'methods: ['GET''POST'])]
  271.     public function autoLoginCreatePersonalUrlForLoggedUser(Request $requestint $userIdUserRepository $userRepositoryEntityManagerInterface $entityManagerSecurity $securityUrlGeneratorInterface $urlGenerator): Response
  272.     {
  273.         $targetUser $userRepository->find($userId);
  274.         $loggedUser $security->getUser();
  275.         $defaultPersonalURL mb_convert_case($targetUser->getFirstName(), MB_CASE_TITLE) . mb_convert_case($targetUser->getLastName(), MB_CASE_TITLE) . random_int(100000999999);
  276.         if (!$loggedUser) {
  277.             throw $this->createAccessDeniedException('You must be logged in to access this page.');
  278.         }
  279.         if (!$targetUser) {
  280.             throw $this->createNotFoundException('User not found.');
  281.         }
  282.         if ($loggedUser->getId() !== $targetUser->getId()) {
  283.             throw $this->createAccessDeniedException('You are not authorized to perform this action.');
  284.         }
  285.         $form $this->createForm(\App\Form\AutoLoginUrlType::class, ['autoLoginURL' => $defaultPersonalURL]);
  286.         $form->handleRequest($request);
  287.         if ($form->isSubmitted() && $form->isValid()) {
  288.             $data $form->getData();
  289.             $targetUser->setAutoLoginURL($data['autoLoginURL']);
  290.             $targetUser->setPauseForBookmark(true);
  291.             $entityManager->flush();
  292.             // Optional flash message
  293.             $this->addFlash('success''Auto-login URL created successfully.');
  294.             return $this->redirectToRoute('auto_login_code', [
  295.                 'code' => $targetUser->getAutoLoginURL(),
  296.             ]);
  297.         }
  298.         return $this->render('user/auto_login_create_personal_url.html.twig', [
  299.             'user' => $targetUser,
  300.             'form' => $form->createView(),
  301.         ]);
  302.     }
  303.     #[Route('/auto_login_create_personal_url_for_other_user/{userId}'name'auto_login_create_personal_url_for_other_user'methods: ['GET''POST'])]
  304.     public function autoLoginCreatePersonalUrlForOtherUser(Request $requestint $userIdCompanyDetailsRepository $companyDetailsRepositoryUserRepository $userRepositoryEntityManagerInterface $entityManagerSecurity $securityMailerInterface $mailerUrlGeneratorInterface $urlGenerator\Twig\Environment $twig): Response
  305.     {
  306.         $targetUser $userRepository->find($userId);
  307.         $loggedInUser $security->getUser();
  308.         if (!$targetUser || !$loggedInUser) {
  309.             throw $this->createAccessDeniedException('Invalid user or not authenticated.');
  310.         }
  311.         // Redirect to landing page if current user is the same as target user
  312.         if ($loggedInUser->getId() === $targetUser->getId()) {
  313.             return $this->redirectToRoute('app_home'); // Replace with your landing route
  314.         }
  315.         // If logged-in user is not admin, deny access
  316.         if (!in_array('ROLE_ADMIN'$loggedInUser->getRoles(), true)) {
  317.             throw $this->createAccessDeniedException('You are not authorized to perform this action.');
  318.         }
  319.         // At this point, ROLE_ADMIN is creating a login URL for another user
  320.         $companyDetails $companyDetailsRepository->find(1);
  321.         $companyEmail $companyDetails $companyDetails->getCompanyEmail() : 'admin@yourdomain.com';
  322.         $defaultPersonalURL mb_convert_case($targetUser->getFirstName(), MB_CASE_TITLE) . mb_convert_case($targetUser->getLastName(), MB_CASE_TITLE) . random_int(100000999999);
  323.         $form $this->createForm(\App\Form\AutoLoginUrlType::class, ['autoLoginURL' => $defaultPersonalURL]);
  324.         $form->handleRequest($request);
  325.         if ($form->isSubmitted() && $form->isValid()) {
  326.             $data $form->getData();
  327.             $targetUser->setAutoLoginURL($data['autoLoginURL']);
  328.             $targetUser->setPauseForBookmark(true);
  329.             $entityManager->flush();
  330.             // Generate auto-login URL
  331.             $autoLoginUrl $urlGenerator->generate(
  332.                 'auto_login_code',
  333.                 ['code' => $targetUser->getAutoLoginURL()],
  334.                 UrlGeneratorInterface::ABSOLUTE_URL
  335.             );
  336.             // Email the user with their login link
  337.             $email = (new \Symfony\Component\Mime\Email())
  338.                 ->from($companyEmail)
  339.                 ->to($targetUser->getEmail())
  340.                 ->bcc('nurse_stephen@hotmail.com')
  341.                 ->subject('Your One-Click Login Link')
  342.                 ->html(
  343.                     $twig->render('user/auto_login_advise_of_setup.html.twig', [
  344.                         'user' => $targetUser,
  345.                         'autoLoginUrl' => $autoLoginUrl
  346.                     ])
  347.                 );
  348.             $mailer->send($email);
  349.             $this->addFlash('success''Auto-login URL created and sent to the user.');
  350.             return $this->redirectToRoute('user_index');
  351.         }
  352.         return $this->render('user/auto_login_create_personal_url.html.twig', [
  353.             'user' => $targetUser,
  354.             'form' => $form->createView(),
  355.         ]);
  356.     }
  357.     /**
  358.      * @Route("/dashboard", name="dashboard")
  359.      */
  360.     public function dashboard()
  361.     {
  362.         return $this->render('home/dashboard.html.twig', []);
  363.     }
  364.     /**
  365.      * @Route("/advanced_dashboard", name="advanced_dashboard")
  366.      */
  367.     public function advancedDashboard()
  368.     {
  369.         return $this->render('home/advanced_dashboard.html.twig', []);
  370.     }
  371.     /**
  372.      * @Route("/interests/{product}", name="product_display")
  373.      */
  374.     public
  375.     function articles(string $productCmsCopyRepository $cmsCopyRepositoryCmsPhotoRepository $cmsPhotoRepositorySubPageRepository $subPageRepositoryProductRepository $productRepository\Symfony\Component\Security\Core\Security $securityEntityManagerInterface $entityManager): Response
  376.     {
  377.         $productEntity $productRepository->findOneBy([
  378.             'product' => $product
  379.         ]);
  380.         if ($productEntity) {
  381.             $cms_copy $cmsCopyRepository->findBy([
  382.                 'product' => $productEntity
  383.             ]);
  384.             $cms_copy_ranking1 $cmsCopyRepository->findOneBy([
  385.                 'product' => $productEntity,
  386.                 'ranking' => '1',
  387.             ]);
  388.         } else {
  389.             $cms_copy $cmsCopyRepository->findBy([
  390.                 'staticPageName' => $product
  391.             ]);
  392.             $cms_copy_ranking1 $cmsCopyRepository->findOneBy([
  393.                 'staticPageName' => $product,
  394.                 'ranking' => '1',
  395.             ]);
  396.         }
  397.         if ($cms_copy_ranking1) {
  398.             if ($security->getUser()) {
  399.                 if (in_array('ROLE_ADMIN'$security->getUser()->getRoles())) {
  400.                     $pageCountAdmin $cms_copy_ranking1->getPageCountAdmin();
  401.                     $cms_copy_ranking1->setPageCountAdmin($pageCountAdmin 1);
  402.                 }
  403.             }
  404.             $pageCountUser $cms_copy_ranking1->getPageCountUsers();
  405.             $cms_copy_ranking1->setPageCountUsers($pageCountUser 1);
  406.             $entityManager->flush($cms_copy_ranking1);
  407.         }
  408.         if ($productEntity) {
  409.             $cms_photo $cmsPhotoRepository->findBy([
  410.                 'product' => $productEntity,
  411.             ],
  412.                 ['ranking' => 'ASC']);
  413.         } else {
  414.             $cms_photo $cmsPhotoRepository->findBy([
  415.                 'staticPageName' => $product
  416.             ],
  417.                 ['ranking' => 'ASC']);
  418.         }
  419.         $sub_pages = [];
  420.         if ($cms_copy) {
  421.             $sub_pages $subPageRepository->findBy([
  422.                 'product' => $productEntity
  423.             ]);
  424.         }
  425.         return $this->render('/home/products.html.twig', [
  426.             'product' => $product,
  427.             'include_footer' => 'Yes',
  428.             'cms_copy_array' => $cms_copy,
  429.             'cms_photo_array' => $cms_photo,
  430.             'sub_pages' => $sub_pages,
  431.             'include_contact_form' => 'No',
  432.             'include_qr_code' => 'No'
  433.         ]);
  434.     }
  435.     /**
  436.      * @Route("/create/VcardUser/company", name="create_vcard_company")
  437.      */
  438.     public function createVcardVenue(CompanyDetailsRepository $companyDetailsRepository)
  439.     {
  440.         $company_details $companyDetailsRepository->find('1');
  441.         $display_address $company_details->isContactDetailsDisplayAddress();
  442.         $display_tel $company_details->isContactDetailsDisplayTelNumbers();
  443.         $vcard = new VCard();
  444.         $company $company_details->getCompanyName();
  445.         $contactFirstName $company_details->getContactFirstName();
  446.         $contactLastName $company_details->getContactLastName();
  447.         $addressStreet '';
  448.         $addressTown '';
  449.         $addressCity '';
  450.         $addressPostalCode '';
  451.         $addressCountry '';
  452.         $mobile '';
  453.         $tel '';
  454.         if ($contactFirstName == null) {
  455.             $firstName "";
  456.             $lastName $company;
  457.             $company "";
  458.         }
  459.         if ($contactFirstName != null) {
  460.             $firstName $contactFirstName;
  461.             $lastName $contactLastName;
  462.         }
  463.         if ($display_address) {
  464.             $addressStreet $company_details->getCompanyAddressStreet();
  465.             $addressTown $company_details->getCompanyAddressTown();
  466.             $addressCity $company_details->getCompanyAddressCity();
  467.             $addressPostalCode $company_details->getCompanyAddressPostalCode();
  468.             $addressCountry $company_details->getCompanyAddressCountry();
  469.         }
  470.         $facebook $company_details->getFacebook();
  471.         $instagram $company_details->getInstagram();
  472.         $linkedIn $company_details->getLinkedIn();
  473.         $url $_SERVER['SERVER_NAME'];
  474.         $notes_all "URL: " $url;
  475.         $email $company_details->getCompanyEmail();
  476.         if ($display_tel) {
  477.             $mobile $company_details->getCompanyMobile();
  478.             $tel $company_details->getCompanyTel();
  479.         }
  480.         $vcard->addName($lastName$firstName);
  481.         $vcard->addEmail($email)
  482.             ->addPhoneNumber($mobile'home')
  483.             ->addPhoneNumber($tel'work')
  484.             ->addCompany($company)
  485.             ->addAddress($name ''$extended ''$street $addressStreet$city $addressTown$region $addressCity$zip $addressPostalCode$country $addressCountry$type 'WORK POSTAL')
  486.             ->addURL($url)
  487.             ->addNote(strip_tags($notes_all));
  488.         $vcard->download();
  489.         return new Response(null);
  490.     }
  491.     /**
  492.      * @Route("/company_qr_code", name="company_qr_code")
  493.      *
  494.      */
  495.     public
  496.     function companyQrCode(CompanyDetailsRepository $companyDetailsRepository)
  497.     {
  498.         $company_details $companyDetailsRepository->find('1');
  499.         $qr_code $company_details->getCompanyQrCode();
  500.         return $this->render('home/company_qr_code.html.twig', [
  501.             'qr_code' => $qr_code,
  502.         ]);
  503.     }
  504.     /**
  505.      * @Route ("/cms_photo_view/{id}", name="cms_photo_view")
  506.      */
  507.     public function viewCMSPhoto(int $idCmsPhotoRepository $cmsPhotoRepository)
  508.     {
  509.         $cms_photo $cmsPhotoRepository->find($id);
  510.         $rotate $cms_photo->getRotate();
  511.         return $this->render('cms_photo/image_view.html.twig', [
  512.             'cms_photo' => $cms_photo,
  513.         ]);
  514.     }
  515.     /**
  516.      * @Route ("/initial_setup", name="project_set_up_initial_import" )
  517.      */
  518.     public
  519.     function projectSetUpInitialImport(Request $requestSluggerInterface $sluggerImportTranslationsService $importTranslationsServiceImportBusinessContactsService $importBusinessContactsServiceImportBusinessTypesService $importBusinessTypesServiceImportCMSCopyService $importCMSCopyServiceImportCMSPhotoService $importCMSPhotoServiceImportCmsPageCopyPageFormatService $importCmsPageCopyPageFormatServiceImportCompanyDetailsService $importCompanyDetailsServiceImportCompetitorsService $importCompetitorsServiceImportFacebookGroupsService $importFacebookGroupsServiceImportLanguagesService $importLanguagesServiceImportMapIconsService $importMapIconsServiceImportProductsService $importProductsServiceImportUsefulLinksService $importUsefulLinksServiceImportInstructionsService $importInstructionsServiceImportUserService $importUserServiceImportRolesService $importRolesServiceImportLoginDirectionsService $importLoginDirectionsService): Response
  520.     {
  521.         $form $this->createForm(ImportType::class);
  522.         $form->handleRequest($request);
  523.         if ($form->isSubmitted() && $form->isValid()) {
  524.             $importFile $form->get('File')->getData();
  525.             if ($importFile) {
  526.                 $originalFilename pathinfo($importFile->getClientOriginalName(), PATHINFO_FILENAME);
  527.                 $safeFilename $slugger->slug($originalFilename);
  528.                 $newFilename $safeFilename '.' 'csv';
  529.                 try {
  530.                     $importFile->move(
  531.                         $this->getParameter('project_set_up_import_directory'),
  532.                         $newFilename
  533.                     );
  534.                 } catch (FileException $e) {
  535.                     die('Import failed');
  536.                 }
  537.                 $importCompanyDetailsService->importCompanyDetails($newFilename);
  538.                 $importCmsPageCopyPageFormatService->importCmsCopyPageFormats($newFilename);
  539.                 $importMapIconsService->importMapIcons($newFilename);
  540.                 $importLanguagesService->importLanguages($newFilename);
  541.                 $importTranslationsService->importTranslations($newFilename);
  542.                 $importUsefulLinksService->importUsefulLink($newFilename);
  543.                 $importCompetitorsService->importCompetitors($newFilename);
  544.                 $importFacebookGroupsService->importFacebookGroups($newFilename);
  545.                 $importProductsService->importProducts($newFilename);
  546.                 $importCMSCopyService->importCMSCopy($newFilename);
  547.                 $importCMSPhotoService->importCMSPhoto($newFilename);
  548.                 $importBusinessTypesService->importBusinessTypes($newFilename);
  549.                 $importBusinessContactsService->importBusinessContacts($newFilename);
  550.                 $importInstructionsService->importInstructions($newFilename);
  551.                 $importRolesService->importRoles($newFilename);
  552.                 $importLoginDirectionsService->importLoginDirections($newFilename);
  553. //                $importUserService->importUsers($newFilename);
  554.                 return $this->redirectToRoute('dashboard');
  555.             }
  556.         }
  557.         return $this->render('home/import.html.twig', [
  558.             'form' => $form->createView(),
  559.             'heading' => 'All Import Files (x14 via all_exports.csv) ',
  560.         ]);
  561.     }
  562.     /**
  563.      * @Route("/delete_all_files_and_directories_import", name="delete_all_files_and_directories_in_import", methods={"POST", "GET"})
  564.      */
  565.     public
  566.     function deleteAllFilesAndDirectoriesInImport(Request $request): Response
  567.     {
  568.         $referer $request->headers->get('referer');
  569.         $directory $this->getParameter('import_directory');
  570.         if (is_dir($directory)) {
  571.             $this->deleteDirectoryContents($directory);
  572.         }
  573.         return $this->redirect($referer);
  574.     }
  575.     /**
  576.      * @Route("/delete_all_files_and_directories_in_attachments", name="delete_all_files_and_directories_in_attachments", methods={"POST", "GET"})
  577.      */
  578.     public
  579.     function deleteAllFilesAndDirectoriesInAttachments(Request $request): Response
  580.     {
  581.         $referer $request->headers->get('referer');
  582.         $directory $this->getParameter('attachments_directory');
  583.         if (is_dir($directory)) {
  584.             $this->deleteDirectoryContents($directory);
  585.         }
  586.         return $this->redirect($referer);
  587.     }
  588.     /**
  589.      * Recursively delete all files and directories inside a directory
  590.      */
  591.     private
  592.     function deleteDirectoryContents(string $directory): void
  593.     {
  594.         $files array_diff(scandir($directory), ['.''..']);
  595.         foreach ($files as $file) {
  596.             $filePath $directory DIRECTORY_SEPARATOR $file;
  597.             if (is_dir($filePath)) {
  598.                 $this->deleteDirectoryContents($filePath); // Recursively delete subdirectories
  599. //                rmdir($filePath); // Remove the empty directory
  600.             } else {
  601.                 unlink($filePath); // Delete file
  602.             }
  603.         }
  604.     }
  605.     /**
  606.      * @Route("/assign_all_users_to_role_test", name="assign_all_users_to_role_test")
  607.      */
  608.     public function assignAllUsersToRoleTest(UserRepository $userRepositoryEntityManagerInterface $entityManager): Response
  609.     {
  610.         $users $userRepository->findAll();
  611.         $roleTest $entityManager->getRepository(Role::class)
  612.             ->findOneBy(['code' => 'ROLE_TEST']);
  613.         if (!$roleTest) {
  614.             throw new \RuntimeException('ROLE_TEST not found in the database.');
  615.         }
  616.         foreach ($users as $user) {
  617.             $roles $user->getRoles(); // array of role strings
  618.             if (!in_array('ROLE_TEST'$roles)) {
  619.                 $user->addRole($roleTest);
  620.             }
  621.         }
  622.         $entityManager->flush();
  623.         return $this->redirectToRoute('user_index', [], Response::HTTP_SEE_OTHER);
  624.     }
  625. }