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