acquia_commercemanager-8.x-1.122/modules/acm_sku/src/Plugin/rest/resource/CategorySyncResource.php
modules/acm_sku/src/Plugin/rest/resource/CategorySyncResource.php
<?php
namespace Drupal\acm_sku\Plugin\rest\resource;
use Drupal\acm_sku\CategoryManagerInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ModifiedResourceResponse;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
/**
* Class CategorySyncResource.
*
* @package Drupal\acm_sku\Plugin
*
* @ingroup acm_sku
*
* @RestResource(
* id = "acm_categorysync",
* label = @Translation("Acquia Commerce Category Sync"),
* uri_paths = {
* "canonical" = "/categorysync",
* "https://www.drupal.org/link-relations/create" = "/categorysync"
* }
* )
*/
class CategorySyncResource extends ResourceBase {
/**
* Taxonomy Vocabulary ID of Acquia Commerce Category Taxonomy.
*
* @var string
*/
private $categoryVid;
/**
* Drupal Config Factory Instance.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
private $configFactory;
/**
* A CategoryManager instance.
*
* @var \Drupal\acm_sku\CategoryManagerInterface
*/
private $categoryManager;
/**
* Current request.
*
* @var \Symfony\Component\HttpFoundation\Request
*/
private $currentRequest;
/**
* Construct.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param array $serializer_formats
* The available serialization formats.
* @param \Psr\Log\LoggerInterface $logger
* A logger instance.
* @param \Drupal\acm_sku\CategoryManagerInterface $category_manager
* A CategoryManager instance.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The factory for configuration objects.
* @param \Symfony\Component\HttpFoundation\Request $current_request
* Request.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, array $serializer_formats, LoggerInterface $logger, CategoryManagerInterface $category_manager, ConfigFactoryInterface $config_factory, Request $current_request) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
$this->categoryManager = $category_manager;
$this->configFactory = $config_factory;
$this->categoryVid = $config_factory
->get('acm.connector')
->get('category_vid');
$this->currentRequest = $current_request;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->getParameter('serializer.formats'),
$container->get('logger.factory')->get('acm'),
$container->get('acm_sku.category_manager'),
$container->get('config.factory'),
$container->get('request_stack')->getCurrentRequest()
);
}
/**
* Post.
*
* Handle Connector posting an array of category data for update.
*
* @param array $categories
* Category data for update.
*
* @return \Drupal\rest\ModifiedResourceResponse
* HTTP Response.
*/
public function post(array $categories) {
$storeId = '';
$requestHeaders = $this->currentRequest->headers;
if ($requestHeaders->has('X-ACM-UUID')) {
$storeId = $requestHeaders->get('X-ACM-UUID');
}
if (!$this->categoryVid) {
return (new ModifiedResourceResponse(['success' => FALSE]));
}
$response = $this->categoryManager->synchronizeCategory(
$this->categoryVid,
$categories,
$storeId
);
$response['success'] = (bool) (($response['created'] > 0) || ($response['updated'] > 0));
return (new ModifiedResourceResponse($response));
}
}
