Mattermost.php 3.1 KB

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