src/Controller/Api/MediaController.php line 71

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\DTO\Transformer\Media\MediaAllAttributeDtoTransfomer;
  4. use App\Entity\Media\Media;
  5. use App\Entity\Media\MediaAccessByConsultation;
  6. use App\Entity\Media\MediaAccessByLink;
  7. use App\Entity\Media\MediaAccessByQr;
  8. use App\Entity\Media\MediaAccessBySearch;
  9. use App\Entity\Media\MediaFollowers;
  10. use App\Entity\Media\MediaTeam;
  11. use App\Entity\Posts;
  12. use App\Entity\User;
  13. use App\Form\MediaType;
  14. use App\Service\Api;
  15. use App\Service\Notification\NotificationPublisherService;
  16. use App\Utils\InqResult;
  17. use Doctrine\Persistence\ManagerRegistry;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\Config\Definition\Exception\Exception;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Security\Core\Security;
  25. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  26. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  27. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  28. use Symfony\Component\Serializer\Serializer;
  29. use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
  30. /**
  31.  * @Route("/api/media")
  32.  */
  33. class MediaController extends AbstractController
  34. {
  35.     /**
  36.      * @var Security
  37.      */
  38.     private $security;
  39.     private $api;
  40.     private $doctrine;
  41.     private $mediaAllAttributeDtoTransfomer;
  42.     private $notificationPublisherService;
  43.     public function __construct(
  44.         Security $security,
  45.         Api $api,
  46.         ManagerRegistry $doctrine,
  47.         MediaAllAttributeDtoTransfomer $mediaAllAttributeDtoTransfomer,
  48.         NotificationPublisherService $notificationPublisherService
  49.     )
  50.     {
  51.         $this->security $security;
  52.         $this->api $api;
  53.         $this->doctrine $doctrine;
  54.         $this->mediaAllAttributeDtoTransfomer $mediaAllAttributeDtoTransfomer;
  55.         $this->notificationPublisherService $notificationPublisherService;
  56.     }
  57.     /**
  58.      * Finds and displays a Post entity.
  59.      *
  60.      * @Route("/{id<\d+>}", methods="GET", name="api_media_show")
  61.      */
  62.     public function show(Media $media): Response
  63.     {
  64.         $user $this->security->getUser();
  65.         $em $this->doctrine->getManager();
  66.         $mediaFolloawed $em
  67.             ->getRepository('App\Entity\Media\MediaFollowers')
  68.             ->findOneBy(["user" => $user->getId(), "media" => $media->getId()])
  69.         ;
  70.         if ($mediaFolloawed) {
  71.             $media->isFollowed true;
  72.         } else {
  73.             $media->isFollowed false;
  74.         }
  75.         $nbrPosts $em
  76.             ->getRepository('App\Entity\Post\Post')->createQueryBuilder('p')
  77.             ->select('count(p.id)')
  78.             ->where("p.media = :media and p.isDeleted = false")
  79.             ->setParameter("media"$media->getId())
  80.             ->getQuery()->getSingleScalarResult();
  81.         $media->nbrPosts $nbrPosts;
  82.         $dto $this->mediaAllAttributeDtoTransfomer->transformFromObject($media);
  83.         return $this->api->getReponse($dto);
  84.     }
  85.     /**
  86.      * Finds and displays a Post entity.
  87.      *
  88.      * @Route("/{url}", methods="GET", name="api_media_show_by_url")
  89.      */
  90.     public function showByUrl(Api $api$url null)
  91.     {
  92.         if ($url == null) {
  93.             throw new \Exception("Media not found"304);
  94.         }
  95.         $medias $this
  96.             ->doctrine
  97.             ->getManager()
  98.             ->getRepository('App\Entity\Media\Media')
  99.             ->findBy([
  100.                 'url' => $url,
  101.                 'isDeleted'=> false
  102.             ])
  103.         ;
  104.         if (sizeof($medias) == 0) {
  105.             throw new \Exception("Media not found"304);
  106.         }
  107.         $media $medias[0];
  108.         $user $this->security->getUser();
  109.         $em $this->doctrine->getManager();
  110.         $mediaFolloawed $em
  111.             ->getRepository('App\Entity\Media\MediaFollowers')
  112.             ->findOneBy(["user" => $user->getId(), "media" => $media->getId()])
  113.         ;
  114.         if ($mediaFolloawed) {
  115.             $media->isFollowed true;
  116.         } else {
  117.             $media->isFollowed false;
  118.         }
  119.         $nbrPosts $em
  120.             ->getRepository('App\Entity\Post\Post')->createQueryBuilder('p')
  121.             ->select('count(p.id)')
  122.             ->where("p.media = :media and p.isDeleted = false")
  123.             ->setParameter("media"$media->getId())
  124.             ->getQuery()->getSingleScalarResult();
  125.         $media->nbrPosts $nbrPosts;
  126.         $dto $this->mediaAllAttributeDtoTransfomer->transformFromObject($media);
  127.         return $this->api->getReponse($dto);
  128.     }
  129.     /**
  130.      * @Route("/{id<\d+>}/follower", name="api_media_like", methods={"POST"})
  131.      */
  132.     public function follower(Media $media)
  133.     {
  134.         $result = new InqResult();
  135.         $result->result false;
  136.         $user $this->security->getUser();
  137.         $em $this->doctrine->getManager();
  138.         $followers $em
  139.             ->getRepository('App\Entity\Media\MediaFollowers')
  140.             ->findOneBy(["user" => $user->getId(), "media" => $media->getId()])
  141.         ;
  142.         if ($followers) {
  143.             $em->remove($followers);
  144.             $media->setNbrFollowers($media->getNbrFollowers() - 1);
  145.             $user->setFollowing($user->getFollowing() - 1);
  146.         } else {
  147.             $media->setNbrFollowers($media->getNbrFollowers() + 1);
  148.             $user->setFollowing($user->getFollowing() + 1);
  149.             $follower = new MediaFollowers();
  150.             $follower->setMedia($media);
  151.             $follower->setUser($this->security->getUser());
  152.             $em->persist($follower);
  153.             $result->result true;
  154.             $this->notificationPublisherService->followedMedia($media$user);
  155.         }
  156.         $em->flush();
  157.         return $this->api->getReponse($result);
  158.     }
  159.     /**
  160.      * @Route("/{id<\d+>}/isfollowed", name="api_media_is_followed", methods={"GET"})
  161.      */
  162.     public function isFollowed(Media $media)
  163.     {
  164.         $result false;
  165.         $user $this->security->getUser();
  166.         $em $this->doctrine->getManager();
  167.         $followers $em
  168.             ->getRepository('App\Entity\Media\MediaFollowers')
  169.             ->findOneBy(["user" => $user->getId(), "media" => $media->getId()])
  170.         ;
  171.         if ($followers) {
  172.             $result true;
  173.         }
  174.         return $this->api->getReponse($result);
  175.     }
  176.     /**
  177.      * @Route("/{id<\d+>}/accessByQR", name="api_media_accessByQR", methods={"POST"})
  178.      */
  179.     public function accessByQR(Media $media)
  180.     {
  181.         $user $this->security->getUser();
  182.         $mediaAccessByQr = new MediaAccessByQr();
  183.         $mediaAccessByQr->setUser($user);
  184.         $mediaAccessByQr->setMedia($media);
  185.         $em $this->doctrine->getManager();
  186.         $em->persist($mediaAccessByQr);
  187.         $em->flush();
  188.         return $this->api->getReponse(new InqResult());
  189.     }
  190.     /**
  191.      * @Route("/{url}/accessByQR", name="api_media_accessByQR_with_url", methods={"POST"})
  192.      */
  193.     public function accessByQR_withURL($url)
  194.     {
  195.         $media $this
  196.             ->doctrine
  197.             ->getManager()
  198.             ->getRepository('App\Entity\Media\Media')
  199.             ->findOneBy([
  200.                 'url' => $url,
  201.                 'isDeleted'=> false
  202.             ])
  203.         ;
  204.         if (!$media) {
  205.             throw new \Exception("Media not found"304);
  206.         }
  207.         $user $this->security->getUser();
  208.         $mediaAccessByQr = new MediaAccessByQr();
  209.         $mediaAccessByQr->setUser($user);
  210.         $mediaAccessByQr->setMedia($media);
  211.         $em $this->doctrine->getManager();
  212.         $em->persist($mediaAccessByQr);
  213.         $em->flush();
  214.         return $this->api->getReponse(new InqResult());
  215.     }
  216.     /**
  217.      * @Route("/{url}/accessByLink", name="api_media_accessByLink", methods={"POST"})
  218.      */
  219.     public function accessByLink($url)
  220.     {
  221.         $media $this
  222.             ->doctrine
  223.             ->getManager()
  224.             ->getRepository('App\Entity\Media\Media')
  225.             ->findOneBy([
  226.                 'url' => $url,
  227.                 'isDeleted'=> false
  228.             ])
  229.         ;
  230.         if (!$media) {
  231.             throw new \Exception("Media not found"304);
  232.         }
  233.         $user $this->security->getUser();
  234.         $mediaAccessByLink = new MediaAccessByLink();
  235.         $mediaAccessByLink->setUser($user);
  236.         $mediaAccessByLink->setMedia($media);
  237.         $em $this->doctrine->getManager();
  238.         $em->persist($mediaAccessByLink);
  239.         $em->flush();
  240.         return $this->api->getReponse(new InqResult());
  241.     }
  242.     /**
  243.      * @Route("/{id<\d+>}/accessBySearch", name="api_media_accessBySearch", methods={"POST"})
  244.      */
  245.     public function accessBySearch(Media $media)
  246.     {
  247.         $user $this->security->getUser();
  248.         $MediaAccessBySearch = new MediaAccessBySearch();
  249.         $MediaAccessBySearch->setUser($user);
  250.         $MediaAccessBySearch->setMedia($media);
  251.         $em $this->doctrine->getManager();
  252.         $em->persist($MediaAccessBySearch);
  253.         $em->flush();
  254.         return $this->api->getReponse("Ok");
  255.     }
  256.     /**
  257.      * @Route("/{id<\d+>}/accessByConsultation", name="api_media_accessByConsultation", methods={"POST"})
  258.      */
  259.     public function accessByConsultation(Api $apiMedia $mediaRequest $request)
  260.     {
  261.         $body $request->getContent();
  262.         $data json_decode($bodytrue);
  263.         $user $this->security->getUser();
  264.         $mediaAccessByConsultation = new MediaAccessByConsultation();
  265.         $mediaAccessByConsultation->setUser($user);
  266.         $mediaAccessByConsultation->setMedia($media);
  267.         $mediaAccessByConsultation->setSource($data['source']);
  268.         $em $this->doctrine->getManager();
  269.         $em->persist($mediaAccessByConsultation);
  270.         $em->flush();
  271.         return $api->getReponse(new InqResult());
  272.     }
  273. }