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 |     public function findOneBySomeField($value): ?Offering | ||||||
|     { |     { | ||||||
|  |  | ||||||
|  | @ -1,6 +1,18 @@ | ||||||
| {% extends 'base.html.twig' %} | {% extends 'base.html.twig' %} | ||||||
| 
 | 
 | ||||||
| {% block body %} | {% 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 %} |     {% if offer.byUser == user %} | ||||||
|         <div class="alert alert-info" role="alert">This is your offer!</div> |         <div class="alert alert-info" role="alert">This is your offer!</div> | ||||||
|     {% endif %} |     {% endif %} | ||||||
|  | @ -58,6 +70,6 @@ | ||||||
|                 </ul> |                 </ul> | ||||||
|             {% endif %} |             {% endif %} | ||||||
|             </div> |             </div> | ||||||
|             <button class="btn btn-primary">Offer trade</button> |             <a class="btn btn-primary" href="{{ path('trade', {'id': offer.id}) }}">Offer trade</a> | ||||||
|         {% endif %} |         {% endif %} | ||||||
| {% endblock %} | {% 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