acquia_commercemanager-8.x-1.122/modules/acm/src/APIHelper.php

modules/acm/src/APIHelper.php
<?php

namespace Drupal\acm;

/**
 * Class APIHelper.
 *
 * Contains all reusable functions which don't require any other service.
 *
 * @package Drupal\acm
 */
class APIHelper {

  /**
   * Clean customer data before sending to API.
   *
   * @param array $customer
   *   Customer data.
   *
   * @return array
   *   Cleaned customer data.
   */
  public function cleanCustomerData(array $customer) {
    if (isset($customer['customer_id'])) {
      $customer['customer_id'] = (string) $customer['customer_id'];
    }

    if (isset($customer['addresses'])) {
      // When deleting an address need to re-index array.
      $customer['addresses'] = array_values($customer['addresses']);
      foreach ($customer['addresses'] as $delta => $address) {
        $address = (array) $address;
        $customer['addresses'][$delta] = $this->cleanCustomerAddress($address);
      }
    }

    return $customer;
  }

  /**
   * Get cleaned customer address.
   *
   * @param array $address
   *   Customer address.
   *
   * @return array
   *   Cleaned customer address.
   */
  public function cleanCustomerAddress(array $address) {
    if (isset($address['customer_address_id']) && empty($address['address_id'])) {
      $address['address_id'] = $address['customer_address_id'];
    }

    return $this->cleanAddress($address);
  }

  /**
   * Get cleaned cart address.
   *
   * @param mixed $address
   *   Cart address object/array.
   *
   * @return array
   *   Cleaned cart address.
   */
  public function cleanCartAddress($address) {
    $address = (array) $address;

    $address = $this->cleanAddress($address);

    if (isset($address['customer_address_id'])) {
      $address['customer_address_id'] = (int) $address['customer_address_id'];
    }

    // Never send address_id in API request, it confuses Magento.
    if (isset($address['address_id'])) {
      unset($address['address_id']);
    }

    return $address;
  }

  /**
   * Clean address (applicable for all type of addresses).
   *
   * @param array $address
   *   Address array.
   *
   * @return array
   *   Cleaned address array.
   */
  public function cleanAddress(array $address) {
    if (isset($address['customer_id'])) {
      $address['customer_id'] = (string) $address['customer_id'];
    }

    if (isset($address['default_billing'])) {
      $address['default_billing'] = (bool) $address['default_billing'];
    }

    if (isset($address['default_shipping'])) {
      $address['default_shipping'] = (bool) $address['default_shipping'];
    }

    return $this->normaliseExtension($address);
  }

  /**
   * Extensions must always be objects and not arrays.
   *
   * @param mixed $data
   *   Array/Object data.
   *
   * @return array
   *   Data in same type but with extension as object.
   */
  public function normaliseExtension($data) {
    if (is_object($data)) {
      if (isset($data->extension)) {
        $data->extension = (object) $data->extension;
      }
    }
    elseif (is_array($data)) {
      if (isset($data['extension'])) {
        $data['extension'] = (object) $data['extension'];
      }
    }

    return $data;
  }

  /**
   * Clean up cart data.
   *
   * @param object $cart
   *   Cart object.
   *
   * @return object
   *   Cleaned cart object.
   */
  public function cleanCart($cart) {
    // Check if there's a customer ID and remove it if it's empty.
    if (isset($cart->customer_id) && empty($cart->customer_id)) {
      unset($cart->customer_id);
    }
    elseif (isset($cart->customer_id)) {
      $cart->customer_id = (string) $cart->customer_id;
    }

    // Check if there's a customer email and remove it if it's empty.
    if (isset($cart->customer_email) && empty($cart->customer_email)) {
      unset($cart->customer_email);
    }

    // Don't tell conductor our stored totals for no reason.
    if (isset($cart->totals)) {
      unset($cart->totals);
    }

    // Cart extensions must always be objects and not arrays.
    if (isset($cart->carrier)) {
      $cart->carrier = $this->normaliseExtension($cart->carrier);
    }
    // Remove shipping address if carrier not set.
    else {
      unset($cart->shipping);
    }

    // Cart constructor sets cart to any object passed in,
    // circumventing ->setBilling() so trap any wayward extension[] here.
    if (isset($cart->billing)) {
      $cart->billing = $this->cleanCartAddress($cart->billing);
    }

    if (isset($cart->shipping)) {
      $cart->shipping = $this->cleanCartAddress($cart->shipping);
    }

    // Never send response_message back.
    if (isset($cart->response_message)) {
      unset($cart->response_message);
    }

    // When we remove an item from cart, we have to reset the keys to have
    // proper indexed array.
    if (isset($cart->items)) {
      $cart->items = array_values($cart->items);

      foreach ($cart->items as &$item) {
        $item['sku'] = (string) $item['sku'];
      }
    }

    return $cart;
  }

}

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

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