Chris@0: id instead. Chris@0: */ Chris@0: protected $initialAccountId; Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setAccount(AccountInterface $account) { Chris@0: // If the passed account is already proxied, use the actual account instead Chris@0: // to prevent loops. Chris@0: if ($account instanceof static) { Chris@0: $account = $account->getAccount(); Chris@0: } Chris@0: $this->account = $account; Chris@0: $this->id = $account->id(); Chris@0: date_default_timezone_set(drupal_get_user_timezone()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getAccount() { Chris@0: if (!isset($this->account)) { Chris@0: if ($this->id) { Chris@0: // After the container is rebuilt, DrupalKernel sets the initial Chris@0: // account to the id of the logged in user. This is necessary in order Chris@0: // to refresh the user account reference here. Chris@0: $this->setAccount($this->loadUserEntity($this->id)); Chris@0: } Chris@0: else { Chris@0: $this->account = new AnonymousUserSession(); Chris@0: } Chris@0: } Chris@0: Chris@0: return $this->account; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function id() { Chris@0: return $this->id; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRoles($exclude_locked_roles = FALSE) { Chris@0: return $this->getAccount()->getRoles($exclude_locked_roles); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function hasPermission($permission) { Chris@0: return $this->getAccount()->hasPermission($permission); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isAuthenticated() { Chris@0: return $this->getAccount()->isAuthenticated(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isAnonymous() { Chris@0: return $this->getAccount()->isAnonymous(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getPreferredLangcode($fallback_to_default = TRUE) { Chris@0: return $this->getAccount()->getPreferredLangcode($fallback_to_default); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getPreferredAdminLangcode($fallback_to_default = TRUE) { Chris@0: return $this->getAccount()->getPreferredAdminLangcode($fallback_to_default); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getUsername() { Chris@18: @trigger_error('\Drupal\Core\Session\AccountInterface::getUsername() is deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. Use \Drupal\Core\Session\AccountInterface::getAccountName() or \Drupal\user\UserInterface::getDisplayName() instead. See https://www.drupal.org/node/2572493', E_USER_DEPRECATED); Chris@0: return $this->getAccountName(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getAccountName() { Chris@0: return $this->getAccount()->getAccountName(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getDisplayName() { Chris@0: return $this->getAccount()->getDisplayName(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getEmail() { Chris@0: return $this->getAccount()->getEmail(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getTimeZone() { Chris@0: return $this->getAccount()->getTimeZone(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getLastAccessedTime() { Chris@0: return $this->getAccount()->getLastAccessedTime(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setInitialAccountId($account_id) { Chris@0: if (isset($this->account)) { Chris@0: throw new \LogicException('AccountProxyInterface::setInitialAccountId() cannot be called after an account was set on the AccountProxy'); Chris@0: } Chris@0: Chris@0: $this->id = $this->initialAccountId = $account_id; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Load a user entity. Chris@0: * Chris@0: * The entity manager requires additional initialization code and cache Chris@0: * clearing after the list of modules is changed. Therefore it is necessary to Chris@0: * retrieve it as late as possible. Chris@0: * Chris@0: * Because of serialization issues it is currently not possible to inject the Chris@0: * container into the AccountProxy. Thus it is necessary to retrieve the Chris@0: * entity manager statically. Chris@0: * Chris@0: * @see https://www.drupal.org/node/2430447 Chris@0: * Chris@0: * @param int $account_id Chris@0: * The id of an account to load. Chris@0: * Chris@0: * @return \Drupal\Core\Session\AccountInterface|null Chris@0: * An account or NULL if none is found. Chris@0: */ Chris@0: protected function loadUserEntity($account_id) { Chris@0: return \Drupal::entityManager()->getStorage('user')->load($account_id); Chris@0: } Chris@0: Chris@0: }