src/Controller/PrimaryController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\SitemapService;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Session\Session;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Doctrine\Persistence\ManagerRegistry;
  12. /**
  13.  * Class PrimaryController
  14.  * @package App\Controller
  15.  *
  16.  */
  17. class PrimaryController extends AbstractController
  18. {
  19.     #[Route(path'/'name'app_main')]
  20.     #[Route(path'/{url}'name'app_pages'requirements: ['url' => '^(?!api|action|manual).*\/$'])]
  21.     public function admin(): Response
  22.     {
  23.         return $this->render('index.html.twig', [
  24.             'application_name' => $_ENV['APP_NAME'],
  25.         ]);
  26.     }
  27.     /**
  28.      * Get documentation for authorized user only
  29.      *
  30.      * @return RedirectResponse
  31.      */
  32.     #[Route(path'/manual'name'manual')]
  33.     public function manual(Request $request): RedirectResponse
  34.     {
  35.         $user $this->getUser();
  36.         $download filter_var($request->query->get('download'), FILTER_VALIDATE_BOOLEAN);
  37.         $subject 'Руководство использования.pdf';
  38.         $root $request->server->get('DOCUMENT_ROOT');
  39.         if ($user) {
  40.             $filename "manual.pdf";
  41.             $directory dirname($root).'/assets/doc';
  42.             if ($download) {
  43.                 $response = new Response();
  44.                 $response->headers->set('Content-type''application/octet-stream');
  45.                 $response->headers->set('Content-Disposition'sprintf('attachment; filename="%s"'$subject));
  46.                 $response->setContent(file_get_contents($directory.'/'.$filename));
  47.                 $response->setStatusCode(200);
  48.                 $response->headers->set('Content-Transfer-Encoding''binary');
  49.                 $response->headers->set('Pragma''no-cache');
  50.                 $response->headers->set('Expires''0');
  51.                 return $response;
  52.             }
  53.             header('Content-type: application/pdf');
  54.             header(sprintf('Content-Disposition: inline; filename="%s"'$subject));
  55.             header('Content-Length: ' filesize($directory.'/'.$filename));
  56.             @readfile($directory.'/'.$filename);
  57.             exit;
  58.         }
  59.         return $this->redirectToRoute('app_admin');
  60.     }
  61.     /**
  62.      * SEARCH ACTION: SET
  63.      *
  64.      * @return RedirectResponse
  65.      */
  66.     #[Route(path'/action/search'methods: ['get'])]
  67.     public function search(Request $request): RedirectResponse
  68.     {
  69.         $session = new Session();
  70.         //$session->start();
  71.         
  72.         $query $request->query->get('query');
  73.         $route $request->query->get('route');
  74.         $page strtok($route':');
  75.         if ($query) {
  76.             $session->set('search', [
  77.                 'query' => $query,
  78.                 'page' =>  $page 
  79.             ]);
  80.         }
  81.         return $this->redirect('/admin/'.$page);
  82.     }
  83.     /**
  84.      * SEARCH ACTION: GET
  85.      *
  86.      * @return JsonResponse
  87.      */
  88.     #[Route(path'/action/search/get'methods: ['get'])]
  89.     public function getSearch(Session $session): JsonResponse {
  90.         return new JsonResponse(
  91.             $session->get('search') ?? [], 
  92.             Response::HTTP_OK
  93.         );
  94.     }
  95.     /**
  96.      * SEARCH/SORT ACTION: DELETE
  97.      *
  98.      * @return RedirectResponse
  99.      */
  100.     #[Route(path'/action/{prop<search|sorted>}/del'methods: ['get'])]
  101.     public function removeSessionByProp(Request $requestSession $sessionString $prop): RedirectResponse {
  102.         $session->remove($prop);
  103.         return $this->redirect($request->headers->get('referer'));
  104.     }
  105.     /**
  106.      * SORT ACTION: SET
  107.      *
  108.      * @return RedirectResponse
  109.      */
  110.     #[Route(path'/action/sorted'methods: ['get'])]
  111.     public function sorted(Request $requestSession $session): Response
  112.     {
  113.         $session->start();
  114.         $field $request->query->get('field');
  115.         $page $request->query->get('page');
  116.         $sort 'ASC';
  117.         if ($field) { 
  118.             $sorted $session->get('sorted');
  119.             $count $sorted['count'] ?? 1;
  120.             if ($sorted && $sorted['field'] === $field) {
  121.                 $sort $sorted['sort'] !== 'ASC' 'ASC' 'DESC';
  122.                 $count++;
  123.             }
  124.             $params = ['count''sort''field''page'];
  125.             foreach($params as $param) {
  126.                 $sorted[$param] = ${$param};
  127.             }
  128.             $session->set('sorted'$sorted);
  129.         }
  130.         if ($sorted['count'] > 2) {
  131.             $session->remove('sorted');
  132.         }
  133.         $referer $request->headers->get('referer');
  134.         return $this->redirect($referer);
  135.     }
  136.     /**
  137.      * @return RedirectResponse
  138.      */
  139.     #[Route(path'/action/reindexing-sitemap'methods: ['get'])]
  140.     public function reindexingSitemap(Request $requestSitemapService $sitemapServiceManagerRegistry $registry) {
  141.         $pages $request->query->get('page') ?? []; 
  142.         $pages is_string($pages) ? [$pages] : $pages;
  143.         $result = [
  144.             'success' => false
  145.             'message' => 'The value of some query parameters is undefined'
  146.             'errors' => []
  147.         ];
  148.       
  149.    
  150.         foreach ($pages as $page) {
  151.             $repository null;
  152.             $entityClassName 'App\Entity\\' ucfirst($page);
  153.             
  154.             if (class_exists($entityClassName)) {
  155.                 $repository $registry->getRepository($entityClassName);
  156.             }
  157.     
  158.             if ($repository != null) {
  159.                 $sitemapService->clearSitemap($page);
  160.                 $items $repository->findAll();
  161.         
  162.                 foreach($items as $item) {
  163.                     $link method_exists($item'getLink') ? $item->getLink() : $item->getId();
  164.                     $sitemapService->updateSitemap($page$linknull);
  165.                 }
  166.                 $result = [
  167.                     'success' => true
  168.                     'message' => 'Links in the sitemap were successfully indexed',
  169.                     'errors' => []
  170.                 ];
  171.             }
  172.         }
  173.         $this->addFlash('notice'$result);
  174.         $referer $request->headers->get('referer') ?? '/admin';
  175.         return $this->redirect($referer);
  176.     }
  177.     #[Route(path'/action/{sel<modification|productOem>}/clear'methods: ['post'])]
  178.     public function clear(Request $requestManagerRegistry $registry): RedirectResponse 
  179.     {
  180.         $req $request->request->all();
  181.         $conn $registry->getManager()->getConnection();
  182.         $query '';
  183.         try {
  184.             foreach($req as $key => $item) {
  185.                 if (filter_var($itemFILTER_VALIDATE_BOOLEAN)) {
  186.                     $query .= 'TRUNCATE TABLE '.strtolower(preg_replace('/(?<!^)[A-Z]/''_$0'$key)).'; ';
  187.                 }
  188.             }
  189.             if (!!$query) {
  190.                 $conn->executeStatement('SET FOREIGN_KEY_CHECKS=0');
  191.                 $conn->executeStatement($query);
  192.                 $conn->executeStatement('SET FOREIGN_KEY_CHECKS=1');
  193.             }
  194.         } catch(\Throwable $th) {
  195.             $errors $th->getMessage();
  196.             throw new \Exception($errors1);
  197.         }
  198.         $referer $request->headers->get('referer');
  199.         return $this->redirect($referer);
  200.    }
  201. }