Automapdatafields.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace Dotdigitalgroup\Email\Controller\Adminhtml\Run;
  3. class Automapdatafields extends \Magento\Backend\App\AbstractAction
  4. {
  5. /**
  6. * Authorization level of a basic admin session
  7. *
  8. * @see _isAllowed()
  9. */
  10. const ADMIN_RESOURCE = 'Dotdigitalgroup_Email::config';
  11. /**
  12. * @var \Magento\Framework\Message\ManagerInterface
  13. */
  14. protected $messageManager;
  15. /**
  16. * @var \Dotdigitalgroup\Email\Helper\Data
  17. */
  18. private $data;
  19. /**
  20. * @var \Dotdigitalgroup\Email\Model\Connector\Datafield
  21. */
  22. private $datafield;
  23. /**
  24. * @var \Magento\Framework\Escaper
  25. */
  26. private $escaper;
  27. /**
  28. * @var \Magento\Framework\App\Config\ReinitableConfigInterface
  29. */
  30. private $config;
  31. /**
  32. * Automapdatafields constructor.
  33. *
  34. * @param \Dotdigitalgroup\Email\Helper\Data $data
  35. * @param \Dotdigitalgroup\Email\Model\Connector\Datafield $datafield
  36. * @param \Magento\Backend\App\Action\Context $context
  37. * @param \Magento\Framework\Escaper $escaper
  38. * @param \Magento\Framework\App\Config\ReinitableConfigInterface $config
  39. */
  40. public function __construct(
  41. \Dotdigitalgroup\Email\Helper\Data $data,
  42. \Dotdigitalgroup\Email\Model\Connector\Datafield $datafield,
  43. \Magento\Backend\App\Action\Context $context,
  44. \Magento\Framework\Escaper $escaper,
  45. \Magento\Framework\App\Config\ReinitableConfigInterface $config
  46. ) {
  47. $this->data = $data;
  48. $this->datafield = $datafield;
  49. $this->messageManager = $context->getMessageManager();
  50. $this->escaper = $escaper;
  51. $this->config = $config;
  52. parent::__construct($context);
  53. }
  54. /**
  55. * Execute method.
  56. *
  57. * @return null
  58. */
  59. public function execute()
  60. {
  61. $result = ['errors' => false, 'message' => ''];
  62. $website = $this->getRequest()->getParam('website', 0);
  63. $client = false;
  64. if ($this->data->isEnabled()) {
  65. $client = $this->data->getWebsiteApiClient($website);
  66. }
  67. $params = [
  68. 'section' => 'connector_developer_settings',
  69. 'website' => $website
  70. ];
  71. $redirectUrl = $this->getUrl('adminhtml/system_config/edit', $params);
  72. if (!$client) {
  73. $this->messageManager->addNoticeMessage('Please enable api first.');
  74. } else {
  75. // get all possible datatifileds
  76. $datafields = $this->datafield->getContactDatafields();
  77. $eeFields = $this->datafield->getExtraDataFields();
  78. foreach ($datafields as $key => $datafield) {
  79. $response = $client->postDataFields($datafield);
  80. //ignore existing datafields message
  81. if (isset($response->message) && $response->message !=
  82. \Dotdigitalgroup\Email\Model\Apiconnector\Client::API_ERROR_DATAFIELD_EXISTS
  83. ) {
  84. $result['errors'] = true;
  85. $result['message'] .= ' Datafield ' . $datafield['name'] . ' - ' . $response->message . '</br>';
  86. } else {
  87. if ($website) {
  88. $scope = 'websites';
  89. $scopeId = $website;
  90. } else {
  91. $scope = 'default';
  92. $scopeId = '0';
  93. }
  94. //Config path depends on EE or CE
  95. $configPath = isset($eeFields[$key]) ? 'connector_data_mapping/extra_data/' :
  96. 'connector_data_mapping/customer_data/';
  97. //map the successfully created datafield
  98. $this->data->saveConfigData(
  99. $configPath . $key,
  100. strtoupper($datafield['name']),
  101. $scope,
  102. $scopeId
  103. );
  104. $this->data->log('successfully connected : ' . $datafield['name']);
  105. }
  106. }
  107. if ($result['errors']) {
  108. $this->messageManager->addNoticeMessage($result['message']);
  109. } else {
  110. $this->messageManager->addSuccessMessage('All Data Fields Created And Mapped.');
  111. }
  112. //Clear config cache
  113. $this->config->reinit();
  114. }
  115. $this->_redirect($redirectUrl);
  116. }
  117. }