X-Git-Url: https://git.rapsys.eu/userbundle/blobdiff_plain/bab59a4b88a081a7a27a53b4559d74e63b68db92..a0999bbca7ea89eef1e55506da4b3bb0fef6daec:/Entity/User.php?ds=sidebyside diff --git a/Entity/User.php b/Entity/User.php index c6a6cdf..8fb4105 100644 --- a/Entity/User.php +++ b/Entity/User.php @@ -3,7 +3,12 @@ // src/Rapsys/UserBundle/Entity/User.php namespace Rapsys\UserBundle\Entity; -class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterface, \Serializable { +use Rapsys\UserBundle\Entity\Group; +use Symfony\Component\Security\Core\User\UserInterface; +use Doctrine\Common\Collections\ArrayCollection; +use Rapsys\UserBundle\Entity\Civility; + +class User implements UserInterface, \Serializable { /** * @var integer */ @@ -50,9 +55,9 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac protected $updated; /** - * @var \Rapsys\UserBundle\Entity\Title + * @var \Rapsys\UserBundle\Entity\Civility */ - protected $title; + protected $civility; /** * @var \Doctrine\Common\Collections\Collection @@ -60,11 +65,11 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac protected $groups; /** - * User constructor. + * Constructor */ public function __construct() { $this->active = false; - $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); + $this->groups = new ArrayCollection(); } /** @@ -180,6 +185,8 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac /** * Get password * + * {@inheritdoc} + * * @return string */ public function getPassword() { @@ -253,19 +260,19 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac } /** - * Set title + * Set civility */ - public function setTitle($title) { - $this->title = $title; + public function setCivility(Civility $civility) { + $this->civility = $civility; return $this; } /** - * Get title + * Get civility */ - public function getTitle() { - return $this->title; + public function getCivility(): ?Civility { + return $this->civility; } /** @@ -275,7 +282,7 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac * * @return User */ - public function addGroup(\Rapsys\UserBundle\Entity\Group $group) { + public function addGroup(Group $group) { $this->groups[] = $group; return $this; @@ -286,7 +293,7 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac * * @param \Rapsys\UserBundle\Entity\Group $group */ - public function removeGroup(\Rapsys\UserBundle\Entity\Group $group) { + public function removeGroup(Group $group) { $this->groups->removeElement($group); } @@ -299,31 +306,82 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac return $this->groups; } + /** + * {@inheritdoc} + */ public function getRoles() { - return $this->groups->toArray(); + //Get the unique roles list by id + return array_unique(array_reduce( + //Cast groups as array + $this->groups->toArray(), + //Reduce to an array of id => group tuples + function ($array, $group) { + $array[$group->getId()] = $group->getRole(); + return $array; + }, + //Init with empty array + //XXX: on registration, add each group present in rapsys_user.default.group array to user + //XXX: see vendor/rapsys/userbundle/Controller/DefaultController.php +450 + [] + )); + } + + /** + * {@inheritdoc} + */ + public function getRole() { + //Retrieve roles + $roles = $this->getRoles(); + + //With roles array empty + if ($roles === []) { + //Return null + return null; + } + + //Return the role with max id + //XXX: should be rewriten if it change in your configuration + return $roles[array_reduce( + array_keys($roles), + function($cur, $id) { + if ($cur === null || $id > $cur) { + return $id; + } + return $cur; + }, + null + )]; } + /** + * {@inheritdoc} + */ public function getSalt() { //No salt required with bcrypt return null; } + /** + * {@inheritdoc} + */ public function getUsername() { return $this->mail; } - public function eraseCredentials() { - } + /** + * {@inheritdoc} + */ + public function eraseCredentials() {} - public function serialize() { - return serialize(array( + public function serialize(): string { + return serialize([ $this->id, $this->mail, $this->password, $this->active, $this->created, $this->updated - )); + ]); } public function unserialize($serialized) { @@ -337,19 +395,28 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac ) = unserialize($serialized); } - public function isAccountNonExpired() { - return true; - } - - public function isAccountNonLocked() { - return true; + //XXX: was from vendor/symfony/security-core/User/AdvancedUserInterface.php, see if it's used anymore + public function isEnabled() { + return $this->active; } - public function isCredentialsNonExpired() { - return true; + /** + * {@inheritdoc} + */ + public function preUpdate(\Doctrine\ORM\Event\PreUpdateEventArgs $eventArgs) { + //Check that we have an user instance + if (($user = $eventArgs->getEntity()) instanceof User) { + //Set updated value + $user->setUpdated(new \DateTime('now')); + } } - public function isEnabled() { - return $this->active; + /** + * Returns a string representation of the user + * + * @return string + */ + public function __toString(): string { + return $this->civility.' '.$this->forename.' '.$this->surname; } }