Commit cc4e2db7 authored by Mat's avatar Mat

création d'un service LettreToken ***

* attention, le fichier contiendra peut-être
* des lignes de codes qui ne doivent pas être dans le dépôt GIT !!!
*
parent dd33e978
......@@ -37,3 +37,5 @@ services:
PotageBundle\Services\Newsletter:
#arguments: ["email", "string", "text"]
PotageBundle\Services\LettreToken:
......@@ -3,6 +3,7 @@
namespace PotageBundle\Controller;
use PotageBundle\Entity\Lettre;
use PotageBundle\Services\LettreToken;
use PotageBundle\Services\Newsletter;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
......@@ -20,14 +21,15 @@ class DefaultController extends MasterController
/**
* @param Newsletter $newsletter
* @param Request $request
* @param Newsletter $newsletter
* @param LettreToken $lettreToken
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Twig_Error_Loader
* @throws \Twig_Error_Runtime
* @throws \Twig_Error_Syntax
*/
public function testAction(Request $request, Newsletter $newsletter)
public function testAction(Request $request, Newsletter $newsletter, LettreToken $lettreToken)
{
/**
* @var Lettre $lettre
......@@ -59,7 +61,7 @@ class DefaultController extends MasterController
$retour = null;
if ($form->isSubmitted() && $form->isValid())
{
$retour = $newsletter->sendLettreToGroup($lettre);
$retour = $newsletter->sendLettreToGroup($lettre, $lettreToken);
}
return $this->render('@Potage/Default/test.html.twig', array(
......
......@@ -10,4 +10,17 @@ namespace PotageBundle\Repository;
*/
class UserRepository extends \Doctrine\ORM\EntityRepository
{
/**
* @param $id_utilisateur
* @return mixed
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function findOneByUtilisateur($id_utilisateur)
{
$qb = $this->createQueryBuilder('fu')
->join('fu.utilisateur', 'u')
->where('u.id = :id')
->setParameter(':id', $id_utilisateur);
return $qb->getQuery()->getOneOrNullResult();
}
}
......@@ -118,6 +118,7 @@ class UtilisateurRepository extends \Doctrine\ORM\EntityRepository
}
/**
* Tous les utilisateurs d'un groupe
* @param int $id_group
* @return array
*/
......
<?php
namespace PotageBundle\Services;
use PotageBundle\Entity\Lettre;
use PotageBundle\Entity\User;
use Symfony\Component\DependencyInjection\ContainerInterface;
class LettreToken
{
private $container;
/**
* Newsletter constructor.
*
* @param ContainerInterface $container
*/
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
/**
* @param int $id_utilisateur
* @param Lettre $lettre
* @return mixed
*/
public function encodePotageAccess($id_utilisateur, Lettre $lettre)
{
/**
* Si l'utilisateur n'est pas associé à un user, token => null
* il faudra alors l'inviter à se créer un compte user,
* après quoi il accèdera à sa page today, qui lui affichera alors les offres liée à ses groupes.
* Et cela même s'il n'avait pas encore de compte user quand la lettre a été envoyée !
*
* @var User $user
*/
$user = $this->container->get('doctrine')
->getRepository('PotageBundle:User')
->findOneByUtilisateur($id_utilisateur); //dump($user);
if ($user !== null) {
// TODO ici une recette secrète, hors dépôt GIT !!!
$_token = $user->getId() . '__' . $lettre->getReference();
$token = base64_encode($_token);
return $token;
} else {
return null;
}
}
/**
* @param $token
* @return array
*/
public function decodePotageAccess($token)
{
$_token = base64_decode($token);
$data = explode('__', $_token);
return array(
'id_user' => $data[0],
'ref_lettre' => $data[1]
);
}
}
\ No newline at end of file
......@@ -7,9 +7,18 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
class Newsletter
{
/**
* Expéditeur, l'application elle-même
* alternc sur grabuge: la mbox postmaster@potage.domainepublic.site est redirigée vers
* -> mathieu@grabuge.domainepublic.net
* -> jaummathieu@collectifs.net
*/
private $from = ['postmaster@potage.domainepublic.site' => 'Potage'];
private $container;
/**
* Newsletter constructor.
*
......@@ -107,12 +116,9 @@ class Newsletter
$mailer = $this->container->get('mailer');
$twig = $this->container->get('twig');
// Destinataire, l'application elle-même
$from = ['postmaster@potage.domainepublic.site' => 'Potage'];
$message = (new \Swift_Message())
->setFrom($from)
->setFrom($this->from)
->setTo($to['email'], $to['fullName'])
->setSubject($subject)
->setBody(
......@@ -124,27 +130,26 @@ class Newsletter
'text/html'
);
//$attachment = \Swift_Attachment::fromPath();
return $mailer->send($message);
}
/**
* Envoie une infolettre
* (à son groupe d'utilisateurs)
*
* @param Lettre $lettre
* @param LettreToken $lettreToken
* @return array
* @throws \Twig_Error_Loader
* @throws \Twig_Error_Runtime
* @throws \Twig_Error_Syntax
*/
public function sendLettreToGroup(Lettre $lettre)
public function sendLettreToGroup(Lettre $lettre, LettreToken $lettreToken)
{
$subject = $lettre->getSubject();
$body = $this->getBody($lettre);
/**
* A partir de l'infolettre on récupère les destinataires
* @var array $utilisateurs
......@@ -162,14 +167,16 @@ class Newsletter
for ($i = 0; $i < count($utilisateurs); $i++)
{
$to = array(
'id' => $utilisateurs[$i]['id'],
'fullName' => $utilisateurs[$i]['prenom'] .' '. $utilisateurs[$i]['nom'],
'email' => $utilisateurs[$i]['email'],
'token' => $utilisateurs[$i]['id']
//encodePotageAccess($utilisateurs[$i]['id'], $lettre->getId())
'token' => $lettreToken->encodePotageAccess($utilisateurs[$i]['id'], $lettre)
);
dump($to);
$ret[$i] = array(
'to' => $this->parseMail($to),
'result' => $this->sendMail($to, $subject, $body) === 1 ? 'done' : 'error'
'result' => $this->sendMail($to, $subject, $body) === 1 ? 'sent' : 'error'
);
}
return $ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment