src/Controller/Admin/CommentController.php line 148

Open in your IDE?
  1. <?php
  2. namespace Slivki\Controller\Admin;
  3. use Slivki\Entity\UserBalanceActivityType;
  4. use Slivki\Message\Query\Comment\GetCommentsPaginationQuery;
  5. use Slivki\Messenger\Query\QueryBusInterface;
  6. use Slivki\Paginator\Comment\CommentPaginatorInterface;
  7. use Symfony\Component\HttpKernel\KernelInterface;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Slivki\Entity\Comment;
  10. use Slivki\Entity\MediaType;
  11. use Slivki\Entity\User;
  12. use Slivki\Entity\UserBalanceActivity;
  13. use Slivki\Services\ImageService;
  14. use Slivki\Services\Mailer;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Validator\Validator\ValidatorInterface;
  18. class CommentController extends AdminController
  19. {
  20.     /**
  21.      * @Route("/admin/comments/user/get/{userID}")
  22.      */
  23.     public function getCommentsByUserAction($userIDRequest $request) {
  24.         $entityManager $this->getEntityManager();
  25.         $user $entityManager->find(User::class, $userID);
  26.         if (!$user) {
  27.             return new Response();
  28.         }
  29.         $dql "select comment, media from Slivki:Comment comment
  30.             left join comment.medias media 
  31.             where comment.userID = :userID order by comment.createdOn desc";
  32.         $query $this->getEntityManager()->createQuery($dql);
  33.         $query->setParameter('userID'$userID);
  34.         $query->setMaxResults(50);
  35.         return $this->render('Slivki/admin/users/comments_list.html.twig', [
  36.             'comments' => $query->getResult()
  37.         ]);
  38.     }
  39.     /**
  40.      * @Route("/admin/comments/send_letter_to_supplier")
  41.      */
  42.     public function sendLetterToSupplier(Request $requestMailer $mailer) {
  43.         if (!$request->isXmlHttpRequest()) {
  44.             return $this->redirect("/admin");
  45.         }
  46.         $commentID $request->request->getInt('commentID');
  47.         if ($commentID == 0) {
  48.             return new Response();
  49.         }
  50.         /** @var Comment $comment */
  51.         $comment $this->getCommentRepository()->find($commentID);
  52.         if (!$comment) {
  53.             return new Response();
  54.         }
  55.         $entity $this->getCommentRepository()->getCommentEntity($comment->getEntityID(), $comment->getTypeID());
  56.         if (!$entity) {
  57.             return new Response();
  58.         }
  59.         $directors $entity->getDirectors();
  60.         $emailTo = [];
  61.         foreach($directors as $director) {
  62.             $emailTo[] = $director->getEmail();
  63.         }
  64.         if (empty($emailTo)) {
  65.             return new Response();
  66.         }
  67.         foreach ($emailTo as $email) {
  68.             $message $mailer->createMessage();
  69.             $message->setSubject('Комментарий на сайте Slivki.by')
  70.                 ->setFrom("info@slivki.by"'Slivki.by')
  71.                 ->setTo($email)
  72.                 ->setBody(
  73.                     $request->request->get('message'),
  74.                     'text/html'
  75.                 );
  76.             $mailer->send($message);
  77.         }
  78.         return new Response();
  79.     }
  80.     /**
  81.      * @Route("/admin/comments/save")
  82.      */
  83.     public function commentsSave(
  84.         Request $request,
  85.         Mailer $mailer,
  86.         ValidatorInterface $validator
  87.     ) {
  88.         if (!$request->isXmlHttpRequest()) {
  89.             return $this->redirect("/admin");
  90.         }
  91.         $entityManager $this->getEntityManager();
  92.         $userRepository $this->getUserRepository();
  93.         $requestComments $request->request->get('comments');
  94.         $comments $entityManager->getRepository(Comment::class)->findBy(['ID' => array_keys($requestComments)]);
  95.         $changedComments = [];
  96.         /** @var Comment $comment */
  97.         foreach($comments as $comment) {
  98.             if ($comment->isChecked()) {
  99.                 continue;
  100.             }
  101.             $currentCommentID $comment->getID();
  102.             $hidden = (bool)$requestComments[$currentCommentID]['hidden'];
  103.             if ($comment->getComment() != $requestComments[$currentCommentID]['comment']
  104.                 || $comment->getAdminComment() != $requestComments[$currentCommentID]['adminComment']
  105.                 || $comment->isHidden() != $hidden || $comment->getRating() != $requestComments[$currentCommentID]['rating']) {
  106.                 $changedComments[$comment->getEntityID()] = $comment->getTypeID();
  107.             }
  108.             $comment->setComment($requestComments[$currentCommentID]['comment']);
  109.             $comment->setAdminComment($requestComments[$currentCommentID]['adminComment']);
  110.             $checked = (bool)$requestComments[$currentCommentID]['checked'];
  111.             $comment->setChecked($checked);
  112.             if ($checked) {
  113.                 $comment->setOperator($userRepository->find($this->getUser()->getID()));
  114.                 $comment->setProcessedByOperatorOn(new \DateTime());
  115.             }
  116.             if ($comment->getTypeID() == Comment::TYPE_OFFER_COMMENT) {
  117.                 $offer $this->getOfferRepository()->find($comment->getEntityID());
  118.                 if ($checked && $userRepository->addCommentBonus($comment$offer)) {
  119.                     $this->sendCommentBonusMessage($mailer$validator$comment);
  120.                 }
  121.                 if ($comment->isHidden() != $hidden) {
  122.                     if ($hidden) {
  123.                         $userRepository->removeCommentBonus($comment$offer);
  124.                     } else {
  125.                         $userRepository->addCommentBonus($comment$offer);
  126.                     }
  127.                 }
  128.             }
  129.             $comment->setHidden($hidden);
  130.             $comment->setRating((int)$requestComments[$currentCommentID]['rating']);
  131.         }
  132.         $entityManager->flush();
  133.         foreach ($changedComments as $entityID => $typeID) {
  134.             $this->resetCommentsCache($entityID$typeID);
  135.         }
  136.         return new Response();
  137.     }
  138.     
  139.     /**
  140.      * @Route("/admin/comments/get_comment_images")
  141.      */
  142.     public function ajaxGetCommentImages(Request $requestImageService $imageService){
  143.         if (!$request->isXmlHttpRequest()) {
  144.             return $this->redirect("/admin");
  145.         }
  146.         $result = [];
  147.         $commentID $request->request->get('id');
  148.         $comment $this->getCommentRepository()->find($commentID);
  149.         if (!$comment) {
  150.             return new Response('false');
  151.         }
  152.         foreach ($comment->getMedias() as $commentMedia) {
  153.             $result[] = $commentMedia $imageService->getImageURL($commentMedia00) : '';
  154.         }
  155.         if (count($result) > 0) {
  156.             $data['commentImages'] = $result;
  157.             return new Response(json_encode($data));
  158.         } else {
  159.             return new Response('false');
  160.         }
  161.     }
  162.     /**
  163.      * @Route("/admin/comments/delete_comment_image")
  164.      */
  165.     public function ajaxDeleteCommentImage(Request $request) {
  166.         if (!$request->isXmlHttpRequest()) {
  167.             return $this->redirect("/admin");
  168.         }
  169.         $commentID $request->request->get('id');
  170.         $media $request->request->get('media');
  171.         $commentRepository $this->getCommentRepository();
  172.         $comment $commentRepository->find($commentID);
  173.         $user $comment->getUser();
  174.         $entityManager $this->getDoctrine()->getManager();
  175.         $mediaCount $comment->getMedias()->count();
  176.         foreach ($comment->getMedias() as $commentMedia) {
  177.             $media str_replace('/znijki-media/initial' MediaType::TYPE_USER_VOTE_IMAGE_PATH''$media);
  178.             if($commentMedia->getName() == $media) {
  179.                 $entityManager->remove($commentMedia);
  180.                 $userBalance $comment->getUser()->getBalance();
  181.                 if ($mediaCount == && $userBalance 0) {
  182.                     $balanceActivity $entityManager->getRepository(UserBalanceActivity::class)->findBy([
  183.                         'entityID' => $comment->getID(),
  184.                         'type' => $entityManager->find(UserBalanceActivityType::class, UserBalanceActivity::TYPE_COMMENT_PHOTO_BONUS)
  185.                         ]);
  186.                     if (count($balanceActivity) > 0) {
  187.                         $bonusAmount $userBalance $balanceActivity[0]->getAmount() ? $userBalance $balanceActivity[0]->getAmount();
  188.                         $balanceActivity = new UserBalanceActivity();
  189.                         $balanceActivity->setType($entityManager->find(UserBalanceActivityType::class, UserBalanceActivity::TYPE_COMMENT_PHOTO_BONUS_CANCEL));
  190.                         $balanceActivity->setAmount($bonusAmount * -1);
  191.                         $balanceActivity->setUser($user);
  192.                         $balanceActivity->setOperatorID($this->getUser()->getID());
  193.                         $entityManager->persist($balanceActivity);
  194.                         $comment->getUser()->setBalance($userBalance $balanceActivity->getAmount());
  195.                     }
  196.                 }
  197.                 $entityManager->flush();
  198.             }
  199.         }
  200.         $this->resetCommentsCache($comment->getEntityID(), $comment->getTypeID());
  201.         return new Response('true');
  202.     }
  203.     /**
  204.      * @Route("/admin/comments/get_operator_answer")
  205.      */
  206.     public function ajaxGetOperatorAnswer(Request $request) {
  207.         if (!$request->isXmlHttpRequest()) {
  208.             return $this->redirect("/admin");
  209.         }
  210.         $operatorID = (int)$request->request->get('operatorID');
  211.         $requestDateFrom $request->request->get('stat-since');
  212.         $requestDateTo $request->request->get('stat-till');
  213.         $dateFrom $requestDateFrom date('Y-m-d 00:00'strtotime($requestDateFrom)) : date('Y-m-d 00:00');
  214.         $dateTo $requestDateTo date('Y-m-d 00:00'strtotime($requestDateTo)) : date('Y-m-d 00:00'strtotime('+1 days'));
  215.         $entityManager $this->getDoctrine()->getManager('admin');
  216.         $operator $this->getUserRepository()->find($operatorID);
  217.         if (!$operator) {
  218.             return new Response('Ошибка. Опертатор не найден!');
  219.         }
  220.         $dql "select comment from Slivki:Comment comment
  221.             where comment.operator = :operator and comment.adminComment != ''
  222.               and comment.processedByOperatorOn >= :dateFrom and comment.processedByOperatorOn < :dateTo
  223.             order by comment.processedByOperatorOn desc";
  224.         $query $entityManager->createQuery($dql)
  225.             ->setParameter('operator'$operator)
  226.             ->setParameter('dateFrom'$dateFrom)
  227.             ->setParameter('dateTo'$dateTo)
  228.             ->setMaxResults(100);
  229.         $data['commentList'] = $query->getResult();
  230.         return $this->render('Slivki/admin/comments/operator_answer_list.html.twig'$data);
  231.     }
  232.     /**
  233.      * @Route("/admin/comments/restore/{commentID}")
  234.      */
  235.     public function ajaxRestoreComment($commentID){
  236.         $entityManager $this->getDoctrine()->getManager('admin');
  237.         $commentRepository $entityManager->getRepository(Comment::class);
  238.         $comment $commentRepository->find($commentID);
  239.         if (!$comment) {
  240.             return new Response();
  241.         }
  242.         $comment->setDeleted(false);
  243.         $entityManager->flush();
  244.         $this->resetCommentsCache($comment->getEntityID(), $comment->getTypeID());
  245.         return new Response();
  246.     }
  247. }