Mercurial > hg > isophonics-drupal-site
view core/modules/user/src/ContextProvider/CurrentUserContext.php @ 19:fa3358dc1485 tip
Add ndrum files
author | Chris Cannam |
---|---|
date | Wed, 28 Aug 2019 13:14:47 +0100 |
parents | af1871eacc83 |
children |
line wrap: on
line source
<?php namespace Drupal\user\ContextProvider; use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Plugin\Context\ContextProviderInterface; use Drupal\Core\Plugin\Context\EntityContext; use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; /** * Sets the current user as a context. */ class CurrentUserContext implements ContextProviderInterface { use StringTranslationTrait; /** * The current user. * * @var \Drupal\Core\Session\AccountInterface */ protected $account; /** * The user storage. * * @var \Drupal\user\UserStorageInterface */ protected $userStorage; /** * Constructs a new CurrentUserContext. * * @param \Drupal\Core\Session\AccountInterface $account * The current user. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. */ public function __construct(AccountInterface $account, EntityTypeManagerInterface $entity_type_manager) { $this->account = $account; $this->userStorage = $entity_type_manager->getStorage('user'); } /** * {@inheritdoc} */ public function getRuntimeContexts(array $unqualified_context_ids) { $current_user = $this->userStorage->load($this->account->id()); if ($current_user) { // @todo Do not validate protected fields to avoid bug in TypedData, // remove this in https://www.drupal.org/project/drupal/issues/2934192. $current_user->_skipProtectedUserFieldConstraint = TRUE; $context = EntityContext::fromEntity($current_user, $this->t('Current user')); } else { // If not user is available, provide an empty context object. $context = EntityContext::fromEntityTypeId('user', $this->t('Current user')); } $cacheability = new CacheableMetadata(); $cacheability->setCacheContexts(['user']); $context->addCacheableDependency($cacheability); $result = [ 'current_user' => $context, ]; return $result; } /** * {@inheritdoc} */ public function getAvailableContexts() { return $this->getRuntimeContexts([]); } }