acquia_commercemanager-8.x-1.122/modules/acm_sku/src/Plugin/AcquiaCommerce/SKUType/Simple.php
modules/acm_sku/src/Plugin/AcquiaCommerce/SKUType/Simple.php
<?php
namespace Drupal\acm_sku\Plugin\AcquiaCommerce\SKUType;
use Drupal\acm\Connector\APIWrapper;
use Drupal\acm_sku\AcquiaCommerce\SKUPluginBase;
use Drupal\acm_sku\AddToCartErrorEvent;
use Drupal\acm_sku\Entity\SKU;
use Drupal\Core\Form\FormStateInterface;
/**
* Defines the simple SKU type.
*
* @SKUType(
* id = "simple",
* label = @Translation("Simple SKU"),
* description = @Translation("Simple SKU for buying a single SKU"),
* )
*/
class Simple extends SKUPluginBase {
/**
* {@inheritdoc}
*/
public function addToCartForm(array $form, FormStateInterface $form_state, SKU $sku = NULL) {
if (empty($sku)) {
return $form;
}
/** @var \Drupal\acm_sku\CartFormHelper $helper */
$helper = \Drupal::service('acm_sku.cart_form_helper');
$form['sku_id'] = [
'#type' => 'hidden',
'#value' => $sku->id(),
];
$form['quantity'] = [
'#title' => t('Quantity'),
'#type' => 'number',
'#default_value' => 1,
'#required' => TRUE,
'#access' => $helper->showQuantity(),
'#size' => 2,
'#attributes' => [
'min' => '0',
],
];
$form['add_to_cart'] = [
'#type' => 'submit',
'#value' => t('Add to cart'),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function getNumberFormattedPrice(SKU $sku, $fetchOriginalPrice = FALSE) {
$priceField = "price";
if ($fetchOriginalPrice) {
$priceField = "price_original";
}
$price = $sku->get($priceField)->value;
return \Drupal::service('acm.i18n_helper')->formatPrice($price);
}
/**
* {@inheritdoc}
*/
public function getAdminGridDisplayFormattedPrice(SKU $sku, $fetchOriginalPrice = FALSE) {
return $this->getNumberFormattedPrice($sku, $fetchOriginalPrice);
}
/**
* {@inheritdoc}
*/
public function addToCartSubmit(array &$form, FormStateInterface $form_state) {
/* @var \Drupal\acm_cart\CartStorageInterface */
$cartStorage = \Drupal::service('acm_cart.cart_storage');
/* @var \Drupal\acm_cart\CartInterface */
$cart = $cartStorage->loadCart(TRUE);
// Cart here can be empty only if APIs aren't working.
// Call above is to create cart if empty, we except a new or old cart here
// and it can be empty if server is not working or in maintenance mode.
if (empty($cart)) {
drupal_set_message(t('An error occured, please try again.'), 'error');
$e = new \Exception(acm_api_down_global_error_message(), APIWrapper::API_DOWN_ERROR_CODE);
// Dispatch event so action can be taken.
$dispatcher = \Drupal::service('event_dispatcher');
$event = new AddToCartErrorEvent($e);
$dispatcher->dispatch(AddToCartErrorEvent::SUBMIT, $event);
return;
}
$sku_entity = SKU::load($form_state->getValue('sku_id'));
$sku = $sku_entity->getSku();
$quantity = $form_state->getValue('quantity');
drupal_set_message(
t('Added @quantity of @name to the cart.',
[
'@quantity' => $quantity,
'@name' => $sku_entity->name->value,
]
));
$cartStorage->addItemToCart($sku, $quantity);
try {
$cartStorage->updateCart();
}
catch (\Exception $e) {
if (acm_is_exception_api_down_exception($e)) {
// Remove item from cart (because we can't restore the cart
// if the Commerce Connector is unavailable)
$cartStorage->removeItemFromCart($sku);
}
// Clear stock cache.
$this->refreshStock($sku_entity);
// Dispatch event so action can be taken.
$dispatcher = \Drupal::service('event_dispatcher');
$event = new AddToCartErrorEvent($e);
$dispatcher->dispatch(AddToCartErrorEvent::SUBMIT, $event);
}
}
}
