123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace Dotdigitalgroup\Email\Model\Config\Configuration;
- class Addressbooks implements \Magento\Framework\Data\OptionSourceInterface
- {
- /**
- * @var \Dotdigitalgroup\Email\Helper\Data
- */
- private $helper;
- /**
- * @var \Magento\Framework\Registry
- */
- private $registry;
-
- /**
- * @var \Magento\Store\Model\StoreManagerInterface
- */
- private $storeManager;
- /**
- * Addressbooks constructor.
- *
- * @param \Magento\Store\Model\StoreManagerInterface $storeManagerInterface
- * @param \Dotdigitalgroup\Email\Helper\Data $data
- * @param \Magento\Framework\Registry $registry
- */
- public function __construct(
- \Magento\Store\Model\StoreManagerInterface $storeManagerInterface,
- \Dotdigitalgroup\Email\Helper\Data $data,
- \Magento\Framework\Registry $registry
- ) {
- $this->storeManager = $storeManagerInterface;
- $this->helper = $data;
- $this->registry = $registry;
- }
- /**
- * Get address books.
- *
- * @return null
- */
- public function getAddressBooks()
- {
- $website = $this->helper->getWebsite();
- $client = $this->helper->getWebsiteApiClient($website);
- $savedAddressBooks = $this->registry->registry('addressbooks');
- //get saved address books from registry
- if ($savedAddressBooks) {
- $addressBooks = $savedAddressBooks;
- } else {
- // api all address books
- $addressBooks = $client->getAddressBooks();
- $this->registry->unregister('addressbooks'); // additional measure
- $this->registry->register('addressbooks', $addressBooks);
- }
- return $addressBooks;
- }
- /**
- * Get options.
- *
- * @return array
- */
- public function toOptionArray()
- {
- $fields[] = [
- 'label' => __('---- Default Option ----'),
- 'value' => '0',
- ];
- $website = $this->helper->getWebsite();
- $apiEnabled = $this->helper->isEnabled($website);
- //get address books options
- if ($apiEnabled) {
- $addressBooks = $this->getAddressBooks();
- //set the error message to the select option
- if (isset($addressBooks->message)) {
- $fields[] = [
- 'value' => 0,
- 'label' => $addressBooks->message,
- ];
- }
- $subscriberAddressBook
- = $this->helper->getSubscriberAddressBook($this->helper->getWebsite());
- //set up fields with book id and label
- foreach ($addressBooks as $book) {
- if (isset($book->id) && $book->visibility == 'Public'
- && $book->id != $subscriberAddressBook
- ) {
- $fields[] = [
- 'value' => $book->id,
- 'label' => $book->name,
- ];
- }
- }
- }
- return $fields;
- }
- }
|