Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 17 |
CRAP | |
0.00% |
0 / 49 |
AccountProxy | |
0.00% |
0 / 1 |
|
0.00% |
0 / 17 |
462 | |
0.00% |
0 / 49 |
setAccount | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
|||
getAccount | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 10 |
|||
id | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getRoles | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
hasPermission | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
isAuthenticated | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
isAnonymous | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getPreferredLangcode | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getPreferredAdminLangcode | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getUsername | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getAccountName | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getDisplayName | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getEmail | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getTimeZone | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getLastAccessedTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setInitialAccountId | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
loadUserEntity | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Session\AccountProxy. | |
*/ | |
namespace Drupal\Core\Session; | |
/** | |
* A proxied implementation of AccountInterface. | |
* | |
* The reason why we need an account proxy is that we don't want to have global | |
* state directly stored in the container. | |
* | |
* This proxy object avoids multiple invocations of the authentication manager | |
* which can happen if the current user is accessed in constructors. It also | |
* allows legacy code to change the current user where the user cannot be | |
* directly injected into dependent code. | |
*/ | |
class AccountProxy implements AccountProxyInterface { | |
/** | |
* The instantiated account. | |
* | |
* @var \Drupal\Core\Session\AccountInterface | |
*/ | |
protected $account; | |
/** | |
* Initial account id. | |
* | |
* @var int | |
*/ | |
protected $initialAccountId; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setAccount(AccountInterface $account) { | |
// If the passed account is already proxied, use the actual account instead | |
// to prevent loops. | |
if ($account instanceof static) { | |
$account = $account->getAccount(); | |
} | |
$this->account = $account; | |
date_default_timezone_set(drupal_get_user_timezone()); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getAccount() { | |
if (!isset($this->account)) { | |
if ($this->initialAccountId) { | |
// After the container is rebuilt, DrupalKernel sets the initial | |
// account to the id of the logged in user. This is necessary in order | |
// to refresh the user account reference here. | |
$this->setAccount($this->loadUserEntity($this->initialAccountId)); | |
} | |
else { | |
$this->account = new AnonymousUserSession(); | |
} | |
} | |
return $this->account; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function id() { | |
return $this->getAccount()->id(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getRoles($exclude_locked_roles = FALSE) { | |
return $this->getAccount()->getRoles($exclude_locked_roles); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function hasPermission($permission) { | |
return $this->getAccount()->hasPermission($permission); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function isAuthenticated() { | |
return $this->getAccount()->isAuthenticated(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function isAnonymous() { | |
return $this->getAccount()->isAnonymous(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getPreferredLangcode($fallback_to_default = TRUE) { | |
return $this->getAccount()->getPreferredLangcode($fallback_to_default); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getPreferredAdminLangcode($fallback_to_default = TRUE) { | |
return $this->getAccount()->getPreferredAdminLangcode($fallback_to_default); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getUsername() { | |
return $this->getAccountName(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getAccountName() { | |
return $this->getAccount()->getAccountName(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getDisplayName() { | |
return $this->getAccount()->getDisplayName(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getEmail() { | |
return $this->getAccount()->getEmail(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getTimeZone() { | |
return $this->getAccount()->getTimeZone(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getLastAccessedTime() { | |
return $this->getAccount()->getLastAccessedTime(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setInitialAccountId($account_id) { | |
if (isset($this->account)) { | |
throw new \LogicException('AccountProxyInterface::setInitialAccountId() cannot be called after an account was set on the AccountProxy'); | |
} | |
$this->initialAccountId = $account_id; | |
} | |
/** | |
* Load a user entity. | |
* | |
* The entity manager requires additional initialization code and cache | |
* clearing after the list of modules is changed. Therefore it is necessary to | |
* retrieve it as late as possible. | |
* | |
* Because of serialization issues it is currently not possible to inject the | |
* container into the AccountProxy. Thus it is necessary to retrieve the | |
* entity manager statically. | |
* | |
* @see https://www.drupal.org/node/2430447 | |
* | |
* @param int $account_id | |
* The id of an account to load. | |
* | |
* @return \Drupal\Core\Session\AccountInterface|NULL | |
* An account or NULL if none is found. | |
*/ | |
protected function loadUserEntity($account_id) { | |
return \Drupal::entityManager()->getStorage('user')->load($account_id); | |
} | |
} |