X-Git-Url: https://git.rapsys.eu/userbundle/blobdiff_plain/cadb2ec013de2fae74003e6764c454f37cd30c90..70c72bba9ba343c0a642a4848d69613c99c6603b:/Entity/User.php diff --git a/Entity/User.php b/Entity/User.php index df88e5c..8fb4105 100644 --- a/Entity/User.php +++ b/Entity/User.php @@ -6,6 +6,7 @@ namespace Rapsys\UserBundle\Entity; 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 { /** @@ -54,9 +55,9 @@ class User implements UserInterface, \Serializable { protected $updated; /** - * @var \Rapsys\UserBundle\Entity\Title + * @var \Rapsys\UserBundle\Entity\Civility */ - protected $title; + protected $civility; /** * @var \Doctrine\Common\Collections\Collection @@ -64,7 +65,7 @@ class User implements UserInterface, \Serializable { protected $groups; /** - * User constructor. + * Constructor */ public function __construct() { $this->active = false; @@ -184,6 +185,8 @@ class User implements UserInterface, \Serializable { /** * Get password * + * {@inheritdoc} + * * @return string */ public function getPassword() { @@ -257,19 +260,19 @@ class User implements UserInterface, \Serializable { } /** - * 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; } /** @@ -303,37 +306,82 @@ class User implements UserInterface, \Serializable { return $this->groups; } + /** + * {@inheritdoc} + */ public function getRoles() { - $roles = [ 'ROLE_USER' ]; + //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(); - foreach($this->groups->toArray() as $group) { - $roles[] = $group->getRole(); + //With roles array empty + if ($roles === []) { + //Return null + return null; } - return array_unique($roles); + //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) { @@ -351,4 +399,24 @@ class User implements UserInterface, \Serializable { public function isEnabled() { return $this->active; } + + /** + * {@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')); + } + } + + /** + * Returns a string representation of the user + * + * @return string + */ + public function __toString(): string { + return $this->civility.' '.$this->forename.' '.$this->surname; + } }