Addressbooks.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\Config\Configuration;
  3. class Addressbooks implements \Magento\Framework\Data\OptionSourceInterface
  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. * Addressbooks constructor.
  19. *
  20. * @param \Magento\Store\Model\StoreManagerInterface $storeManagerInterface
  21. * @param \Dotdigitalgroup\Email\Helper\Data $data
  22. * @param \Magento\Framework\Registry $registry
  23. */
  24. public function __construct(
  25. \Magento\Store\Model\StoreManagerInterface $storeManagerInterface,
  26. \Dotdigitalgroup\Email\Helper\Data $data,
  27. \Magento\Framework\Registry $registry
  28. ) {
  29. $this->storeManager = $storeManagerInterface;
  30. $this->helper = $data;
  31. $this->registry = $registry;
  32. }
  33. /**
  34. * Get address books.
  35. *
  36. * @return null
  37. */
  38. public function getAddressBooks()
  39. {
  40. $website = $this->helper->getWebsite();
  41. $client = $this->helper->getWebsiteApiClient($website);
  42. $savedAddressBooks = $this->registry->registry('addressbooks');
  43. //get saved address books from registry
  44. if ($savedAddressBooks) {
  45. $addressBooks = $savedAddressBooks;
  46. } else {
  47. // api all address books
  48. $addressBooks = $client->getAddressBooks();
  49. $this->registry->unregister('addressbooks'); // additional measure
  50. $this->registry->register('addressbooks', $addressBooks);
  51. }
  52. return $addressBooks;
  53. }
  54. /**
  55. * Get options.
  56. *
  57. * @return array
  58. */
  59. public function toOptionArray()
  60. {
  61. $fields[] = [
  62. 'label' => __('---- Default Option ----'),
  63. 'value' => '0',
  64. ];
  65. $website = $this->helper->getWebsite();
  66. $apiEnabled = $this->helper->isEnabled($website);
  67. //get address books options
  68. if ($apiEnabled) {
  69. $addressBooks = $this->getAddressBooks();
  70. //set the error message to the select option
  71. if (isset($addressBooks->message)) {
  72. $fields[] = [
  73. 'value' => 0,
  74. 'label' => $addressBooks->message,
  75. ];
  76. }
  77. $subscriberAddressBook
  78. = $this->helper->getSubscriberAddressBook($this->helper->getWebsite());
  79. //set up fields with book id and label
  80. foreach ($addressBooks as $book) {
  81. if (isset($book->id) && $book->visibility == 'Public'
  82. && $book->id != $subscriberAddressBook
  83. ) {
  84. $fields[] = [
  85. 'value' => $book->id,
  86. 'label' => $book->name,
  87. ];
  88. }
  89. }
  90. }
  91. return $fields;
  92. }
  93. }