sites_group_overrides-1.x-dev/modules/sites_group_masquerade/src/SitesMasqueradeDecorator.php

modules/sites_group_masquerade/src/SitesMasqueradeDecorator.php
<?php

declare(strict_types=1);

namespace Drupal\sites_group_masquerade;

use Drupal\sites\SitePluginManager;
use Drupal\Core\Session\AccountInterface;
use Drupal\sites\Plugin\Site\SiteInterface;
use Drupal\sites_masquerade\SitesMasqueradeInterface;
use Drupal\sites_group\Plugin\Site\GroupSiteInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;

/**
 * The sites_masquerade decorator.
 */
class SitesMasqueradeDecorator implements SitesMasqueradeInterface {

  use StringTranslationTrait;

  /**
   * Constructs a SitesMasqueradeDecorator object.
   *
   * @param \Drupal\sites_masquerade\SitesMasqueradeInterface $inner
   *    The decorated service.
   * @param \Drupal\sites\SitePluginManager $siteManager
   *    SiteManager for site info.
   * @param \Drupal\Core\Session\AccountInterface $currentUser
   *    User account.
   */
  public function __construct(
    protected readonly SitesMasqueradeInterface $inner,
    protected readonly SitePluginManager $siteManager,
    protected readonly AccountInterface $currentUser,
  ) {}

  /**
   * {@inheritdoc}
   */
  public function setActiveSite(SiteInterface $site): void {
    $this->inner->setActiveSite($site);
  }

  /**
   * {@inheritdoc}
   */
  public function setActiveSiteId(string $site_id): void {
    $this->inner->setActiveSiteId($site_id);
  }

  /**
   * {@inheritdoc}
   */
  public function getActiveSite(): ?SiteInterface {
    return $this->inner->getActiveSite();
  }

  /**
   * {@inheritdoc}
   */
  public function getActiveSiteId(): ?string {
    return $this->inner->getActiveSiteId();
  }

  /**
   * {@inheritdoc}
   */
  public function getSiteOptions(): array {
    $options = $this->inner->getSiteOptions();

    foreach ($options as $site_id => $label) {
      if (!$site_id) {
        continue;
      }
      $site = $this->siteManager->createInstance($site_id);
      if (!($site instanceof GroupSiteInterface)) {
        continue;
      }
      $group = $site->getGroup();

      // Remove option if user is not member of that group.
      if (!$group->hasPermission('is allowed to masquerade', $this->currentUser)) {
        unset($options[$site_id]);
      }
    }

    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function reset(): void {
    $this->inner->reset();
  }

}

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

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