MassAssignGroup.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Customer\Controller\Adminhtml\Index;
  7. use Magento\Customer\Model\Customer;
  8. use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
  9. use Magento\Backend\App\Action\Context;
  10. use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
  11. use Magento\Eav\Model\Entity\Collection\AbstractCollection;
  12. use Magento\Ui\Component\MassAction\Filter;
  13. use Magento\Customer\Api\CustomerRepositoryInterface;
  14. use Magento\Framework\Controller\ResultFactory;
  15. /**
  16. * Class MassAssignGroup
  17. */
  18. class MassAssignGroup extends AbstractMassAction implements HttpPostActionInterface
  19. {
  20. /**
  21. * @var CustomerRepositoryInterface
  22. */
  23. protected $customerRepository;
  24. /**
  25. * @param Context $context
  26. * @param Filter $filter
  27. * @param CollectionFactory $collectionFactory
  28. * @param CustomerRepositoryInterface $customerRepository
  29. */
  30. public function __construct(
  31. Context $context,
  32. Filter $filter,
  33. CollectionFactory $collectionFactory,
  34. CustomerRepositoryInterface $customerRepository
  35. ) {
  36. parent::__construct($context, $filter, $collectionFactory);
  37. $this->customerRepository = $customerRepository;
  38. }
  39. /**
  40. * Customer mass assign group action
  41. *
  42. * @param AbstractCollection $collection
  43. * @return \Magento\Backend\Model\View\Result\Redirect
  44. */
  45. protected function massAction(AbstractCollection $collection)
  46. {
  47. $customersUpdated = 0;
  48. foreach ($collection->getAllIds() as $customerId) {
  49. // Verify customer exists
  50. $customer = $this->customerRepository->getById($customerId);
  51. $customer->setGroupId($this->getRequest()->getParam('group'));
  52. // No need to validate customer and customer address during assigning customer to the group
  53. $this->setIgnoreValidationFlag($customer);
  54. $this->customerRepository->save($customer);
  55. $customersUpdated++;
  56. }
  57. if ($customersUpdated) {
  58. $this->messageManager->addSuccess(__('A total of %1 record(s) were updated.', $customersUpdated));
  59. }
  60. /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
  61. $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
  62. $resultRedirect->setPath($this->getComponentRefererUrl());
  63. return $resultRedirect;
  64. }
  65. /**
  66. * Set ignore_validation_flag to skip unnecessary address and customer validation
  67. *
  68. * @param Customer $customer
  69. * @return void
  70. */
  71. private function setIgnoreValidationFlag($customer)
  72. {
  73. $customer->setData('ignore_validation_flag', true);
  74. }
  75. }