src/Controller/CommentController.php line 79

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\DTO\AppDTO;
  4. use App\Entity\User;
  5. use App\Entity\Comment;
  6. use App\Service\Cache\Cache;
  7. use App\Repository\UserRepository;
  8. use App\Repository\CommentRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Contracts\Cache\CacheInterface;
  11. use Doctrine\ORM\Tools\Pagination\Paginator;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use App\Service\Paginator as ServicePaginator;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. class CommentController extends AbstractASController
  19. {
  20.     protected EntityManagerInterface $em;
  21.     protected CacheInterface $Cache;
  22.     protected AppDTO $app;
  23.     //Repositories
  24.     protected CommentRepository $Comments;
  25.     protected UserRepository $Users;
  26.     public function __construct(EntityManagerInterface $emCacheInterface $CacheAppDTO $appRequestStack $requestStack)
  27.     {
  28.         $this->requestStack $requestStack;
  29.         $this->Cache $Cache;
  30.         $this->em $em;
  31.         $this->app $app;
  32.         $this->Comments $em->getRepository(Comment::class);
  33.         $this->Users $em->getRepository(User::class);
  34.     }
  35.     
  36.     #[Route('/comments/add'name'comments_add_no_locale'defaults: ['_locale' => '%app.default_lang%'])]
  37.     #[Route('/{_locale}/comments/add'name'comments_add',  requirements: ['_locale' => '%app.langs%'])]
  38.     public function addComment(Request $request): Response
  39.     {
  40.         /** @var App\Entity\User $User */
  41.         $User $this->getUser();
  42.         $type $request->get("type");
  43.         $par = (int) $request->get('par');
  44.         $user $User $User->getId() : 0;
  45.         $author $request->get('author') ?? $User->getName();
  46.         $theme = (string) $request->get('theme');
  47.         $cont = (string) $request->get('cont');
  48.         
  49.         $Comment = new Comment();
  50.         $Comment->setType($type);
  51.         $Comment->setPar($par);
  52.         $Comment->setUser($user);
  53.         $Comment->setAuthor($author);
  54.         $Comment->setTheme($theme);
  55.         $Comment->setTstamp(time());
  56.         $Comment->setCont($cont);
  57.         $Comment->setAnswer('');
  58.         $Comment->setLang($request->getLocale());
  59.         $Comment->setVisible(0);
  60.         $this->em->persist($Comment);
  61.         $this->em->flush();
  62.         $msg $this->app->labels->get('comments-mail-1');
  63.         $subj $this->app->labels->get('comments-mail-2');
  64.             
  65.         // Func::mailhtml($sett['sitename'], Env::mail_from(), $sett['admin_email'], $subj, $msg);
  66.         $result = ["status" => "ok"];
  67.         return $this->json($result);
  68.     }
  69.     #[Route('/comments'name'comments_no_locale'defaults: ['_locale' => '%app.default_lang%'])]
  70.     #[Route('/{_locale}/comments'name'comments',  requirements: ['_locale' => '%app.langs%'])]
  71.     public function index(Request $request): Response
  72.     {
  73.         $results 50;
  74.         $start = (int) $request->query->get('start');
  75.         $dql "SELECT c FROM App\Entity\Comment c WHERE c.visible = 1 ORDER BY c.tstamp DESC";
  76.         $query $this->em->createQuery($dql)
  77.                        ->setFirstResult($start)
  78.                        ->setMaxResults($results);
  79.         $comments = new Paginator($query);
  80.         $cnt count($comments);
  81.         foreach($comments as $comment) {            
  82.             $dql "SELECT count(o) FROM App\Entity\Order o WHERE o.user = ".$comment->getUser()." and ".time()."-o.tstamp < 60*60*24*365";
  83.             if (empty($comment->author)) {
  84.                 $user $this->Users->find($comment->getUser());
  85.                 if ($user) {
  86.                     $comment->setAuthor($user->getName()." ".$user->getSurname());
  87.                 }                
  88.             }
  89.             
  90.             $comment->orders_count array_pop(($this->em->createQuery($dql)->getResult())[0]);
  91.         }
  92.         $response $this->render('comment/list.html.twig', [
  93.             'comments' => $comments,
  94.             'paginator' => new ServicePaginator('comments'$cnt$results$start),
  95.         ]);
  96.         $response Cache::http($response$this->getParameter('app.http_cache_time'));
  97.         return $response;
  98.     }
  99. }