src/Controller/ExportController.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\SiteBannedIps;
  4. use App\Form\BannedIpsForm;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use App\Form\Filters\BannedIpFilter;
  11. use App\Form\Filters\ExportFilter;
  12. use App\Repository\ExportFilesRepository;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. use App\Service\ServiceStorage;
  15. use App\Service\ExportFiles;
  16. use League\Csv\Writer;
  17. use League\Csv\Reader;
  18. #[Route('/task/export')]
  19. class ExportController extends AbstractController
  20. {
  21.     #[Route('/'defaults: ['page' => '1'], methods: ['GET'], name'export_index')]
  22.     #[Route('/page/{page<[1-9]\d*>}'methods: ['GET'], name'export_index_paginated')]
  23.     #[Cache(smaxage10)]
  24.     public function index(Request $request,int $page,EntityManagerInterface $entityManager,ExportFilesRepository $exportFilesRepository): Response
  25.     {
  26.         $params $request->query->all();
  27.         $filter = [];
  28.         $filterForm $this->createForm(ExportFilter::class);
  29.         if(isset($params['start_date'])) {
  30.             $filterForm['start_date']->setData($params['start_date']);
  31.             $filter['start_date'] = $params['start_date'];
  32.         }
  33.         if(isset($params['end_date'])) {
  34.             $filterForm['end_date']->setData($params['end_date']);
  35.             $filter['end_date'] = $params['end_date'];
  36.         }
  37.         if(isset($params['export_type'])){
  38.             $filterForm['export_type']->setData($params['export_type']);
  39.             $filter['export_type'] = $params['export_type'];
  40.         }
  41.         $data $exportFilesRepository->adminPaginatorFetchAll($page$filter);
  42.         return $this->render('export/index.html.twig', [
  43.             'paginator' => $data,
  44.             'filter' => $filter,
  45.             'form' => $filterForm->createView(),
  46.         ]);
  47.     }
  48.     #[Route('/submit'name'export_submit'methods: ['GET''POST'])]
  49.     public function submit(Request $request,EntityManagerInterface $entityManagerUrlGeneratorInterface $urlGeneratorExportFiles $exportfilesServiceServiceStorage $serviceStorage): Response
  50.     {
  51.         $data = array();
  52.         $params $request->query->all();
  53.         if ($request->isMethod('post')) {
  54.             //echo 'hi';exit;
  55.             $params $request->request->all();
  56.             $decodeData json_decode($params['form_value']);
  57.             //print_r($decodeData);exit;
  58.             $outputArray = [];
  59.             foreach ($decodeData as $stdClassObject) {
  60.                 $stdClassArray = (array)$stdClassObject;
  61.                 $outputArray array_merge($outputArray$stdClassArray);
  62.             }
  63.             $filter = array();
  64.             if($outputArray){
  65.                 foreach($outputArray as $key => $output){
  66.                     if(!empty($output) && $output !== 'undefined'){
  67.                         if($key != 'title' && $key != 'type') {
  68.                             $filter[$key] = $output;
  69.                         }
  70.                     }
  71.                 }
  72.             }
  73.             $title = isset($outputArray['title']) ? $outputArray['title'].' - ' 'File - ';
  74.             if(isset($filter['start_at']) && isset($filter['end_at'])){
  75.                 $title .= date('d/m/y',strtotime($filter['start_at'])) .' To '.date('d/m/y',strtotime($filter['end_at']));
  76.             }else{
  77.                 if(isset($filter['date'])){
  78.                     $title .= 'Export last '.$filter['date'].' days';
  79.                 }
  80.             }
  81.            /*  print_r($outputArray['type']).'<br>';
  82.             print_r($filter);exit; */
  83.             $userId $this->getUser()->getUserId();
  84.             $getData $exportfilesService->getQueryByExportType($outputArray['type'], $filter);
  85.             
  86.             if($getData === false){
  87.                 return false;
  88.             }
  89.             $export_file_name 'Heypa-'.str_replace('_''-'$outputArray['type']).'.csv';
  90.             $column_name $getData['column'];
  91.             $result $getData['result'];
  92.             //print_r($result);exit;
  93.             $uploadDir 'uploads/export/'.uniqid('export_'true).'/' ;
  94.             // Check if the directory exists, create it if not
  95.             if (!is_dir($uploadDir)) {
  96.                 mkdir($uploadDir0777true);
  97.             }
  98.             // Generate a unique name to prevent overwriting files
  99.             $fileExt pathinfo($export_file_namePATHINFO_EXTENSION);
  100.             $uniqueName $fileExt;
  101.             // Set the destination path
  102.             $fileDestination $uploadDir $export_file_name;
  103.             //echo $fileDestination;exit;
  104.             $csvColumns $column_name;
  105.             $norecode =array( "No Records Found.");
  106.            
  107.            $csv Writer::createFromFileObject(new \SplTempFileObject());
  108.            $csv->insertOne($csvColumns);
  109.            // Insert data or 'No Records Found' row
  110.            if ($result) {
  111.                foreach ($result as $item) {
  112.                    $csv->insertOne($item);
  113.                }
  114.            } else {
  115.                $csv->insertOne($norecode);
  116.            }
  117.             file_put_contents($fileDestination$csv->getContent());
  118.             $exportFiles = new \App\Entity\ExportFiles();
  119.             $exportFiles->setUserId($userId);
  120.             $exportFiles->setExportFile($title);
  121.             $exportFiles->setExportType($outputArray['type']);
  122.             $exportFiles->setExportFilters(json_encode($filter));
  123.             $exportFiles->setDownloadPath($fileDestination);
  124.             $exportFiles->setCreatedAt(new \Datetime());
  125.             $entityManager->persist($exportFiles);
  126.             $entityManager->flush();
  127.            // $url = $urlGenerator->generate('export_index');
  128.             $response = new Response($csv->getContent());
  129.             $response->headers->set('Content-Type''text/csv');
  130.             $response->headers->set('Content-Disposition''attachment; filename="' $export_file_name '"');
  131.             $response->headers->set('Cache-Control''no-store, no-cache, must-revalidate');
  132.             $response->headers->set('Pragma''public');
  133.             return $response;
  134.             //return new Response($data,'CSV process successfully');
  135.             //return new Response('<div class="download-submit-sec p-3"><div class="alert p-0 mb-3">Download started. <a href="'.$url.'">Click link</a> to review download process.</div><a href="javascript:void(0)" class="cancel btn btn-outline-secondary close_custom_modal">Cancel</a></div>');
  136.         }
  137.         return $this->render('export/submit.html.twig', [
  138.             'params' => $params,
  139.         ]);
  140.     }
  141. }