1
0
mirror of https://framagit.org/tykayn/date-poll-api synced 2023-08-25 08:23:11 +02:00

mail having containers

This commit is contained in:
Baptiste Lemoine 2020-04-12 17:28:30 +02:00
parent aa06af19c3
commit da39373a98
9 changed files with 113 additions and 39 deletions

View File

@ -5,13 +5,13 @@ namespace App\Controller;
use App\Entity\Choice; use App\Entity\Choice;
use App\Entity\Owner; use App\Entity\Owner;
use App\Entity\Poll; use App\Entity\Poll;
use App\Service\MailService;
use FOS\RestBundle\Controller\Annotations\Delete; use FOS\RestBundle\Controller\Annotations\Delete;
use FOS\RestBundle\Controller\Annotations\Get; use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Controller\Annotations\Post; use FOS\RestBundle\Controller\Annotations\Post;
use FOS\RestBundle\Controller\Annotations\Put; use FOS\RestBundle\Controller\Annotations\Put;
use FOS\RestBundle\Controller\Annotations\Route; use FOS\RestBundle\Controller\Annotations\Route;
use JMS\Serializer\SerializerBuilder; use JMS\Serializer\SerializerBuilder;
use Swift_Message;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@ -138,7 +138,7 @@ class PollController extends AbstractController {
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function newPollAction( Request $request, \Swift_Mailer $mailer ) { public function newPollAction( Request $request, \Swift_Mailer $mailer, MailService $mail_service ) {
$data = $request->getContent(); $data = $request->getContent();
@ -226,7 +226,7 @@ class PollController extends AbstractController {
$precision = 'from an existing user : ' . $foundOwner->getEmail(); $precision = 'from an existing user : ' . $foundOwner->getEmail();
} }
$this->sendCreationMailAction( $foundOwner, $newpoll, $mailer ); $mail_service->sendCreationMailAction( $foundOwner, $newpoll );
return $this->json( [ return $this->json( [
'message' => 'you created a poll ' . $precision, 'message' => 'you created a poll ' . $precision,
@ -242,7 +242,7 @@ class PollController extends AbstractController {
/** /**
* @Get( * @Get(
* path = "/mail/test-mail-poll", * path = "/mail/test-mail-poll/{emailChoice}",
* name = "test-mail-poll", * name = "test-mail-poll",
* ) * )
* *
@ -255,34 +255,29 @@ class PollController extends AbstractController {
* @return int * @return int
*/ */
// public function sendCreationMailAction( Owner $admin_user, Poll $poll, \Swift_Mailer $mailer) { // public function sendCreationMailAction( Owner $admin_user, Poll $poll, \Swift_Mailer $mailer) {
public function sendCreationMailAction( \Swift_Mailer $mailer ) { public function testSendCreationMailAction( MailService $mail_service, $emailChoice = 'creation_comment' ) {
$em = $this->getDoctrine()->getRepository( Owner::class ); $em = $this->getDoctrine()->getRepository( Owner::class );
$admin_user = $em->find( 1 ); $foundOwner = $em->find( 1 );
$poll = $admin_user->getPolls()[ 0 ]; $poll = $foundOwner->getPolls()[ 0 ];
$comment = $foundOwner->getComments()[ 0 ];
$emailChoicesTemplates = [
'creation_poll' => 'creation-mail.html.twig',
'creation_comment' => 'comment-notification.html.twig',
];
// $mail_service->sendCreationMailAction( $foundOwner, $poll );
$templateVars = [ $templateVars = [
'owner' => $admin_user, 'owner' => $foundOwner,
'comment' => $comment,
'poll' => $poll, 'poll' => $poll,
'url' => $poll->getCustomUrl(), 'url' => $poll->getCustomUrl(),
'title' => 'Création de sondage - ' . $poll->getTitle(), 'title' => 'Création de sondage - ' . $poll->getTitle(),
'email_template' => 'emails/creation-mail.html.twig', 'email_template' => 'emails/' . $emailChoicesTemplates[ $emailChoice ],
]; ];
$message = ( new Swift_Message( 'Framadate - mes sondages' ) )
->setFrom( 'ne-pas-repondre@framadate-api.cipherbliss.com' )
->setTo( $admin_user->getEmail() )
->setBody(
$this->renderView(
$templateVars[ 'email_template' ],
$templateVars
)
);
// send email
// return $mailer->send( $message );
return $this->render( $templateVars[ 'email_template' ], $templateVars ); return $this->render( $templateVars[ 'email_template' ], $templateVars );
} }

View File

@ -0,0 +1,52 @@
<?php
namespace App\Service;
use App\Entity\Owner;
class MailService {
public function sendCreationMailAction( $foundOwner, $newpoll, \Swift_Mailer $mailer ) {
$em = $this->getDoctrine()->getRepository( Owner::class );
$admin_user = $em->find( 1 );
$poll = $admin_user->getPolls()[ 0 ];
// anti spam , limit to every minute
$lastSend = $admin_user->getRequestedPollsDate();
$now = new \DateTime();
if ( date_diff( $lastSend, $now ) < 60 ) {
// too soon!
die( 'too soon!' );
}
$admin_user->setRequestedPollsDate( $now );
$em->persist( $admin_user );
$em->flush();
$templateVars = [
'owner' => $admin_user,
'poll' => $poll,
'url' => $poll->getCustomUrl(),
'title' => 'Création de sondage - ' . $poll->getTitle(),
'email_template' => 'emails/creation-mail.html.twig',
];
$message = ( new Swift_Message( 'Framadate - mes sondages' ) )
->setFrom( 'ne-pas-repondre@framadate-api.cipherbliss.com' )
->setTo( $admin_user->getEmail() )
->setBody(
$this->renderView(
$templateVars[ 'email_template' ],
$templateVars
)
);
// send email
return $mailer->send( $message );
}
}

View File

@ -1,11 +1,18 @@
{#[Framadate][Réservé à l'auteur] Sondage: TESSSSSSSSSST#} {#[Framadate][Réservé à l'auteur] Sondage: TESSSSSSSSSST#}
{% extends 'email-base.html.twig' %}
{% block content %}
<h1>
Ce message ne doit PAS être diffusé aux sondés. Il est réservé à l'auteur du sondage. Ce message ne doit PAS être diffusé aux sondés. Il est réservé à l'auteur du sondage.
</h1>
<br> <br>
<h2>
Vous pouvez modifier ce sondage à l'adresse suivante : Vous pouvez modifier ce sondage à l'adresse suivante :
</h2>
<br> <br>
{% include 'partial/admin_link.html.twig' %} {% include 'emails/partial/admin_link.html.twig' %}
<br> <br>
Pour partager votre sondage aux participants, utilisez son lien d'accès public. Pour partager votre sondage aux participants, utilisez son lien d'accès public que vous avez reçu dans un autre email.
<br> <br>
{% if poll.password %} {% if poll.password %}
@ -14,3 +21,5 @@ Pour partager votre sondage aux participants, utilisez son lien d'accès public.
{% else %} {% else %}
{% endif %} {% endif %}
{% endblock %}

View File

@ -1,4 +0,0 @@
{#[Framadate] Notification d'un sondage : TESSSSSSSSSST#}
{{ pseudo }} vient de rédiger un commentaire.
<br>
Vous pouvez retrouver votre sondage avec le lien suivant : {{ url }}

View File

@ -0,0 +1,21 @@
{#[Framadate] Notification d'un sondage : TESSSSSSSSSST#}
{% extends 'email-base.html.twig' %}
{% block content %}
<strong>
{{ owner.pseudo }}
</strong>
vient de rédiger un commentaire.
<blockquote style="background: #dedede; padding: 1em 2em;">
<i>
{% autoescape %}
{{ comment.text }}
{% endautoescape %}
</i>
</blockquote>
<br>
Vous pouvez retrouver votre sondage avec le lien suivant :
{% include 'emails/partial/admin_link.html.twig' %}
{% include 'emails/partial/public_link.html.twig' %}
{% endblock %}

View File

@ -6,5 +6,5 @@
Ce sondage va bientôt expirer dans 1 jour, il ne sera plus possible d'y voter. Ce sondage va bientôt expirer dans 1 jour, il ne sera plus possible d'y voter.
Dans 31 jours il sera supprimé. Vous pouvez exporter ses données à tout moment en vous rendant à ce lien pour l'administrer: Dans 31 jours il sera supprimé. Vous pouvez exporter ses données à tout moment en vous rendant à ce lien pour l'administrer:
<a href="{{ url }}">{{ url }}</a> {% include 'emails/partial/admin_link.html.twig' %}
{% endblock %} {% endblock %}

View File

@ -1,4 +1,8 @@
{#[Framadate] Participation au sondage : TESSSSSSSSSST#} {#[Framadate] Participation au sondage : TESSSSSSSSSST#}
{% extends 'email-base.html.twig' %}
{% block content %}
Quelqu'un vient de modifier votre sondage accessible au lien suivant: Quelqu'un vient de modifier votre sondage accessible au lien suivant:
<br> <br>
<a href="{{ url }}">{{ url }}</a> {% include 'emails/partial/admin_link.html.twig' %}
{% endblock %}

View File

@ -17,10 +17,7 @@
<ul style="list-style-type: none"> <ul style="list-style-type: none">
{% for poll in polls %} {% for poll in polls %}
<li class="poll-element" style="border: solid 1px #ccc; padding: 1em; margin-top: 1em;"> <li class="poll-element" style="border: solid 1px #ccc; padding: 1em; margin-top: 1em;">
{% include 'emails/partial/poll.html.twig' %} {% include 'emails/partial/poll.html.twig' %}
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>

View File

@ -28,12 +28,12 @@
<span> <span>
lien à donner aux votants: lien à donner aux votants:
</span> </span>
{% include 'public_link.html.twig' %} {% include 'emails/partial/public_link.html.twig' %}
</div> </div>
<div class="admin"> <div class="admin">
<span> <span>
administration: administration:
</span> </span>
{% include 'admin_link.html.twig' %} {% include 'emails/partial/admin_link.html.twig' %}
</div> </div>
</div> </div>