src/Controller/CompanyDetailsController.php line 160
<?phpnamespace App\Controller;use App\Entity\CompanyDetails;use App\Form\CompanyDetailsType;use App\Form\ImportType;use App\Repository\CompanyDetailsRepository;use App\Services\ImportCompanyDetailsService;use Doctrine\ORM\EntityManagerInterface;use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Csv;use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\File\Exception\FileException;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\StreamedResponse;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\String\Slugger\SluggerInterface;/*** @Route("/company_details")*/class CompanyDetailsController extends AbstractController{/*** @Route("/index", name="company_details_index", methods={"GET"})* @Security("is_granted('ROLE_ADMIN')")*/public function index(CompanyDetailsRepository $companyDetailsRepository): Response{return $this->render('company_details/index.html.twig', ['company_details' => $companyDetailsRepository->findAll()]);}/*** @Route("/new", name="company_details_new", methods={"GET", "POST"})* @Security("is_granted('ROLE_ADMIN')")*/public function new(Request $request, CompanyDetailsRepository $companyDetailsRepository): Response{$companyDetails = new CompanyDetails();$form = $this->createForm(CompanyDetailsType::class, $companyDetails);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$faviconDev = $form['faviconDev']->getData();$faviconLive = $form['faviconLive']->getData();$qrCode = $form['companyQrCode']->getData();if ($faviconDev) {$originalFilename = pathinfo($faviconDev->getClientOriginalName(), PATHINFO_FILENAME);$newFilename = $companyDetails->getCompanyName() . '_dev.' . $faviconDev->guessExtension();$faviconDev->move($this->getParameter('favicons_directory'),$newFilename);$companyDetails->setFaviconDev($newFilename);}if ($faviconLive) {$originalFilenameLive = pathinfo($faviconLive->getClientOriginalName(), PATHINFO_FILENAME);$newFilenameLive = $companyDetails->getCompanyName() . '_live.' . $faviconLive->guessExtension();$faviconLive->move($this->getParameter('favicons_directory'),$newFilenameLive);$companyDetails->setFaviconLive($newFilenameLive);}if ($qrCode) {$originalFilenameQR = pathinfo($qrCode->getClientOriginalName(), PATHINFO_FILENAME);$newFilenameQR = $companyDetails->getCompanyName() . '_qr_code.' . $qrCode->guessExtension();$qrCode->move($this->getParameter('favicons_directory'),$newFilenameQR);$companyDetails->setCompanyQrCode($newFilenameQR);}$companyDetailsRepository->add($companyDetails, true);return $this->redirectToRoute('company_details_index', [], Response::HTTP_SEE_OTHER);}return $this->render('company_details/new.html.twig', ['company_details' => $companyDetails,'form' => $form->createView(),]);}/*** @Route("/show/{id}", name="company_details_show", methods={"GET"})* @Security("is_granted('ROLE_ADMIN')")*/public function show(CompanyDetails $companyDetails): Response{$faviconsDirectory = str_replace($this->getParameter('kernel.project_dir') . '/public', '', $this->getParameter('favicons_directory'));return $this->render('company_details/show.html.twig', ['company_detail' => $companyDetails,'hide_for_qr_code' => '0','favicons_directory' => $faviconsDirectory,]);}/*** @Route("/show_qr_build/{id}", name="company_details_show_qr_build", methods={"GET"})**/public function showQRBuild(CompanyDetails $companyDetails): Response{return $this->render('company_details/show_qr_build.html.twig', ['company_detail' => $companyDetails,'hide_for_qr_code' => '1']);}/*** @Route("/edit/{id}", name="company_details_edit", methods={"GET", "POST"})* @Security("is_granted('ROLE_ADMIN')")*/public function edit(Request $request, CompanyDetails $companyDetails, CompanyDetailsRepository $companyDetailsRepository): Response{$faviconsDirectory = str_replace($this->getParameter('kernel.project_dir') . '/public', '', $this->getParameter('favicons_directory'));$form = $this->createForm(CompanyDetailsType::class, $companyDetails);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$faviconDev = $form['faviconDev']->getData();$faviconLive = $form['faviconLive']->getData();$qrCode = $form['companyQrCode']->getData();if ($faviconDev) {$originalFilename = pathinfo($faviconDev->getClientOriginalName(), PATHINFO_FILENAME);$newFilename = $companyDetails->getCompanyName() . '_dev.' . $faviconDev->guessExtension();$faviconDev->move($this->getParameter('favicons_directory'),$newFilename);$companyDetails->setFaviconDev($newFilename);}if ($faviconLive) {$originalFilenameLive = pathinfo($faviconLive->getClientOriginalName(), PATHINFO_FILENAME);$newFilenameLive = $companyDetails->getCompanyName() . '_live.' . $faviconLive->guessExtension();$faviconLive->move($this->getParameter('favicons_directory'),$newFilenameLive);$companyDetails->setFaviconLive($newFilenameLive);}if ($qrCode) {$originalFilenameQR = pathinfo($qrCode->getClientOriginalName(), PATHINFO_FILENAME);$newFilenameQR = $companyDetails->getCompanyName() . '_qr_code.' . $qrCode->guessExtension();$qrCode->move($this->getParameter('favicons_directory'),$newFilenameQR);$companyDetails->setCompanyQrCode($newFilenameQR);}$companyDetailsRepository->add($companyDetails, true);return $this->redirectToRoute('company_details_index', [], Response::HTTP_SEE_OTHER);}return $this->render('company_details/edit.html.twig', ['favicons_directory' => $faviconsDirectory,'company_details' => $companyDetails,'form' => $form->createView(),]);}/*** @Route("/delete/{id}", name="company_details_delete", methods={"POST"})* @Security("is_granted('ROLE_ADMIN')")*/public function delete(Request $request, CompanyDetails $companyDetails, CompanyDetailsRepository $companyDetailsRepository): Response{if ($this->isCsrfTokenValid('delete' . $companyDetails->getId(), $request->request->get('_token'))) {$companyDetailsRepository->remove($companyDetails, true);}return $this->redirectToRoute('company_details_index', [], Response::HTTP_SEE_OTHER);}/*** @Route("/office_address", name="office_address", methods={"GET"})*/public function officeAddress(CompanyDetailsRepository $companyDetailsRepository): Response{return $this->render('home/officeAddress.html.twig');}/*** @Route("/delete_favicon/{live_or_dev}/{id}", name="company_details_delete_favicon", methods={"POST", "GET"})* @Security("is_granted('ROLE_ADMIN')")*/public function deleteLiveDevFavicon(Request $request, int $id, string $live_or_dev, CompanyDetails $companyDetails, EntityManagerInterface $entityManager){$referer = $request->headers->get('referer');if ($live_or_dev == 'live') {$companyDetails->setFaviconLive(null);$entityManager->flush();$files = glob($this->getParameter('favicons_directory') . "*live*");foreach ($files as $file) {unlink($file);}}if ($live_or_dev == 'dev') {$companyDetails->setFaviconDev(null);$entityManager->flush();$files = glob($this->getParameter('favicons_directory') . "*dev*");foreach ($files as $file) {unlink($file);}}$entityManager->flush();return $this->redirect($referer);}/*** @Route("/delete_qr_code/{id}", name="company_details_delete_qr_code", methods={"POST", "GET"})* @Security("is_granted('ROLE_ADMIN')")*/public function deleteQRCodeLiveFavicon(Request $request, int $id, CompanyDetails $companyDetails, EntityManagerInterface $entityManager){$referer = $request->headers->get('referer');$companyDetails->setCompanyQrCode(null);$entityManager->flush();$files = glob($this->getParameter('favicons_directory') . "/*qr*");foreach ($files as $file) {unlink($file);}$entityManager->flush();return $this->redirect($referer);}/*** @Route("/export/database", name="export_database", methods={"POST", "GET"})* @Security("is_granted('ROLE_ADMIN')")*/public function exportDatabase(Request $request, EntityManagerInterface $entityManager, \App\Services\CompanyDetailsService $companyDetails){$sqlDatabase = $companyDetails->getCompanyDetails()->getSqlDatabase() . '.sql';$sqlPassword = $companyDetails->getCompanyDetails()->getDatabasePassword();$publicPath = $this->getParameter('public');$filePath = $publicPath . '/' . $sqlDatabase;if ($_ENV['APP_SERVER'] == "local") {exec('mysqldump --user=root --password= --host=localhost ' . escapeshellarg($sqlDatabase) . ' > ' . escapeshellarg($filePath));} else {exec('mysqldump --user=stephen --password=' . escapeshellarg($sqlPassword) . ' --host=localhost ' . escapeshellarg($sqlDatabase) . ' > ' . escapeshellarg($filePath));}if (file_exists($filePath)) {return $this->file($filePath)->deleteFileAfterSend(true); // Symfony helper to download files}// If file doesn't exist, redirect back with an error message$this->addFlash('error', 'Failed to export the database.');$referer = $request->headers->get('Referer');return $this->redirect($referer ?? $this->generateUrl('app_home'));}/*** @Route("/edit/update/location", name="update_company_details_location", methods={"POST"})* @Security("is_granted('ROLE_ADMIN')")*/public function updateLocation(CompanyDetailsRepository $companyDetailsRepository, EntityManagerInterface $manager): Response{$id = $_POST['id'];$latitude = $_POST['latitude'];$longitude = $_POST['longitude'];$company_details = $companyDetailsRepository->find($id);$company_details->setCompanyAddressLongitude($longitude)->setCompanyAddressLatitude($latitude);$manager->flush();return new Response(null);}/*** @Route("/company_details_change_field_status/{input}", name="company_details_change_field_status", methods={"GET", "POST"})*/public function changeStatus(Request $request, string $input, CompanyDetailsRepository $companyDetailsRepository, EntityManagerInterface $manager): Response{$referer = $request->headers->get('Referer');$company_details = $companyDetailsRepository->find('1');if ($input === 'testingMode') {// Special case for 'testingMode' field (string toggle)$currentMode = $company_details->getTestingMode();$newMode = ($currentMode === 'Testing') ? 'Live' : 'Testing';$company_details->setTestingMode($newMode);} else {// Default behavior for boolean fields$fieldname = $input;$getter = 'is' . ucfirst($fieldname);$setter = 'set' . ucfirst($fieldname);if (method_exists($company_details, $getter) && method_exists($company_details, $setter)) {$newValue = !$company_details->$getter();$company_details->$setter($newValue);}}$manager->persist($company_details);$manager->flush();return $this->redirect($referer);}/*** @Route ("/export", name="company_details_export" )*/public function companyDetailsExport(CompanyDetailsRepository $companyDetailsRepository){$data = [];$exported_date = new \DateTime('now');$exported_date_formatted = $exported_date->format('d-M-Y');$fileName = 'company_details_export_' . $exported_date_formatted . '.csv';$company_details_list = $companyDetailsRepository->findAll();$count = 0;foreach ($company_details_list as $company_details) {$data[] = ['CompanyDetails',$company_details->getCompanyName(),$company_details->getCompanyWebsite(),$company_details->getContactFirstName(),$company_details->getContactLastName(),$company_details->getCompanyTel(),$company_details->getCompanyMobile(),'',$company_details->getFaviconLive(),$company_details->getFaviconDev(),$company_details->getCompanyQrCode(),$company_details->getCompanyEmail(),$company_details->getCompanyEmailPassword(),$company_details->getCompanyEmailImportDirectory(),$company_details->getCompanyEmailImportProcessedDirectory(),$company_details->getSqlDatabase(),$company_details->getDatabasePassword(),$company_details->getCompanyAddressStreet(),$company_details->getCompanyAddressTown(),$company_details->getCompanyAddressCity(),$company_details->getCompanyAddressPostalCode(),$company_details->getCompanyAddressCountry(),$company_details->getCompanyAddressMapLink(),$company_details->getCompanyAddressLongitude(),$company_details->getCompanyAddressLatitude(),$company_details->getCompanyAddressInstructions(),$company_details->getWeatherLocation(),$company_details->getCompanyTimeZone(),$company_details->getCurrency(),$company_details->getFacebook(),$company_details->getTwitter(),$company_details->getInstagram(),$company_details->getLinkedIn(),$company_details->isHomePagePhotosOnly(),$company_details->isIncludeContactFormHomePage(),$company_details->isIncludeQRCodeHomePage(),$company_details->isMultiLingual(),$company_details->getTitleProducts(),$company_details->getTitleSubProducts(),$company_details->getTitleUsefulLinks(),$company_details->isHeaderDisplayProducts(),$company_details->isHeaderDisplaySubProducts(),$company_details->isHeaderDisplayPhotos(),$company_details->isHeaderDisplayLogin(),$company_details->isHeaderDisplayContactDetails(),$company_details->isHeaderDisplayTelNumbers(),$company_details->isHeaderDisplayAddress(),$company_details->isHeaderDisplayTandCs(),$company_details->isHeaderDisplayBusinessContacts(),$company_details->isHeaderDisplayFacebookPages(),$company_details->getFacebookReviewsHistoryShowMonths(),$company_details->isHeaderDisplayCompetitors(),$company_details->isHeaderDisplayWeather(),$company_details->isFooterDisplayContactDetails(),$company_details->isFooterDisplayAddress(),$company_details->isFooterDisplayTelNumbers(),$company_details->isFooterDisplaySocialMedia(),$company_details->isFooterDisplayProducts(),$company_details->isFooterDisplaySubProducts(),$company_details->isEnableUserRegistration(),$company_details->isWebsiteContactsEmailAlert(),$company_details->getWebsiteContactsAutoReply(),$company_details->getRegistrationEmail(),$company_details->getDefaultUserPassword(),$company_details->getContactFromResponse(),$company_details->getContactFromResponseDuplicateVerified(),$company_details->getContactFromResponseDuplicateUnverified(),$company_details->isUserIncludeHomeAddress(),$company_details->isUserIncludeBusinessAddress(),$company_details->isUserIncludePersonalDetails(),$company_details->isUserIncludeJobDetails(),];}$company_details_list = $companyDetailsRepository->findAll();$concatenatedNotes = "Exported on: " . $exported_date_formatted;$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();$sheet->setTitle('Company Details');$sheet->getCell('A1')->setValue('Entity');$sheet->getCell('B1')->setValue('CompanyName');$sheet->getCell('C1')->setValue('CompanyWebsite');$sheet->getCell('D1')->setValue('ContactFirstName');$sheet->getCell('E1')->setValue('ContactLastName');$sheet->getCell('F1')->setValue('CompanyTel');$sheet->getCell('G1')->setValue('CompanyMobile');$sheet->getCell('I1')->setValue('FaviconLive');$sheet->getCell('J1')->setValue('FaviconDev');$sheet->getCell('K1')->setValue('CompanyQrCode');$sheet->getCell('L1')->setValue('CompanyEmail');$sheet->getCell('M1')->setValue('CompanyEmailPassword');$sheet->getCell('N1')->setValue('CompanyEmailImportDirectory');$sheet->getCell('O1')->setValue('CompanyEmailImportProcessedDirectory');$sheet->getCell('P1')->setValue('SqlDatabase');$sheet->getCell('Q1')->setValue('DatabasePassword');$sheet->getCell('R1')->setValue('CompanyAddressStreet');$sheet->getCell('S1')->setValue('CompanyAddressTown');$sheet->getCell('T1')->setValue('CompanyAddressCity');$sheet->getCell('U1')->setValue('CompanyAddressPostalCode');$sheet->getCell('V1')->setValue('CompanyAddressCountry');$sheet->getCell('W1')->setValue('CompanyAddressMapLink');$sheet->getCell('X1')->setValue('CompanyAddressLongitude');$sheet->getCell('Y1')->setValue('CompanyAddressLatitude');$sheet->getCell('Z1')->setValue('CompanyAddressInstructions');$sheet->getCell('AA1')->setValue('WeatherLocation');$sheet->getCell('AB1')->setValue('CompanyTimeZone');$sheet->getCell('AC1')->setValue('Currency');$sheet->getCell('AD1')->setValue('Facebook');$sheet->getCell('AE1')->setValue('Twitter');$sheet->getCell('AF1')->setValue('Instagram');$sheet->getCell('AG1')->setValue('LinkedIn');$sheet->getCell('AH1')->setValue('HomePagePhotosOnly');$sheet->getCell('AI1')->setValue('IncludeContactFormHomePage');$sheet->getCell('AJ1')->setValue('IncludeQRCodeHomePage');$sheet->getCell('AK1')->setValue('MultiLingual');$sheet->getCell('AL1')->setValue('TitleProducts');$sheet->getCell('AM1')->setValue('TitleSubProducts');$sheet->getCell('AN1')->setValue('TitleUsefulLinks');$sheet->getCell('AO1')->setValue('HeaderDisplayProducts');$sheet->getCell('AP1')->setValue('HeaderDisplaySubProducts');$sheet->getCell('AQ1')->setValue('HeaderDisplayPhotos');$sheet->getCell('AR1')->setValue('HeaderDisplayLogin');$sheet->getCell('AS1')->setValue('HeaderDisplayContactDetails');$sheet->getCell('AT1')->setValue('HeaderDisplayTelNumbers');$sheet->getCell('AU1')->setValue('HeaderDisplayAddress');$sheet->getCell('AV1')->setValue('HeaderDisplayTandCs');$sheet->getCell('AW1')->setValue('HeaderDisplayBusinessContacts');$sheet->getCell('AX1')->setValue('HeaderDisplayFacebookPages');$sheet->getCell('AY1')->setValue('FacebookReviewsHistoryShowMonths');$sheet->getCell('AZ1')->setValue('HeaderDisplayCompetitors');$sheet->getCell('BA1')->setValue('HeaderDisplayWeather');$sheet->getCell('BB1')->setValue('FooterDisplayContactDetails');$sheet->getCell('BC1')->setValue('FooterDisplayAddress');$sheet->getCell('BD1')->setValue('FooterDisplayTelNumbers');$sheet->getCell('BE1')->setValue('FooterDisplaySocialMedia');$sheet->getCell('BF1')->setValue('FooterDisplayProducts');$sheet->getCell('BG1')->setValue('FooterDisplaySubProducts');$sheet->getCell('BH1')->setValue('EnableUserRegistration');$sheet->getCell('BI1')->setValue('WebsiteContactsEmailAlert');$sheet->getCell('BJ1')->setValue('WebsiteContactsAutoReply');$sheet->getCell('BK1')->setValue('RegistrationEmail');$sheet->getCell('BL1')->setValue('getDefaultUserPassword');$sheet->getCell('BM1')->setValue('getContactFromResponse');$sheet->getCell('BN1')->setValue('getContactFromResponseDuplicateVerified');$sheet->getCell('BO1')->setValue('getContactFromResponseDuplicateUnverified');$sheet->getCell('BP1')->setValue('userIncludeHomeAddress');$sheet->getCell('BQ1')->setValue('userIncludeBusinessAddress');$sheet->getCell('BR1')->setValue('userIncludePersonalDetails');$sheet->getCell('BS1')->setValue('userIncludeJobDetails');$sheet->fromArray($data, null, 'A2', true);$total_rows = $sheet->getHighestRow();for ($i = 2; $i <= $total_rows; $i++) {$cell = "L" . $i;$sheet->getCell($cell)->getHyperlink()->setUrl("https://google.com");}$writer = new Csv($spreadsheet);$response = new StreamedResponse(function () use ($writer) {$writer->save('php://output');});$response->headers->set('Content-Type', 'application/vnd.ms-excel');$response->headers->set('Content-Disposition', sprintf('attachment;filename="%s"', $fileName));$response->headers->set('Cache-Control', 'max-age=0');return $response;}/*** @Route ("/import", name="company_details_import" )*/public function companyDetailsImport(Request $request, SluggerInterface $slugger, CompanyDetailsRepository $companyDetailsRepository, ImportCompanyDetailsService $importCompanyDetailsService): Response{$form = $this->createForm(ImportType::class);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$importFile = $form->get('File')->getData();if ($importFile) {$originalFilename = pathinfo($importFile->getClientOriginalName(), PATHINFO_FILENAME);$safeFilename = $slugger->slug($originalFilename);$newFilename = $safeFilename . '.' . 'csv';try {$importFile->move($this->getParameter('company_details_import_directory'),$newFilename);} catch (FileException $e) {die('Import failed');}$importCompanyDetailsService->importCompanyDetails($newFilename);return $this->redirectToRoute('company_details_index');}}return $this->render('home/import.html.twig', ['form' => $form->createView(),'heading' => 'Company Details',]);}}