wallabag/src/Wallabag/UserBundle/Entity/User.php
Jeremy Benoist 5709ecb368
Re-use NewUserType to validate registration
The only ugly things is how we handle error by generating the view and then parse the content to retrieve all errors…

Fix exposition fields in User entity
2017-05-30 07:56:01 +02:00

292 lines
5.6 KiB
PHP

<?php
namespace Wallabag\UserBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Groups;
use JMS\Serializer\Annotation\XmlRoot;
use Scheb\TwoFactorBundle\Model\Email\TwoFactorInterface;
use Scheb\TwoFactorBundle\Model\TrustedComputerInterface;
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Wallabag\ApiBundle\Entity\Client;
use Wallabag\CoreBundle\Entity\Config;
use Wallabag\CoreBundle\Entity\Entry;
/**
* User.
*
* @XmlRoot("user")
* @ORM\Entity(repositoryClass="Wallabag\UserBundle\Repository\UserRepository")
* @ORM\Table(name="`user`")
* @ORM\HasLifecycleCallbacks()
*
* @UniqueEntity("email")
* @UniqueEntity("username")
*/
class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterface
{
/** @Serializer\XmlAttribute */
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
* @Groups({"user_api"})
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="name", type="text", nullable=true)
*
* @Groups({"user_api"})
*/
protected $name;
/**
* @var string
*
* @Groups({"user_api"})
*/
protected $username;
/**
* @var string
*
* @Groups({"user_api"})
*/
protected $email;
/**
* @var date
*
* @ORM\Column(name="created_at", type="datetime")
*
* @Groups({"user_api"})
*/
protected $createdAt;
/**
* @var date
*
* @ORM\Column(name="updated_at", type="datetime")
*
* @Groups({"user_api"})
*/
protected $updatedAt;
/**
* @ORM\OneToMany(targetEntity="Wallabag\CoreBundle\Entity\Entry", mappedBy="user", cascade={"remove"})
*/
protected $entries;
/**
* @ORM\OneToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", mappedBy="user", cascade={"remove"})
*/
protected $config;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $authCode;
/**
* @var bool Enabled yes/no
* @ORM\Column(type="boolean")
*/
private $twoFactorAuthentication = false;
/**
* @ORM\Column(type="json_array", nullable=true)
*/
private $trusted;
/**
* @ORM\OneToMany(targetEntity="Wallabag\ApiBundle\Entity\Client", mappedBy="user", cascade={"remove"})
*/
protected $clients;
public function __construct()
{
parent::__construct();
$this->entries = new ArrayCollection();
$this->roles = ['ROLE_USER'];
}
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function timestamps()
{
if (is_null($this->createdAt)) {
$this->createdAt = new \DateTime();
}
$this->updatedAt = new \DateTime();
}
/**
* Set name.
*
* @param string $name
*
* @return User
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @return string
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @return string
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* @param Entry $entry
*
* @return User
*/
public function addEntry(Entry $entry)
{
$this->entries[] = $entry;
return $this;
}
/**
* @return ArrayCollection<Entry>
*/
public function getEntries()
{
return $this->entries;
}
public function isEqualTo(UserInterface $user)
{
return $this->username === $user->getUsername();
}
/**
* Set config.
*
* @param Config $config
*
* @return User
*/
public function setConfig(Config $config = null)
{
$this->config = $config;
return $this;
}
/**
* Get config.
*
* @return Config
*/
public function getConfig()
{
return $this->config;
}
/**
* @return bool
*/
public function isTwoFactorAuthentication()
{
return $this->twoFactorAuthentication;
}
/**
* @param bool $twoFactorAuthentication
*/
public function setTwoFactorAuthentication($twoFactorAuthentication)
{
$this->twoFactorAuthentication = $twoFactorAuthentication;
}
public function isEmailAuthEnabled()
{
return $this->twoFactorAuthentication;
}
public function getEmailAuthCode()
{
return $this->authCode;
}
public function setEmailAuthCode($authCode)
{
$this->authCode = $authCode;
}
public function addTrustedComputer($token, \DateTime $validUntil)
{
$this->trusted[$token] = $validUntil->format('r');
}
public function isTrustedComputer($token)
{
if (isset($this->trusted[$token])) {
$now = new \DateTime();
$validUntil = new \DateTime($this->trusted[$token]);
return $now < $validUntil;
}
return false;
}
/**
* @param Client $client
*
* @return User
*/
public function addClient(Client $client)
{
$this->clients[] = $client;
return $this;
}
/**
* @return ArrayCollection<Entry>
*/
public function getClients()
{
return $this->clients;
}
}