commerce_amws-8.x-1.x-dev/modules/feed/src/FeedService.php
modules/feed/src/FeedService.php
<?php
namespace Drupal\commerce_amws_feed;
use Drupal\commerce_amws\Entity\StoreInterface as AmwsStoreInterface;
use Drupal\commerce_amws_feed\Adapters\CpigroupPhpAmazonMws\FeedStorage as RemoteFeedStorage;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
/**
* Service with functionality that bridges the local with the remote storages.
*/
class FeedService implements FeedServiceInterface {
/**
* The Amazon MWS store storage.
*
* @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
*/
protected $amwsStoreStorage;
/**
* The feed storage.
*
* @var \Drupal\commerce_amws_feed\FeedStorageInterface
*/
protected $feedStorage;
/**
* The logger service for the Amazon MWS Feed module.
*
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* Constructs a new FeedService object.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
* The logger factory.
*/
public function __construct(
EntityTypeManagerInterface $entity_type_manager,
LoggerChannelFactoryInterface $logger_factory
) {
$this->amwsStoreStorage = $entity_type_manager->getStorage('commerce_amws_store');
$this->feedStorage = $entity_type_manager->getStorage('commerce_amws_feed');
$this->logger = $logger_factory->get(COMMERCE_AMWS_FEED_LOGGER_CHANNEL);
}
/**
* Updates submitted feeds for all enabled Amazon AMWS stores.
*
* @param array $options
* An array with options defining which feeds to process. Available options
* are:
* - feed-limit: The number of feeds to update per store.
*/
public function updateSubmitted(array $options = []) {
$options = array_merge(['feed-limit' => NULL], $options);
// Load enabled stores.
$amws_store_ids = $this->amwsStoreStorage
->getQuery()
->accessCheck(FALSE)
->condition('status', AmwsStoreInterface::STATUS_PUBLISHED)
->execute();
if (!$amws_store_ids) {
return;
}
// Get submitted feeds per store and update them.
$amws_stores = $this->amwsStoreStorage->loadMultiple($amws_store_ids);
foreach ($amws_stores as $amws_store) {
$load_options = ['store_id' => $amws_store->id()];
if ($options['feed-limit']) {
$load_options['limit'] = $options['feed-limit'];
}
$feeds = $this->feedStorage->loadSubmitted($load_options, FALSE);
if (!$feeds) {
continue;
}
$remote_feed_storage = new RemoteFeedStorage(
$amws_store,
$this->logger
);
$remote_feed_storage->updateStatus($feeds);
unset($remote_feed_storage);
}
}
/**
* Updates processed feeds for all enabled Amazon AMWS stores.
*
* @param array $options
* An array with options defining which feeds to process. Available options
* are:
* - feed-limit: The number of feeds to update per store.
*/
public function updateProcessed(array $options = []) {
$options = array_merge(['feed-limit' => NULL], $options);
// Load enabled stores.
$amws_store_ids = $this->amwsStoreStorage
->getQuery()
->accessCheck(FALSE)
->condition('status', AmwsStoreInterface::STATUS_PUBLISHED)
->execute();
if (!$amws_store_ids) {
return;
}
// Get submitted feeds per store and update them.
$amws_stores = $this->amwsStoreStorage->loadMultiple($amws_store_ids);
foreach ($amws_stores as $amws_store) {
$load_options = ['store_id' => $amws_store->id()];
if ($options['feed-limit']) {
$load_options['limit'] = $options['feed-limit'];
}
$feeds = $this->feedStorage->loadProcessed($load_options, FALSE);
if (!$feeds) {
continue;
}
$remote_feed_storage = new RemoteFeedStorage(
$amws_store,
$this->logger
);
$remote_feed_storage->updateResult($feeds);
unset($remote_feed_storage);
}
}
}
