src/Controller/CompanyDetailsController.php line 160

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CompanyDetails;
  4. use App\Form\CompanyDetailsType;
  5. use App\Form\ImportType;
  6. use App\Repository\CompanyDetailsRepository;
  7. use App\Services\ImportCompanyDetailsService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  10. use PhpOffice\PhpSpreadsheet\Writer\Csv;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\StreamedResponse;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\String\Slugger\SluggerInterface;
  19. /**
  20.  * @Route("/company_details")
  21.  */
  22. class CompanyDetailsController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/index", name="company_details_index", methods={"GET"})
  26.      * @Security("is_granted('ROLE_ADMIN')")
  27.      */
  28.     public function index(CompanyDetailsRepository $companyDetailsRepository): Response
  29.     {
  30.         return $this->render('company_details/index.html.twig', [
  31.             'company_details' => $companyDetailsRepository->findAll()
  32.         ]);
  33.     }
  34.     /**
  35.      * @Route("/new", name="company_details_new", methods={"GET", "POST"})
  36.      * @Security("is_granted('ROLE_ADMIN')")
  37.      */
  38.     public function new(Request $requestCompanyDetailsRepository $companyDetailsRepository): Response
  39.     {
  40.         $companyDetails = new CompanyDetails();
  41.         $form $this->createForm(CompanyDetailsType::class, $companyDetails);
  42.         $form->handleRequest($request);
  43.         if ($form->isSubmitted() && $form->isValid()) {
  44.             $faviconDev $form['faviconDev']->getData();
  45.             $faviconLive $form['faviconLive']->getData();
  46.             $qrCode $form['companyQrCode']->getData();
  47.             if ($faviconDev) {
  48.                 $originalFilename pathinfo($faviconDev->getClientOriginalName(), PATHINFO_FILENAME);
  49.                 $newFilename $companyDetails->getCompanyName() . '_dev.' $faviconDev->guessExtension();
  50.                 $faviconDev->move(
  51.                     $this->getParameter('favicons_directory'),
  52.                     $newFilename
  53.                 );
  54.                 $companyDetails->setFaviconDev($newFilename);
  55.             }
  56.             if ($faviconLive) {
  57.                 $originalFilenameLive pathinfo($faviconLive->getClientOriginalName(), PATHINFO_FILENAME);
  58.                 $newFilenameLive $companyDetails->getCompanyName() . '_live.' $faviconLive->guessExtension();
  59.                 $faviconLive->move(
  60.                     $this->getParameter('favicons_directory'),
  61.                     $newFilenameLive
  62.                 );
  63.                 $companyDetails->setFaviconLive($newFilenameLive);
  64.             }
  65.             if ($qrCode) {
  66.                 $originalFilenameQR pathinfo($qrCode->getClientOriginalName(), PATHINFO_FILENAME);
  67.                 $newFilenameQR $companyDetails->getCompanyName() . '_qr_code.' $qrCode->guessExtension();
  68.                 $qrCode->move(
  69.                     $this->getParameter('favicons_directory'),
  70.                     $newFilenameQR
  71.                 );
  72.                 $companyDetails->setCompanyQrCode($newFilenameQR);
  73.             }
  74.             $companyDetailsRepository->add($companyDetailstrue);
  75.             return $this->redirectToRoute('company_details_index', [], Response::HTTP_SEE_OTHER);
  76.         }
  77.         return $this->render('company_details/new.html.twig', [
  78.             'company_details' => $companyDetails,
  79.             'form' => $form->createView(),
  80.         ]);
  81.     }
  82.     /**
  83.      * @Route("/show/{id}", name="company_details_show", methods={"GET"})
  84.      * @Security("is_granted('ROLE_ADMIN')")
  85.      */
  86.     public function show(CompanyDetails $companyDetails): Response
  87.     {
  88.         $faviconsDirectory str_replace($this->getParameter('kernel.project_dir') . '/public'''$this->getParameter('favicons_directory'));
  89.         return $this->render('company_details/show.html.twig', [
  90.             'company_detail' => $companyDetails,
  91.             'hide_for_qr_code' => '0',
  92.             'favicons_directory' => $faviconsDirectory,
  93.         ]);
  94.     }
  95.     /**
  96.      * @Route("/show_qr_build/{id}", name="company_details_show_qr_build", methods={"GET"})
  97.      *
  98.      */
  99.     public function showQRBuild(CompanyDetails $companyDetails): Response
  100.     {
  101.         return $this->render('company_details/show_qr_build.html.twig', [
  102.             'company_detail' => $companyDetails,
  103.             'hide_for_qr_code' => '1'
  104.         ]);
  105.     }
  106.     /**
  107.      * @Route("/edit/{id}", name="company_details_edit", methods={"GET", "POST"})
  108.      * @Security("is_granted('ROLE_ADMIN')")
  109.      */
  110.     public function edit(Request $requestCompanyDetails $companyDetailsCompanyDetailsRepository $companyDetailsRepository): Response
  111.     {
  112.         $faviconsDirectory str_replace($this->getParameter('kernel.project_dir') . '/public'''$this->getParameter('favicons_directory'));
  113.         $form $this->createForm(CompanyDetailsType::class, $companyDetails);
  114.         $form->handleRequest($request);
  115.         if ($form->isSubmitted() && $form->isValid()) {
  116.             $faviconDev $form['faviconDev']->getData();
  117.             $faviconLive $form['faviconLive']->getData();
  118.             $qrCode $form['companyQrCode']->getData();
  119.             if ($faviconDev) {
  120.                 $originalFilename pathinfo($faviconDev->getClientOriginalName(), PATHINFO_FILENAME);
  121.                 $newFilename $companyDetails->getCompanyName() . '_dev.' $faviconDev->guessExtension();
  122.                 $faviconDev->move(
  123.                     $this->getParameter('favicons_directory'),
  124.                     $newFilename
  125.                 );
  126.                 $companyDetails->setFaviconDev($newFilename);
  127.             }
  128.             if ($faviconLive) {
  129.                 $originalFilenameLive pathinfo($faviconLive->getClientOriginalName(), PATHINFO_FILENAME);
  130.                 $newFilenameLive $companyDetails->getCompanyName() . '_live.' $faviconLive->guessExtension();
  131.                 $faviconLive->move(
  132.                     $this->getParameter('favicons_directory'),
  133.                     $newFilenameLive
  134.                 );
  135.                 $companyDetails->setFaviconLive($newFilenameLive);
  136.             }
  137.             if ($qrCode) {
  138.                 $originalFilenameQR pathinfo($qrCode->getClientOriginalName(), PATHINFO_FILENAME);
  139.                 $newFilenameQR $companyDetails->getCompanyName() . '_qr_code.' $qrCode->guessExtension();
  140.                 $qrCode->move(
  141.                     $this->getParameter('favicons_directory'),
  142.                     $newFilenameQR
  143.                 );
  144.                 $companyDetails->setCompanyQrCode($newFilenameQR);
  145.             }
  146.             $companyDetailsRepository->add($companyDetailstrue);
  147.             return $this->redirectToRoute('company_details_index', [], Response::HTTP_SEE_OTHER);
  148.         }
  149.         return $this->render('company_details/edit.html.twig', [
  150.             'favicons_directory' => $faviconsDirectory,
  151.             'company_details' => $companyDetails,
  152.             'form' => $form->createView(),
  153.         ]);
  154.     }
  155.     /**
  156.      * @Route("/delete/{id}", name="company_details_delete", methods={"POST"})
  157.      * @Security("is_granted('ROLE_ADMIN')")
  158.      */
  159.     public function delete(Request $requestCompanyDetails $companyDetailsCompanyDetailsRepository $companyDetailsRepository): Response
  160.     {
  161.         if ($this->isCsrfTokenValid('delete' $companyDetails->getId(), $request->request->get('_token'))) {
  162.             $companyDetailsRepository->remove($companyDetailstrue);
  163.         }
  164.         return $this->redirectToRoute('company_details_index', [], Response::HTTP_SEE_OTHER);
  165.     }
  166.     /**
  167.      * @Route("/office_address", name="office_address", methods={"GET"})
  168.      */
  169.     public function officeAddress(CompanyDetailsRepository $companyDetailsRepository): Response
  170.     {
  171.         return $this->render('home/officeAddress.html.twig');
  172.     }
  173.     /**
  174.      * @Route("/delete_favicon/{live_or_dev}/{id}", name="company_details_delete_favicon", methods={"POST", "GET"})
  175.      * @Security("is_granted('ROLE_ADMIN')")
  176.      */
  177.     public function deleteLiveDevFavicon(Request $requestint $idstring $live_or_devCompanyDetails $companyDetailsEntityManagerInterface $entityManager)
  178.     {
  179.         $referer $request->headers->get('referer');
  180.         if ($live_or_dev == 'live') {
  181.             $companyDetails->setFaviconLive(null);
  182.             $entityManager->flush();
  183.             $files glob($this->getParameter('favicons_directory') . "*live*");
  184.             foreach ($files as $file) {
  185.                 unlink($file);
  186.             }
  187.         }
  188.         if ($live_or_dev == 'dev') {
  189.             $companyDetails->setFaviconDev(null);
  190.             $entityManager->flush();
  191.             $files glob($this->getParameter('favicons_directory') . "*dev*");
  192.             foreach ($files as $file) {
  193.                 unlink($file);
  194.             }
  195.         }
  196.         $entityManager->flush();
  197.         return $this->redirect($referer);
  198.     }
  199.     /**
  200.      * @Route("/delete_qr_code/{id}", name="company_details_delete_qr_code", methods={"POST", "GET"})
  201.      * @Security("is_granted('ROLE_ADMIN')")
  202.      */
  203.     public function deleteQRCodeLiveFavicon(Request $requestint $idCompanyDetails $companyDetailsEntityManagerInterface $entityManager)
  204.     {
  205.         $referer $request->headers->get('referer');
  206.         $companyDetails->setCompanyQrCode(null);
  207.         $entityManager->flush();
  208.         $files glob($this->getParameter('favicons_directory') . "/*qr*");
  209.         foreach ($files as $file) {
  210.             unlink($file);
  211.         }
  212.         $entityManager->flush();
  213.         return $this->redirect($referer);
  214.     }
  215.     /**
  216.      * @Route("/export/database", name="export_database", methods={"POST", "GET"})
  217.      * @Security("is_granted('ROLE_ADMIN')")
  218.      */
  219.     public function exportDatabase(Request $requestEntityManagerInterface $entityManager\App\Services\CompanyDetailsService $companyDetails)
  220.     {
  221.         $sqlDatabase $companyDetails->getCompanyDetails()->getSqlDatabase() . '.sql';
  222.         $sqlPassword $companyDetails->getCompanyDetails()->getDatabasePassword();
  223.         $publicPath $this->getParameter('public');
  224.         $filePath $publicPath '/' $sqlDatabase;
  225.         if ($_ENV['APP_SERVER'] == "local") {
  226.             exec('mysqldump --user=root --password= --host=localhost ' escapeshellarg($sqlDatabase) . ' > ' escapeshellarg($filePath));
  227.         } else {
  228.             exec('mysqldump --user=stephen --password=' escapeshellarg($sqlPassword) . ' --host=localhost ' escapeshellarg($sqlDatabase) . ' > ' escapeshellarg($filePath));
  229.         }
  230.         if (file_exists($filePath)) {
  231.             return $this->file($filePath)->deleteFileAfterSend(true); // Symfony helper to download files
  232.         }
  233.         // If file doesn't exist, redirect back with an error message
  234.         $this->addFlash('error''Failed to export the database.');
  235.         $referer $request->headers->get('Referer');
  236.         return $this->redirect($referer ?? $this->generateUrl('app_home'));
  237.     }
  238.     /**
  239.      * @Route("/edit/update/location", name="update_company_details_location", methods={"POST"})
  240.      * @Security("is_granted('ROLE_ADMIN')")
  241.      */
  242.     public function updateLocation(CompanyDetailsRepository $companyDetailsRepositoryEntityManagerInterface $manager): Response
  243.     {
  244.         $id $_POST['id'];
  245.         $latitude $_POST['latitude'];
  246.         $longitude $_POST['longitude'];
  247.         $company_details $companyDetailsRepository->find($id);
  248.         $company_details->setCompanyAddressLongitude($longitude)
  249.             ->setCompanyAddressLatitude($latitude);
  250.         $manager->flush();
  251.         return new Response(null);
  252.     }
  253.     /**
  254.      * @Route("/company_details_change_field_status/{input}", name="company_details_change_field_status", methods={"GET", "POST"})
  255.      */
  256.     public function changeStatus(Request $requeststring $inputCompanyDetailsRepository $companyDetailsRepositoryEntityManagerInterface $manager): Response
  257.     {
  258.         $referer $request->headers->get('Referer');
  259.         $company_details $companyDetailsRepository->find('1');
  260.         if ($input === 'testingMode') {
  261.             // Special case for 'testingMode' field (string toggle)
  262.             $currentMode $company_details->getTestingMode();
  263.             $newMode = ($currentMode === 'Testing') ? 'Live' 'Testing';
  264.             $company_details->setTestingMode($newMode);
  265.         } else {
  266.             // Default behavior for boolean fields
  267.             $fieldname $input;
  268.             $getter 'is' ucfirst($fieldname);
  269.             $setter 'set' ucfirst($fieldname);
  270.             if (method_exists($company_details$getter) && method_exists($company_details$setter)) {
  271.                 $newValue = !$company_details->$getter();
  272.                 $company_details->$setter($newValue);
  273.             }
  274.         }
  275.         $manager->persist($company_details);
  276.         $manager->flush();
  277.         return $this->redirect($referer);
  278.     }
  279.     /**
  280.      * @Route ("/export", name="company_details_export" )
  281.      */
  282.     public function companyDetailsExport(CompanyDetailsRepository $companyDetailsRepository)
  283.     {
  284.         $data = [];
  285.         $exported_date = new \DateTime('now');
  286.         $exported_date_formatted $exported_date->format('d-M-Y');
  287.         $fileName 'company_details_export_' $exported_date_formatted '.csv';
  288.         $company_details_list $companyDetailsRepository->findAll();
  289.         $count 0;
  290.         foreach ($company_details_list as $company_details) {
  291.             $data[] = [
  292.                 'CompanyDetails',
  293.                 $company_details->getCompanyName(),
  294.                 $company_details->getCompanyWebsite(),
  295.                 $company_details->getContactFirstName(),
  296.                 $company_details->getContactLastName(),
  297.                 $company_details->getCompanyTel(),
  298.                 $company_details->getCompanyMobile(),
  299.                 '',
  300.                 $company_details->getFaviconLive(),
  301.                 $company_details->getFaviconDev(),
  302.                 $company_details->getCompanyQrCode(),
  303.                 $company_details->getCompanyEmail(),
  304.                 $company_details->getCompanyEmailPassword(),
  305.                 $company_details->getCompanyEmailImportDirectory(),
  306.                 $company_details->getCompanyEmailImportProcessedDirectory(),
  307.                 $company_details->getSqlDatabase(),
  308.                 $company_details->getDatabasePassword(),
  309.                 $company_details->getCompanyAddressStreet(),
  310.                 $company_details->getCompanyAddressTown(),
  311.                 $company_details->getCompanyAddressCity(),
  312.                 $company_details->getCompanyAddressPostalCode(),
  313.                 $company_details->getCompanyAddressCountry(),
  314.                 $company_details->getCompanyAddressMapLink(),
  315.                 $company_details->getCompanyAddressLongitude(),
  316.                 $company_details->getCompanyAddressLatitude(),
  317.                 $company_details->getCompanyAddressInstructions(),
  318.                 $company_details->getWeatherLocation(),
  319.                 $company_details->getCompanyTimeZone(),
  320.                 $company_details->getCurrency(),
  321.                 $company_details->getFacebook(),
  322.                 $company_details->getTwitter(),
  323.                 $company_details->getInstagram(),
  324.                 $company_details->getLinkedIn(),
  325.                 $company_details->isHomePagePhotosOnly(),
  326.                 $company_details->isIncludeContactFormHomePage(),
  327.                 $company_details->isIncludeQRCodeHomePage(),
  328.                 $company_details->isMultiLingual(),
  329.                 $company_details->getTitleProducts(),
  330.                 $company_details->getTitleSubProducts(),
  331.                 $company_details->getTitleUsefulLinks(),
  332.                 $company_details->isHeaderDisplayProducts(),
  333.                 $company_details->isHeaderDisplaySubProducts(),
  334.                 $company_details->isHeaderDisplayPhotos(),
  335.                 $company_details->isHeaderDisplayLogin(),
  336.                 $company_details->isHeaderDisplayContactDetails(),
  337.                 $company_details->isHeaderDisplayTelNumbers(),
  338.                 $company_details->isHeaderDisplayAddress(),
  339.                 $company_details->isHeaderDisplayTandCs(),
  340.                 $company_details->isHeaderDisplayBusinessContacts(),
  341.                 $company_details->isHeaderDisplayFacebookPages(),
  342.                 $company_details->getFacebookReviewsHistoryShowMonths(),
  343.                 $company_details->isHeaderDisplayCompetitors(),
  344.                 $company_details->isHeaderDisplayWeather(),
  345.                 $company_details->isFooterDisplayContactDetails(),
  346.                 $company_details->isFooterDisplayAddress(),
  347.                 $company_details->isFooterDisplayTelNumbers(),
  348.                 $company_details->isFooterDisplaySocialMedia(),
  349.                 $company_details->isFooterDisplayProducts(),
  350.                 $company_details->isFooterDisplaySubProducts(),
  351.                 $company_details->isEnableUserRegistration(),
  352.                 $company_details->isWebsiteContactsEmailAlert(),
  353.                 $company_details->getWebsiteContactsAutoReply(),
  354.                 $company_details->getRegistrationEmail(),
  355.                 $company_details->getDefaultUserPassword(),
  356.                 $company_details->getContactFromResponse(),
  357.                 $company_details->getContactFromResponseDuplicateVerified(),
  358.                 $company_details->getContactFromResponseDuplicateUnverified(),
  359.                 $company_details->isUserIncludeHomeAddress(),
  360.                 $company_details->isUserIncludeBusinessAddress(),
  361.                 $company_details->isUserIncludePersonalDetails(),
  362.                 $company_details->isUserIncludeJobDetails(),
  363.             ];
  364.         }
  365.         $company_details_list $companyDetailsRepository->findAll();
  366.         $concatenatedNotes "Exported on: " $exported_date_formatted;
  367.         $spreadsheet = new Spreadsheet();
  368.         $sheet $spreadsheet->getActiveSheet();
  369.         $sheet->setTitle('Company Details');
  370.         $sheet->getCell('A1')->setValue('Entity');
  371.         $sheet->getCell('B1')->setValue('CompanyName');
  372.         $sheet->getCell('C1')->setValue('CompanyWebsite');
  373.         $sheet->getCell('D1')->setValue('ContactFirstName');
  374.         $sheet->getCell('E1')->setValue('ContactLastName');
  375.         $sheet->getCell('F1')->setValue('CompanyTel');
  376.         $sheet->getCell('G1')->setValue('CompanyMobile');
  377.         $sheet->getCell('I1')->setValue('FaviconLive');
  378.         $sheet->getCell('J1')->setValue('FaviconDev');
  379.         $sheet->getCell('K1')->setValue('CompanyQrCode');
  380.         $sheet->getCell('L1')->setValue('CompanyEmail');
  381.         $sheet->getCell('M1')->setValue('CompanyEmailPassword');
  382.         $sheet->getCell('N1')->setValue('CompanyEmailImportDirectory');
  383.         $sheet->getCell('O1')->setValue('CompanyEmailImportProcessedDirectory');
  384.         $sheet->getCell('P1')->setValue('SqlDatabase');
  385.         $sheet->getCell('Q1')->setValue('DatabasePassword');
  386.         $sheet->getCell('R1')->setValue('CompanyAddressStreet');
  387.         $sheet->getCell('S1')->setValue('CompanyAddressTown');
  388.         $sheet->getCell('T1')->setValue('CompanyAddressCity');
  389.         $sheet->getCell('U1')->setValue('CompanyAddressPostalCode');
  390.         $sheet->getCell('V1')->setValue('CompanyAddressCountry');
  391.         $sheet->getCell('W1')->setValue('CompanyAddressMapLink');
  392.         $sheet->getCell('X1')->setValue('CompanyAddressLongitude');
  393.         $sheet->getCell('Y1')->setValue('CompanyAddressLatitude');
  394.         $sheet->getCell('Z1')->setValue('CompanyAddressInstructions');
  395.         $sheet->getCell('AA1')->setValue('WeatherLocation');
  396.         $sheet->getCell('AB1')->setValue('CompanyTimeZone');
  397.         $sheet->getCell('AC1')->setValue('Currency');
  398.         $sheet->getCell('AD1')->setValue('Facebook');
  399.         $sheet->getCell('AE1')->setValue('Twitter');
  400.         $sheet->getCell('AF1')->setValue('Instagram');
  401.         $sheet->getCell('AG1')->setValue('LinkedIn');
  402.         $sheet->getCell('AH1')->setValue('HomePagePhotosOnly');
  403.         $sheet->getCell('AI1')->setValue('IncludeContactFormHomePage');
  404.         $sheet->getCell('AJ1')->setValue('IncludeQRCodeHomePage');
  405.         $sheet->getCell('AK1')->setValue('MultiLingual');
  406.         $sheet->getCell('AL1')->setValue('TitleProducts');
  407.         $sheet->getCell('AM1')->setValue('TitleSubProducts');
  408.         $sheet->getCell('AN1')->setValue('TitleUsefulLinks');
  409.         $sheet->getCell('AO1')->setValue('HeaderDisplayProducts');
  410.         $sheet->getCell('AP1')->setValue('HeaderDisplaySubProducts');
  411.         $sheet->getCell('AQ1')->setValue('HeaderDisplayPhotos');
  412.         $sheet->getCell('AR1')->setValue('HeaderDisplayLogin');
  413.         $sheet->getCell('AS1')->setValue('HeaderDisplayContactDetails');
  414.         $sheet->getCell('AT1')->setValue('HeaderDisplayTelNumbers');
  415.         $sheet->getCell('AU1')->setValue('HeaderDisplayAddress');
  416.         $sheet->getCell('AV1')->setValue('HeaderDisplayTandCs');
  417.         $sheet->getCell('AW1')->setValue('HeaderDisplayBusinessContacts');
  418.         $sheet->getCell('AX1')->setValue('HeaderDisplayFacebookPages');
  419.         $sheet->getCell('AY1')->setValue('FacebookReviewsHistoryShowMonths');
  420.         $sheet->getCell('AZ1')->setValue('HeaderDisplayCompetitors');
  421.         $sheet->getCell('BA1')->setValue('HeaderDisplayWeather');
  422.         $sheet->getCell('BB1')->setValue('FooterDisplayContactDetails');
  423.         $sheet->getCell('BC1')->setValue('FooterDisplayAddress');
  424.         $sheet->getCell('BD1')->setValue('FooterDisplayTelNumbers');
  425.         $sheet->getCell('BE1')->setValue('FooterDisplaySocialMedia');
  426.         $sheet->getCell('BF1')->setValue('FooterDisplayProducts');
  427.         $sheet->getCell('BG1')->setValue('FooterDisplaySubProducts');
  428.         $sheet->getCell('BH1')->setValue('EnableUserRegistration');
  429.         $sheet->getCell('BI1')->setValue('WebsiteContactsEmailAlert');
  430.         $sheet->getCell('BJ1')->setValue('WebsiteContactsAutoReply');
  431.         $sheet->getCell('BK1')->setValue('RegistrationEmail');
  432.         $sheet->getCell('BL1')->setValue('getDefaultUserPassword');
  433.         $sheet->getCell('BM1')->setValue('getContactFromResponse');
  434.         $sheet->getCell('BN1')->setValue('getContactFromResponseDuplicateVerified');
  435.         $sheet->getCell('BO1')->setValue('getContactFromResponseDuplicateUnverified');
  436.         $sheet->getCell('BP1')->setValue('userIncludeHomeAddress');
  437.         $sheet->getCell('BQ1')->setValue('userIncludeBusinessAddress');
  438.         $sheet->getCell('BR1')->setValue('userIncludePersonalDetails');
  439.         $sheet->getCell('BS1')->setValue('userIncludeJobDetails');
  440.         $sheet->fromArray($datanull'A2'true);
  441.         $total_rows $sheet->getHighestRow();
  442.         for ($i 2$i <= $total_rows$i++) {
  443.             $cell "L" $i;
  444.             $sheet->getCell($cell)->getHyperlink()->setUrl("https://google.com");
  445.         }
  446.         $writer = new Csv($spreadsheet);
  447.         $response = new StreamedResponse(function () use ($writer) {
  448.             $writer->save('php://output');
  449.         });
  450.         $response->headers->set('Content-Type''application/vnd.ms-excel');
  451.         $response->headers->set('Content-Disposition'sprintf('attachment;filename="%s"'$fileName));
  452.         $response->headers->set('Cache-Control''max-age=0');
  453.         return $response;
  454.     }
  455.     /**
  456.      * @Route ("/import", name="company_details_import" )
  457.      */
  458.     public function companyDetailsImport(Request $requestSluggerInterface $sluggerCompanyDetailsRepository $companyDetailsRepositoryImportCompanyDetailsService $importCompanyDetailsService): Response
  459.     {
  460.         $form $this->createForm(ImportType::class);
  461.         $form->handleRequest($request);
  462.         if ($form->isSubmitted() && $form->isValid()) {
  463.             $importFile $form->get('File')->getData();
  464.             if ($importFile) {
  465.                 $originalFilename pathinfo($importFile->getClientOriginalName(), PATHINFO_FILENAME);
  466.                 $safeFilename $slugger->slug($originalFilename);
  467.                 $newFilename $safeFilename '.' 'csv';
  468.                 try {
  469.                     $importFile->move(
  470.                         $this->getParameter('company_details_import_directory'),
  471.                         $newFilename
  472.                     );
  473.                 } catch (FileException $e) {
  474.                     die('Import failed');
  475.                 }
  476.                 $importCompanyDetailsService->importCompanyDetails($newFilename);
  477.                 return $this->redirectToRoute('company_details_index');
  478.             }
  479.         }
  480.         return $this->render('home/import.html.twig', [
  481.             'form' => $form->createView(),
  482.             'heading' => 'Company Details',
  483.         ]);
  484.     }
  485. }