Program.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\Config\Automation;
  3. class Program implements \Magento\Framework\Data\OptionSourceInterface
  4. {
  5. /**
  6. * @var \Dotdigitalgroup\Email\Helper\Data
  7. */
  8. private $helper;
  9. /**
  10. * @var \Magento\Store\Model\StoreManagerInterface
  11. */
  12. private $storeManager;
  13. /**
  14. * @var \Magento\Framework\Registry
  15. */
  16. private $registry;
  17. /**
  18. * @var \Magento\Framework\App\RequestInterface
  19. */
  20. private $request;
  21. /**
  22. * Escaper
  23. *
  24. * @var \Magento\Framework\Escaper
  25. */
  26. private $escaper;
  27. /**
  28. * Program constructor.
  29. *
  30. * @param \Dotdigitalgroup\Email\Helper\Data $data
  31. * @param \Magento\Framework\App\RequestInterface $requestInterface
  32. * @param \Magento\Store\Model\StoreManagerInterface $storeManagerInterface
  33. * @param \Magento\Framework\Registry $registry
  34. * @param \Magento\Framework\Escaper $escaper
  35. */
  36. public function __construct(
  37. \Dotdigitalgroup\Email\Helper\Data $data,
  38. \Magento\Framework\App\RequestInterface $requestInterface,
  39. \Magento\Store\Model\StoreManagerInterface $storeManagerInterface,
  40. \Magento\Framework\Registry $registry,
  41. \Magento\Framework\Escaper $escaper
  42. ) {
  43. $this->helper = $data;
  44. $this->request = $requestInterface;
  45. $this->storeManager = $storeManagerInterface;
  46. $this->registry = $registry;
  47. $this->escaper = $escaper;
  48. }
  49. /**
  50. * Get options.
  51. *
  52. * @return array
  53. */
  54. public function toOptionArray()
  55. {
  56. $fields = [];
  57. $fields[] = ['value' => '0', 'label' => '-- Disabled --'];
  58. $websiteName = $this->request->getParam('website', false);
  59. $website = ($websiteName)
  60. ? $this->storeManager->getWebsite($websiteName) : 0;
  61. if ($this->helper->isEnabled($website)) {
  62. $savedPrograms = $this->registry->registry('programs');
  63. //get saved datafileds from registry
  64. if (is_array($savedPrograms)) {
  65. $programs = $savedPrograms;
  66. } else {
  67. //grab the datafields request and save to register
  68. $client = $this->helper->getWebsiteApiClient($website);
  69. $programs = $client->getPrograms();
  70. $this->registry->unregister('programs');
  71. $this->registry->register('programs', $programs);
  72. }
  73. //set the api error message for the first option
  74. if (isset($programs->message)) {
  75. //message
  76. $fields[] = ['value' => 0, 'label' => $programs->message];
  77. } elseif (!empty($programs)) {
  78. //loop for all programs option
  79. foreach ($programs as $program) {
  80. if (isset($program->id) && $program->status == 'Active') {
  81. $fields[] = [
  82. 'value' => $program->id,
  83. 'label' => $program->name,
  84. ];
  85. }
  86. }
  87. }
  88. }
  89. return $fields;
  90. }
  91. }