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()); } }