commerce_donation_flow-1.0.x-dev/src/EventSubscriber/CartCheckoutRouteSubscriber.php

src/EventSubscriber/CartCheckoutRouteSubscriber.php
<?php

declare(strict_types=1);

namespace Drupal\commerce_donation_flow\EventSubscriber;

use Drupal\commerce_donation_flow\Form\DonationSettingsForm;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

/**
 * Route subscriber.
 */
final class CartCheckoutRouteSubscriber extends RouteSubscriberBase {

  /**
   * Constructs a CartCheckoutRouteSubscriber object.
   */
  public function __construct(
    private readonly ConfigFactoryInterface $configFactory,
  ) {}

  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection): void {
    // @see https://www.drupal.org/node/2187643
    $config = $this->configFactory->get('commerce_donation_flow.settings');
    // Calculate access.
    $use_route = $config->get('donation_route');
    $route_check = $use_route === DonationSettingsForm::CART_ROUTE_OPTION || $use_route === DonationSettingsForm::COMBINED_ROUTE_OPTION;
    $denyAccessString = 'FALSE';
    $cartRoute = $collection->get('commerce_cart.page');
    $checkoutController = $collection->get('commerce_checkout.checkout');
    $checkoutForm = $collection->get('commerce_checkout.form');
    if ($cartRoute instanceof Route && !$route_check) {
      $cartRoute->setRequirement('_access', $denyAccessString);
    }
    if ($checkoutController instanceof Route && !$route_check) {
      $requirements = $checkoutController->getRequirements();
      unset($requirements['_permission']);
      $requirements['_access'] = $denyAccessString;
      $checkoutController->setRequirements($requirements);
    }
    if ($checkoutForm instanceof Route && !$route_check) {
      $requirements = $checkoutForm->getRequirements();
      unset($requirements['_permission']);
      $requirements['_access'] = $denyAccessString;
      $checkoutForm->setRequirements($requirements);
    }
  }

}

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

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