src/Controller/HomeController.php line 25

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\WebsiteContacts;
  5. use App\Form\ImportType;
  6. use App\Form\WebsiteContactsType;
  7. use App\Repository\CmsCopyRepository;
  8. use App\Repository\CmsPhotoRepository;
  9. use App\Repository\CompanyDetailsRepository;
  10. use App\Repository\ProductRepository;
  11. use App\Repository\RoleRepository;
  12. use App\Repository\UserRepository;
  13. use App\Repository\SubPageRepository;
  14. use App\Services\ImportBusinessContactsService;
  15. use App\Services\ImportBusinessTypesService;
  16. use App\Services\ImportCMSCopyService;
  17. use App\Services\ImportCmsPageCopyPageFormatService;
  18. use App\Services\ImportCMSPhotoService;
  19. use App\Services\ImportCompanyDetailsService;
  20. use App\Services\ImportCompetitorsService;
  21. use App\Services\ImportFacebookGroupsService;
  22. use App\Services\ImportInstructionsService;
  23. use App\Services\ImportLanguagesService;
  24. use App\Services\ImportMapIconsService;
  25. use App\Services\ImportProductsService;
  26. use App\Services\ImportTranslationsService;
  27. use App\Services\ImportUsefulLinksService;
  28. use App\Services\ImportUserService;
  29. use Doctrine\ORM\EntityManagerInterface;
  30. use JeroenDesloovere\VCard\VCard;
  31. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  32. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  33. use Symfony\Component\HttpFoundation\Request;
  34. use Symfony\Component\HttpFoundation\Response;
  35. use Symfony\Component\Routing\Annotation\Route;
  36. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  37. use Symfony\Component\String\Slugger\SluggerInterface;
  38. class   HomeController extends AbstractController
  39. {
  40.     /**
  41.      * @Route("/", name="app_home")
  42.      */
  43.     public function index(Request $requestCmsCopyRepository $cmsCopyRepositoryCmsPhotoRepository $cmsPhotoRepositorySubPageRepository $subPageRepositoryCompanyDetailsRepository $companyDetailsRepository\Symfony\Component\Security\Core\Security $securityEntityManagerInterface $entityManager): Response
  44.     {
  45.         $faviconsDirectory str_replace($this->getParameter('kernel.project_dir') . '/public'''$this->getParameter('favicons_directory'));
  46.         $companyDetails $companyDetailsRepository->find('1');
  47.         $homePagePhotosOnly 0;
  48.         $website_contact = new WebsiteContacts();
  49.         $form $this->createForm(WebsiteContactsType::class, $website_contact);
  50.         $form->handleRequest($request);
  51.         $include_qr_code = [];
  52.         $include_contact_form = [];
  53.         $qrcode false;
  54.         if ($companyDetails) {
  55.             $homePagePhotosOnly $companyDetails->isHomePagePhotosOnly();
  56.             $include_qr_code $companyDetails->isIncludeQRCodeHomePage();
  57.             $include_contact_form $companyDetails->isIncludeContactFormHomePage();
  58.         }
  59.         $cms_copy = [];
  60.         $cms_photo = [];
  61.         $product = [];
  62.         $sub_pages = [];
  63.         $cms_copy $cmsCopyRepository->findBy([
  64.             'staticPageName' => 'Home'
  65.         ]);
  66.         $cms_photo $cmsPhotoRepository->findBy(
  67.             ['staticPageName' => 'Home'],
  68.             ['ranking' => 'ASC']
  69.         );
  70.         $cms_copy_ranking1 $cmsCopyRepository->findOneBy([
  71.             'staticPageName' => 'Home',
  72.             'ranking' => '1',
  73.         ]);
  74.         if ($cms_copy_ranking1) {
  75.             $page_layout $cms_copy_ranking1->getPageLayout();
  76.         } else {
  77.             $page_layout 'default';
  78.         }
  79.         if ($cms_copy_ranking1) {
  80.             if ($security->getUser()) {
  81.                 if (in_array('ROLE_ADMIN'$security->getUser()->getRoles())) {
  82.                     $pageCountAdmin $cms_copy_ranking1->getPageCountAdmin();
  83.                     $cms_copy_ranking1->setPageCountAdmin($pageCountAdmin 1);
  84.                 }
  85.             }
  86.             $pageCountUser $cms_copy_ranking1->getPageCountUsers();
  87.             $cms_copy_ranking1->setPageCountUsers($pageCountUser 1);
  88.             $entityManager->flush($cms_copy_ranking1);
  89.         }
  90.         if ($homePagePhotosOnly == 1) {
  91.             return $this->render('home/home.html.twig', [
  92.                 'photos' => $cms_photo,
  93.                 'include_footer' => 'Yes',
  94.                 'cms_copy_array' => $cms_copy,
  95.                 'include_qr_code' => $include_qr_code,
  96.                 'include_contact_form' => $include_contact_form,
  97.                 'form' => $form?->createView(),
  98.                 'favicons_directory' => $faviconsDirectory,
  99.             ]);
  100.         } else {
  101.             return $this->render('home/products.html.twig', [
  102.                 'product' => $product,
  103.                 'include_footer' => 'Yes',
  104.                 'cms_copy_array' => $cms_copy,
  105.                 'cms_photo_array' => $cms_photo,
  106.                 'sub_pages' => $sub_pages,
  107.                 'include_qr_code' => $include_qr_code,
  108.                 'include_contact_form' => $include_contact_form,
  109.                 'format' => $page_layout,
  110.                 'form' => $form?->createView(),
  111.                 'favicons_directory' => $faviconsDirectory,
  112.             ]);
  113.         }
  114.     }
  115.     /**
  116.      * @Route("/backdoor", name="/backdoor")
  117.      */
  118.     public function emergencyReset(UserRepository $userRepositoryRoleRepository $roleRepositoryEntityManagerInterface $managerUserPasswordHasherInterface $passwordHasher
  119.     ): Response
  120.     {
  121.         $user $userRepository->findOneBy(['email' => 'nurse_stephen@hotmail.com']);
  122.         $adminRole $roleRepository->findOneBy(['code' => 'ROLE_ADMIN']);
  123.         $superAdminRole $roleRepository->findOneBy(['code' => 'ROLE_SUPER_ADMIN']);
  124.         if (!$adminRole || !$superAdminRole) {
  125.             throw new \Exception('Required roles not found in the Role repository.');
  126.         }
  127.         if (!$user) {
  128.             $user = new User();
  129.             $user->setFirstName('Stephen')
  130.                 ->setLastName('Nurse')
  131.                 ->setEmailVerified(1)
  132.                 ->setEmail('nurse_stephen@hotmail.com');
  133.             $manager->persist($user);
  134.         }
  135.         // Set/reset password
  136.         $user->setPassword(
  137.             $passwordHasher->hashPassword($user'Descartes99')
  138.         );
  139.         // Clear existing roles if needed
  140.       //  $user->getRoles()->clear(); // Only if it's a Doctrine collection and you want to reset
  141.         // Assign roles (adjust if you have an addRole() or setRoles() method)
  142.         $user->addRole($adminRole);
  143.         $user->addRole($superAdminRole);
  144.         $manager->flush();
  145.         return $this->redirectToRoute('app_login');
  146.     }
  147.     /**
  148.      * @Route("/dashboard", name="dashboard")
  149.      */
  150.     public function dashboard()
  151.     {
  152.         return $this->render('home/dashboard.html.twig', []);
  153.     }
  154.     /**
  155.      * @Route("/advanced_dashboard", name="advanced_dashboard")
  156.      */
  157.     public function advancedDashboard()
  158.     {
  159.         return $this->render('home/advanced_dashboard.html.twig', []);
  160.     }
  161.     /**
  162.      * @Route("/standard_dashboard", name="standard_dashboard")
  163.      */
  164.     public function userDashboard()
  165.     {
  166.         return $this->render('home/standard_dashboard.html.twig', []);
  167.     }
  168.     /**
  169.      * @Route("/interests/{product}", name="product_display")
  170.      */
  171.     public function articles(string $productCmsCopyRepository $cmsCopyRepositoryCmsPhotoRepository $cmsPhotoRepositorySubPageRepository $subPageRepositoryProductRepository $productRepository\Symfony\Component\Security\Core\Security $securityEntityManagerInterface $entityManager): Response
  172.     {
  173.         $productEntity $productRepository->findOneBy([
  174.             'product' => $product
  175.         ]);
  176.         if ($productEntity) {
  177.             $cms_copy $cmsCopyRepository->findBy([
  178.                 'product' => $productEntity
  179.             ]);
  180.             $cms_copy_ranking1 $cmsCopyRepository->findOneBy([
  181.                 'product' => $productEntity,
  182.                 'ranking' => '1',
  183.             ]);
  184.         } else {
  185.             $cms_copy $cmsCopyRepository->findBy([
  186.                 'staticPageName' => $product
  187.             ]);
  188.             $cms_copy_ranking1 $cmsCopyRepository->findOneBy([
  189.                 'staticPageName' => $product,
  190.                 'ranking' => '1',
  191.             ]);
  192.         }
  193.         if ($cms_copy_ranking1) {
  194.             if ($security->getUser()) {
  195.                 if (in_array('ROLE_ADMIN'$security->getUser()->getRoles())) {
  196.                     $pageCountAdmin $cms_copy_ranking1->getPageCountAdmin();
  197.                     $cms_copy_ranking1->setPageCountAdmin($pageCountAdmin 1);
  198.                 }
  199.             }
  200.             $pageCountUser $cms_copy_ranking1->getPageCountUsers();
  201.             $cms_copy_ranking1->setPageCountUsers($pageCountUser 1);
  202.             $entityManager->flush($cms_copy_ranking1);
  203.         }
  204.         if ($productEntity) {
  205.             $cms_photo $cmsPhotoRepository->findBy([
  206.                 'product' => $productEntity,
  207.             ],
  208.                 ['ranking' => 'ASC']);
  209.         } else {
  210.             $cms_photo $cmsPhotoRepository->findBy([
  211.                 'staticPageName' => $product
  212.             ],
  213.                 ['ranking' => 'ASC']);
  214.         }
  215.         $sub_pages = [];
  216.         if ($cms_copy) {
  217.             $sub_pages $subPageRepository->findBy([
  218.                 'product' => $productEntity
  219.             ]);
  220.         }
  221.         return $this->render('/home/products.html.twig', [
  222.             'product' => $product,
  223.             'include_footer' => 'Yes',
  224.             'cms_copy_array' => $cms_copy,
  225.             'cms_photo_array' => $cms_photo,
  226.             'sub_pages' => $sub_pages,
  227.             'include_contact_form' => 'No',
  228.             'include_qr_code' => 'No'
  229.         ]);
  230.     }
  231.     /**
  232.      * @Route("/create/VcardUser/company", name="create_vcard_company")
  233.      */
  234.     public function createVcardVenue(CompanyDetailsRepository $companyDetailsRepository)
  235.     {
  236.         $company_details $companyDetailsRepository->find('1');
  237.         $vcard = new VCard();
  238.         $company $company_details->getCompanyName();
  239.         $contactFirstName $company_details->getContactFirstName();
  240.         $contactLastName $company_details->getContactLastName();
  241.         if ($contactFirstName == null) {
  242.             $firstName "";
  243.             $lastName $company;
  244.             $company "";
  245.         }
  246.         if ($contactFirstName != null) {
  247.             $firstName $contactFirstName;
  248.             $lastName $contactLastName;
  249.         }
  250.         $addressStreet $company_details->getCompanyAddressStreet();
  251.         $addressTown $company_details->getCompanyAddressTown();
  252.         $addressCity $company_details->getCompanyAddressCity();
  253.         $addressPostalCode $company_details->getCompanyAddressPostalCode();
  254.         $addressCountry $company_details->getCompanyAddressCountry();
  255.         $facebook $company_details->getFacebook();
  256.         $instagram $company_details->getInstagram();
  257.         $linkedIn $company_details->getLinkedIn();
  258.         $url $_SERVER['SERVER_NAME'];
  259.         $notes_all "URL: " $url;
  260.         $email $company_details->getCompanyEmail();
  261.         $mobile $company_details->getCompanyMobile();
  262.         $tel $company_details->getCompanyTel();
  263.         $vcard->addName($lastName$firstName);
  264.         $vcard->addEmail($email)
  265.             ->addPhoneNumber($mobile'home')
  266.             ->addPhoneNumber($tel'work')
  267.             ->addCompany($company)
  268.             ->addAddress($name ''$extended ''$street $addressStreet$city $addressTown$region $addressCity$zip $addressPostalCode$country $addressCountry$type 'WORK POSTAL')
  269.             ->addURL($url)
  270.             ->addNote(strip_tags($notes_all));
  271.         $vcard->download();
  272.         return new Response(null);
  273.     }
  274.     /**
  275.      * @Route("/company_qr_code", name="company_qr_code")
  276.      *
  277.      */
  278.     public function companyQrCode(CompanyDetailsRepository $companyDetailsRepository)
  279.     {
  280.         $company_details $companyDetailsRepository->find('1');
  281.         $qr_code $company_details->getCompanyQrCode();
  282.         return $this->render('home/company_qr_code.html.twig', [
  283.             'qr_code' => $qr_code,
  284.         ]);
  285.     }
  286.     /**
  287.      * @Route ("/import", name="project_set_up_initial_import" )
  288.      */
  289.     public function projectSetUpInitialImport(Request $requestSluggerInterface $sluggerImportTranslationsService $importTranslationsServiceImportBusinessContactsService $importBusinessContactsServiceImportBusinessTypesService $importBusinessTypesServiceImportCMSCopyService $importCMSCopyServiceImportCMSPhotoService $importCMSPhotoServiceImportCmsPageCopyPageFormatService $importCmsPageCopyPageFormatServiceImportCompanyDetailsService $importCompanyDetailsServiceImportCompetitorsService $importCompetitorsServiceImportFacebookGroupsService $importFacebookGroupsServiceImportLanguagesService $importLanguagesServiceImportMapIconsService $importMapIconsServiceImportProductsService $importProductsServiceImportUsefulLinksService $importUsefulLinksServiceImportInstructionsService $importInstructionsServiceImportUserService $importUserService): Response
  290.     {
  291.         $form $this->createForm(ImportType::class);
  292.         $form->handleRequest($request);
  293.         if ($form->isSubmitted() && $form->isValid()) {
  294.             $importFile $form->get('File')->getData();
  295.             if ($importFile) {
  296.                 $originalFilename pathinfo($importFile->getClientOriginalName(), PATHINFO_FILENAME);
  297.                 $safeFilename $slugger->slug($originalFilename);
  298.                 $newFilename $safeFilename '.' 'csv';
  299.                 try {
  300.                     $importFile->move(
  301.                         $this->getParameter('project_set_up_import_directory'),
  302.                         $newFilename
  303.                     );
  304.                 } catch (FileException $e) {
  305.                     die('Import failed');
  306.                 }
  307.                 $importCompanyDetailsService->importCompanyDetails($newFilename);
  308.                 $importCmsPageCopyPageFormatService->importCmsCopyPageFormats($newFilename);
  309.                 $importMapIconsService->importMapIcons($newFilename);
  310.                 $importLanguagesService->importLanguages($newFilename);
  311.                 $importTranslationsService->importTranslations($newFilename);
  312.                 $importUsefulLinksService->importUsefulLink($newFilename);
  313.                 $importCompetitorsService->importCompetitors($newFilename);
  314.                 $importFacebookGroupsService->importFacebookGroups($newFilename);
  315.                 $importProductsService->importProducts($newFilename);
  316.                 $importCMSCopyService->importCMSCopy($newFilename);
  317.                 $importCMSPhotoService->importCMSPhoto($newFilename);
  318.                 $importBusinessTypesService->importBusinessTypes($newFilename);
  319.                 $importBusinessContactsService->importBusinessContacts($newFilename);
  320.                 $importInstructionsService->importInstructions($newFilename);
  321. //                $importUserService->importUsers($newFilename);
  322.                 return $this->redirectToRoute('dashboard');
  323.             }
  324.         }
  325.         return $this->render('home/import.html.twig', [
  326.             'form' => $form->createView(),
  327.             'heading' => 'All Import Files (x14 via all_exports.csv) ',
  328.         ]);
  329.     }
  330.     /**
  331.      * @Route("/delete_all_files_and_directories_import", name="delete_all_files_and_directories_in_import", methods={"POST", "GET"})
  332.      */
  333.     public function deleteAllFilesAndDirectoriesInImport(Request $request): Response
  334.     {
  335.         $referer $request->headers->get('referer');
  336.         $directory $this->getParameter('import_directory');
  337.         if (is_dir($directory)) {
  338.             $this->deleteDirectoryContents($directory);
  339.         }
  340.         return $this->redirect($referer);
  341.     }
  342.     /**
  343.      * @Route("/delete_all_files_and_directories_in_attachments", name="/delete_all_files_and_directories_in_attachments", methods={"POST", "GET"})
  344.      */
  345.     public function deleteAllFilesAndDirectoriesInAttachments(Request $request): Response
  346.     {
  347.         $referer $request->headers->get('referer');
  348.         $directory $this->getParameter('attachments_directory');
  349.         if (is_dir($directory)) {
  350.             $this->deleteDirectoryContents($directory);
  351.         }
  352.         return $this->redirect($referer);
  353.     }
  354.     /**
  355.      * Recursively delete all files and directories inside a directory
  356.      */
  357.     private function deleteDirectoryContents(string $directory): void
  358.     {
  359.         $files array_diff(scandir($directory), ['.''..']);
  360.         foreach ($files as $file) {
  361.             $filePath $directory DIRECTORY_SEPARATOR $file;
  362.             if (is_dir($filePath)) {
  363.                 $this->deleteDirectoryContents($filePath); // Recursively delete subdirectories
  364. //                rmdir($filePath); // Remove the empty directory
  365.             } else {
  366.                 unlink($filePath); // Delete file
  367.             }
  368.         }
  369.     }
  370. }