src/Controller/HomeController.php line 33

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Meta;
  4. use App\Entity\Post;
  5. use App\Form\FaqType;
  6. use App\Form\QuizType;
  7. use App\Repository\CategoryRepository;
  8. use App\Repository\MetaRepository;
  9. use App\Repository\PostRepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Knp\Component\Pager\PaginatorInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. #[Route('/')]
  18. class HomeController extends AbstractController
  19. {
  20.     const POST_MAX_COUNT_PER_PAGE 10;
  21.     private $translator;
  22.     public function __construct(TranslatorInterface $translator)
  23.     {
  24.         $this->translator $translator;
  25.     }
  26.     #[Route('/'methods: ['GET'], name'homepage')]
  27.     public function index(PostRepository $postRepositoryRequest $request): Response
  28.     {
  29.         $domain $request->getHost();
  30.         if (preg_match('/\.qr-pib\.kz$/'$domain) == false)
  31.             $domain 'qr-pib.kz';
  32.         //convert test domains dgr.TEST.ITC.qr-pib.kz => mrd.qr-pib.kz
  33.         if (preg_match('/test\.itc\.qr-pib\.kz$/'$domain)) {
  34.             $domain preg_replace('/test\.itc\./'''$domain);
  35.         }
  36.         $newsCount = [
  37.             'qr-pib.kz' => 8,
  38.             'moa.qr-pib.kz' => 5,
  39.             'moseso.qr-pib.kz' => 5,
  40.         ];
  41.         $count $newsCount[$domain] ?? 4;
  42.         $teaser $postRepository->findOneBy([
  43.             'template' => 'about',
  44.             'isActive' => true
  45.         ]);
  46.         if (empty($teaser)) {
  47.             $teaser = new Post();
  48.             $teaser->setTitle('');
  49.             $teaser->setContent('');
  50.         }
  51.         $posts $postRepository->createQueryBuilder('p')
  52.             ->andWhere("p.type = 'post'")
  53. //            @TODO change this
  54.             ->andWhere("p.title <> ''")
  55.             ->andWhere("p.isActive = 1")
  56.             ->andWhere("p.publishedAt < CURRENT_TIMESTAMP()")
  57.             ->orderBy('p.publishedAt''DESC')
  58.             ->setMaxResults($count)
  59.             ->getQuery()
  60.             ->setHint(
  61.                 \Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,
  62.                 $request->getLocale() // take locale from session or request etc.
  63.             )
  64.             ->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOINtrue)
  65.             ->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker')
  66.             ->getResult();
  67.         return $this->render('main.html.twig', [
  68.             'posts' => $posts,
  69.             'teaser' => $teaser
  70.         ]);
  71.     }
  72.     #[Route('/{type}/'name'app_post_index'methods: ['GET'], requirements: [
  73.         'type' => 'page|post'
  74.     ])]
  75.     public function postlist(PostRepository $postRepositorystring $typeRequest $requestPaginatorInterface $paginator): Response
  76.     {
  77.         $query $postRepository->createQueryBuilder('p')
  78.             ->andWhere("p.type = :type")
  79.             ->andWhere("p.title <> ''")
  80.             ->andWhere("p.isActive = 1")
  81.             ->andWhere("p.publishedAt < CURRENT_TIMESTAMP()")
  82.             ->setParameter('type'$type)
  83.             ->orderBy('p.publishedAt''DESC')
  84.             ->setMaxResults(self::POST_MAX_COUNT_PER_PAGE)
  85.             ->getQuery()
  86.             ->setHint(
  87.                 \Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,
  88.                 $request->getLocale() // take locale from session or request etc.
  89.             )
  90.             ->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOINtrue)
  91.             ->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');
  92.         $pagination $paginator->paginate(
  93.             $query/* query NOT result */
  94.             $request->query->getInt('page'1), /*page number*/
  95.             self::POST_MAX_COUNT_PER_PAGE /*limit per page*/
  96.         );
  97.         return $this->render('news.html.twig', [
  98.             'pagination' => $pagination
  99.         ]);
  100.     }
  101.     #[Route('/cat/{category}'name'app_category_index'methods: ['GET'])]
  102.     public function categorylist(CategoryRepository $categoryRepositoryPostRepository $postRepositorystring $categoryRequest $requestPaginatorInterface $paginator): Response
  103.     {
  104.         $cat $categoryRepository->find($category);
  105.         //find category
  106.         if (!$cat) {
  107.             throw $this->createNotFoundException('Category not found');
  108.         }
  109.         $query $postRepository->createQueryBuilder('p')
  110.             ->andWhere("p.isActive = 1")
  111.             ->andWhere("p.title <> ''")
  112. //            ->andWhere("p.content <> ''")
  113.             ->andWhere("p.publishedAt < CURRENT_TIMESTAMP()")
  114.             ->andWhere(":category MEMBER OF p.category")
  115.             ->setParameter('category'$category)
  116.             ->orderBy('p.publishedAt''DESC')
  117.             ->setMaxResults(self::POST_MAX_COUNT_PER_PAGE)
  118.             ->getQuery()
  119.             ->setHint(
  120.                 \Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,
  121.                 $request->getLocale() // take locale from session or request etc.
  122.             )
  123.             ->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOINtrue)
  124.             ->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');
  125.         $pagination $paginator->paginate(
  126.             $query/* query NOT result */
  127.             $request->query->getInt('page'1), /*page number*/
  128.             self::POST_MAX_COUNT_PER_PAGE /*limit per page*/
  129.         );
  130.         return $this->render('category.html.twig', [
  131.             'categoryName' => $cat->getTitle(),
  132.             'pagination' => $pagination
  133.         ]);
  134.     }
  135.     #[Route('/archive/{type}/'name'app_archives'methods: ['GET'], requirements: [
  136.         'type' => 'about|administration|contests.all_decisions|contests.all_notices|contests.all_sobes|contests.decision|contests.notice|contests.sobes|corporate.notice|corporate.docs|default|deyatelnost.all_articles|deyatelnost.article|ethics|ethics.worker|feedback|feedback.faq|feedback.faqs|feedback.review|feedback.reviews|history|main|napravleniya.auto|napravleniya.building|napravleniya.education|napravleniya.hotels'
  137.     ])]
  138.     public function arhives(PostRepository $postRepositorystring $typeRequest $requestPaginatorInterface $paginator): Response
  139.     {
  140.         //@TODO move to repository
  141.         $query $postRepository->createQueryBuilder('p')
  142.             ->andWhere("p.template_old = :type or p.template = :type")
  143.             ->andWhere("p.title <> ''")
  144.             ->andWhere("p.isActive = 1")
  145.             ->setParameter('type'$type)
  146.             ->orderBy('p.publishedAt''DESC')
  147. //            ->setMaxResults(self::POST_MAX_COUNT_PER_PAGE)
  148.             ->getQuery()
  149.             ->setHint(
  150.                 \Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,
  151.                 $request->getLocale() // take locale from session or request etc.
  152.             )
  153.             ->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOINtrue)
  154.             ->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');
  155.         $pagination $paginator->paginate(
  156.             $query/* query NOT result */
  157.             $request->query->getInt('page'1), /*page number*/
  158.             self::POST_MAX_COUNT_PER_PAGE /*limit per page*/
  159.         );
  160.         if ($type == 'deyatelnost.article') {
  161.             return $this->render('normativ.html.twig', [
  162.                 'pagination' => $pagination,
  163.                 'type' => $type
  164.             ]);
  165.         }
  166.         return $this->render('archive.html.twig', [
  167.             'pagination' => $pagination,
  168.             'type' => $type
  169.         ]);
  170.     }
  171.     #[Route('/search/'name'app_post_search'methods: ['GET''POST'])]
  172.     public function search(PostRepository $postRepositoryRequest $requestPaginatorInterface $paginator): Response
  173.     {
  174.         $query $postRepository->findByPhrase($request->get('query'));
  175.         $pagination $paginator->paginate(
  176.             $query,
  177.             $request->query->getInt('page'1),
  178.             10
  179.         );
  180.         return $this->render('search.html.twig', [
  181.             'posts' => $pagination
  182.         ]);
  183.     }
  184.     #[Route('/search/post/'name'app_post_search_post'methods: ['GET''POST'])]
  185.     public function searchPost(PostRepository $postRepositoryRequest $requestPaginatorInterface $paginator): Response
  186.     {
  187.         $query $postRepository->findPostsByQuery($request->get('query'''));
  188.         $pagination $paginator->paginate(
  189.             $query,
  190.             $request->query->getInt('page'1),
  191.             self::POST_MAX_COUNT_PER_PAGE
  192.         );
  193.         return $this->render('search.html.twig', [
  194.             'posts' => $pagination
  195.         ]);
  196.     }
  197.     //@TODO @BUG deyatelnost.article crashing
  198.     //@TODO move domain checking to listener
  199.     #[Route('/p/{id}'name'app_post_show'methods: ['GET'])]
  200.     public function showById(Post $postEntityManagerInterface $emRequest $request): Response
  201.     {
  202.         //@TODO move to service or listener
  203.         $domain $request->getHost();
  204.         //@TODO refactor me
  205.         //convert test domains dgr.TEST.ITC.qr-pib.kz => mrd.qr-pib.kz
  206.         if (preg_match('/test\.itc\.qr-pib\.kz$/'$domain)) {
  207.             $domain preg_replace('/test\.itc\./'''$domain);
  208.         }
  209.         if ($domain == 'localhost' or $domain == '127.0.0.1')
  210.             $domain 'qr-pib.kz';
  211.         if (preg_match('/qr-pib\.kz$/'$domain) == false)
  212.             return $this->redirectToRoute('homepage');
  213.         if ($post->getDomain() != $domain)
  214.             return $this->redirectToRoute('homepage');
  215.         if ($post->getTitle() == '')
  216.             return $this->redirectToRoute('homepage');
  217.         if(!$post->isIsActive())
  218.             return $this->redirectToRoute('homepage');
  219.         $count $post->getCounter();
  220.         $post->setCounter($count 1);
  221.         $em->persist($post);
  222.         $em->flush();
  223.         //@TODO clear this shit from here!!!
  224.         if ( $post->getTemplate() == 'template_wide_screen') {
  225.             return $this->render('template_wide_screen.html.twig', [
  226.                 'post' => $post,
  227.             ]);
  228.         }
  229.         if ( $post->getTemplate() != ''  && !in_array($post->getTemplate(), ['deyatelnost.article''contests.notice''contests.decision','corporate.notice''corporate.docs',  'contests.sobes'])) {
  230.             return $this->render('templater.html.twig', [
  231.                 'post' => $post,
  232.             ]);
  233.         }
  234.         $newsCount = [
  235.             'qr-pib.kz' => 8,
  236.         ];
  237.         return $this->render('newsview.html.twig', [
  238.             'post' => $post,
  239.         ]);
  240.     }
  241.     #[Route('/p/{id}/e'name'app_post_redirect_to_admin'methods: ['GET'])]
  242.     public function redirecToAdmin(Post $postEntityManagerInterface $emRequest $request$id): Response
  243.     {
  244.         // if is admin logged in
  245.         // redirect to admin page
  246.         return $this->redirect('/epir_adm?crudAction=edit&crudControllerFqcn=App%5CController%5CAdmin%5CPostCrudController&entityId='.$id.'&menuIndex=1&page=3');
  247.     }
  248. }