commerce_api-8.x-1.x-dev/src/Routing/Routes.php

src/Routing/Routes.php
<?php

namespace Drupal\commerce_api\Routing;

use Drupal\commerce\PurchasableEntityInterface;
use Drupal\commerce_api\Resource\CartAddResource;
use Drupal\commerce_api\Resource\CartCanonicalResource;
use Drupal\commerce_api\Resource\CartClearResource;
use Drupal\commerce_api\Resource\CartCollectionResource;
use Drupal\commerce_api\Resource\CartCouponAddResource;
use Drupal\commerce_api\Resource\CartCouponRemoveResource;
use Drupal\commerce_api\Resource\CartRemoveItemResource;
use Drupal\commerce_api\Resource\CartUpdateItemResource;
use Drupal\commerce_api\Resource\Checkout\PaymentResource;
use Drupal\commerce_api\Resource\CheckoutResource;
use Drupal\commerce_api\Resource\PaymentGateway\PaymentApproveResource;
use Drupal\commerce_api\Resource\ShippingMethodsResource;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

class Routes extends RouteProviderBase {

  /**
   * {@inheritdoc}
   */
  protected function buildRoutes(RouteCollection $routes) {
    // If the routes are being processed before a known order type is installed,
    // resource types for orders will not exist. This is probably due to the
    // module being installed as part of a profile. Skip route generation until
    // later.
    if ($this->getResourceTypesForEntityType('commerce_order') === []) {
      return;
    }

    $routes->add('commerce_api.carts.collection', $this->cartsCollection());
    $routes->add('commerce_api.carts.canonical', $this->cartCanonical());
    $routes->add('commerce_api.carts.clear', $this->cartClear());
    $routes->add('commerce_api.carts.add', $this->cartAdd());
    $routes->add('commerce_api.carts.remove_item', $this->cartRemoveItem());
    $routes->add('commerce_api.carts.update_item', $this->cartUpdateItem());
    if ($this->entityTypeManager->hasDefinition('commerce_promotion_coupon')) {
      $routes->add('commerce_api.carts.coupon_add', $this->cartCouponAdd());
      $routes->add('commerce_api.carts.coupon_remove', $this->cartCouponRemove());
    }

    $routes->add('commerce_api.checkout', $this->cartCheckout());
    $routes->add('commerce_api.checkout.get', $this->cartCheckoutGet());
    if ($this->entityTypeManager->hasDefinition('commerce_shipping_method')) {
      $routes->add('commerce_api.checkout.shipping_methods', $this->checkoutShippingMethods());
    }
    if ($this->entityTypeManager->hasDefinition('commerce_payment_gateway')) {
      $routes->add('commerce_api.checkout.payment_approve', $this->checkoutPaymentApprove());
      $routes->add('commerce_api.checkout.payment', $this->checkoutPayment());

      // BC for `/return` for hardcoded references to the resource.
      $bc_route = $this->checkoutPaymentApprove();
      $bc_route->setPath('/checkout/{commerce_order}/payment/return');
      $routes->add('commerce_api.checkout.payment_gateway_return', $bc_route);
    }
  }

  /**
   * The cart collection resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartsCollection() {
    $order_resource_types = $this->getResourceTypesForEntityType('commerce_order');

    $route = new Route('/carts');
    $route->addDefaults([
      '_jsonapi_resource' => CartCollectionResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($order_resource_types),
    ]);
    return $route;
  }

  /**
   * The cart canonical resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartCanonical() {
    $order_resource_types = $this->getResourceTypesForEntityType('commerce_order');

    $route = new Route('/carts/{commerce_order}');
    $route->addDefaults([
      '_jsonapi_resource' => CartCanonicalResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($order_resource_types),
    ]);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.view');
    return $route;
  }

  /**
   * The cart clear resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartClear() {
    $route = new Route('/carts/{commerce_order}');
    $route->addDefaults([
      '_jsonapi_resource' => CartClearResource::class,
    ]);
    $route->setMethods(['DELETE']);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.update');
    return $route;
  }

  /**
   * The cart add resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartAdd() {
    $purchasable_entity_resource_types = $this->getResourceTypeForClassImplementation(PurchasableEntityInterface::class);
    $order_item_resource_types = $this->getResourceTypesForEntityType('commerce_order_item');

    $route = new Route('/cart/add');
    $route->addDefaults([
      '_jsonapi_resource' => CartAddResource::class,
      '_purchasable_entity_resource_types' => $this->getResourceTypeNames($purchasable_entity_resource_types),
      '_jsonapi_resource_types' => $this->getResourceTypeNames($order_item_resource_types),
    ]);
    $route->setMethods(['POST']);
    return $route;
  }

  /**
   * The cart remove item resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartRemoveItem() {
    $order_item_resource_types = $this->getResourceTypesForEntityType('commerce_order_item');
    $order_resource_types = $this->getResourceTypesForEntityType('commerce_order');

    $route = new Route('/carts/{commerce_order}/items');
    $route->addDefaults([
      '_jsonapi_resource' => CartRemoveItemResource::class,
      '_order_item_resource_types' => $this->getResourceTypeNames($order_item_resource_types),
      '_jsonapi_resource_types' => $this->getResourceTypeNames($order_resource_types),
    ]);
    $route->setMethods(['DELETE']);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.update');
    return $route;
  }

  /**
   * The cart update item resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartUpdateItem() {
    $order_item_resource_types = $this->getResourceTypesForEntityType('commerce_order_item');

    $route = new Route('/carts/{commerce_order}/items/{commerce_order_item}');
    $route->addDefaults([
      '_jsonapi_resource' => CartUpdateItemResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($order_item_resource_types),
    ]);
    $route->setMethods(['PATCH']);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    static::addRouteParameter($route, 'commerce_order_item', ['type' => 'entity:commerce_order_item']);
    $route->setRequirement('_entity_access', 'commerce_order.update');
    $route->setRequirement('_entity_access', 'commerce_order_item.update');
    return $route;
  }

  /**
   * The cart coupon add resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartCouponAdd() {
    $coupon_resource_types = $this->getResourceTypesForEntityType('commerce_promotion_coupon');
    $route = new Route('/carts/{commerce_order}/coupons');
    $route->setMethods(['PATCH']);
    $route->addDefaults([
      '_jsonapi_resource' => CartCouponAddResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($coupon_resource_types),
    ]);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.update');
    return $route;
  }

  /**
   * The cart coupon remove resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartCouponRemove() {
    $coupon_resource_types = $this->getResourceTypesForEntityType('commerce_promotion_coupon');

    $route = new Route('/carts/{commerce_order}/coupons');
    $route->setMethods(['DELETE']);
    $route->addDefaults([
      '_jsonapi_resource' => CartCouponRemoveResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($coupon_resource_types),
    ]);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.update');
    return $route;
  }

  /**
   * The cart checkout resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartCheckout() {
    $order_resource_types = $this->getResourceTypesForEntityType('commerce_order');
    $route = new Route('/checkout/{commerce_order}');
    $route->setMethods(['PATCH']);
    $route->addDefaults([
      '_jsonapi_resource' => CheckoutResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($order_resource_types),
    ]);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.update');
    return $route;
  }

  /**
   * Separate route to allow retrieving a placed order.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function cartCheckoutGet(): Route {
    $route = $this->cartCheckout();
    $route->setMethods(['GET']);
    $route->setRequirement('_entity_access', 'commerce_order.view');
    return $route;
  }

  /**
   * The cart checkout resource route.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function checkoutShippingMethods() {
    $route = new Route('/checkout/{commerce_order}/shipping-methods');
    $route->setMethods(['GET']);
    $route->addDefaults([
      '_jsonapi_resource' => ShippingMethodsResource::class,
    ]);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.view');
    return $route;
  }

  /**
   * Payment onReturn resource.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function checkoutPaymentApprove() {
    $order_resource_types = $this->getResourceTypesForEntityType('commerce_order');

    $route = new Route('/checkout/{commerce_order}/payment/approve');
    $route->setMethods(['GET']);
    $route->addDefaults([
      '_jsonapi_resource' => PaymentApproveResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($order_resource_types),
    ]);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.view');
    return $route;
  }

  /**
   * Payment resource.
   *
   * @return \Symfony\Component\Routing\Route
   *   The route.
   */
  protected function checkoutPayment() {
    $payment_resource_types = $this->getResourceTypesForEntityType('commerce_payment');
    $route = new Route('/checkout/{commerce_order}/payment');
    $route->setMethods(['POST']);
    $route->addDefaults([
      '_jsonapi_resource' => PaymentResource::class,
      '_jsonapi_resource_types' => $this->getResourceTypeNames($payment_resource_types),
    ]);
    static::addRouteParameter($route, 'commerce_order', ['type' => 'entity:commerce_order']);
    $route->setRequirement('_entity_access', 'commerce_order.view');
    return $route;
  }

}

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

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