vendor/friendsofsymfony/user-bundle/Model/User.php line 23

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the FOSUserBundle package.
  4.  *
  5.  * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace FOS\UserBundle\Model;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Doctrine\Common\Collections\Collection;
  13. /**
  14.  * Storage agnostic user object.
  15.  *
  16.  * @author Thibault Duplessis <thibault.duplessis@gmail.com>
  17.  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
  18.  */
  19. abstract class User implements UserInterfaceGroupableInterface {
  20.     /**
  21.      * @var mixed
  22.      */
  23.     protected $id;
  24.     /**
  25.      * @var string
  26.      */
  27.     protected $username;
  28.     /**
  29.      * @var string
  30.      */
  31.     protected $usernameCanonical;
  32.     /**
  33.      * @var string
  34.      */
  35.     protected $email;
  36.     /**
  37.      * @var string
  38.      */
  39.     protected $emailCanonical;
  40.     /**
  41.      * @var bool
  42.      */
  43.     protected $enabled;
  44.     /**
  45.      * The salt to use for hashing.
  46.      *
  47.      * @var string
  48.      */
  49.     protected $salt;
  50.     /**
  51.      * Encrypted password. Must be persisted.
  52.      *
  53.      * @var string
  54.      */
  55.     protected $password;
  56.     /**
  57.      * Plain password. Used for model validation. Must not be persisted.
  58.      *
  59.      * @var string
  60.      */
  61.     protected $plainPassword;
  62.     /**
  63.      * @var \DateTime|null
  64.      */
  65.     protected $lastLogin;
  66.     /**
  67.      * Random string sent to the user email address in order to verify it.
  68.      *
  69.      * @var string|null
  70.      */
  71.     protected $confirmationToken;
  72.     /**
  73.      * @var \DateTime|null
  74.      */
  75.     protected $passwordRequestedAt;
  76.     /**
  77.      * @var GroupInterface[]|Collection
  78.      */
  79.     protected $groups;
  80.     /**
  81.      * @var array
  82.      */
  83.     protected $roles;
  84.     /**
  85.      * User constructor.
  86.      */
  87.     public function __construct() {
  88.         $this->enabled false;
  89.         $this->roles = array();
  90.     }
  91.     /**
  92.      * @return string
  93.      */
  94.     public function __toString() {
  95.         return (string) $this->getUsername();
  96.     }
  97.     /**
  98.      * {@inheritdoc}
  99.      */
  100.     public function addRole($role) {
  101.         $role strtoupper($role);
  102.         if ($role === static::ROLE_DEFAULT) {
  103.             return $this;
  104.         }
  105.         if (!in_array($role$this->rolestrue)) {
  106.             $this->roles[] = $role;
  107.         }
  108.         return $this;
  109.     }
  110.     /**
  111.      * {@inheritdoc}
  112.      */
  113.     public function serialize() {
  114.         return serialize(array(
  115.             $this->password,
  116.             $this->salt,
  117.             $this->usernameCanonical,
  118.             $this->username,
  119.             $this->enabled,
  120.             $this->id,
  121.             $this->email,
  122.             $this->emailCanonical,
  123.         ));
  124.     }
  125.     /**
  126.      * {@inheritdoc}
  127.      */
  128.     public function unserialize($serialized) {
  129.         $data unserialize($serialized);
  130.         if (13 === count($data)) {
  131.             // Unserializing a User object from 1.3.x
  132.             unset($data[4], $data[5], $data[6], $data[9], $data[10]);
  133.             $data array_values($data);
  134.         } elseif (11 === count($data)) {
  135.             // Unserializing a User from a dev version somewhere between 2.0-alpha3 and 2.0-beta1
  136.             unset($data[4], $data[7], $data[8]);
  137.             $data array_values($data);
  138.         }
  139.         list(
  140.                 $this->password,
  141.                 $this->salt,
  142.                 $this->usernameCanonical,
  143.                 $this->username,
  144.                 $this->enabled,
  145.                 $this->id,
  146.                 $this->email,
  147.                 $this->emailCanonical
  148.                 ) = $data;
  149.     }
  150.     /**
  151.      * {@inheritdoc}
  152.      */
  153.     public function eraseCredentials() {
  154.         $this->plainPassword null;
  155.     }
  156.     /**
  157.      * {@inheritdoc}
  158.      */
  159.     public function getId() {
  160.         return $this->id;
  161.     }
  162.     /**
  163.      * {@inheritdoc}
  164.      */
  165.     public function getUsername() {
  166.         return $this->username;
  167.     }
  168.     /**
  169.      * {@inheritdoc}
  170.      */
  171.     public function getUsernameCanonical() {
  172.         return $this->usernameCanonical;
  173.     }
  174.     /**
  175.      * {@inheritdoc}
  176.      */
  177.     public function getSalt() {
  178.         return $this->salt;
  179.     }
  180.     /**
  181.      * {@inheritdoc}
  182.      */
  183.     public function getEmail() {
  184.         return $this->email;
  185.     }
  186.     /**
  187.      * {@inheritdoc}
  188.      */
  189.     public function getEmailCanonical() {
  190.         return $this->emailCanonical;
  191.     }
  192.     /**
  193.      * {@inheritdoc}
  194.      */
  195.     public function getPassword() {
  196.         return $this->password;
  197.     }
  198.     /**
  199.      * {@inheritdoc}
  200.      */
  201.     public function getPlainPassword() {
  202.         return $this->plainPassword;
  203.     }
  204.     /**
  205.      * Gets the last login time.
  206.      *
  207.      * @return \DateTime|null
  208.      */
  209.     public function getLastLogin() {
  210.         return $this->lastLogin;
  211.     }
  212.     /**
  213.      * {@inheritdoc}
  214.      */
  215.     public function getConfirmationToken() {
  216.         return $this->confirmationToken;
  217.     }
  218.     /**
  219.      * {@inheritdoc}
  220.      */
  221.     public function getRoles() {
  222.         $roles $this->roles;
  223.         foreach ($this->getGroups() as $group) {
  224.             $roles array_merge($roles$group->getRoles());
  225.         }
  226.         // we need to make sure to have at least one role
  227.         $roles[] = static::ROLE_DEFAULT;
  228.         return array_unique($roles);
  229.     }
  230.     /**
  231.      * {@inheritdoc}
  232.      */
  233.     public function hasRole($role) {
  234.         return in_array(strtoupper($role), $this->getRoles(), true);
  235.     }
  236.     /**
  237.      * {@inheritdoc}
  238.      */
  239.     public function isAccountNonExpired() {
  240.         return true;
  241.     }
  242.     /**
  243.      * {@inheritdoc}
  244.      */
  245.     public function isAccountNonLocked() {
  246.         return true;
  247.     }
  248.     /**
  249.      * {@inheritdoc}
  250.      */
  251.     public function isCredentialsNonExpired() {
  252.         return true;
  253.     }
  254.     public function isEnabled() {
  255.         return $this->enabled;
  256.     }
  257.     /**
  258.      * {@inheritdoc}
  259.      */
  260.     public function isSuperAdmin() {
  261.         return $this->hasRole(static::ROLE_SUPER_ADMIN);
  262.     }
  263.     /**
  264.      * {@inheritdoc}
  265.      */
  266.     public function removeRole($role) {
  267.         if (false !== $key array_search(strtoupper($role), $this->rolestrue)) {
  268.             unset($this->roles[$key]);
  269.             $this->roles array_values($this->roles);
  270.         }
  271.         return $this;
  272.     }
  273.     /**
  274.      * {@inheritdoc}
  275.      */
  276.     public function setUsername($username) {
  277.         $this->username $username;
  278.         return $this;
  279.     }
  280.     /**
  281.      * {@inheritdoc}
  282.      */
  283.     public function setUsernameCanonical($usernameCanonical) {
  284.         $this->usernameCanonical $usernameCanonical;
  285.         return $this;
  286.     }
  287.     /**
  288.      * {@inheritdoc}
  289.      */
  290.     public function setSalt($salt) {
  291.         $this->salt $salt;
  292.         return $this;
  293.     }
  294.     /**
  295.      * {@inheritdoc}
  296.      */
  297.     public function setEmail($email) {
  298.         $this->email $email;
  299.         return $this;
  300.     }
  301.     /**
  302.      * {@inheritdoc}
  303.      */
  304.     public function setEmailCanonical($emailCanonical) {
  305.         $this->emailCanonical $emailCanonical;
  306.         return $this;
  307.     }
  308.     /**
  309.      * {@inheritdoc}
  310.      */
  311.     public function setEnabled($boolean) {
  312.         $this->enabled = (bool) $boolean;
  313.         return $this;
  314.     }
  315.     /**
  316.      * {@inheritdoc}
  317.      */
  318.     public function setPassword($password) {
  319.         $this->password $password;
  320.         return $this;
  321.     }
  322.     /**
  323.      * {@inheritdoc}
  324.      */
  325.     public function setSuperAdmin($boolean) {
  326.         if (true === $boolean) {
  327.             $this->addRole(static::ROLE_SUPER_ADMIN);
  328.         } else {
  329.             $this->removeRole(static::ROLE_SUPER_ADMIN);
  330.         }
  331.         return $this;
  332.     }
  333.     /**
  334.      * {@inheritdoc}
  335.      */
  336.     public function setPlainPassword($password) {
  337.         $this->plainPassword $password;
  338.         return $this;
  339.     }
  340.     /**
  341.      * {@inheritdoc}
  342.      */
  343.     public function setLastLogin(\DateTime $time null) {
  344.         $this->lastLogin $time;
  345.         return $this;
  346.     }
  347.     /**
  348.      * {@inheritdoc}
  349.      */
  350.     public function setConfirmationToken($confirmationToken) {
  351.         $this->confirmationToken $confirmationToken;
  352.         return $this;
  353.     }
  354.     /**
  355.      * {@inheritdoc}
  356.      */
  357.     public function setPasswordRequestedAt(\DateTime $date null) {
  358.         $this->passwordRequestedAt $date;
  359.         return $this;
  360.     }
  361.     /**
  362.      * Gets the timestamp that the user requested a password reset.
  363.      *
  364.      * @return null|\DateTime
  365.      */
  366.     public function getPasswordRequestedAt() {
  367.         return $this->passwordRequestedAt;
  368.     }
  369.     /**
  370.      * {@inheritdoc}
  371.      */
  372.     public function isPasswordRequestNonExpired($ttl) {
  373.         return $this->getPasswordRequestedAt() instanceof \DateTime &&
  374.                 $this->getPasswordRequestedAt()->getTimestamp() + $ttl time();
  375.     }
  376.     /**
  377.      * {@inheritdoc}
  378.      */
  379.     public function setRoles(array $roles) {
  380.         $this->roles = array();
  381.         foreach ($roles as $role) {
  382.             $this->addRole($role);
  383.         }
  384.         return $this;
  385.     }
  386.     /**
  387.      * {@inheritdoc}
  388.      */
  389.     public function getGroups() {
  390.         return $this->groups ?: $this->groups = new ArrayCollection();
  391.     }
  392.     /**
  393.      * {@inheritdoc}
  394.      */
  395.     public function getGroupNames() {
  396.         $names = array();
  397.         foreach ($this->getGroups() as $group) {
  398.             $names[] = $group->getName();
  399.         }
  400.         return $names;
  401.     }
  402.     /**
  403.      * {@inheritdoc}
  404.      */
  405.     public function hasGroup($name) {
  406.         return in_array($name$this->getGroupNames());
  407.     }
  408.     /**
  409.      * {@inheritdoc}
  410.      */
  411.     public function addGroup(GroupInterface $group) {
  412.         if (!$this->getGroups()->contains($group)) {
  413.             $this->getGroups()->add($group);
  414.         }
  415.         return $this;
  416.     }
  417.     /**
  418.      * {@inheritdoc}
  419.      */
  420.     public function removeGroup(GroupInterface $group) {
  421.         if ($this->getGroups()->contains($group)) {
  422.             $this->getGroups()->removeElement($group);
  423.         }
  424.         return $this;
  425.     }
  426. }