gcommerce-8.x-1.0-beta5/modules/gcommerce_order/src/EventSubscriber/GroupCartEventSubscriber.php

modules/gcommerce_order/src/EventSubscriber/GroupCartEventSubscriber.php
<?php

namespace Drupal\gcommerce_order\EventSubscriber;

use Drupal\commerce_cart\Event\CartEntityAddEvent;
use Drupal\commerce_cart\Event\CartEvents;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\group\GroupMembershipLoaderInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Add to cart EventSubscriber for groups.
 */
class GroupCartEventSubscriber implements EventSubscriberInterface {

  /**
   * The membership loader service.
   *
   * @var \Drupal\group\GroupMembershipLoaderInterface
   */
  protected $membershipLoader;

  /**
   * The gcommerce settings configuration.
   *
   * @var \Drupal\Core\Config\Config
   */
  protected $config;

  /**
   * Constructs a GroupCartEventSubscriber object.
   *
   * @param \Drupal\group\GroupMembershipLoaderInterface $membership_loader
   *   The group membership loader service.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The config factory.
   */
  public function __construct(GroupMembershipLoaderInterface $membership_loader, ConfigFactoryInterface $config_factory) {
    $this->membershipLoader = $membership_loader;
    $this->config = $config_factory->get('gcommerce.settings');
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [CartEvents::CART_ENTITY_ADD => 'onCartEntityAdd'];
  }

  /**
   * Add new cart entity to group relation for user groups.
   *
   * @param \Drupal\commerce_cart\Event\CartEntityAddEvent $event
   *   The add to cart event.
   */
  public function onCartEntityAdd(CartEntityAddEvent $event): void {
    $cart = $event->getCart();
    $user = $cart->getCustomer();
    $user_groups = $this->membershipLoader->loadByUser($user);

    // Allowed groups for which you can add a cart entity.
    $allowed_group_type_ids = $this->config->get('allowed_group_types') ?? [];
    foreach ($user_groups as $membership) {
      $group = $membership->getGroup();
      $group_type = $group->getGroupType();
      if (!in_array($group_type->id(), $allowed_group_type_ids, TRUE)) {
        continue;
      }

      // Add the entity of the cart to the groups, if it has not been added yet.
      $plugin_id = 'group_order:' . $cart->bundle();
      if ($group_type->hasPlugin($plugin_id) && empty($group->getRelationshipsByEntity($cart, $plugin_id))) {
        $group->addRelationship($cart, $plugin_id);
      }
    }
  }

}

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

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