src/Common/Controllers/CrmAbstractController.php line 88

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Common\Controllers;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\{
  6.     Request,
  7.     Response,
  8.     JsonResponse,
  9.     RequestStack
  10. };
  11. use Symfony\Component\HttpFoundation\Session\Session;
  12. use Doctrine\Persistence\ManagerRegistry;
  13. use App\Entity\Campaign;
  14. abstract class CrmAbstractController extends AbstractController
  15. {
  16.     protected ?string $entityClassName null;
  17.     protected ?string $formClassName null;
  18.     protected ?string $moduleService null;
  19.     protected ?string $modulePrefix null;
  20.     protected ?string $moduleTemplate null;
  21.     protected bool $hasPagin false;
  22.     protected ?array $defaultSort = [];
  23.     protected bool $hasFilter true;
  24.     protected bool $useIndexMode false;
  25.     protected object $entityManager;
  26.     public function __construct(ManagerRegistry $doctrine)
  27.     {
  28.         $this->entityManager $doctrine->getManager();
  29.         $moduleDetails $this->initModuleDetails();
  30.         $this->entityClassName $moduleDetails['entityClassName'];
  31.         $this->formClassName $moduleDetails['formClassName'] ?? null;
  32.         $this->moduleService $moduleDetails['moduleService'] ?? null;
  33.         $this->modulePrefix $moduleDetails['modulePrefix'] ?? null;
  34.         $this->moduleTemplate $moduleDetails['moduleTemplate'] ?? null;
  35.         $this->hasPagin $moduleDetails['hasPagin'] ?? false;
  36.         $this->defaultSort $moduleDetails['defaultSort'] ?? null;
  37.         $this->hasFilter $moduleDetails['hasFilter'] ?? true;
  38.         $this->useIndexMode $moduleDetails['useIndexMode'] ?? false;
  39.     }
  40.     abstract protected function initModuleDetails();
  41.     protected function setKeyword(Request $request, ?Campaign $campaign null): array
  42.     {
  43.         $session $request->getSession();
  44.         
  45.         $setKeyword = (bool) $request->get('setKeyword'0);
  46.         $keyword '';
  47.         $key = ($campaign)
  48.             ? sprintf('%s_%d_keyword'$this->modulePrefix$campaign->getId())
  49.             : sprintf('%s_keyword'$this->modulePrefix)
  50.         ;
  51.         if (true === $setKeyword) {
  52.             $keyword trim($request->get('keyword'''));
  53.             $session->set($key$keyword);
  54.         } elseif ($session->has($key)) {
  55.             $keyword $session->get($key);
  56.         }
  57.         return [$keyword];
  58.     }
  59.     protected function setSort(Request $request, ?Campaign $campaign null): array
  60.     {
  61.         $session $request->getSession();
  62.         $params = [
  63.             'field' => $request->query->get('field'null),
  64.             'op'    => $request->query->get('op'null),
  65.         ];
  66.         $key = ($campaign)
  67.             ? sprintf('%s_%d_sort'$this->modulePrefix$campaign->getId())
  68.             : sprintf('%s_sort'$this->modulePrefix)
  69.         ;
  70.         if (empty($params['field']) || empty($params['op'])) {
  71.             $params $session->get($key);
  72.             if (empty($params['field']) || empty($params['op']))  {
  73.                 if (isset($this->defaultSort) and is_array($this->defaultSort)) {
  74.                     $params $this->defaultSort;
  75.                 }
  76.             }
  77.         } else {
  78.             $session->set($key$params);
  79.         }
  80.         return [$params];
  81.     }
  82.     protected function csvExportResponse(
  83.         Request $request,
  84.         object $service,
  85.         string $filename,
  86.         ?string $data null,
  87.         ?string $funcName null
  88.     ): Response {
  89.         if (!$data) {
  90.             $serviceFunction = ($funcName) ? $funcName 'getList';
  91.             if (true === $this->hasFilter) {
  92.                 $filters $this->setKeyword($request);
  93.             }
  94.             $filters array_merge($filters ?? [], $this->setSort($request));
  95.             $filters array_merge($filters, [nullnull]);
  96.             $filters array_merge($filters, [true]);
  97.             $data = (true === $this->useIndexMode)
  98.                 ? $service->$serviceFunction(3, ...$filters)
  99.                 : $service->$serviceFunction(...$filters)
  100.             ;
  101.             $data $service->getCsvExportData($data);
  102.         }
  103.         $response = new Response($data);
  104.         $response->headers->set('Content-Type''text/csv');
  105.         $response->headers->set('Content-Disposition''attachment; filename="'.$filename.'"');
  106.         $response->headers->set('charset''utf-8');
  107.         $response->setCharset('utf-8');
  108.         return $response;
  109.     }
  110.     protected function setItemsPerPage(Request $requestSession $session): void
  111.     {
  112.         $itemsPerPage = (int) $request->get('items_per_page'null);
  113.         if ($itemsPerPage) {            
  114.             $session->set(
  115.                 $this->modulePrefix '_items_per_page'
  116.                 $itemsPerPage
  117.             );
  118.         }
  119.     }
  120.     private function getItemsPerPage(Session $session): int
  121.     {
  122.         $itemsPerPage = ($session->has($this->modulePrefix '_items_per_page'))
  123.             ? (int) $session->get($this->modulePrefix '_items_per_page')
  124.             : (int) $this->getParameter('paging_items_per_page_25')
  125.         ;
  126.         return $itemsPerPage;
  127.     }
  128.     protected function setFromToPagination(Request $request): array
  129.     {
  130.         $session $request->getSession();
  131.         $this->setItemsPerPage($request$session);
  132.         
  133.         $from 0;
  134.         $to $this->getItemsPerPage($session); // (int) $this->getParameter('paging_items_per_page_25');
  135.         $page $request->get('page');
  136.         if (is_numeric($page)) {
  137.             $session->set($this->modulePrefix '_currentPage'$page);
  138.         } elseif ($session->has($this->modulePrefix '_currentPage')) {
  139.             $page $session->get($this->modulePrefix '_currentPage');
  140.         }
  141.         if($page 0) {
  142.             $from =  (int) $page $to;
  143.         }
  144.         return [$from$to];
  145.     }
  146.     /*protected function setItemsPerPage(Request $request)
  147.     {
  148.         $this->getItemsPerPage($request);
  149.         $set_items_per_page = (bool) $request->get('set_items_per_page', null);
  150.         if ($set_items_per_page) {
  151.             $session = $request->getSession();
  152.             $session->set(
  153.                 $this->modulePrefix . '_itemsPerPage', 
  154.                 (int) $request->get('items_per_page')
  155.             );
  156.         }
  157.     }*/
  158. }