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();
}
}
