Addressbooks.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\Config\Source\Settings;
  3. class Addressbooks 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. * Addressbooks constructor.
  15. *
  16. * @param \Magento\Framework\Registry $registry
  17. * @param \Dotdigitalgroup\Email\Helper\Data $data
  18. */
  19. public function __construct(
  20. \Magento\Framework\Registry $registry,
  21. \Dotdigitalgroup\Email\Helper\Data $data
  22. ) {
  23. $this->registry = $registry;
  24. $this->helper = $data;
  25. }
  26. /**
  27. * Retrieve list of options.
  28. *
  29. * @return array
  30. */
  31. public function toOptionArray()
  32. {
  33. $fields = [];
  34. // Add a "Do Not Map" Option
  35. $fields[] = ['value' => 0, 'label' => '-- Please Select --'];
  36. $apiEnabled = $this->helper->isEnabled($this->helper->getWebsite());
  37. if ($apiEnabled) {
  38. $savedAddressbooks = $this->registry->registry('addressbooks');
  39. if ($savedAddressbooks) {
  40. $addressBooks = $savedAddressbooks;
  41. } else {
  42. $client = $this->helper->getWebsiteApiClient($this->helper->getWebsite());
  43. //make an api call an register the addressbooks
  44. $addressBooks = $client->getAddressBooks();
  45. if ($addressBooks) {
  46. $this->registry->unregister('addressbooks'); // additional measure
  47. $this->registry->register('addressbooks', $addressBooks);
  48. }
  49. }
  50. //set up fields with book id and label
  51. foreach ($addressBooks as $book) {
  52. if (isset($book->id)) {
  53. $fields[] = [
  54. 'value' => (string)$book->id,
  55. 'label' => (string)$book->name,
  56. ];
  57. }
  58. }
  59. }
  60. return $fields;
  61. }
  62. }