og-8.x-1.x-dev/src/Plugin/OgGroupResolver/RouteGroupContentResolver.php

src/Plugin/OgGroupResolver/RouteGroupContentResolver.php
<?php

declare(strict_types=1);

namespace Drupal\og\Plugin\OgGroupResolver;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\og\Attribute\OgGroupResolver;
use Drupal\og\GroupTypeManagerInterface;
use Drupal\og\MembershipManagerInterface;
use Drupal\og\OgGroupAudienceHelperInterface;
use Drupal\og\OgResolvedGroupCollectionInterface;
use Drupal\og\OgRouteGroupResolverBase;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Resolves the group from the route.
 *
 * This plugin inspects the current route and checks if it is an entity path for
 * a group entity.
 */
#[OgGroupResolver(
  id: 'route_group_content',
  label: new TranslatableMarkup('Groups from the group content entity on the current route'),
  description: new TranslatableMarkup('Checks if the current route is an entity path for a group content entity and returns the group(s) that it belongs to.')
)]
class RouteGroupContentResolver extends OgRouteGroupResolverBase {

  public function __construct(
    array $configuration,
    $plugin_id,
    $plugin_definition,
    RouteMatchInterface $routeMatch,
    GroupTypeManagerInterface $groupTypeManager,
    EntityTypeManagerInterface $entityTypeManager,
    protected readonly MembershipManagerInterface $membershipManager,
    protected readonly OgGroupAudienceHelperInterface $groupAudienceHelper,
  ) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $routeMatch, $groupTypeManager, $entityTypeManager);
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('current_route_match'),
      $container->get('og.group_type_manager'),
      $container->get('entity_type.manager'),
      $container->get('og.membership_manager'),
      $container->get('og.group_audience_helper')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function resolve(OgResolvedGroupCollectionInterface $collection) {
    $entity = $this->getContentEntity();
    // Check if the route entity is group content by checking if it has a group
    // audience field.
    if ($entity && $this->groupAudienceHelper->hasGroupAudienceField($entity->getEntityTypeId(), $entity->bundle())) {
      $groups = $this->membershipManager->getGroups($entity);
      // The groups are returned as a two-dimensional array. Flatten it.
      $groups = array_reduce($groups, 'array_merge', []);

      foreach ($groups as $group) {
        $collection->addGroup($group, ['route']);
      }
    }
  }

}

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

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