From f68e2652ca1afc466edbf29d158f524c9babc6ce Mon Sep 17 00:00:00 2001 From: maxperei Date: Wed, 6 Mar 2024 12:11:14 +0100 Subject: [PATCH 1/4] feat(invoicing): send email w/ attachment included; closes synolia/SyliusMailTesterPlugin#31 --- .github/workflows/analysis.yaml | 1 + ruleset/phpstan.neon | 3 +- src/Controller/MailTesterController.php | 12 +++- .../SynoliaSyliusMailTesterExtension.php | 5 ++ src/Form/Type/AbstractType.php | 9 +++ .../Plugin/InvoicingPlugin/InvoiceType.php | 55 +++++++++++++++++++ 6 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/Form/Type/Plugin/InvoicingPlugin/InvoiceType.php diff --git a/.github/workflows/analysis.yaml b/.github/workflows/analysis.yaml index 1c103fc..632f3af 100644 --- a/.github/workflows/analysis.yaml +++ b/.github/workflows/analysis.yaml @@ -80,3 +80,4 @@ jobs: - uses: symfonycorp/security-checker-action@v5 if: 'always() && steps.end-of-setup.outcome == ''success''' + continue-on-error: true diff --git a/ruleset/phpstan.neon b/ruleset/phpstan.neon index b9d48d9..52cb649 100644 --- a/ruleset/phpstan.neon +++ b/ruleset/phpstan.neon @@ -8,6 +8,7 @@ parameters: # Makes PHPStan crash - ../src/DependencyInjection/Configuration.php - ../src/Migrations/ + - ../src/Form/Type/Plugin/InvoicingPlugin/InvoiceType.php # Test dependencies - ../tests/Application @@ -21,4 +22,4 @@ parameters: - '#Call to method [a-zA-Z0-9]+\(\) on an unknown class Sylius\\Plus#' - '#Parameter \$[a-zA-Z0-9]+ of anonymous function has invalid typehint type Sylius\\Plus#' - "#^Parameter \\$returnRequestInterface of anonymous function has invalid type Sylius\\\\Plus\\\\Returns\\\\Domain\\\\Model\\\\ReturnRequestInterface\\.$#" - - "#^Call to an undefined method Symfony\\\\Component\\\\HttpFoundation\\\\Session\\\\SessionInterface\\:\\:getFlashBag\\(\\)\\.$#" + - "#^Call to an undefined method Symfony\\\\Component\\\\HttpFoundation\\\\Session\\\\SessionInterface\\:\\:getFlashBag\\(\\)\\.$#" \ No newline at end of file diff --git a/src/Controller/MailTesterController.php b/src/Controller/MailTesterController.php index 7310401..fd30432 100644 --- a/src/Controller/MailTesterController.php +++ b/src/Controller/MailTesterController.php @@ -87,7 +87,7 @@ private function sendMail(Request $request, array $mailTester, SenderInterface $ } } if ($mailTester['subjects'] !== ChoiceSubjectsType::EVERY_SUBJECTS) { - $sender->send($formData['subjects'], [$formData['recipient']], $this->getMailData($form, 'form_subject_chosen')); + $sender->send($formData['subjects'], [$formData['recipient']], $this->getMailData($form, 'form_subject_chosen'), $this->getAttachments($form)); } $request->getSession()->getFlashBag()->add('success', $this->translator->trans('sylius.ui.admin.mail_tester.success')); @@ -134,4 +134,14 @@ private function getMailData(FormInterface $form, string $type): array return $emailData; } + + private function getAttachments(FormInterface $form): array + { + $formType = $form->getData()['form_subject']; + if (!$formType instanceof AbstractType) { + return []; + } + + return $formType->getAttachments($form->get('form_subject_chosen')); + } } diff --git a/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php b/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php index 5a28f4b..2ef4ea5 100644 --- a/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php +++ b/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php @@ -9,6 +9,7 @@ use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Synolia\SyliusMailTesterPlugin\DependencyInjection\Pass\ResolvableFormTypeResolverCompilerPass; +use Synolia\SyliusMailTesterPlugin\Form\Type\Plugin\InvoicingPlugin\InvoiceType; use Synolia\SyliusMailTesterPlugin\Resolver\ResolvableFormTypeInterface; final class SynoliaSyliusMailTesterExtension extends Extension @@ -26,5 +27,9 @@ public function load(array $config, ContainerBuilder $container): void ->registerForAutoconfiguration(ResolvableFormTypeInterface::class) ->addTag(ResolvableFormTypeResolverCompilerPass::TAG_ID) ; + + if (!class_exists('Sylius\InvoicingPlugin\SyliusInvoicingPlugin')) { + $container->removeDefinition(InvoiceType::class); + } } } diff --git a/src/Form/Type/AbstractType.php b/src/Form/Type/AbstractType.php index 76d6412..9c3dfca 100644 --- a/src/Form/Type/AbstractType.php +++ b/src/Form/Type/AbstractType.php @@ -4,6 +4,7 @@ namespace Synolia\SyliusMailTesterPlugin\Form\Type; +use Symfony\Component\Form\FormInterface; use Synolia\SyliusMailTesterPlugin\Resolver\ResolvableFormTypeInterface; abstract class AbstractType extends \Symfony\Component\Form\AbstractType implements ResolvableFormTypeInterface @@ -25,4 +26,12 @@ public function getFormType(string $emailKey): ResolvableFormTypeInterface { return $this; } + + /** + * @inheritdoc + */ + public function getAttachments(FormInterface $form): array + { + return []; + } } diff --git a/src/Form/Type/Plugin/InvoicingPlugin/InvoiceType.php b/src/Form/Type/Plugin/InvoicingPlugin/InvoiceType.php new file mode 100644 index 0000000..20ce9f3 --- /dev/null +++ b/src/Form/Type/Plugin/InvoicingPlugin/InvoiceType.php @@ -0,0 +1,55 @@ +add('invoice', EntityType::class, [ + 'class' => Invoice::class, + 'choice_label' => 'number', + ]); + } + + public function getAttachments(FormInterface $form): array + { + $invoice = $form->get('invoice')->getData(); + if (!$invoice instanceof Invoice) { + return []; + } + + if (!$this->hasEnabledPdfFileGenerator) { + return []; + } + + return [$this->invoiceFileProvider->provide($invoice)->fullPath()]; + } +} From a11a99864754637b267ccacbfa4d3058ced9f28e Mon Sep 17 00:00:00 2001 From: maxperei Date: Thu, 4 Apr 2024 09:41:58 +0200 Subject: [PATCH 2/4] fix(neon): add blank line --- ruleset/phpstan.neon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruleset/phpstan.neon b/ruleset/phpstan.neon index 52cb649..a195e2a 100644 --- a/ruleset/phpstan.neon +++ b/ruleset/phpstan.neon @@ -22,4 +22,4 @@ parameters: - '#Call to method [a-zA-Z0-9]+\(\) on an unknown class Sylius\\Plus#' - '#Parameter \$[a-zA-Z0-9]+ of anonymous function has invalid typehint type Sylius\\Plus#' - "#^Parameter \\$returnRequestInterface of anonymous function has invalid type Sylius\\\\Plus\\\\Returns\\\\Domain\\\\Model\\\\ReturnRequestInterface\\.$#" - - "#^Call to an undefined method Symfony\\\\Component\\\\HttpFoundation\\\\Session\\\\SessionInterface\\:\\:getFlashBag\\(\\)\\.$#" \ No newline at end of file + - "#^Call to an undefined method Symfony\\\\Component\\\\HttpFoundation\\\\Session\\\\SessionInterface\\:\\:getFlashBag\\(\\)\\.$#" From cc65ddd11074b3cf9d0bf1ee118c101ca9c3908c Mon Sep 17 00:00:00 2001 From: maxperei Date: Thu, 4 Apr 2024 12:14:57 +0200 Subject: [PATCH 3/4] fix(extension): use reference even if it does not exist --- src/DependencyInjection/SynoliaSyliusMailTesterExtension.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php b/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php index 2ef4ea5..c1e16e9 100644 --- a/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php +++ b/src/DependencyInjection/SynoliaSyliusMailTesterExtension.php @@ -4,6 +4,7 @@ namespace Synolia\SyliusMailTesterPlugin\DependencyInjection; +use Sylius\InvoicingPlugin\SyliusInvoicingPlugin; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\Extension; @@ -28,7 +29,7 @@ public function load(array $config, ContainerBuilder $container): void ->addTag(ResolvableFormTypeResolverCompilerPass::TAG_ID) ; - if (!class_exists('Sylius\InvoicingPlugin\SyliusInvoicingPlugin')) { + if (!class_exists(SyliusInvoicingPlugin::class)) { $container->removeDefinition(InvoiceType::class); } } From fb3326bf850d7c74c9b7736ca4d8f4e12a3a26c4 Mon Sep 17 00:00:00 2001 From: maxperei Date: Tue, 16 Apr 2024 16:16:05 +0200 Subject: [PATCH 4/4] chore(ci): remove unmaintained sylius v1.10 from github action --- .github/workflows/sylius.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/sylius.yaml b/.github/workflows/sylius.yaml index 4d93f3b..7a6f08b 100644 --- a/.github/workflows/sylius.yaml +++ b/.github/workflows/sylius.yaml @@ -19,7 +19,6 @@ jobs: - 8.0 - 8.2 sylius: - - 1.10.0 - 1.12.0 symfony: - 5.4 @@ -27,9 +26,6 @@ jobs: node: - 14.x exclude: - - - sylius: 1.10.0 - symfony: 6.2 - php: '8.0' symfony: 6.2