mirror of
https://github.com/quentin-g-dev/afup.git
synced 2026-03-24 17:22:06 +01:00
Vu qu'on a 3 events en parallèle, il faut indiquer à quel event correspond l'événement dans la notfif slack. De plus on rajoute l'id de l'event dans le lien, afin d'arriver de suite sur la bonne page.
86 lines
1.9 KiB
PHP
86 lines
1.9 KiB
PHP
<?php
|
|
|
|
|
|
namespace AppBundle\Notifier;
|
|
|
|
use AppBundle\Event\Model\Event;
|
|
use AppBundle\Event\Model\Talk;
|
|
use AppBundle\Event\Model\Vote;
|
|
use AppBundle\Slack\Message;
|
|
use AppBundle\Slack\MessageFactory;
|
|
use JMS\Serializer\Serializer;
|
|
|
|
class SlackNotifier
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $postUrl;
|
|
|
|
/**
|
|
* @var MessageFactory
|
|
*/
|
|
private $messageFactory;
|
|
|
|
/**
|
|
* @var Serializer
|
|
*/
|
|
private $serializer;
|
|
|
|
/**
|
|
* SlackNotifier constructor.
|
|
* @param $postUrl
|
|
* @param MessageFactory $messageFactory
|
|
* @param Serializer $serializer
|
|
*/
|
|
public function __construct($postUrl, MessageFactory $messageFactory, Serializer $serializer)
|
|
{
|
|
$this->postUrl = $postUrl;
|
|
$this->messageFactory = $messageFactory;
|
|
$this->serializer = $serializer;
|
|
}
|
|
|
|
/**
|
|
* Send a message to slack for a new vote
|
|
*
|
|
* @param Vote $vote
|
|
* @return bool
|
|
*/
|
|
public function notifyVote(Vote $vote)
|
|
{
|
|
$message = $this->messageFactory->createMessageForVote($vote);
|
|
return $this->sendMessage($message);
|
|
}
|
|
|
|
/**
|
|
* Send a message to slack for a new talk
|
|
*
|
|
* @param Talk $talk
|
|
* @param Event $event
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function notifyTalk(Talk $talk, Event $event)
|
|
{
|
|
$message = $this->messageFactory->createMessageForTalk($talk, $event);
|
|
return $this->sendMessage($message);
|
|
}
|
|
|
|
/**
|
|
* @param Message $message
|
|
* @return bool
|
|
*/
|
|
public function sendMessage(Message $message)
|
|
{
|
|
$ch = curl_init($this->postUrl);
|
|
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, ['payload' => $this->serializer->serialize($message, 'json')]);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
$result = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
return true;
|
|
}
|
|
}
|