Mattermost.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Film;
  4. use App\Entity\User;
  5. use Symfony\Bundle\SecurityBundle\Security;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  9. use Symfony\Contracts\HttpClient\HttpClientInterface;
  10. /**
  11. * Envoi notifs mattermost
  12. */
  13. class Mattermost
  14. {
  15. /**
  16. * Mattermost Manager
  17. */
  18. public function __construct(
  19. protected HttpClientInterface $mattermostClient,
  20. protected string $channelId,
  21. protected string $channelIdAdmin,
  22. protected UrlGeneratorInterface $router,
  23. protected RequestStack $requestStack,
  24. protected Security $security
  25. )
  26. {
  27. }
  28. protected function SendNotif(string $message, bool $isChanAdmin = False) :void
  29. {
  30. try {
  31. $response = $this->mattermostClient->request(
  32. 'POST',
  33. 'api/v4/posts', [
  34. 'json' => [
  35. "channel_id" => ($isChanAdmin ? $this->channelIdAdmin : $this->channelId),
  36. "message" => $message
  37. ]
  38. ]
  39. );
  40. // Appeler au moins une méthode pour déclencher l'exception en cas d'erreur réseau
  41. $response->getHeaders();
  42. } catch (TransportExceptionInterface $e) {
  43. /** @var \Symfony\Component\HttpFoundation\Session\Session $session */
  44. $session = $this->requestStack->getSession();
  45. $session->getFlashBag()->add('error', "L'envoi vers mattermost a échoué.");
  46. }
  47. }
  48. public function sendNouveauFilm(Film $film) :void
  49. {
  50. $message =
  51. ":new: **"
  52. .$film->getAuthered()->getUserIdentifier()
  53. ."** vient d'ajouter **"
  54. ."[".$film->getTitre()."]("
  55. .$this->router->generate('videotheque_voirfilm', ['id' => $film->getId()], UrlGeneratorInterface::ABSOLUTE_URL)
  56. .")** dans la [vidéothèque]("
  57. .$this->router->generate('videotheque_liste', [], UrlGeneratorInterface::ABSOLUTE_URL)
  58. .").";
  59. $this->SendNotif($message);
  60. }
  61. public function sendNouveauCommentaire(User $user, Film $film) :void
  62. {
  63. $message =
  64. ":new: **"
  65. .$user->getUserIdentifier()
  66. ."** vient d'ajouter un commentaire sur le film **"
  67. ."[".$film->getTitre()."]("
  68. .$this->router->generate('videotheque_voirfilm', ['id' => $film->getId()], UrlGeneratorInterface::ABSOLUTE_URL)
  69. .")** dans la [vidéothèque]("
  70. .$this->router->generate('videotheque_liste', [], UrlGeneratorInterface::ABSOLUTE_URL)
  71. .")."
  72. ;
  73. $this->SendNotif($message);
  74. }
  75. public function sendNewUser(string $userName) : void
  76. {
  77. $message =
  78. ":warning: Un utilisateur vient de s'enregistrer dans la [vidéothèque]("
  79. .$this->router->generate('videotheque_liste', [], UrlGeneratorInterface::ABSOLUTE_URL)
  80. .")** : "
  81. .$userName
  82. ."**. Accéder à la [liste des utilisateurs]("
  83. .$this->router->generate('admin_index', [], UrlGeneratorInterface::ABSOLUTE_URL)
  84. .")."
  85. ;
  86. $this->sendNotif($message, True);
  87. }
  88. public function sendNewMediaVideo(Film $film): void
  89. {
  90. $message =
  91. ":new: **"
  92. . $this->security->getToken()->getUserIdentifier()
  93. ."** vient d'ajouter une bande d'annonce sur le film **"
  94. ."[".$film->getTitre()."]("
  95. .$this->router->generate('videotheque_voirfilm', ['id' => $film->getId()], UrlGeneratorInterface::ABSOLUTE_URL)
  96. .")** dans la [vidéothèque]("
  97. .$this->router->generate('videotheque_liste', [], UrlGeneratorInterface::ABSOLUTE_URL)
  98. .")."
  99. ;
  100. $this->SendNotif($message);
  101. }
  102. }