src/Controller/HomeController.php line 91
<?phpnamespace App\Controller;use App\Entity\Meta;use App\Entity\Post;use App\Form\FaqType;use App\Form\QuizType;use App\Repository\CategoryRepository;use App\Repository\MetaRepository;use App\Repository\PostRepository;use Doctrine\ORM\EntityManagerInterface;use Knp\Component\Pager\PaginatorInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Contracts\Translation\TranslatorInterface;#[Route('/')]class HomeController extends AbstractController{const POST_MAX_COUNT_PER_PAGE = 10;private $translator;public function __construct(TranslatorInterface $translator){$this->translator = $translator;}#[Route('/', methods: ['GET'], name: 'homepage')]public function index(PostRepository $postRepository, Request $request): Response{$domain = $request->getHost();if (preg_match('/\.qr-pib\.kz$/', $domain) == false)$domain = 'qr-pib.kz';//convert test domains dgr.TEST.ITC.qr-pib.kz => mrd.qr-pib.kzif (preg_match('/test\.itc\.qr-pib\.kz$/', $domain)) {$domain = preg_replace('/test\.itc\./', '', $domain);}$newsCount = ['qr-pib.kz' => 8,'moa.qr-pib.kz' => 5,'moseso.qr-pib.kz' => 5,];$count = $newsCount[$domain] ?? 4;$teaser = $postRepository->findOneBy(['template' => 'about','isActive' => true]);if (empty($teaser)) {$teaser = new Post();$teaser->setTitle('');$teaser->setContent('');}$posts = $postRepository->createQueryBuilder('p')->andWhere("p.type = 'post'")// @TODO change this->andWhere("p.title <> ''")->andWhere("p.isActive = 1")->andWhere("p.publishedAt < CURRENT_TIMESTAMP()")->orderBy('p.publishedAt', 'DESC')->setMaxResults($count)->getQuery()->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,$request->getLocale() // take locale from session or request etc.)->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOIN, true)->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker')->getResult();return $this->render('main.html.twig', ['posts' => $posts,'teaser' => $teaser]);}#[Route('/{type}/', name: 'app_post_index', methods: ['GET'], requirements: ['type' => 'page|post'])]public function postlist(PostRepository $postRepository, string $type, Request $request, PaginatorInterface $paginator): Response{$query = $postRepository->createQueryBuilder('p')->andWhere("p.type = :type")->andWhere("p.title <> ''")->andWhere("p.isActive = 1")->andWhere("p.publishedAt < CURRENT_TIMESTAMP()")->setParameter('type', $type)->orderBy('p.publishedAt', 'DESC')->setMaxResults(self::POST_MAX_COUNT_PER_PAGE)->getQuery()->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,$request->getLocale() // take locale from session or request etc.)->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOIN, true)->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');$pagination = $paginator->paginate($query, /* query NOT result */$request->query->getInt('page', 1), /*page number*/self::POST_MAX_COUNT_PER_PAGE /*limit per page*/);return $this->render('news.html.twig', ['pagination' => $pagination]);}#[Route('/cat/{category}', name: 'app_category_index', methods: ['GET'])]public function categorylist(CategoryRepository $categoryRepository, PostRepository $postRepository, string $category, Request $request, PaginatorInterface $paginator): Response{$cat = $categoryRepository->find($category);//find categoryif (!$cat) {throw $this->createNotFoundException('Category not found');}$query = $postRepository->createQueryBuilder('p')->andWhere("p.isActive = 1")->andWhere("p.title <> ''")// ->andWhere("p.content <> ''")->andWhere("p.publishedAt < CURRENT_TIMESTAMP()")->andWhere(":category MEMBER OF p.category")->setParameter('category', $category)->orderBy('p.publishedAt', 'DESC')->setMaxResults(self::POST_MAX_COUNT_PER_PAGE)->getQuery()->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,$request->getLocale() // take locale from session or request etc.)->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOIN, true)->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');$pagination = $paginator->paginate($query, /* query NOT result */$request->query->getInt('page', 1), /*page number*/self::POST_MAX_COUNT_PER_PAGE /*limit per page*/);return $this->render('category.html.twig', ['categoryName' => $cat->getTitle(),'pagination' => $pagination]);}#[Route('/archive/{type}/', name: 'app_archives', methods: ['GET'], requirements: ['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'])]public function arhives(PostRepository $postRepository, string $type, Request $request, PaginatorInterface $paginator): Response{//@TODO move to repository$query = $postRepository->createQueryBuilder('p')->andWhere("p.template_old = :type or p.template = :type")->andWhere("p.title <> ''")->andWhere("p.isActive = 1")->setParameter('type', $type)->orderBy('p.publishedAt', 'DESC')// ->setMaxResults(self::POST_MAX_COUNT_PER_PAGE)->getQuery()->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE,$request->getLocale() // take locale from session or request etc.)->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOIN, true)->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');$pagination = $paginator->paginate($query, /* query NOT result */$request->query->getInt('page', 1), /*page number*/self::POST_MAX_COUNT_PER_PAGE /*limit per page*/);if ($type == 'deyatelnost.article') {return $this->render('normativ.html.twig', ['pagination' => $pagination,'type' => $type]);}return $this->render('archive.html.twig', ['pagination' => $pagination,'type' => $type]);}#[Route('/search/', name: 'app_post_search', methods: ['GET', 'POST'])]public function search(PostRepository $postRepository, Request $request, PaginatorInterface $paginator): Response{$query = $postRepository->findByPhrase($request->get('query'));$pagination = $paginator->paginate($query,$request->query->getInt('page', 1),10);return $this->render('search.html.twig', ['posts' => $pagination]);}#[Route('/search/post/', name: 'app_post_search_post', methods: ['GET', 'POST'])]public function searchPost(PostRepository $postRepository, Request $request, PaginatorInterface $paginator): Response{$query = $postRepository->findPostsByQuery($request->get('query', ''));$pagination = $paginator->paginate($query,$request->query->getInt('page', 1),self::POST_MAX_COUNT_PER_PAGE);return $this->render('search.html.twig', ['posts' => $pagination]);}//@TODO @BUG deyatelnost.article crashing//@TODO move domain checking to listener#[Route('/p/{id}', name: 'app_post_show', methods: ['GET'])]public function showById(Post $post, EntityManagerInterface $em, Request $request): Response{//@TODO move to service or listener$domain = $request->getHost();//@TODO refactor me//convert test domains dgr.TEST.ITC.qr-pib.kz => mrd.qr-pib.kzif (preg_match('/test\.itc\.qr-pib\.kz$/', $domain)) {$domain = preg_replace('/test\.itc\./', '', $domain);}if ($domain == 'localhost' or $domain == '127.0.0.1')$domain = 'qr-pib.kz';if (preg_match('/qr-pib\.kz$/', $domain) == false)return $this->redirectToRoute('homepage');if ($post->getDomain() != $domain)return $this->redirectToRoute('homepage');if ($post->getTitle() == '')return $this->redirectToRoute('homepage');if(!$post->isIsActive())return $this->redirectToRoute('homepage');$count = $post->getCounter();$post->setCounter($count + 1);$em->persist($post);$em->flush();//@TODO clear this shit from here!!!if ( $post->getTemplate() == 'template_wide_screen') {return $this->render('template_wide_screen.html.twig', ['post' => $post,]);}if ( $post->getTemplate() != '' && !in_array($post->getTemplate(), ['deyatelnost.article', 'contests.notice', 'contests.decision','corporate.notice', 'corporate.docs', 'contests.sobes'])) {return $this->render('templater.html.twig', ['post' => $post,]);}$newsCount = ['qr-pib.kz' => 8,];return $this->render('newsview.html.twig', ['post' => $post,]);}#[Route('/p/{id}/e', name: 'app_post_redirect_to_admin', methods: ['GET'])]public function redirecToAdmin(Post $post, EntityManagerInterface $em, Request $request, $id): Response{// if is admin logged in// redirect to admin pagereturn $this->redirect('/epir_adm?crudAction=edit&crudControllerFqcn=App%5CController%5CAdmin%5CPostCrudController&entityId='.$id.'&menuIndex=1&page=3');}}