diff --git a/AdyenPayment.php b/AdyenPayment.php
index b73ebb55..eb646556 100644
--- a/AdyenPayment.php
+++ b/AdyenPayment.php
@@ -18,6 +18,7 @@
use Shopware\Components\Plugin\Context\DeactivateContext;
use Shopware\Components\Plugin\Context\InstallContext;
use Shopware\Components\Plugin\Context\UninstallContext;
+use Shopware\Components\Plugin\Context\UpdateContext;
use Shopware\Components\Plugin\PaymentInstaller;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -36,6 +37,7 @@ class AdyenPayment extends Plugin
const SESSION_ADYEN_PAYMENT = 'adyenPayment';
const SESSION_ADYEN_PAYMENT_VALID = 'adyenPaymentValid';
const SESSION_ADYEN_PAYMENT_DATA = 'adyenPaymentData';
+ const SESSION_ADYEN_RESTRICT_EMAILS = 'adyenRestrictEmail';
/**
* @return bool
@@ -95,6 +97,17 @@ public function install(InstallContext $context)
$tool->updateSchema($classes, true);
}
+ public function update(UpdateContext $context)
+ {
+ $this->installAttributes();
+
+ $tool = new SchemaTool($this->container->get('models'));
+ $classes = $this->getModelMetaData();
+ $tool->updateSchema($classes, true);
+
+ parent::update($context);
+ }
+
/**
* @param UninstallContext $context
* @throws Exception
diff --git a/Components/OrderMailService.php b/Components/OrderMailService.php
new file mode 100644
index 00000000..28d8aab9
--- /dev/null
+++ b/Components/OrderMailService.php
@@ -0,0 +1,60 @@
+modelManager = $modelManager;
+ $this->basketService = $basketService;
+ }
+
+ /**
+ * Sends the mail after a payment is confirmed
+ *
+ * @param \Shopware\Models\Order\Order $order
+ */
+ public function sendOrderConfirmationMail($orderNumber)
+ {
+ $order = $this->basketService->getOrderByOrderNumber($orderNumber);
+ if (!$order) {
+ return;
+ }
+
+ $paymentInfoRepository = $this->modelManager->getRepository(\AdyenPayment\Models\PaymentInfo::class);
+ /** @var \AdyenPayment\Models\PaymentInfo $paymentInfo */
+ $paymentInfo = $paymentInfoRepository->findOneBy([
+ 'orderId' => $order->getId()
+ ]);
+
+ if (!$paymentInfo) {
+ return;
+ }
+
+ $variables = json_decode($paymentInfo->getOrdermailVariables(), true);
+
+ if (is_array($variables)) {
+ $sOrder = Shopware()->Modules()->Order();
+ $sOrder->sUserData = $variables;
+ $sOrder->sendMail($variables);
+ }
+
+ $paymentInfo->setOrdermailVariables(null);
+ $this->modelManager->persist($paymentInfo);
+ $this->modelManager->flush($paymentInfo);
+ }
+}
diff --git a/Controllers/Frontend/Adyen.php b/Controllers/Frontend/Adyen.php
index f31c17fd..28348a3e 100644
--- a/Controllers/Frontend/Adyen.php
+++ b/Controllers/Frontend/Adyen.php
@@ -1,5 +1,6 @@
persistBasket();
+ Shopware()->Session()->offsetSet(AdyenPayment::SESSION_ADYEN_RESTRICT_EMAILS, $transaction->getId());
+
$orderNumber = $this->saveOrder(
$transaction->getId(),
$signature,
@@ -215,6 +218,8 @@ private function prepareOrder($transaction)
false
);
+ Shopware()->Session()->offsetSet(AdyenPayment::SESSION_ADYEN_RESTRICT_EMAILS, false);
+
/** @var Order $order */
$order = $this->getModelManager()->getRepository(Order::class)->findOneBy([
'number' => $orderNumber
diff --git a/Controllers/Frontend/Process.php b/Controllers/Frontend/Process.php
index 26fb3dc0..a4f4900e 100644
--- a/Controllers/Frontend/Process.php
+++ b/Controllers/Frontend/Process.php
@@ -28,11 +28,17 @@ class Shopware_Controllers_Frontend_Process extends Shopware_Controllers_Fronten
*/
private $basketService;
+ /**
+ * @var \AdyenPayment\Components\OrderMailService
+ */
+ private $orderMailService;
+
/**
* @var Logger
*/
private $logger;
+
/**
* Whitelist notifyAction
*/
@@ -41,12 +47,12 @@ public function getWhitelistedCSRFActions()
return ['return'];
}
-
public function preDispatch()
{
$this->adyenManager = $this->get('adyen_payment.components.manager.adyen_manager');
$this->adyenCheckout = $this->get('adyen_payment.components.adyen.payment.method');
$this->basketService = $this->get('adyen_payment.components.basket_service');
+ $this->orderMailService = $this->get('adyen_payment.components.order_mail_service');
$this->logger = $this->get('adyen_payment.logger');
}
@@ -67,6 +73,9 @@ public function returnAction()
case PaymentResultCodes::AUTHORISED:
case PaymentResultCodes::PENDING:
case PaymentResultCodes::RECEIVED:
+ if (!empty($result['merchantReference'])) {
+ $this->orderMailService->sendOrderConfirmationMail($result['merchantReference']);
+ }
$this->redirect([
'controller' => 'checkout',
'action' => 'finish',
diff --git a/Models/PaymentInfo.php b/Models/PaymentInfo.php
index f1b133c7..13262dc7 100644
--- a/Models/PaymentInfo.php
+++ b/Models/PaymentInfo.php
@@ -59,8 +59,12 @@ class PaymentInfo extends ModelEntity
private $resultCode;
/**
- * PaymenntInfo constructor
+ * @var string
+ *
+ * @ORM\Column(name="ordermail_variables", type="text", nullable=true)
*/
+ private $ordermailVariables;
+
public function __construct()
{
$this->setCreatedAt(new \DateTime('now'));
@@ -195,4 +199,22 @@ public function setResultCode(string $resultCode)
$this->resultCode = $resultCode;
return $this;
}
+
+ /**
+ * @return string|null
+ */
+ public function getOrdermailVariables()
+ {
+ return $this->ordermailVariables;
+ }
+
+ /**
+ * @param string|null $ordermailVariables
+ * @return $this
+ */
+ public function setOrdermailVariables($ordermailVariables)
+ {
+ $this->ordermailVariables = $ordermailVariables;
+ return $this;
+ }
}
diff --git a/Resources/services/components.xml b/Resources/services/components.xml
index 50bc60f9..00f4515e 100644
--- a/Resources/services/components.xml
+++ b/Resources/services/components.xml
@@ -19,6 +19,10 @@
+
+
+
+
diff --git a/Resources/services/subscribers.xml b/Resources/services/subscribers.xml
index 46a75234..f300a0e2 100644
--- a/Resources/services/subscribers.xml
+++ b/Resources/services/subscribers.xml
@@ -38,6 +38,11 @@
+
+
+
+
+
diff --git a/Subscriber/OrderEmailSubscriber.php b/Subscriber/OrderEmailSubscriber.php
new file mode 100644
index 00000000..5ad97f34
--- /dev/null
+++ b/Subscriber/OrderEmailSubscriber.php
@@ -0,0 +1,96 @@
+modelManager = $modelManager;
+ $this->paymentInfoRepository = $this->modelManager->getRepository(PaymentInfo::class);
+ $this->orderMailService = $orderMailService;
+ }
+
+ public static function getSubscribedEvents()
+ {
+ return [
+ 'Shopware_Modules_Order_SendMail_Send' => 'shouldStopEmailSending',
+ 'Enlight_Controller_Action_PostDispatch_Frontend_Checkout' => 'onCheckoutDispatch'
+ ];
+ }
+
+ public function shouldStopEmailSending(Enlight_Event_EventArgs $args)
+ {
+ $orderId = $args->get('orderId');
+ $variables = $args->get('variables');
+
+ if ($variables['additional']['payment']['name'] === AdyenPayment::ADYEN_GENERAL_PAYMENT_METHOD &&
+ Shopware()->Session()->get(AdyenPayment::SESSION_ADYEN_RESTRICT_EMAILS, true) === false) {
+ Shopware()->Session()->offsetSet(AdyenPayment::SESSION_ADYEN_RESTRICT_EMAILS, true);
+
+ /** @var PaymentInfo $paymentInfo */
+ $paymentInfo = $this->paymentInfoRepository->findOneBy([
+ 'orderId' => $orderId
+ ]);
+
+ if ($paymentInfo && empty($paymentInfo->getOrdermailVariables())) {
+ $paymentInfo->setOrdermailVariables(json_encode($variables));
+
+ $this->modelManager->persist($paymentInfo);
+ $this->modelManager->flush($paymentInfo);
+ }
+
+ return false;
+ }
+
+ return null;
+ }
+
+ public function onCheckoutDispatch(Enlight_Event_EventArgs $args)
+ {
+
+ /** @var Shopware_Controllers_Frontend_Checkout $subject */
+ $subject = $args->getSubject();
+
+ if ($subject->Request()->getActionName() !== 'finish') {
+ return;
+ }
+
+ $data = $subject->View()->getAssign();
+
+ if (!$data['sOrderNumber']) {
+ return;
+ }
+
+ $this->orderMailService->sendOrderConfirmationMail($data['sOrderNumber']);
+ }
+}
diff --git a/plugin.xml b/plugin.xml
index 0558ccc2..a49a7c4e 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -5,7 +5,8 @@
- 1.5.0
+
+ 1.5.1
Adyen
Adyen
https://adyen.com