Merge WIP branch for email trade offer #13
5 changed files with 89 additions and 1 deletions
55
src/Controller/TradeController.php
Normal file
55
src/Controller/TradeController.php
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\User;
|
||||
use App\Entity\Offering;
|
||||
|
||||
use App\Repository\OfferingRepository;
|
||||
use App\Repository\WishRepository;
|
||||
|
||||
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Mailer\MailerInterface;
|
||||
use Symfony\Component\Mime\Email;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
|
||||
class TradeController extends AbstractController
|
||||
{
|
||||
#[Route('/trade/{id}', name: 'trade')]
|
||||
public function sendEmail(MailerInterface $mailer, Offering $offer, OfferingRepository $offeringRepository, WishRepository $wishRepository): Response
|
||||
{
|
||||
$user = $this->getUser();
|
||||
|
||||
if($user != $offer->getByUser())
|
||||
{
|
||||
$email = (new TemplatedEmail())
|
||||
->from('no-reply@pfleanz.li')
|
||||
->to($offer->getByUser()->getEmail())
|
||||
->replyTo($user->getEmail())
|
||||
->subject($user->getUsername() . ' wants to trade with you!')
|
||||
->text('Trade offer')
|
||||
->htmlTemplate('user/trade/offer_email.html.twig')
|
||||
->context([
|
||||
'user' => $user,
|
||||
'userOffersLink' => $this->generateUrl('user_public', [
|
||||
'id' => $offer->getByUser()->getId(),
|
||||
], UrlGeneratorInterface::ABSOLUTE_URL)
|
||||
])
|
||||
;
|
||||
try
|
||||
{
|
||||
$mailer->send($email);
|
||||
$this->addFlash('success', 'Trade offer sent!');
|
||||
} catch (TransportExceptionInterface $e) {
|
||||
$this->addFlash('error', 'There was an error: ' . $e);
|
||||
}
|
||||
} else {
|
||||
$this->addFlash('error','You can\'t trade with yourself!');
|
||||
}
|
||||
|
||||
return $this->redirectToRoute('show_offer', ['id' => $offer->getId()]);
|
||||
}
|
||||
}
|
|
@ -33,6 +33,17 @@ class OfferingRepository extends ServiceEntityRepository
|
|||
;
|
||||
}
|
||||
|
||||
public function findById($id)
|
||||
{
|
||||
return $this->createQueryBuilder('o')
|
||||
->andWhere('o.Id = :val')
|
||||
->setParameter('val', $id)
|
||||
->orderBy('o.id', 'ASC')
|
||||
->getQuery()
|
||||
->getResult()
|
||||
;
|
||||
}
|
||||
|
||||
/*
|
||||
public function findOneBySomeField($value): ?Offering
|
||||
{
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block body %}
|
||||
{% for message in app.flashes('error') %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ message }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% for message in app.flashes('success') %}
|
||||
<div class="alert alert-success" role="success">
|
||||
{{ message }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{% if offer.byUser == user %}
|
||||
<div class="alert alert-info" role="alert">This is your offer!</div>
|
||||
{% endif %}
|
||||
|
@ -58,6 +70,6 @@
|
|||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
<button class="btn btn-primary">Offer trade</button>
|
||||
<a class="btn btn-primary" href="{{ path('trade', {'id': offer.id}) }}">Offer trade</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
5
templates/offer/trade/trade_email.html.twig
Normal file
5
templates/offer/trade/trade_email.html.twig
Normal file
|
@ -0,0 +1,5 @@
|
|||
<h1>{{ user.username}} wants to trade!</h1>
|
||||
|
||||
<p>You can checkout their offer and reply to this email if you want to trade.</p>
|
||||
|
||||
<a href={{ path('user_public', id: { 'id': offer.byuser.id }) }}</a>
|
5
templates/user/trade/offer_email.html.twig
Normal file
5
templates/user/trade/offer_email.html.twig
Normal file
|
@ -0,0 +1,5 @@
|
|||
<h1>{{ user.username }} wants to trade!</h1>
|
||||
|
||||
<p>Checkout {{ user.username}}'s offers:</p>
|
||||
<a href="{{ userOffersLink }}">Link</a>
|
||||
<p>Reply to this email to start trading.</p>
|
Reference in a new issue