add success email #14

Merged
csimonis merged 12 commits from feature/success-email into main 2025-02-13 20:14:35 +00:00
6 changed files with 186 additions and 5 deletions
Showing only changes of commit 316acf74d2 - Show all commits

View File

@ -7,6 +7,7 @@
"php": ">=8.2",
"ext-ctype": "*",
"ext-iconv": "*",
"chillerlan/php-qrcode": "^5.0",
"doctrine/annotations": "^2.0",
"doctrine/dbal": "^3",
"doctrine/doctrine-bundle": "^2.13",

161
composer.lock generated
View File

@ -4,8 +4,167 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "6e7803d436b49242a4a3816fdc776d3a",
"content-hash": "26b10019eec6bd118285cb25e8daf878",
"packages": [
{
"name": "chillerlan/php-qrcode",
"version": "5.0.3",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git",
"reference": "42e215640e9ebdd857570c9e4e52245d1ee51de2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/42e215640e9ebdd857570c9e4e52245d1ee51de2",
"reference": "42e215640e9ebdd857570c9e4e52245d1ee51de2",
"shasum": ""
},
"require": {
"chillerlan/php-settings-container": "^2.1.6 || ^3.2.1",
"ext-mbstring": "*",
"php": "^7.4 || ^8.0"
},
"require-dev": {
"chillerlan/php-authenticator": "^4.3.1 || ^5.2.1",
"ext-fileinfo": "*",
"phan/phan": "^5.4.5",
"phpcompatibility/php-compatibility": "10.x-dev",
"phpmd/phpmd": "^2.15",
"phpunit/phpunit": "^9.6",
"setasign/fpdf": "^1.8.2",
"slevomat/coding-standard": "^8.15",
"squizlabs/php_codesniffer": "^3.11"
},
"suggest": {
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
"setasign/fpdf": "Required to use the QR FPDF output.",
"simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code"
},
"type": "library",
"autoload": {
"psr-4": {
"chillerlan\\QRCode\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT",
"Apache-2.0"
],
"authors": [
{
"name": "Kazuhiko Arase",
"homepage": "https://github.com/kazuhikoarase/qrcode-generator"
},
{
"name": "ZXing Authors",
"homepage": "https://github.com/zxing/zxing"
},
{
"name": "Ashot Khanamiryan",
"homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder"
},
{
"name": "Smiley",
"email": "smiley@chillerlan.net",
"homepage": "https://github.com/codemasher"
},
{
"name": "Contributors",
"homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
}
],
"description": "A QR Code generator and reader with a user-friendly API. PHP 7.4+",
"homepage": "https://github.com/chillerlan/php-qrcode",
"keywords": [
"phpqrcode",
"qr",
"qr code",
"qr-reader",
"qrcode",
"qrcode-generator",
"qrcode-reader"
],
"support": {
"docs": "https://php-qrcode.readthedocs.io",
"issues": "https://github.com/chillerlan/php-qrcode/issues",
"source": "https://github.com/chillerlan/php-qrcode"
},
"funding": [
{
"url": "https://ko-fi.com/codemasher",
"type": "Ko-Fi"
}
],
"time": "2024-11-21T16:12:34+00:00"
},
{
"name": "chillerlan/php-settings-container",
"version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-settings-container.git",
"reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
"reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^8.1"
},
"require-dev": {
"phpmd/phpmd": "^2.15",
"phpstan/phpstan": "^1.11",
"phpstan/phpstan-deprecation-rules": "^1.2",
"phpunit/phpunit": "^10.5",
"squizlabs/php_codesniffer": "^3.10"
},
"type": "library",
"autoload": {
"psr-4": {
"chillerlan\\Settings\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Smiley",
"email": "smiley@chillerlan.net",
"homepage": "https://github.com/codemasher"
}
],
"description": "A container class for immutable settings objects. Not a DI container.",
"homepage": "https://github.com/chillerlan/php-settings-container",
"keywords": [
"Settings",
"configuration",
"container",
"helper"
],
"support": {
"issues": "https://github.com/chillerlan/php-settings-container/issues",
"source": "https://github.com/chillerlan/php-settings-container"
},
"funding": [
{
"url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
"type": "custom"
},
{
"url": "https://ko-fi.com/codemasher",
"type": "ko_fi"
}
],
"time": "2024-07-16T11:13:48+00:00"
},
{
"name": "composer/semver",
"version": "3.4.3",

View File

@ -2,6 +2,7 @@
namespace App\Controller;
use App\Service\TicketService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@ -10,8 +11,10 @@ use Symfony\Component\Routing\Attribute\Route;
class SuccessController extends AbstractController
{
#[Route(path: '/success', name: 'app_success_page', methods: Request::METHOD_GET)]
public function __invoke(): Response
public function __invoke(TicketService $service, Request $request): Response
{
$service->completePayment((string)$request->query->get('session_id'));
return $this->render('ticket/success.html.twig');
}
}

View File

@ -3,18 +3,22 @@ declare(strict_types=1);
namespace App\Service;
use App\Controller\Admin\CustomerCrudController;
use App\Entity\Payment;
use chillerlan\QRCode\QRCode;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class TicketEmailService
{
public function __construct(
private readonly MailerInterface $mailer,
#[Autowire(env: 'SENDER_MAIL')]
private readonly string $senderMail
private readonly string $senderMail,
private readonly UrlGeneratorInterface $urlGenerator,
) {
}
@ -25,8 +29,20 @@ class TicketEmailService
->subject('Abiball Ticket')
->from(new Address($this->senderMail, 'Noreply'))
->to($payment->getCustomer()?->getEmail())
->context(['payment' => $payment]);
->context([
'payment' => $payment,
'qr' => (new QRCode())->render($this->generateUrl($payment))
]);
$this->mailer->send($mail);
}
private function generateUrl(Payment $payment): string
{
return $this->urlGenerator->generate('admin', [
'crudAction' => 'detail',
'crudControllerFqcn' => CustomerCrudController::class,
'entityId' => $payment->getCustomer()?->getId()
], UrlGeneratorInterface::ABSOLUTE_URL);
}
}

View File

@ -45,7 +45,7 @@ class TicketService
$payment->setCompleted(true);
$this->em->flush();
dd();
$this->emailService->sendSuccessEmail($payment);
return true;

View File

@ -24,5 +24,7 @@ placeholder text
{% endfor %}
<br>
Gesamtpreis: {{ payment.total }}
<img src="{{ qr }}" width="100">
</body>
</html>