arch-8.x-1.x-dev/modules/cart/arch_cart.api.php

modules/cart/arch_cart.api.php
<?php
/**
 * @file
 * Hooks specific to the Price module.
 */

use Drupal\arch_cart\Cart\CartInterface;
use Drupal\arch_order\Entity\OrderInterface;
use Drupal\arch_price\Price\PriceInterface;
use Drupal\arch_product\Entity\Product;
use Drupal\arch_product\Entity\ProductInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Access\AccessResultInterface;
use Drupal\file\Entity\File;

/**
 * @addtogroup hooks
 * @{
 */

/**
 * Modify rendered image for product when displayed on cart form.
 *
 * @param array $image
 *   Render array.
 * @param array $context
 *   Alter context: contains line item, product and cart instance.
 */
function hook_arch_cart_product_image_alter(array &$image, array &$context) {
  // @todo add example implementation.
}

/**
 * Modify rendered product properties when displayed on cart form.
 *
 * @param array $properties
 *   Render array.
 * @param array $context
 *   Alter context: contains line item, product and cart instance.
 */
function hook_arch_cart_product_properties_alter(array &$properties, array &$context) {
  // @todo add example implementation.
}

/**
 * Modify product details when displayed on cart form.
 *
 * @param array $details
 *   Render array.
 * @param array $context
 *   Alter context: contains line item, product and cart instance.
 */
function hook_arch_cart_product_details_alter(array &$details, array &$context) {
  // @todo add example implementation.
}

/**
 * Modify product table row on cart form.
 *
 * @param array $build
 *   Product row render array.
 * @param array $context
 *   Alter context: contains line item, product and cart instance.
 */
function hook_arch_cart_product_table_row_alter(array &$build, array &$context) {
  /** @var \Drupal\arch_product\Entity\ProductInterface $product */
  $product = $context['product'];
  $build['#attributes']['data-product-sku'] = $product->getSku();
}

/**
 * Define access check for minicart display.
 *
 * @return \Drupal\Core\Access\AccessResultInterface
 *   Access result.
 */
function hook_arch_minicart_display_allowed() {
  $current_user = \Drupal::currentUser();
  $result = AccessResult::forbiddenIf($current_user->isAnonymous());
  return $result;
}

/**
 * Alter access result object for minicart.
 *
 * @param \Drupal\Core\Access\AccessResultInterface $result
 *   Access result.
 */
function hook_arch_minicart_display_allowed_alter(AccessResultInterface &$result) {
  // @todo add example implementation.
}

/**
 * Set product image.
 *
 * @param string $image_uri
 *   Image URI.
 * @param \Drupal\arch_product\Entity\ProductInterface $product
 *   Product entity.
 */
function hook_arch_cart_mini_cart_product_image_alter(&$image_uri, ProductInterface $product) {
  if (!empty($image_uri)) {
    return;
  }

  if ($product->hasField('field_product_image')) {
    $image = current($product->get('field_product_image')->getValue());
  }
  elseif ($product->hasField('field_lead_image')) {
    $image = current($product->get('field_lead_image')->getValue());
  }

  if (
    !empty($image)
    && !empty($image['target_id'])
  ) {
    /** @var \Drupal\file\Entity\File $image_file */
    if ($image_file = File::load($image['target_id'])) {
      /** @var \Drupal\file\FileInterface $file */
      $image_uri = $image_file->getFileUri();
    }
  }
}

/**
 * Alter used image style for product display in minicart.
 *
 * @param string $image_style_id
 *   Image style ID.
 * @param \Drupal\arch_product\Entity\ProductInterface $product
 *   Displayed product.
 */
function hook_arch_cart_mini_cart_product_image_style_alter(&$image_style_id, ProductInterface $product) {
  // @todo add implementation.
}

/**
 * Respond on cart change.
 *
 * @param string $type
 *   Change type.
 * @param array|null $item
 *   Modified item or NULL if item has removed.
 * @param array|null $old_item
 *   Previous item value of NULL if item is a new one.
 * @param array $items
 *   Cart item list.
 */
function hook_arch_cart_change($type, &$item, &$old_item, array &$items) {
  // Prevent overselling items. If user tries to put more item to cart then
  // available stock we correct the values.
  if (in_array($type, [CartInterface::ITEM_NEW, CartInterface::ITEM_UPDATE])) {
    /** @var \Drupal\arch_stock\StockKeeperInterface $stock_keeper */
    $stock_keeper = \Drupal::service('arch_stock.stock_keeper');
    $current_user = \Drupal::currentUser();
    foreach ($items as &$item) {
      if (empty($item['type']) || $item['type'] !== 'product') {
        continue;
      }
      $product = Product::load($item['id']);
      $total = $stock_keeper->getTotalProductStock($product, $current_user);
      if ($item['quantity'] > $total) {
        $item['quantity'] = $total;
      }
    }
  }
}

/**
 * Modify API Cart data.
 *
 * @param array $data
 *   Cart data.
 * @param \Drupal\arch_cart\Cart\CartInterface $cart
 *   Cart.
 */
function hook_api_cart_data_alter(array &$data, CartInterface $cart) {

}

/**
 * Respond when new product has been placed into cart.
 *
 * @param array|null $item
 *   Modified item or NULL if item has removed.
 * @param array|null $old_item
 *   Previous item value of NULL if item is a new one.
 * @param array $items
 *   Cart item list.
 * @param \Drupal\arch_cart\Cart\CartInterface $cart
 *   Cart instance.
 */
function hook_arch_cart_item_new(&$item, &$old_item, array &$items, CartInterface $cart) {
  // @todo add example implementation.
}

/**
 * Respond when product has been changed in cart.
 *
 * @param array|null $item
 *   Modified item or NULL if item has removed.
 * @param array|null $old_item
 *   Previous item value of NULL if item is a new one.
 * @param array $items
 *   Cart item list.
 */
function hook_arch_cart_item_update(&$item, &$old_item, array &$items, CartInterface $cart) {
  // @todo add example implementation.
}

/**
 * Respond when new product has been removed from cart.
 *
 * @param array|null $item
 *   Modified item or NULL if item has removed.
 * @param array|null $old_item
 *   Previous item value of NULL if item is a new one.
 * @param array $items
 *   Cart item list.
 */
function hook_arch_cart_item_remove(&$item, &$old_item, array &$items, CartInterface $cart) {
  // @todo add example implementation.
}

/**
 * Alter calculated shipping price.
 *
 * @param \Drupal\arch_price\Price\PriceInterface $price
 *   Calculated shipping price.
 * @param \Drupal\arch_cart\Cart\CartInterface $cart
 *   Cart instance.
 * @param \Drupal\arch_order\Entity\OrderInterface $order
 *   Order instance.
 */
function hook_shipping_price_alter(PriceInterface $price, CartInterface $cart, OrderInterface $order) {
  // @todo Add example implementation.
}

/**
 * Alter calculated shipping price.
 *
 * @param \Drupal\arch_price\Price\PriceInterface $price
 *   Calculated shipping price.
 * @param \Drupal\arch_cart\Cart\CartInterface $cart
 *   Cart instance.
 * @param \Drupal\arch_order\Entity\OrderInterface $order
 *   Order instance.
 */
function hook_shipping_price_SHIPPING_METHOD_ID_alter(PriceInterface $price, CartInterface $cart, OrderInterface $order) {
  // @todo Add example implementation.
}

/**
 * Alter total base values.
 *
 * @param array $total_base_values
 *   Total base values that describes a price object.
 */
function hook_cart_total_base_values_alter(array $total_base_values) {
  // @todo Add example implementation.
}

/**
 * Alter grand total values.
 *
 * @param array $total
 *   Total base values that describes a price object.
 * @param \Drupal\arch_order\Entity\OrderInterface $order
 *   Order entity.
 */
function hook_cart_get_gran_total_alter(array &$total, OrderInterface $order) {
  // @todo Add example implementation.
}

/**
 * @} End of "addtogroup hooks".
 */

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc