From 11303b6489ca8f5cf6dd93fbec1fbb04337334d8 Mon Sep 17 00:00:00 2001 From: Kamil Kokot Date: Tue, 12 Jan 2021 16:27:24 +0100 Subject: [PATCH] Use tweaked DoctrineStorage for Payum that accepts new Doctrine Persistence API --- .../UseTweakedDoctrineStoragePass.php | 17 +++++ .../PayumBundle/Storage/DoctrineStorage.php | 65 +++++++++++++++++++ .../Bundle/PayumBundle/SyliusPayumBundle.php | 2 + 3 files changed, 84 insertions(+) create mode 100644 src/Sylius/Bundle/PayumBundle/DependencyInjection/Compiler/UseTweakedDoctrineStoragePass.php create mode 100644 src/Sylius/Bundle/PayumBundle/Storage/DoctrineStorage.php diff --git a/src/Sylius/Bundle/PayumBundle/DependencyInjection/Compiler/UseTweakedDoctrineStoragePass.php b/src/Sylius/Bundle/PayumBundle/DependencyInjection/Compiler/UseTweakedDoctrineStoragePass.php new file mode 100644 index 0000000000..43b9636e01 --- /dev/null +++ b/src/Sylius/Bundle/PayumBundle/DependencyInjection/Compiler/UseTweakedDoctrineStoragePass.php @@ -0,0 +1,17 @@ +setParameter('payum.storage.doctrine.orm.class', DoctrineStorage::class); + } +} diff --git a/src/Sylius/Bundle/PayumBundle/Storage/DoctrineStorage.php b/src/Sylius/Bundle/PayumBundle/Storage/DoctrineStorage.php new file mode 100644 index 0000000000..c23476e6bd --- /dev/null +++ b/src/Sylius/Bundle/PayumBundle/Storage/DoctrineStorage.php @@ -0,0 +1,65 @@ +objectManager = $objectManager; + } + + public function findBy(array $criteria): array + { + return $this->objectManager->getRepository($this->modelClass)->findBy($criteria); + } + + protected function doFind($id): ?object + { + return $this->objectManager->find($this->modelClass, $id); + } + + protected function doUpdateModel($model): void + { + $this->objectManager->persist($model); + $this->objectManager->flush(); + } + + protected function doDeleteModel($model): void + { + $this->objectManager->remove($model); + $this->objectManager->flush(); + } + + protected function doGetIdentity($model): Identity + { + $modelMetadata = $this->objectManager->getClassMetadata(get_class($model)); + $id = $modelMetadata->getIdentifierValues($model); + if (count($id) > 1) { + throw new \LogicException('Storage not support composite primary ids'); + } + + return new Identity(array_shift($id), $model); + } +} diff --git a/src/Sylius/Bundle/PayumBundle/SyliusPayumBundle.php b/src/Sylius/Bundle/PayumBundle/SyliusPayumBundle.php index 5782c6e07a..d0c5b63dbb 100644 --- a/src/Sylius/Bundle/PayumBundle/SyliusPayumBundle.php +++ b/src/Sylius/Bundle/PayumBundle/SyliusPayumBundle.php @@ -14,6 +14,7 @@ declare(strict_types=1); namespace Sylius\Bundle\PayumBundle; use Sylius\Bundle\PayumBundle\DependencyInjection\Compiler\RegisterGatewayConfigTypePass; +use Sylius\Bundle\PayumBundle\DependencyInjection\Compiler\UseTweakedDoctrineStoragePass; use Sylius\Bundle\ResourceBundle\AbstractResourceBundle; use Sylius\Bundle\ResourceBundle\SyliusResourceBundle; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -32,5 +33,6 @@ final class SyliusPayumBundle extends AbstractResourceBundle parent::build($container); $container->addCompilerPass(new RegisterGatewayConfigTypePass()); + $container->addCompilerPass(new UseTweakedDoctrineStoragePass()); } }