vendor/sulu/sulu/src/Sulu/Bundle/SecurityBundle/Entity/User.php line 34

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Sulu.
  4.  *
  5.  * (c) Sulu GmbH
  6.  *
  7.  * This source file is subject to the MIT license that is bundled
  8.  * with this source code in the file LICENSE.
  9.  */
  10. namespace Sulu\Bundle\SecurityBundle\Entity;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Doctrine\Common\Collections\Collection;
  13. use JMS\Serializer\Annotation\ExclusionPolicy;
  14. use JMS\Serializer\Annotation\Expose;
  15. use JMS\Serializer\Annotation\Groups;
  16. use JMS\Serializer\Annotation\SerializedName;
  17. use JMS\Serializer\Annotation\VirtualProperty;
  18. use Sulu\Bundle\ContactBundle\Entity\ContactInterface;
  19. use Sulu\Bundle\CoreBundle\Entity\ApiEntity;
  20. use Sulu\Component\Persistence\Model\AuditableInterface;
  21. use Sulu\Component\Persistence\Model\AuditableTrait;
  22. use Sulu\Component\Security\Authentication\UserInterface;
  23. use Symfony\Component\Security\Core\User\EquatableInterface;
  24. use Symfony\Component\Security\Core\User\UserInterface as SymfonyUserInterface;
  25. /**
  26.  * User.
  27.  *
  28.  * @ExclusionPolicy("all")
  29.  */
  30. class User extends ApiEntity implements UserInterfaceEquatableInterfaceAuditableInterfacePasswordAuthenticatedUserInterface
  31. {
  32.     use AuditableTrait;
  33.     /**
  34.      * @var int
  35.      * @Expose
  36.      * @Groups({"frontend", "fullUser"})
  37.      */
  38.     protected $id;
  39.     /**
  40.      * @var string
  41.      * @Expose
  42.      * @Groups({"fullUser", "profile"})
  43.      */
  44.     protected $username;
  45.     /**
  46.      * @var string|null
  47.      * @Expose
  48.      * @Groups({"fullUser", "profile"})
  49.      */
  50.     protected $email;
  51.     /**
  52.      * @var string
  53.      */
  54.     protected $password;
  55.     /**
  56.      * @var string
  57.      * @Expose
  58.      * @Groups({"frontend", "fullUser", "profile"})
  59.      */
  60.     protected $locale;
  61.     /**
  62.      * @var string
  63.      */
  64.     protected $salt;
  65.     /**
  66.      * @var string|null
  67.      * @Expose
  68.      */
  69.     protected $privateKey;
  70.     /**
  71.      * @var string|null
  72.      */
  73.     protected $apiKey;
  74.     /**
  75.      * @var bool
  76.      * @Expose
  77.      */
  78.     protected $locked false;
  79.     /**
  80.      * @var bool
  81.      * @Expose
  82.      */
  83.     protected $enabled true;
  84.     /**
  85.      * @var \DateTime|null
  86.      */
  87.     protected $lastLogin;
  88.     /**
  89.      * @var string|null
  90.      */
  91.     protected $confirmationKey;
  92.     /**
  93.      * @var string|null
  94.      */
  95.     protected $passwordResetToken;
  96.     /**
  97.      * @var \DateTime|null
  98.      */
  99.     private $passwordResetTokenExpiresAt;
  100.     /**
  101.      * @var int|null
  102.      */
  103.     private $passwordResetTokenEmailsSent;
  104.     /**
  105.      * @var ContactInterface
  106.      * @Expose
  107.      * @Groups({"frontend", "fullUser"})
  108.      */
  109.     protected $contact;
  110.     /**
  111.      * @var Collection|UserRole[]
  112.      * @Expose
  113.      */
  114.     protected $userRoles;
  115.     /**
  116.      * @deprecated The group functionality was deprecated in Sulu 2.1 and will be removed in Sulu 3.0
  117.      *
  118.      * @var Collection|UserGroup[]
  119.      * @Expose
  120.      */
  121.     protected $userGroups;
  122.     /**
  123.      * @var Collection|UserSetting[]
  124.      */
  125.     protected $userSettings;
  126.     /**
  127.      * Constructor.
  128.      */
  129.     public function __construct()
  130.     {
  131.         $this->apiKey = \md5(\uniqid());
  132.         $this->userRoles = new ArrayCollection();
  133.         $this->userGroups = new ArrayCollection();
  134.         $this->userSettings = new ArrayCollection();
  135.     }
  136.     /**
  137.      * Get id.
  138.      *
  139.      * @return int
  140.      */
  141.     public function getId()
  142.     {
  143.         return $this->id;
  144.     }
  145.     /**
  146.      * Set username.
  147.      *
  148.      * @param string $username
  149.      *
  150.      * @return self
  151.      */
  152.     public function setUsername($username)
  153.     {
  154.         $this->username $username;
  155.         return $this;
  156.     }
  157.     /**
  158.      * Get username.
  159.      *
  160.      * @SerializedName("username")
  161.      * @Groups({"frontend", "fullUser"})
  162.      *
  163.      * @return string
  164.      */
  165.     public function getUsername()
  166.     {
  167.         return $this->username;
  168.     }
  169.     public function getUserIdentifier(): string
  170.     {
  171.         return $this->username;
  172.     }
  173.     /**
  174.      * Set password.
  175.      *
  176.      * @param string $password
  177.      *
  178.      * @return self
  179.      */
  180.     public function setPassword($password)
  181.     {
  182.         $this->password $password;
  183.         return $this;
  184.     }
  185.     /**
  186.      * Get password.
  187.      *
  188.      * @return string
  189.      */
  190.     public function getPassword(): ?string
  191.     {
  192.         return $this->password;
  193.     }
  194.     /**
  195.      * Set locale.
  196.      *
  197.      * @param string $locale
  198.      *
  199.      * @return self
  200.      */
  201.     public function setLocale($locale)
  202.     {
  203.         $this->locale $locale;
  204.         return $this;
  205.     }
  206.     /**
  207.      * Get locale.
  208.      *
  209.      * @return string
  210.      */
  211.     public function getLocale()
  212.     {
  213.         return $this->locale;
  214.     }
  215.     /**
  216.      * Set salt.
  217.      *
  218.      * @param string $salt
  219.      *
  220.      * @return self
  221.      */
  222.     public function setSalt($salt)
  223.     {
  224.         $this->salt $salt;
  225.         return $this;
  226.     }
  227.     /**
  228.      * Get salt.
  229.      *
  230.      * @return string
  231.      */
  232.     public function getSalt()
  233.     {
  234.         return $this->salt;
  235.     }
  236.     /**
  237.      * Set privateKey.
  238.      *
  239.      * @param string|null $privateKey
  240.      *
  241.      * @return self
  242.      */
  243.     public function setPrivateKey($privateKey)
  244.     {
  245.         $this->privateKey $privateKey;
  246.         return $this;
  247.     }
  248.     /**
  249.      * Get privateKey.
  250.      *
  251.      * @return string|null
  252.      */
  253.     public function getPrivateKey()
  254.     {
  255.         return $this->privateKey;
  256.     }
  257.     /**
  258.      * Removes the password of the user.
  259.      */
  260.     public function eraseCredentials()
  261.     {
  262.     }
  263.     /**
  264.      * Set apiKey.
  265.      *
  266.      * @param string|null $apiKey
  267.      *
  268.      * @return self
  269.      */
  270.     public function setApiKey($apiKey)
  271.     {
  272.         $this->apiKey $apiKey;
  273.         return $this;
  274.     }
  275.     /**
  276.      * Get apiKey.
  277.      *
  278.      * @return string|null
  279.      */
  280.     public function getApiKey()
  281.     {
  282.         return $this->apiKey;
  283.     }
  284.     /**
  285.      * Set locked.
  286.      *
  287.      * @param bool $locked
  288.      *
  289.      * @return self
  290.      */
  291.     public function setLocked($locked)
  292.     {
  293.         $this->locked $locked;
  294.         return $this;
  295.     }
  296.     public function getLocked()
  297.     {
  298.         return $this->locked;
  299.     }
  300.     /**
  301.      * Set enabled.
  302.      *
  303.      * @param bool $enabled
  304.      *
  305.      * @return self
  306.      */
  307.     public function setEnabled($enabled)
  308.     {
  309.         $this->enabled $enabled;
  310.         return $this;
  311.     }
  312.     public function getEnabled()
  313.     {
  314.         return $this->enabled;
  315.     }
  316.     /**
  317.      * Set lastLogin.
  318.      *
  319.      * @param \DateTime|null $lastLogin
  320.      *
  321.      * @return self
  322.      */
  323.     public function setLastLogin($lastLogin)
  324.     {
  325.         $this->lastLogin $lastLogin;
  326.         return $this;
  327.     }
  328.     /**
  329.      * Get lastLogin.
  330.      *
  331.      * @return \DateTime|null
  332.      */
  333.     public function getLastLogin()
  334.     {
  335.         return $this->lastLogin;
  336.     }
  337.     /**
  338.      * Set confirmationKey.
  339.      *
  340.      * @param string|null $confirmationKey
  341.      *
  342.      * @return self
  343.      */
  344.     public function setConfirmationKey($confirmationKey)
  345.     {
  346.         $this->confirmationKey $confirmationKey;
  347.         return $this;
  348.     }
  349.     /**
  350.      * Get confirmationKey.
  351.      *
  352.      * @return string|null
  353.      */
  354.     public function getConfirmationKey()
  355.     {
  356.         return $this->confirmationKey;
  357.     }
  358.     /**
  359.      * Set passwordResetToken.
  360.      *
  361.      * @param string|null $passwordResetToken
  362.      *
  363.      * @return self
  364.      */
  365.     public function setPasswordResetToken($passwordResetToken)
  366.     {
  367.         $this->passwordResetToken $passwordResetToken;
  368.         return $this;
  369.     }
  370.     /**
  371.      * Get passwordResetToken.
  372.      *
  373.      * @return string|null
  374.      */
  375.     public function getPasswordResetToken()
  376.     {
  377.         return $this->passwordResetToken;
  378.     }
  379.     /**
  380.      * Set email.
  381.      *
  382.      * @param string|null $email
  383.      *
  384.      * @return self
  385.      */
  386.     public function setEmail($email)
  387.     {
  388.         $this->email $email;
  389.         return $this;
  390.     }
  391.     /**
  392.      * Get email.
  393.      *
  394.      * @return string|null
  395.      */
  396.     public function getEmail()
  397.     {
  398.         return $this->email;
  399.     }
  400.     /**
  401.      * Set tokenExpiresAt.
  402.      *
  403.      * @param \DateTime|null $passwordResetTokenExpiresAt
  404.      *
  405.      * @return self
  406.      */
  407.     public function setPasswordResetTokenExpiresAt($passwordResetTokenExpiresAt)
  408.     {
  409.         $this->passwordResetTokenExpiresAt $passwordResetTokenExpiresAt;
  410.         return $this;
  411.     }
  412.     /**
  413.      * Get passwordResetTokenExpiresAt.
  414.      *
  415.      * @return \DateTime|null
  416.      */
  417.     public function getPasswordResetTokenExpiresAt()
  418.     {
  419.         return $this->passwordResetTokenExpiresAt;
  420.     }
  421.     /**
  422.      * Set passwordResetTokenEmailsSent.
  423.      *
  424.      * @param int|null $passwordResetTokenEmailsSent
  425.      *
  426.      * @return self
  427.      */
  428.     public function setPasswordResetTokenEmailsSent($passwordResetTokenEmailsSent)
  429.     {
  430.         $this->passwordResetTokenEmailsSent $passwordResetTokenEmailsSent;
  431.         return $this;
  432.     }
  433.     /**
  434.      * Get passwordResetTokenEmailsSent.
  435.      *
  436.      * @return int|null
  437.      */
  438.     public function getPasswordResetTokenEmailsSent()
  439.     {
  440.         return $this->passwordResetTokenEmailsSent;
  441.     }
  442.     public function isEqualTo(SymfonyUserInterface $user)
  443.     {
  444.         if (!$user instanceof self) {
  445.             return false;
  446.         }
  447.         return $this->id === $user->getId()
  448.             && $this->password === $user->getPassword()
  449.             && $this->salt === $user->getSalt()
  450.             && $this->username === $user->getUsername()
  451.             && $this->locked === $user->getLocked()
  452.             && $this->enabled === $user->getEnabled();
  453.     }
  454.     /**
  455.      * Add userRoles.
  456.      *
  457.      * @return self
  458.      */
  459.     public function addUserRole(UserRole $userRoles)
  460.     {
  461.         $this->userRoles[] = $userRoles;
  462.         return $this;
  463.     }
  464.     /**
  465.      * Remove userRoles.
  466.      */
  467.     public function removeUserRole(UserRole $userRoles)
  468.     {
  469.         $this->userRoles->removeElement($userRoles);
  470.     }
  471.     /**
  472.      * Get userRoles.
  473.      *
  474.      * @return ArrayCollection
  475.      */
  476.     public function getUserRoles()
  477.     {
  478.         return $this->userRoles;
  479.     }
  480.     /**
  481.      * @VirtualProperty
  482.      * @Groups({"frontend"})
  483.      */
  484.     public function getRoles()
  485.     {
  486.         $roles = ['ROLE_USER'];
  487.         foreach ($this->getUserRoles() as $userRole) {
  488.             /* @var UserRole $userRole */
  489.             $roles[] = $userRole->getRole()->getIdentifier();
  490.         }
  491.         return $roles;
  492.     }
  493.     public function getRoleObjects()
  494.     {
  495.         $roles = [];
  496.         foreach ($this->getUserRoles() as $userRole) {
  497.             $roles[] = $userRole->getRole();
  498.         }
  499.         return $roles;
  500.     }
  501.     /**
  502.      * Add userGroups.
  503.      *
  504.      * @deprecated The group functionality was deprecated in Sulu 2.1 and will be removed in Sulu 3.0
  505.      *
  506.      * @return self
  507.      */
  508.     public function addUserGroup(UserGroup $userGroups)
  509.     {
  510.         $this->userGroups[] = $userGroups;
  511.         return $this;
  512.     }
  513.     /**
  514.      * Remove userGroups.
  515.      *
  516.      * @deprecated The group functionality was deprecated in Sulu 2.1 and will be removed in Sulu 3.0
  517.      */
  518.     public function removeUserGroup(UserGroup $userGroups)
  519.     {
  520.         $this->userGroups->removeElement($userGroups);
  521.     }
  522.     /**
  523.      * Get userGroups.
  524.      *
  525.      * @deprecated The group functionality was deprecated in Sulu 2.1 and will be removed in Sulu 3.0
  526.      *
  527.      * @return ArrayCollection
  528.      */
  529.     public function getUserGroups()
  530.     {
  531.         return $this->userGroups;
  532.     }
  533.     /**
  534.      * Add userSettings.
  535.      *
  536.      * @return self
  537.      */
  538.     public function addUserSetting(UserSetting $userSettings)
  539.     {
  540.         $this->userSettings[] = $userSettings;
  541.         return $this;
  542.     }
  543.     /**
  544.      * Remove userSettings.
  545.      */
  546.     public function removeUserSetting(UserSetting $userSettings)
  547.     {
  548.         $this->userSettings->removeElement($userSettings);
  549.     }
  550.     /**
  551.      * Get userSettings.
  552.      *
  553.      * @return Collection|UserSetting[]
  554.      */
  555.     public function getUserSettings()
  556.     {
  557.         return $this->userSettings;
  558.     }
  559.     /**
  560.      * @VirtualProperty
  561.      * @Groups({"frontend"})
  562.      */
  563.     public function getSettings()
  564.     {
  565.         $userSettingValues = [];
  566.         foreach ($this->userSettings as $userSetting) {
  567.             $userSettingValues[$userSetting->getKey()] = \json_decode($userSetting->getValue(), true);
  568.         }
  569.         return $userSettingValues;
  570.     }
  571.     /**
  572.      * Set contact.
  573.      *
  574.      * @param ContactInterface $contact
  575.      *
  576.      * @return self
  577.      */
  578.     public function setContact(ContactInterface $contact null)
  579.     {
  580.         $this->contact $contact;
  581.         return $this;
  582.     }
  583.     /**
  584.      * Get contact.
  585.      *
  586.      * @return ContactInterface
  587.      */
  588.     public function getContact()
  589.     {
  590.         return $this->contact;
  591.     }
  592.     /**
  593.      * @VirtualProperty
  594.      * @SerializedName("fullName")
  595.      * @Groups({"frontend", "fullUser"})
  596.      *
  597.      * @return string
  598.      */
  599.     public function getFullName()
  600.     {
  601.         return null !== $this->getContact() ?
  602.             $this->getContact()->getFullName() : $this->getUsername();
  603.     }
  604.     /**
  605.      * @VirtualProperty
  606.      * @Groups({"profile"})
  607.      *
  608.      * @return string
  609.      */
  610.     public function getFirstName()
  611.     {
  612.         return $this->contact->getFirstName();
  613.     }
  614.     /**
  615.      * Set firstName.
  616.      *
  617.      * @param $firstName
  618.      *
  619.      * @return $this
  620.      */
  621.     public function setFirstName($firstName)
  622.     {
  623.         $this->contact->setFirstName($firstName);
  624.         return $this;
  625.     }
  626.     /**
  627.      * @VirtualProperty
  628.      * @Groups({"profile"})
  629.      *
  630.      * @return string
  631.      */
  632.     public function getLastName()
  633.     {
  634.         return $this->contact->getLastName();
  635.     }
  636.     /**
  637.      * Set lastName.
  638.      *
  639.      * @param $lastName
  640.      *
  641.      * @return $this
  642.      */
  643.     public function setLastName($lastName)
  644.     {
  645.         $this->contact->setLastName($lastName);
  646.         return $this;
  647.     }
  648. }