acquia_commercemanager-8.x-1.122/modules/acm_promotion/src/Plugin/rest/resource/PromotionSyncResource.php
modules/acm_promotion/src/Plugin/rest/resource/PromotionSyncResource.php
<?php namespace Drupal\acm_promotion\Plugin\rest\resource; use Drupal\rest\Plugin\ResourceBase; use Drupal\rest\ResourceResponse; use Psr\Log\LoggerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\acm_promotion\AcmPromotionsManager; /** * Class PromotionSyncResource. * * @package Drupal\acm_promotion\Plugin * * @ingroup acm_promotion * * @RestResource( * id = "acm_promotionsync", * label = @Translation("Acquia Commerce Promotion Sync"), * uri_paths = { * "canonical" = "/promotionsync", * "https://www.drupal.org/link-relations/create" = "/promotionsync" * } * ) */ class PromotionSyncResource extends ResourceBase { /** * A Promotion Manager instance. * * @var \Drupal\acm_promotion\AcmPromotionsManager */ private $promotionsManager; /** * 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_promotion\AcmPromotionsManager $promotions_manager * A Promotion Manager instance. */ public function __construct( array $configuration, $plugin_id, $plugin_definition, array $serializer_formats, LoggerInterface $logger, AcmPromotionsManager $promotions_manager ) { parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger); $this->promotionsManager = $promotions_manager; } /** * {@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_promotion.promotions_manager') ); } /** * Post. * * Handle Connector posting an array of product / SKU data for update. * * @param array $promos * Promotions data. * * @return \Drupal\rest\ResourceResponse * HTTP Response object. */ public function post(array $promos = []) { // At this time, we expect to recieve the promo code (string), enabled // (boolean), and sku (string[]). The already existing Promotion Manager // expects different parameters, so we are moving some data around to // reuse the existing code. foreach ($promos as &$promo) { // Name is required to create the node. if (!isset($promo['name'])) { $promo['name'] = $promo['code']; } // Many lookups rely on rule_id and it is required on the admin screen. if (!isset($promo['rule_id'])) { $promo['rule_id'] = $promo['code']; } // This allows the node to be published. if (!isset($promo['status'])) { $promo['status'] = $promo['enabled']; } } $response = $this->promotionsManager->processPromotions($promos); return (new ResourceResponse($response)); } }