src/Controller/BlogController.php line 126

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\{BlogCategorieBlogCategorieTranslation};
  4. use App\Entity\{BlogArticleBlogArticleTranslation};
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\{ResponseRequest};
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Mailer\MailerInterface;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use App\Entity\Contact;
  12. use App\Form\ContactType;
  13. use App\Manager\ContactManager;
  14. class BlogController extends AbstractController
  15. {
  16.     #[Route('/blog'name'blog')]
  17.     #[Route('/{_locale}/blog'name'blog.es'requirements: ['_locale' => 'es'])]
  18.     #[Route('/{_locale}/blog'name'blog.de'requirements: ['_locale' => 'de'])]
  19.     #[Route('/{_locale}/blog/page/{page}'name'blog.page.es'requirements: ['_locale' => 'es'])]
  20.     #[Route('/{_locale}/blog/page/{page}'name'blog.page.de'requirements: ['_locale' => 'de'])]
  21.     #[Route('/blog/page/{page}'name'blog.page')]
  22.     public function index(Request $requestContactManager $contactManagerEntityManagerInterface $em$page 1): Response
  23.     {
  24.         $totalArticles 8;
  25.         $start = ($page $totalArticles) -$totalArticles;
  26.         $articles_total $em->createQueryBuilder()
  27.             ->select('count(a)')
  28.             ->from(BlogArticle::class, 'a')
  29.             ->join('a.translations''t''WITH''t.locale LIKE :locale')
  30.             ->where('a.isActive = true')
  31.             ->andWhere('t.slug is not null')
  32.             ->orderBy('a.datePublication''DESC')
  33.             ->setParameter(':locale'$request->getLocale() )
  34.             ->getQuery()
  35.             ->getSingleScalarResult()
  36.         ;
  37.         $pages ceil($articles_total $totalArticles);
  38.         $articles $em->createQueryBuilder()
  39.             ->select('a')
  40.             ->from(BlogArticle::class, 'a')
  41.             ->join('a.translations''t''WITH''t.locale LIKE :locale')
  42.             ->where('a.isActive = true')
  43.             ->andWhere('t.slug is not null')
  44.             ->orderBy('a.datePublication''DESC')
  45.             ->setParameter(':locale'$request->getLocale() )
  46.             ->setMaxResults($totalArticles)
  47.             ->setFirstResult($start)
  48.             ->getQuery()
  49.             ->getResult()
  50.         ;
  51.         return $this->render('blog/index.html.twig', [
  52.             'articles' => $articles,
  53.             'articles_total' => $articles_total,
  54.             'pages' => $pages,
  55.             'current_page' => $page
  56.         ]);
  57.     }
  58.     #[Route('/blog/category/{slug}'name'blog.category')]
  59.     #[Route('/blog/category/{slug}/page/{page}'name'blog.category.page')]
  60.     #[Route('/{_locale}/blog/category/{slug}'name'blog.category.es'requirements: ['_locale' => 'es'])]
  61.     #[Route('/{_locale}/blog/category/{slug}/page/{page}'name'blog.category.page.es'requirements: ['_locale' => 'es'])]
  62.     #[Route('/{_locale}/blog/category/{slug}'name'blog.category.de',requirements: ['_locale' => 'de'])]
  63.     #[Route('/{_locale}/blog/category/{slug}/page/{page}'name'blog.category.page.de'requirements: ['_locale' => 'de'])]
  64.     public function category(BlogCategorieTranslation $blogCategorieTranslationRequest $request,EntityManagerInterface $em$page=1): Response
  65.     {
  66.         $blogCategorie $blogCategorieTranslation->getTranslatable();
  67.         $totalArticles 8;
  68.         $start = ($page $totalArticles) -$totalArticles;
  69.         $articles_total $em->createQueryBuilder()
  70.             ->select('count(a)')
  71.             ->from(BlogArticle::class, 'a')
  72.             ->join('a.categories''b')
  73.             ->join('a.translations''t''WITH''t.locale LIKE :locale')
  74.             ->where('b.id = :categorie_id')
  75.             ->andWhere('b.isActive = true')
  76.             ->andWhere('t.slug is not null')
  77.             ->setParameter(':categorie_id'$blogCategorie->getId())
  78.             ->setParameter(':locale'$request->getLocale() )
  79.             ->getQuery()
  80.             ->getSingleScalarResult()
  81.         ;
  82.         $pages ceil($articles_total $totalArticles);
  83.         $articles $em->createQueryBuilder()
  84.             ->select('a')
  85.             ->from(BlogArticle::class, 'a')
  86.             ->join('a.categories''b')
  87.             ->join('a.translations''t''WITH''t.locale LIKE :locale')
  88.             ->where('b.id = :categorie_id')
  89.             ->andWhere('b.isActive = true')
  90.             ->andWhere('t.slug is not null')
  91.             ->setParameter(':categorie_id'$blogCategorie->getId())
  92.             ->setParameter(':locale'$request->getLocale() )
  93.             ->orderBy('a.datePublication''DESC')
  94.             ->setMaxResults($totalArticles)
  95.             ->setFirstResult($start)
  96.             ->getQuery()
  97.             ->getResult()
  98.             ;
  99.         return $this->render('blog/categorie.html.twig', [
  100.             'blogCategorie' => $blogCategorie,
  101.             'articles' => $articles,
  102.             'articles_total' => $articles_total,
  103.             'pages' => $pages,
  104.             'current_page' => $page
  105.         ]);
  106.     }
  107.     #[Route('/blog/{slug}'name'blog.show')]
  108.     #[Route('/{_locale}/blog/{slug}'name'blog.show.es'requirements: ['_locale' => 'es'])]
  109.     #[Route('/{_locale}/blog/{slug}'name'blog.show.de'requirements: ['_locale' => 'de'])]
  110.     public function show(BlogArticleTranslation $articleTranslateRequest $request,EntityManagerInterface $em): Response
  111.     {
  112.         $article $articleTranslate->getTranslatable();
  113.         if(!$article->isIsActive()){
  114.           return $this->redirectToRoute('blog.list');
  115.         }
  116.         $articles_query $em->createQueryBuilder()
  117.             ->select('a')
  118.             ->from(BlogArticle::class, 'a')
  119.             ->join('a.translations''t''WITH''t.locale LIKE :locale')
  120.             ->leftJoin('a.categories''c')
  121.             ->where('a.isActive = true')
  122.             ->andWhere('t.slug is not null')
  123.             ->andWhere('a.id != :current')
  124.             ->orderBy('a.datePublication''DESC')
  125.             ->setParameter(':locale'$request->getLocale() )
  126.             ->setParameter(':current'$article->getId())
  127.         ;
  128.     //    $orStatements = $articles_query->expr()->orX();
  129.         $orX $articles_query->expr()->orX();
  130.         foreach($article->getCategories() as $c){
  131.           $conditions[] =  $articles_query->expr()->literal($c->getId());
  132.         }
  133.         $articles = [];
  134.         if(!empty($conditions)){
  135.           $articles $articles_query->andWhere($articles_query->expr()->in('c.id'$conditions))->setMaxResults(3)->getQuery()->getResult();
  136.         }
  137.         if(empty($articles)){
  138.           $articles $articles_query->setMaxResults(3)->getQuery()->getResult();
  139.         }
  140.         return $this->render('blog/show.html.twig', [
  141.             'article' => $article,
  142.             'articles' => $articles
  143.         ]);
  144.     }
  145.     public function lastArticles(Request $requestEntityManagerInterface $em): Response
  146.     {
  147.         $lastArticles $em->createQueryBuilder()
  148.             ->select('b')
  149.             ->from(BlogArticle::class, 'b')
  150.             ->join('b.translations''t''WITH''t.locale = :locale AND t.slug IS NOT NULL')
  151.             ->setParameter(':locale'$request->getLocale() )
  152.             ->orderBy('b.datePublication''DESC')
  153.             ->setMaxResults(5)
  154.             ->getQuery()
  155.             ->getResult()
  156.         ;
  157.         return $this->render('blog/includes/last_articles.html.twig', [
  158.             'articles' => $lastArticles,
  159.         ]);
  160.     }
  161.     public function categories(Request $requestEntityManagerInterface $em): Response
  162.     {
  163.         $categories $em->createQueryBuilder()
  164.             ->select('b')
  165.             ->from(BlogCategorieTranslation::class, 'b')
  166.             ->leftJoin('b.translatable''bc')
  167.             ->where('b.locale LIKE :locale')
  168.             ->andWhere('bc.categoryParent is null')
  169.             ->setParameter(':locale'$request->getLocale())
  170.             ->orderBy('b.nom''ASC')
  171.             ->getQuery()
  172.             ->getResult()
  173.         ;
  174.         return $this->render('blog/includes/categories.html.twig', [
  175.             'categories' => $categories,
  176.         ]);
  177.     }
  178.     public function last3Articles(Request $requestEntityManagerInterface $em): Response
  179.     {
  180.         $lastArticles $em->createQueryBuilder()
  181.             ->select('b')
  182.             ->from(BlogArticle::class, 'b')
  183.             ->join('b.translations''t''WITH''t.locale = :locale AND t.slug IS NOT NULL')
  184.             ->setParameter(':locale'$request->getLocale() )
  185.             ->orderBy('b.datePublication''DESC')
  186.             ->setMaxResults(3)
  187.             ->getQuery()
  188.             ->getResult()
  189.         ;
  190.         return $this->render('includes/blog.html.twig', [
  191.             'articles' => $lastArticles,
  192.         ]);
  193.     }
  194.     #[Route('/blog-update-image'name'blog-update-image')]
  195.     public function updateImageAction(Request $request){
  196.           //$projet_id = $request->getSession()->get('projet');
  197.           $time time();
  198.           $date = new \Datetime();
  199.           $year $date->format('Y');
  200.           $months $date->format('m');
  201.           $path $this->getParameter('app.public')."wp-content/uploads/".$time."_".$_FILES['upload']['name'];
  202.           $folder $this->getParameter('app.public')."wp-content/uploads/";
  203.           $url "/wp-content/uploads/".$time."_".$_FILES['upload']['name'];
  204.           if (!file_exists($folder)) {
  205.               mkdir($folder0777true);
  206.           }
  207.           $psd_type = array(
  208.               => 'image/psd',
  209.               => 'image/x-photoshop',
  210.               => 'application/photoshop',
  211.               => 'zz-application/zz-winassoc-psd',
  212.               => 'application/psd',
  213.               => 'image/vnd.adobe.photoshop'
  214.           );
  215.           $move false;
  216.           if (($_FILES['upload'] == "none") OR (empty($_FILES['upload']['name'])) )
  217.           {
  218.              $message "No file uploaded.";
  219.           }
  220.           else if ($_FILES['upload']["size"] == 0)
  221.           {
  222.              $message "The file is of zero length.";
  223.           }
  224.           else if (($_FILES['upload']["type"] != "image/pjpeg") AND ($_FILES['upload']["type"] != "image/jpeg") AND ($_FILES['upload']["type"] != "image/png"/*AND !(in_array($_FILES['upload']["type"], $psd_type))*/)
  225.           {
  226.              $message "The image must be in either JPG or PNG format. Please upload a JPG or PNG instead.";
  227.           }
  228.           else if (!is_uploaded_file($_FILES['upload']["tmp_name"]))
  229.           {
  230.              $message "You may be attempting to hack our server. We're on to you; expect a knock on the door sometime soon.";
  231.           }
  232.           else {
  233.             $message "";
  234.             $move = @ move_uploaded_file($_FILES['upload']['tmp_name'], $path);
  235.             if(!$move)
  236.             {
  237.                $message "Error moving uploaded file. Check the script is granted Read/Write/Modify permissions.";
  238.             }
  239.             $url $url;
  240.           }
  241.           if($move){
  242.                return new JsonResponse((array("uploaded" =>1"fileName" => $_FILES['upload']['tmp_name'], 'url' => $url'width' => '100%''height' => '100%')));
  243.           }else{
  244.                return new JsonResponse(array("uploaded" =>0"error" => array('message' => $message)));
  245.           }
  246.   }
  247. }