Delete.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\EntityManager\Operation;
  7. use Magento\Framework\EntityManager\Operation\DeleteInterface;
  8. use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
  9. use Magento\Framework\EntityManager\Operation\Delete\DeleteMain;
  10. use Magento\Framework\EntityManager\Operation\Delete\DeleteAttributes;
  11. use Magento\Framework\EntityManager\Operation\Delete\DeleteExtensions;
  12. use Magento\Framework\EntityManager\MetadataPool;
  13. use Magento\Framework\EntityManager\EventManager;
  14. use Magento\Framework\EntityManager\TypeResolver;
  15. use Magento\Framework\App\ResourceConnection;
  16. /**
  17. * Class Delete
  18. *
  19. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  20. */
  21. class Delete implements DeleteInterface
  22. {
  23. /**
  24. * @var MetadataPool
  25. */
  26. private $metadataPool;
  27. /**
  28. * @var TypeResolver
  29. */
  30. private $typeResolver;
  31. /**
  32. * @var ResourceConnection
  33. */
  34. private $resourceConnection;
  35. /**
  36. * @var EventManager
  37. */
  38. private $eventManager;
  39. /**
  40. * @var TransactionManagerInterface
  41. */
  42. private $transactionManager;
  43. /**
  44. * @var DeleteMain
  45. */
  46. private $deleteMain;
  47. /**
  48. * @var DeleteAttributes
  49. */
  50. private $deleteAttributes;
  51. /**
  52. * @var DeleteExtensions
  53. */
  54. private $deleteExtensions;
  55. /**
  56. * @param MetadataPool $metadataPool
  57. * @param TypeResolver $typeResolver
  58. * @param ResourceConnection $resourceConnection
  59. * @param EventManager $eventManager
  60. * @param TransactionManagerInterface $transactionManager
  61. * @param DeleteMain $deleteMain
  62. * @param DeleteAttributes $deleteAttributes
  63. * @param DeleteExtensions $deleteExtensions
  64. */
  65. public function __construct(
  66. MetadataPool $metadataPool,
  67. TypeResolver $typeResolver,
  68. ResourceConnection $resourceConnection,
  69. EventManager $eventManager,
  70. TransactionManagerInterface $transactionManager,
  71. DeleteMain $deleteMain,
  72. DeleteAttributes $deleteAttributes,
  73. DeleteExtensions $deleteExtensions
  74. ) {
  75. $this->metadataPool = $metadataPool;
  76. $this->typeResolver = $typeResolver;
  77. $this->resourceConnection = $resourceConnection;
  78. $this->eventManager = $eventManager;
  79. $this->transactionManager = $transactionManager;
  80. $this->deleteMain = $deleteMain;
  81. $this->deleteAttributes = $deleteAttributes;
  82. $this->deleteExtensions = $deleteExtensions;
  83. }
  84. /**
  85. * @param object $entity
  86. * @param array $arguments
  87. * @return object
  88. * @throws \Exception
  89. */
  90. public function execute($entity, $arguments = [])
  91. {
  92. $entityType = $this->typeResolver->resolve($entity);
  93. $metadata = $this->metadataPool->getMetadata($entityType);
  94. $connection = $this->resourceConnection->getConnectionByName($metadata->getEntityConnectionName());
  95. $this->transactionManager->start($connection);
  96. try {
  97. $this->eventManager->dispatch(
  98. 'entity_manager_delete_before',
  99. [
  100. 'entity_type' => $entityType,
  101. 'entity' => $entity
  102. ]
  103. );
  104. $this->eventManager->dispatchEntityEvent($entityType, 'delete_before', ['entity' => $entity]);
  105. $entity = $this->deleteExtensions->execute($entity, $arguments);
  106. $entity = $this->deleteAttributes->execute($entity, $arguments);
  107. $entity = $this->deleteMain->execute($entity, $arguments);
  108. $this->eventManager->dispatchEntityEvent($entityType, 'delete_after', ['entity' => $entity]);
  109. $this->eventManager->dispatch(
  110. 'entity_manager_delete_after',
  111. [
  112. 'entity_type' => $entityType,
  113. 'entity' => $entity
  114. ]
  115. );
  116. $this->transactionManager->commit();
  117. } catch (\Exception $e) {
  118. $this->transactionManager->rollBack();
  119. throw $e;
  120. }
  121. return $entity;
  122. }
  123. }