// 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
*/
protected $updated;
/**
- * @var \Rapsys\UserBundle\Entity\Title
+ * @var \Rapsys\UserBundle\Entity\Civility
*/
- protected $title;
+ protected $civility;
/**
* @var \Doctrine\Common\Collections\Collection
protected $groups;
/**
- * User constructor.
+ * Constructor
*/
public function __construct() {
$this->active = false;
- $this->groups = new \Doctrine\Common\Collections\ArrayCollection();
+ $this->groups = new ArrayCollection();
}
/**
/**
* Get password
*
+ * {@inheritdoc}
+ *
* @return string
*/
public function getPassword() {
}
/**
- * 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;
}
/**
*
* @return User
*/
- public function addGroup(\Rapsys\UserBundle\Entity\Group $group) {
+ public function addGroup(Group $group) {
$this->groups[] = $group;
return $this;
*
* @param \Rapsys\UserBundle\Entity\Group $group
*/
- public function removeGroup(\Rapsys\UserBundle\Entity\Group $group) {
+ public function removeGroup(Group $group) {
$this->groups->removeElement($group);
}
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) {
) = 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;
}
}