diff --git a/app/code/Magento/AsynchronousOperations/Api/Data/BulkSummaryInterface.php b/app/code/Magento/AsynchronousOperations/Api/Data/BulkSummaryInterface.php
index f5dd5bb13ea..a433ec0953a 100644
--- a/app/code/Magento/AsynchronousOperations/Api/Data/BulkSummaryInterface.php
+++ b/app/code/Magento/AsynchronousOperations/Api/Data/BulkSummaryInterface.php
@@ -13,6 +13,8 @@
*/
interface BulkSummaryInterface extends \Magento\Framework\Bulk\BulkSummaryInterface
{
+ const USER_TYPE = 'user_type';
+
/**
* Retrieve existing extension attributes object.
*
@@ -31,4 +33,19 @@ public function getExtensionAttributes();
public function setExtensionAttributes(
\Magento\AsynchronousOperations\Api\Data\BulkSummaryExtensionInterface $extensionAttributes
);
+
+ /**
+ * Get user type
+ *
+ * @return int
+ */
+ public function getUserType();
+
+ /**
+ * Set user type
+ *
+ * @param int $userType
+ * @return $this
+ */
+ public function setUserType($userType);
}
diff --git a/app/code/Magento/AsynchronousOperations/Model/BulkManagement.php b/app/code/Magento/AsynchronousOperations/Model/BulkManagement.php
index 4f086ce8ac2..faf01921e57 100644
--- a/app/code/Magento/AsynchronousOperations/Model/BulkManagement.php
+++ b/app/code/Magento/AsynchronousOperations/Model/BulkManagement.php
@@ -5,6 +5,7 @@
*/
namespace Magento\AsynchronousOperations\Model;
+use Magento\Framework\App\ObjectManager;
use Magento\Framework\App\ResourceConnection;
use Magento\AsynchronousOperations\Api\Data\BulkSummaryInterface;
use Magento\AsynchronousOperations\Api\Data\BulkSummaryInterfaceFactory;
@@ -13,6 +14,7 @@
use Magento\Framework\EntityManager\EntityManager;
use Magento\Framework\EntityManager\MetadataPool;
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\CollectionFactory;
+use Magento\Authorization\Model\UserContextInterface;
/**
* Class BulkManagement
@@ -51,6 +53,11 @@ class BulkManagement implements \Magento\Framework\Bulk\BulkManagementInterface
*/
private $resourceConnection;
+ /**
+ * @var \Magento\Authorization\Model\UserContextInterface
+ */
+ private $userContext;
+
/**
* @var \Psr\Log\LoggerInterface
*/
@@ -65,6 +72,7 @@ class BulkManagement implements \Magento\Framework\Bulk\BulkManagementInterface
* @param MetadataPool $metadataPool
* @param ResourceConnection $resourceConnection
* @param \Psr\Log\LoggerInterface $logger
+ * @param UserContextInterface $userContext
*/
public function __construct(
EntityManager $entityManager,
@@ -73,7 +81,8 @@ public function __construct(
BulkPublisherInterface $publisher,
MetadataPool $metadataPool,
ResourceConnection $resourceConnection,
- \Psr\Log\LoggerInterface $logger
+ \Psr\Log\LoggerInterface $logger,
+ UserContextInterface $userContext = null
) {
$this->entityManager = $entityManager;
$this->bulkSummaryFactory= $bulkSummaryFactory;
@@ -82,6 +91,7 @@ public function __construct(
$this->resourceConnection = $resourceConnection;
$this->publisher = $publisher;
$this->logger = $logger;
+ $this->userContext = $userContext ?: ObjectManager::getInstance()->get(UserContextInterface::class);
}
/**
@@ -93,6 +103,10 @@ public function scheduleBulk($bulkUuid, array $operations, $description, $userId
$connection = $this->resourceConnection->getConnectionByName($metadata->getEntityConnectionName());
// save bulk summary and related operations
$connection->beginTransaction();
+ $userType = $this->userContext->getUserType();
+ if ($userType === null) {
+ $userType = UserContextInterface::USER_TYPE_ADMIN;
+ }
try {
/** @var \Magento\AsynchronousOperations\Api\Data\BulkSummaryInterface $bulkSummary */
$bulkSummary = $this->bulkSummaryFactory->create();
@@ -100,6 +114,7 @@ public function scheduleBulk($bulkUuid, array $operations, $description, $userId
$bulkSummary->setBulkId($bulkUuid);
$bulkSummary->setDescription($description);
$bulkSummary->setUserId($userId);
+ $bulkSummary->setUserType($userType);
$bulkSummary->setOperationCount((int)$bulkSummary->getOperationCount() + count($operations));
$this->entityManager->save($bulkSummary);
diff --git a/app/code/Magento/AsynchronousOperations/Model/BulkSummary.php b/app/code/Magento/AsynchronousOperations/Model/BulkSummary.php
index e99233d0769..1d834ad10b2 100644
--- a/app/code/Magento/AsynchronousOperations/Model/BulkSummary.php
+++ b/app/code/Magento/AsynchronousOperations/Model/BulkSummary.php
@@ -78,6 +78,22 @@ public function setUserId($userId)
return $this->setData(self::USER_ID, $userId);
}
+ /**
+ * @inheritDoc
+ */
+ public function getUserType()
+ {
+ return $this->getData(self::USER_TYPE);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function setUserType($userType)
+ {
+ return $this->setData(self::USER_TYPE, $userType);
+ }
+
/**
* @inheritDoc
*/
diff --git a/app/code/Magento/AsynchronousOperations/Model/MassSchedule.php b/app/code/Magento/AsynchronousOperations/Model/MassSchedule.php
index 2d516e82f40..eae92e1663f 100644
--- a/app/code/Magento/AsynchronousOperations/Model/MassSchedule.php
+++ b/app/code/Magento/AsynchronousOperations/Model/MassSchedule.php
@@ -8,6 +8,7 @@
namespace Magento\AsynchronousOperations\Model;
+use Magento\Framework\App\ObjectManager;
use Magento\Framework\DataObject\IdentityGeneratorInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\AsynchronousOperations\Api\Data\ItemStatusInterfaceFactory;
@@ -18,9 +19,12 @@
use Magento\Framework\Exception\BulkException;
use Psr\Log\LoggerInterface;
use Magento\AsynchronousOperations\Model\ResourceModel\Operation\OperationRepository;
+use Magento\Authorization\Model\UserContextInterface;
/**
* Class MassSchedule used for adding multiple entities as Operations to Bulk Management with the status tracking
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Suppressed without refactoring to not introduce BiC
*/
class MassSchedule
{
@@ -54,6 +58,11 @@ class MassSchedule
*/
private $operationRepository;
+ /**
+ * @var \Magento\Authorization\Model\UserContextInterface
+ */
+ private $userContext;
+
/**
* Initialize dependencies.
*
@@ -63,6 +72,7 @@ class MassSchedule
* @param BulkManagementInterface $bulkManagement
* @param LoggerInterface $logger
* @param OperationRepository $operationRepository
+ * @param UserContextInterface $userContext
*/
public function __construct(
IdentityGeneratorInterface $identityService,
@@ -70,7 +80,8 @@ public function __construct(
AsyncResponseInterfaceFactory $asyncResponseFactory,
BulkManagementInterface $bulkManagement,
LoggerInterface $logger,
- OperationRepository $operationRepository
+ OperationRepository $operationRepository,
+ UserContextInterface $userContext = null
) {
$this->identityService = $identityService;
$this->itemStatusInterfaceFactory = $itemStatusInterfaceFactory;
@@ -78,15 +89,16 @@ public function __construct(
$this->bulkManagement = $bulkManagement;
$this->logger = $logger;
$this->operationRepository = $operationRepository;
+ $this->userContext = $userContext ?: ObjectManager::getInstance()->get(UserContextInterface::class);
}
/**
* Schedule new bulk operation based on the list of entities
*
- * @param $topicName
- * @param $entitiesArray
- * @param null $groupId
- * @param null $userId
+ * @param string $topicName
+ * @param array $entitiesArray
+ * @param string $groupId
+ * @param string $userId
* @return AsyncResponseInterface
* @throws BulkException
* @throws LocalizedException
@@ -95,6 +107,10 @@ public function publishMass($topicName, array $entitiesArray, $groupId = null, $
{
$bulkDescription = __('Topic %1', $topicName);
+ if ($userId == null) {
+ $userId = $this->userContext->getUserId();
+ }
+
if ($groupId == null) {
$groupId = $this->identityService->generateId();
diff --git a/app/code/Magento/AsynchronousOperations/Test/Unit/Model/BulkManagementTest.php b/app/code/Magento/AsynchronousOperations/Test/Unit/Model/BulkManagementTest.php
index 3a45c34df17..e5951fb129e 100644
--- a/app/code/Magento/AsynchronousOperations/Test/Unit/Model/BulkManagementTest.php
+++ b/app/code/Magento/AsynchronousOperations/Test/Unit/Model/BulkManagementTest.php
@@ -108,6 +108,7 @@ public function testScheduleBulk()
$bulkUuid = 'bulk-001';
$description = 'Bulk summary description...';
$userId = 1;
+ $userType = \Magento\Authorization\Model\UserContextInterface::USER_TYPE_ADMIN;
$connectionName = 'default';
$topicNames = ['topic.name.0', 'topic.name.1'];
$operation = $this->getMockBuilder(\Magento\AsynchronousOperations\Api\Data\OperationInterface::class)
@@ -131,6 +132,7 @@ public function testScheduleBulk()
$bulkSummary->expects($this->once())->method('setBulkId')->with($bulkUuid)->willReturnSelf();
$bulkSummary->expects($this->once())->method('setDescription')->with($description)->willReturnSelf();
$bulkSummary->expects($this->once())->method('setUserId')->with($userId)->willReturnSelf();
+ $bulkSummary->expects($this->once())->method('setUserType')->with($userType)->willReturnSelf();
$bulkSummary->expects($this->once())->method('getOperationCount')->willReturn(1);
$bulkSummary->expects($this->once())->method('setOperationCount')->with(3)->willReturnSelf();
$this->entityManager->expects($this->once())->method('save')->with($bulkSummary)->willReturn($bulkSummary);
diff --git a/app/code/Magento/AsynchronousOperations/composer.json b/app/code/Magento/AsynchronousOperations/composer.json
index 7d5a097eeea..18927b5f4ec 100644
--- a/app/code/Magento/AsynchronousOperations/composer.json
+++ b/app/code/Magento/AsynchronousOperations/composer.json
@@ -10,7 +10,6 @@
"magento/module-authorization": "*",
"magento/module-backend": "*",
"magento/module-ui": "*",
- "magento/module-user": "*",
"php": "~7.1.3||~7.2.0"
},
"suggest": {
diff --git a/app/code/Magento/AsynchronousOperations/etc/db_schema.xml b/app/code/Magento/AsynchronousOperations/etc/db_schema.xml
index 1b99ce9a280..342326e6666 100644
--- a/app/code/Magento/AsynchronousOperations/etc/db_schema.xml
+++ b/app/code/Magento/AsynchronousOperations/etc/db_schema.xml
@@ -14,7 +14,8 @@