src/Controller/ApplicationController.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\NewsRepository;
  4. use App\Repository\NewsGroupRepository;
  5. use App\Repository\ProductArticleRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\RedirectResponse;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\HttpFoundation\Session\Session;
  13. class ApplicationController extends AbstractController
  14. {
  15.     /**
  16.      * @var String
  17.      */
  18.     private $path '/files/';
  19.     /**
  20.      * @var String
  21.      */
  22.     private $frontPath '../../frontend';
  23.     /**
  24.      * @Route("/", name="app_index",)
  25.      */
  26.     public function index(): Response
  27.     {
  28.         return $this->redirect('/admin');
  29.     }
  30.     /**
  31.      * @Route("/{url}", name="app_pages", requirements={"url" = "^(?!api|action|manual|import).*\/$"})
  32.      * @Route("/admin", name="app_admin")
  33.      */
  34.     public function admin(): Response
  35.     {
  36.         return $this->render('app.html.twig');
  37.     }
  38.         /**
  39.      * @Route("/manual", name="manual")
  40.      * */
  41.     public function manual(Request $request)
  42.     {
  43.         $user $this->getUser();
  44.         $download $request->query->get('download');
  45.         $download filter_var($downloadFILTER_VALIDATE_BOOLEAN);
  46.         $subject 'Руководство использования Soft99.pdf';
  47.         if ($user) {
  48.             $filename "manual.pdf";
  49.             $directory dirname($request->server->get('DOCUMENT_ROOT')).'/assets/doc';
  50.             if ($download) {
  51.                 $response = new Response();
  52.                 $response->headers->set('Content-type''application/octet-stream');
  53.                 $response->headers->set('Content-Disposition'sprintf('attachment; filename="%s"'$subject));
  54.                 $response->setContent(file_get_contents($directory.'/'.$filename));
  55.                 $response->setStatusCode(200);
  56.                 $response->headers->set('Content-Transfer-Encoding''binary');
  57.                 $response->headers->set('Pragma''no-cache');
  58.                 $response->headers->set('Expires''0');
  59.                 return $response;
  60.             }
  61.             header('Content-type: application/pdf');
  62.             header(sprintf('Content-Disposition: inline; filename="%s"'$subject));
  63.             header('Content-Length: ' filesize($directory.'/'.$filename));
  64.             @readfile($directory.'/'.$filename);
  65.             exit;
  66.         }
  67.         return $this->redirect('/admin');
  68.     }
  69.     /**
  70.      * @Route("/action/upload", name="upload")
  71.      * */
  72.     public function uploadGallery(Request $request) {
  73.         $public $this->path.'gallery';
  74.         $file $request->files->get('upload');
  75.         $images_exts = [
  76.             IMAGETYPE_GIF => 'gif',
  77.             IMAGETYPE_JPEG => 'jpg',
  78.             IMAGETYPE_PNG => 'png'
  79.         ];
  80.         $directory $request->server->get('DOCUMENT_ROOT').$public;
  81.         $gallery '';
  82.         $message '';
  83.         $separator '/';
  84.        
  85.         if(!isset($file) && !is_uploaded_file($file->getRealPath())) {
  86.             $message 'Вы не указали файл для загрузки';
  87.         } else {
  88.             $filepath $file->getRealPath();
  89.             $filename $file->getClientOriginalName();
  90.             $is = @getimagesize($filepath);
  91.             if ($is) {
  92.                 if (!isset($images_exts[$is[2]])) {
  93.                     $message 'Необходимо указать файл формата ' implode(', '$images_exts);
  94.                 } else {
  95.                     $name transliterator_transliterate('Russian-Latin/BGN'$filename);
  96.                     $download $directory $separator $name;
  97.             
  98.                     if (file_exists($download)) {
  99.                         $message 'Файл с именем ' $filename ' уже существует';
  100.                     } elseif (!@move_uploaded_file($filepath$download)) {
  101.                         $message 'Невозможно сохранить файл, проверьте настройки папки для файлов ' $filename;
  102.                     } else {
  103.                         $gallery '//backend.soft99.ru'.$public $separator $name;
  104.                         //$gallery = $request->getSchemeAndHttpHost().$gallery;
  105.                         $message 'Файл успешно загружен';
  106.                     }
  107.                 }
  108.             }
  109.         }
  110.         $callback $_GET['CKEditorFuncNum'];
  111.         $response = ["message" => $message];
  112.       
  113.         echo '<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction("'.$callback.'", "'.$gallery.'", "'.$message.'" );</script>';
  114.         return new Response(json_encode($response));
  115.     }
  116.     /**
  117.      * @Route("/action/upload/dropped", name="dropped", methods={"post"})
  118.      * */
  119.     function droppedGallery(Request $request) {
  120.         $public $this->path.'gallery';
  121.         $file $request->files->get('upload');
  122.         $directory $request->server->get('DOCUMENT_ROOT').$public;
  123.         $filename $file->getClientOriginalName();
  124.         $gallery '';
  125.         $separator '/';
  126.         $name transliterator_transliterate('Russian-Latin/BGN'$filename);
  127.         $download $directory $separator $name;
  128.         if (!@move_uploaded_file($file->getRealPath(), $download)) {
  129.             $message 'Невозможно сохранить файл, проверьте настройки папки для файлов '.$filename;
  130.             $jsonForPasteMode = array("uploaded" => 0"error" => $message);
  131.             return new JsonResponse($jsonForPasteMode);
  132.         } else {
  133.             // Если все успешно сохранилось отправляем ответ в CKEditor
  134.             $gallery $public$separator .$name;
  135.             //$gallery = $request->getSchemeAndHttpHost().$gallery;
  136.             $jsonForPasteMode = array("uploaded" => 1"fileName" => $name"url" => $gallery);
  137.             return new JsonResponse($jsonForPasteMode);
  138.         }
  139.     }
  140.     /**
  141.      * @Route("/action/browse", name="browse")
  142.      * */
  143.     public function browseGallery(Request $request) {
  144.         $directory $request->server->get('DOCUMENT_ROOT').$this->path.'gallery';
  145.         $files array_diff(scandir($directory), array('..''.'));
  146.         return $this->render('browse.html.twig', [
  147.             'files' => $files
  148.         ]);
  149.     }
  150.     /**
  151.      * @Route("/action/gallery/del/{file}", name="deleteImgBrowse")
  152.      * */
  153.     public function deleteImgBrowse(string $fileRequest $request) {
  154.         $directory $request->server->get('DOCUMENT_ROOT').$this->path.'gallery/';
  155.         $path_file $directory.$file;
  156.         if (file_exists($path_file)) unlink($path_file);
  157.         $files array_diff(scandir($directory), array('..''.'));
  158.         return $this->render('browse.html.twig', [
  159.             'files' => $files
  160.         ]);
  161.     }
  162.     /**
  163.      * @Route("/action/search",  methods={"get"})
  164.      */
  165.     public function search(Request $request): Response
  166.     {
  167.         $session = new Session();
  168.         $session->start();
  169.         $query $request->query->get('query');
  170.         $page $request->query->get('page');
  171.         $ref $request->query->get('ref');
  172.         $array = [
  173.             'query' => $query,
  174.             'page' => $page
  175.         ];
  176.         if ($query) {
  177.             $session->set('search'$array);
  178.         }
  179.         if ($ref)  {
  180.             return $this->redirect($ref);
  181.         }
  182.         $referer $request->headers->get('referer');
  183.         return $this->redirect($referer);
  184.     }
  185.     /**
  186.      * @Route("/action/search/get",  methods={"get"})
  187.      */
  188.     public function getSearch(): JsonResponse {
  189.         $session = new Session();
  190.         $search  $session->get('search') ?? [];
  191.         return new JsonResponse($searchResponse::HTTP_OK);
  192.     }
  193.     /**
  194.      * @Route("/action/search/del",  methods={"get"})
  195.      */
  196.     public function delSearch(Request $request): RedirectResponse {
  197.         $session = new Session();
  198.         $session->remove('search');
  199.         $referer $request->headers->get('referer');
  200.         return $this->redirect($referer);
  201.     }
  202.     /**
  203.      * @Route("/action/sorted",  methods={"get"})
  204.      */
  205.     public function sorted(Request $request): Response
  206.     {
  207.         $session = new Session();
  208.         $session->start();
  209.         $field $request->query->get('field');
  210.         $page $request->query->get('page');
  211.         $sort 'ASC';
  212.         if ($field) {
  213.             $sorted $session->get('sorted');
  214.             if ($sorted && $sorted['field'] === $field) {
  215.                 $sort $sorted['sort'] !== 'ASC' 'ASC' 'DESC';
  216.             }
  217.             $sorted['sort'] = $sort;
  218.             $sorted['field'] = $field;
  219.             $sorted['page'] = $page;
  220.             $session->set('sorted'$sorted);
  221.         }
  222.         $referer $request->headers->get('referer');
  223.         return $this->redirect($referer);
  224.     }
  225.     /**
  226.      * @Route("/action/sorted/del",  methods={"get"})
  227.      */
  228.     public function delSorted(Request $request): RedirectResponse {
  229.         $session = new Session();
  230.         $session->remove('sorted');
  231.         $referer $request->headers->get('referer');
  232.         return $this->redirect($referer);
  233.     }
  234.     public function getFiles($page$src '/') {
  235.         $path $this->path $page $src;
  236.         $directory $_SERVER['DOCUMENT_ROOT'].$path;
  237.         if (!file_exists($directory)) return null;
  238.         $files array_diff(scandir($directory), array('..''.'));
  239.         return array_values($files);
  240.     }
  241.     
  242.     public function uploadFile($files$page$src '/'$group false) {
  243.         if ($group) {
  244.             $filenames = [];
  245.             foreach ($files as $index => $file) {
  246.                 $path $_SERVER['DOCUMENT_ROOT'] . $this->path $page $src;
  247.                 $filename $file->getClientOriginalName();
  248.                 $prefix substr(sha1($index time()), 05);
  249.                 if (!file_exists($path)) mkdir($path$mode 0777true);
  250.                 move_uploaded_file($file$path $prefix .$filename);
  251.                 array_push($filenames$prefix .$filename);
  252.             }
  253.             return $filenames;
  254.         } else {
  255.             $path $_SERVER['DOCUMENT_ROOT'] . $this->path $page '/';
  256.             $filename $files->getClientOriginalName();
  257.             $prefix substr(sha1(time()), 05);
  258.             if (!file_exists($path)) mkdir($path$mode 0777true);
  259.             move_uploaded_file($files$path $prefix $filename);
  260.             return $prefix $filename;
  261.         }
  262.     }
  263.     public function removeFile($filename$page$src '/') {
  264.         if ($filename) {
  265.             $path $_SERVER['DOCUMENT_ROOT'] . $this->path $page $src;
  266.             if (file_exists($path $filename)) unlink($path $filename);
  267.         }
  268.         return true;
  269.     }
  270.     public function dropFiles($page$src '/') {
  271.         $directory $_SERVER['DOCUMENT_ROOT'].$this->path.$page.$src;
  272.         if (file_exists($directory)) {
  273.             $files array_diff(
  274.                 scandir($directory), 
  275.                 array('..''.')
  276.             );
  277.             foreach ($files as $file) {
  278.                 unlink($directory .'/'$file);
  279.             }
  280.             rmdir($directory);
  281.             return true;
  282.         }
  283.         return false;
  284.     }
  285.     public function updateSitemap(?string $link, ?string $oldLinkstring $page):void {
  286.         $path $_SERVER['DOCUMENT_ROOT'].'/'.$this->frontPath.'/public/sitemap-'.$page.'.xml';
  287.         $dist $_SERVER['DOCUMENT_ROOT'].'/'$this->frontPath.'/dist/sitemap-'.$page.'.xml';
  288.        
  289.         if (!file_exists($path) || (file_exists($path) && !is_writable($dist))) {
  290.             return;
  291.         }
  292.       
  293.         $host $this->getParameter('front.host');
  294.         $sitemap file_get_contents($path);
  295.        
  296.         if ($oldLink) {
  297.             
  298.             $thisItem '<loc>'.$host.'/'.$page.'/'.$oldLink.'</loc>';
  299.             $hasItem strripos($sitemap$thisItem);
  300.             if ($hasItem) {
  301.                 //removing the old item
  302.                 $itemStart strripos(substr($sitemap0$hasItem), '<url>') - 1;
  303.                 $itemEol strpos($sitemap'</url>'$hasItem) + 6;
  304.                 $sitemap substr($sitemap0$itemStart).substr($sitemap$itemEol);
  305.             }
  306.         }
  307.         if ($link) {
  308.             //adding a new item
  309.             $template '<url>'.PHP_EOL;
  310.             $template .= '  <loc>'.$host.'/'.$page.'/'.$link.'</loc>'.PHP_EOL;
  311.             $template .= '  <lastmod>'.(new \DateTimeImmutable())->format('c').'</lastmod>'.PHP_EOL;
  312.             $template .= '</url>'.PHP_EOL;
  313.             $eol strripos($sitemap'</urlset>');
  314.             $sitemap substr($sitemap0$eol).$template.substr($sitemap$eol);
  315.         }
  316.         if (file_exists($dist) && is_writable($dist)) {
  317.             file_put_contents($dist$sitemap);
  318.         }
  319.         file_put_contents($path$sitemap);
  320.     }
  321.     public function clearSitemap(string $page) {
  322.         $path $_SERVER['DOCUMENT_ROOT'].'/'.$this->frontPath.'/public/sitemap-'.$page.'.xml';
  323.         $dist $_SERVER['DOCUMENT_ROOT'].'/'$this->frontPath.'/dist/sitemap-'.$page.'.xml';
  324.       
  325.         if (!file_exists($path) || (file_exists($path) && !is_writable($dist))) {
  326.             return;
  327.         }
  328.         $host $this->getParameter('front.host');
  329.         $sitemap file_get_contents($path);
  330.         $itemStart stripos($sitemap'<url>') - 1;
  331.         $itemEol strrpos($sitemap'</url>') + 6;
  332.         $sitemap substr($sitemap0$itemStart).substr($sitemap$itemEol);
  333.         if (file_exists($dist) && is_writable($dist)) {
  334.             file_put_contents($dist$sitemap);
  335.         }
  336.         file_put_contents($path$sitemap);
  337.     }
  338.     /**
  339.      * @Route("/action/reindexing-sitemap",  methods={"get"})
  340.      */
  341.     public function reindexingSitemap(
  342.         Request $request,
  343.         ProductArticleRepository $productRepository,
  344.         NewsRepository $newsRepository,
  345.         NewsGroupRepository $newsGroupRepository
  346.     ) {
  347.         $pages $request->query->get('page') ?? ['news''product' 'newsGroup'];
  348.         
  349.         $result = [
  350.             'success' => false
  351.             'message' => 'The value of some query parameters is undefined'
  352.             'errors' => []
  353.         ];
  354.         if (is_string($pages)) $pages = [$pages];
  355.         foreach ($pages as $page) {
  356.             $repository $page 'Repository';
  357.             if (isset($$repository)) {
  358.                 $this->clearSitemap($page);
  359.                 $items = $$repository->findAll();
  360.                 
  361.                 foreach($items as $item) {
  362.                     $this->updateSitemap($item->getLink(), null$page);
  363.                 }
  364.                 $result = [
  365.                     'success' => true
  366.                     'message' => 'Links in the sitemap were successfully indexed'
  367.                     'errors' => []
  368.                 ];
  369.             }
  370.         }
  371.         $this->addFlash('notice'$result);
  372.         $referer $request->headers->get('referer') ?? '/admin';
  373.         return $this->redirect($referer);
  374.     }
  375.     public function validMessage($result$message$error) {
  376.         $result['success'] = false;
  377.         $result['message'] = $message;
  378.         $result['errors'][] = $error;
  379.         return $result;
  380.     }
  381. }