Datafields.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\Config\Source\Datamapping;
  3. class Datafields implements \Magento\Framework\Option\ArrayInterface
  4. {
  5. /**
  6. * @var \Dotdigitalgroup\Email\Helper\Data
  7. */
  8. private $helper;
  9. /**
  10. * @var \Magento\Framework\Registry
  11. */
  12. private $registry;
  13. /**
  14. * @var \Magento\Store\Model\StoreManagerInterface
  15. */
  16. private $storeManager;
  17. /**
  18. * Datafields constructor.
  19. *
  20. * @param \Magento\Framework\Registry $registry
  21. * @param \Dotdigitalgroup\Email\Helper\Data $data
  22. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  23. */
  24. public function __construct(
  25. \Magento\Framework\Registry $registry,
  26. \Dotdigitalgroup\Email\Helper\Data $data,
  27. \Magento\Store\Model\StoreManagerInterface $storeManager
  28. ) {
  29. $this->helper = $data;
  30. $this->registry = $registry;
  31. $this->storeManager = $storeManager;
  32. }
  33. /**
  34. * Datafields option.
  35. *
  36. * @return array
  37. */
  38. public function toOptionArray()
  39. {
  40. $fields = [];
  41. //default data option
  42. $fields[] = ['value' => '0', 'label' => '-- Please Select --'];
  43. $apiEnabled = $this->helper->isEnabled($this->helper->getWebsite());
  44. if ($apiEnabled) {
  45. $savedDatafields = $this->registry->registry('datafields');
  46. //get saved datafileds from registry
  47. if ($savedDatafields) {
  48. $datafields = $savedDatafields;
  49. } else {
  50. //grab the datafields request and save to register
  51. $client = $this->helper->getWebsiteApiClient();
  52. $datafields = $client->getDatafields();
  53. $this->registry->unregister('datafields'); // additional measure
  54. $this->registry->register('datafields', $datafields);
  55. }
  56. //set the api error message for the first option
  57. if (isset($datafields->message)) {
  58. //message
  59. $fields[] = [
  60. 'value' => 0,
  61. 'label' => $datafields->message,
  62. ];
  63. } else {
  64. //loop for all datafields option
  65. foreach ($datafields as $datafield) {
  66. if (isset($datafield->name)) {
  67. $fields[] = [
  68. 'value' => $datafield->name,
  69. 'label' => $datafield->name,
  70. ];
  71. }
  72. }
  73. }
  74. }
  75. return $fields;
  76. }
  77. }