src/Entity/Users.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use DateTime;
  4. use DateTimeZone;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\DBAL\Types\Types;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  10. use Symfony\Component\Security\Core\User\UserInterface;
  11. use App\Exception\ComplianceException;
  12. use Symfony\Component\Serializer\Annotation\Groups;
  13. use Nelmio\ApiDocBundle\Annotation\Model;
  14. use OpenApi\Attributes as OA;
  15. /**
  16.  * Users
  17.  *
  18.  * @ORM\Table(name="users", indexes={
  19.  *     @ORM\Index(name="username", columns={"username"}),
  20.  *     @ORM\Index(name="active", columns={"active"}),
  21.  *     @ORM\Index(name="removed", columns={"removed"}),
  22.  *     @ORM\Index(name="update_email_sent", columns={"update_email_sent"}),
  23.  * })
  24.  * @ORM\Entity(repositoryClass="App\Repository\UsersRepository")
  25.  */
  26. class Users implements UserInterfacePasswordAuthenticatedUserInterface
  27. {
  28.     /**
  29.      * @var int
  30.      *
  31.      * @ORM\Column(name="id", type="integer")
  32.      * @ORM\Id
  33.      * @ORM\GeneratedValue(strategy="AUTO")
  34.      * @Groups("data_export")
  35.      */
  36.     private $id;
  37.     /**
  38.      * @var string
  39.      *
  40.      * @ORM\Column(name="email_address", type="string", length=255)
  41.      * @Groups("data_export")
  42.      */
  43.     private $emailAddress;
  44.     /**
  45.      * @var string
  46.      *
  47.      * @ORM\Column(name="firstname", type="string", length=255, nullable=true)
  48.      * @Groups("data_export")
  49.      */
  50.     private $firstname "";
  51.     /**
  52.      * @var string
  53.      *
  54.      * @ORM\Column(name="lastname", type="string", length=255, nullable=true)
  55.      * @Groups("data_export")
  56.      */
  57.     private $lastname "";
  58.     /**
  59.      * @var string
  60.      *
  61.      * @ORM\Column(name="fullname", type="string", length=255, nullable=true)
  62.      * @Groups("data_export")
  63.      */
  64.     private $fullname;
  65.     /**
  66.      * @var string
  67.      *
  68.      * @ORM\Column(name="username", type="string", length=255)
  69.      * @Groups("data_export")
  70.      */
  71.     private $username;
  72.     /**
  73.      * @var string
  74.      *
  75.      * @ORM\Column(name="password", type="string", length=255)
  76.      */
  77.     private $password;
  78.     /**
  79.      * @var string
  80.      *
  81.      * @ORM\Column(name="mobile_phone", type="string", length=255, nullable=true)
  82.      * @Groups("data_export")
  83.      */
  84.     private $mobilePhone;
  85.     /**
  86.      * @var string
  87.      *
  88.      * @ORM\Column(name="profile_image", type="string", length=255, nullable=true)
  89.      * @Groups("data_export")
  90.      */
  91.     private $profileImage;
  92.     /**
  93.      * @var string
  94.      *
  95.      * @ORM\Column(name="register_source", type="string", length=255, nullable=true)
  96.      * @Groups("data_export")
  97.      */
  98.     private $registerSource;
  99.     /**
  100.      * @var DateTime
  101.      *
  102.      * @ORM\Column(name="created_at", type="datetime")
  103.      * @Groups("data_export")
  104.      */
  105.     private $createdAt;
  106.     /**
  107.      * @var DateTime
  108.      *
  109.      * @ORM\Column(name="updated_at", type="datetime")
  110.      * @Groups("data_export")
  111.      */
  112.     private $updatedAt;
  113.     /**
  114.      * @var DateTime
  115.      *
  116.      * @ORM\Column(name="tos_consent_at", type="datetime", nullable=true)
  117.      * @Groups("data_export")
  118.      */
  119.     private $tosConsentAt;
  120.     /**
  121.      * @var DateTime
  122.      *
  123.      * @ORM\Column(name="gdpr_consent_at", type="datetime", nullable=true)
  124.      * @Groups("data_export")
  125.      */
  126.     private $gdprConsentAt;
  127.     /**
  128.      * @var string
  129.      *
  130.      * @ORM\Column(name="lang", type="string", length=2, options={"default" : "ro"})
  131.      * @Groups("data_export")
  132.      */
  133.     private $lang;
  134.     /**
  135.      * @var bool
  136.      *
  137.      * @ORM\Column(name="active", type="boolean", options={"default" : true})
  138.      * @Groups("data_export")
  139.      */
  140.     private $active;
  141.     /**
  142.      * @var bool
  143.      *
  144.      * @ORM\Column(name="email_verified", type="boolean", options={"default": false})
  145.      * @Groups("data_export")
  146.      */
  147.     private $emailVerified;
  148.     /**
  149.      * @var bool
  150.      *
  151.      * @ORM\Column(name="update_email_sent", type="boolean", options={"default": false})
  152.      */
  153.     private $updateEmailSent false;
  154.     /**
  155.      * @var bool
  156.      *
  157.      * @ORM\Column(name="do_not_email", type="boolean", options={"default": false})
  158.      * @Groups("data_export")
  159.      */
  160.     private $doNotEmail false;
  161.     /**
  162.      * @var bool
  163.      *
  164.      * @ORM\Column(name="removed", type="boolean", options={"default" : true})
  165.      * @Groups("data_export")
  166.      */
  167.     private $removed;
  168.     /**
  169.      * @var DateTime
  170.      *
  171.      * @ORM\Column(name="last_notification", type="date", nullable=true)
  172.      * @Groups("data_export")
  173.      */
  174.     private $lastNotification;
  175.     /**
  176.      * @ORM\OneToMany(targetEntity="App\Entity\ApiToken", mappedBy="user")
  177.      */
  178.     private $apiTokens;
  179.     /**
  180.      * @ORM\Column(type="integer", options={"default" : true})
  181.      * @Groups("data_export")
  182.      */
  183.     private $unit_measure;
  184.     /**
  185.      * @ORM\Column(type="integer")
  186.      * @Groups("data_export")
  187.      */
  188.     private $user_points;
  189.     /**
  190.      * @ORM\Column(type="integer")
  191.      */
  192.     private $healthy_minutes;
  193.     /**
  194.      * @ORM\OneToMany(targetEntity=UserVouchers::class, mappedBy="user")
  195.      */
  196.     private $userVouchers;
  197.     /**
  198.      * @ORM\OneToMany(targetEntity=UserPointsHistory::class, mappedBy="user")
  199.      */
  200.     #[OA\Property(type"array"
  201.         items: new OA\Items(ref: new Model(typeUserPointsHistory::class)))]
  202.     private $userPointsHistories;
  203.     /**
  204.      * @ORM\OneToMany(targetEntity=Feedbacks::class, mappedBy="user")
  205.      */
  206.     #[OA\Property(type"array",
  207.         items: new OA\Items(ref: new Model(typeFeedbacks::class)))]
  208.     private $feedbacks;
  209.     /**
  210.      * @ORM\OneToOne(targetEntity="UserSubscriptions")
  211.      * @ORM\JoinColumn(name="latest_subscription_id", onDelete="SET NULL", options={"unsigned"=true})
  212.      */
  213.     private ?UserSubscriptions $latestSubscription null;
  214.     public function __construct()
  215.     {
  216.         $this->apiTokens = new ArrayCollection();
  217.         $this->userVouchers = new ArrayCollection();
  218.         $this->userPointsHistories = new ArrayCollection();
  219.         $this->feedbacks = new ArrayCollection();
  220.     }
  221.     /**
  222.      * Get id
  223.      *
  224.      * @return int
  225.      */
  226.     public function getId()
  227.     {
  228.         return $this->id;
  229.     }
  230.     /**
  231.      * Set emailAddress
  232.      *
  233.      * @param string $emailAddress
  234.      *
  235.      * @return Users
  236.      */
  237.     public function setEmailAddress($emailAddress)
  238.     {
  239.         $this->emailAddress $emailAddress;
  240.         return $this;
  241.     }
  242.     /**
  243.      * Get emailAddress
  244.      *
  245.      * @return string
  246.      */
  247.     public function getEmailAddress()
  248.     {
  249.         return $this->emailAddress;
  250.     }
  251.     /**
  252.      * Set updateEmailSent
  253.      *
  254.      * @param string $updateEmailSent
  255.      *
  256.      * @return Users
  257.      */
  258.     public function setUpdateEmailSent($updateEmailSent)
  259.     {
  260.         $this->updateEmailSent $updateEmailSent;
  261.         return $this;
  262.     }
  263.     /**
  264.      * Get updateEmailSent
  265.      *
  266.      * @return bool
  267.      */
  268.     public function getUpdateEmailSent()
  269.     {
  270.         return $this->updateEmailSent;
  271.     }
  272.     /**
  273.      * Set updateEmailSent
  274.      *
  275.      * @param string $doNotEmail
  276.      *
  277.      * @return Users
  278.      */
  279.     public function setDoNotEmail($doNotEmail)
  280.     {
  281.         $this->doNotEmail $doNotEmail;
  282.         return $this;
  283.     }
  284.     /**
  285.      * Get doNotEmail
  286.      *
  287.      * @return bool
  288.      */
  289.     public function getDoNotEmail()
  290.     {
  291.         return $this->doNotEmail;
  292.     }
  293.     /**
  294.      * Set firstname
  295.      *
  296.      * @param string $firstname
  297.      *
  298.      * @return Users
  299.      */
  300.     public function setFirstname($firstname)
  301.     {
  302.         $this->firstname $firstname;
  303.         return $this;
  304.     }
  305.     /**
  306.      * Get firstname
  307.      *
  308.      * @return string
  309.      */
  310.     public function getFirstname()
  311.     {
  312.         return $this->firstname;
  313.     }
  314.     /**
  315.      * Set lastname
  316.      *
  317.      * @param string $lastname
  318.      *
  319.      * @return Users
  320.      */
  321.     public function setLastname($lastname)
  322.     {
  323.         $this->lastname $lastname;
  324.         return $this;
  325.     }
  326.     /**
  327.      * Get lastname
  328.      *
  329.      * @return string
  330.      */
  331.     public function getLastname()
  332.     {
  333.         return $this->lastname;
  334.     }
  335.     /**
  336.      * Set fullname
  337.      *
  338.      * @param string $fullname
  339.      *
  340.      * @return Users
  341.      */
  342.     public function setFullname($fullname)
  343.     {
  344.     if (ctype_space($fullname)) $this->fullname "";
  345.     else $this->fullname $fullname;
  346.         return $this;
  347.     }
  348.     /**
  349.      * Get fullname
  350.      *
  351.      * @return string
  352.      */
  353.     public function getFullname()
  354.     {
  355.         return $this->fullname;
  356.     }
  357.     /**
  358.      * Set username
  359.      *
  360.      * @param string $username
  361.      *
  362.      * @return Users
  363.      */
  364.     public function setUsername($username)
  365.     {
  366.         $this->username $username;
  367.         return $this;
  368.     }
  369.     /**
  370.      * Get username
  371.      *
  372.      * @return string
  373.      */
  374.     public function getUsername()
  375.     {
  376.         return $this->username;
  377.     }
  378.     /**
  379.      * Set password
  380.      *
  381.      * @param string $password
  382.      *
  383.      * @return Users
  384.      */
  385.     public function setPassword($password)
  386.     {
  387.         $this->password $password;
  388.         return $this;
  389.     }
  390.     /**
  391.      * Get password
  392.      *
  393.      * @return string
  394.      */
  395.     public function getPassword(): string
  396.     {
  397.         return $this->password;
  398.     }
  399.     /**
  400.      * Set mobilePhone
  401.      *
  402.      * @param string $mobilePhone
  403.      *
  404.      * @return Users
  405.      */
  406.     public function setMobilePhone($mobilePhone)
  407.     {
  408.         $this->mobilePhone $mobilePhone;
  409.         return $this;
  410.     }
  411.     /**
  412.      * Get mobilePhone
  413.      *
  414.      * @return string
  415.      */
  416.     public function getMobilePhone()
  417.     {
  418.         return $this->mobilePhone;
  419.     }
  420.     /**
  421.      * Set profileImage
  422.      *
  423.      * @param string $profileImage
  424.      *
  425.      * @return Users
  426.      */
  427.     public function setProfileImage($profileImage)
  428.     {
  429.         $this->profileImage $profileImage;
  430.         return $this;
  431.     }
  432.     /**
  433.      * Get profileImage
  434.      *
  435.      * @return string
  436.      */
  437.     public function getProfileImage()
  438.     {
  439.         return $this->profileImage;
  440.     }
  441.     /**
  442.      * Set registerSource
  443.      *
  444.      * @param string $registerSource
  445.      *
  446.      * @return Users
  447.      */
  448.     public function setRegisterSource($registerSource)
  449.     {
  450.         $this->registerSource $registerSource;
  451.         return $this;
  452.     }
  453.     /**
  454.      * Get registerSource
  455.      *
  456.      * @return string
  457.      */
  458.     public function getRegisterSource()
  459.     {
  460.         return $this->registerSource;
  461.     }
  462.     /**
  463.      * Set createdAt
  464.      *
  465.      * @param DateTime $createdAt
  466.      *
  467.      * @return Users
  468.      */
  469.     public function setCreatedAt($createdAt)
  470.     {
  471.         $this->createdAt $createdAt;
  472.         return $this;
  473.     }
  474.     /**
  475.      * Get createdAt
  476.      *
  477.      * @return DateTime
  478.      */
  479.     public function getCreatedAt()
  480.     {
  481.         return $this->createdAt;
  482.     }
  483.     /**
  484.      * Set updatedAt
  485.      *
  486.      * @param DateTime $updatedAt
  487.      *
  488.      * @return Users
  489.      */
  490.     public function setUpdatedAt($updatedAt)
  491.     {
  492.         $this->updatedAt $updatedAt;
  493.         return $this;
  494.     }
  495.     /**
  496.      * Get updatedAt
  497.      *
  498.      * @return DateTime
  499.      */
  500.     public function getUpdatedAt()
  501.     {
  502.         return $this->updatedAt;
  503.     }
  504.     /**
  505.      * Set tosConsentAt
  506.      *
  507.      * @param DateTime $tosConsentAt
  508.      *
  509.      * @return Users
  510.      */
  511.     public function setTosConsentAt($tosConsentAt)
  512.     {
  513.         $this->tosConsentAt $tosConsentAt;
  514.         return $this;
  515.     }
  516.     /**
  517.      * Get tosConsentAt
  518.      *
  519.      * @return DateTime
  520.      */
  521.     public function getTosConsentAt()
  522.     {
  523.         return $this->tosConsentAt;
  524.     }
  525.     /**
  526.      * Set gdprConsentAt
  527.      *
  528.      * @param DateTime $gdprConsentAt
  529.      *
  530.      * @return Users
  531.      */
  532.     public function setGdprConsentAt($gdprConsentAt)
  533.     {
  534.         $this->gdprConsentAt $gdprConsentAt;
  535.         return $this;
  536.     }
  537.     /**
  538.      * Get gdprConsentAt
  539.      *
  540.      * @return DateTime
  541.      */
  542.     public function getGdprConsentAt()
  543.     {
  544.         return $this->gdprConsentAt;
  545.     }
  546.     /**
  547.      * @return string
  548.      */
  549.     public function getLang()
  550.     {
  551.         return $this->lang;
  552.     }
  553.     /**
  554.      * @param string $lang
  555.      */
  556.     public function setLang($lang)
  557.     {
  558.         $this->lang $lang;
  559.     }
  560.     /**
  561.      * Set email verified
  562.      *
  563.      * @param boolean $emailVerified
  564.      *
  565.      * @return Users
  566.      */
  567.     public function setEmailVerified($emailVerified)
  568.     {
  569.         $this->emailVerified $emailVerified;
  570.         return $this;
  571.     }
  572.     /**
  573.      * Get email verified
  574.      *
  575.      * @return bool
  576.      */
  577.     public function getEmailVerified()
  578.     {
  579.         return $this->emailVerified;
  580.     }
  581.     /**
  582.      * Set active
  583.      *
  584.      * @param boolean $active
  585.      *
  586.      * @return Users
  587.      */
  588.     public function setActive($active)
  589.     {
  590.         $this->active $active;
  591.         return $this;
  592.     }
  593.     /**
  594.      * Get active
  595.      *
  596.      * @return bool
  597.      */
  598.     public function getActive()
  599.     {
  600.         return $this->active;
  601.     }
  602.     /**
  603.      * Set removed
  604.      *
  605.      * @param boolean $removed
  606.      *
  607.      * @return Users
  608.      */
  609.     public function setRemoved($removed)
  610.     {
  611.         $this->removed $removed;
  612.         return $this;
  613.     }
  614.     /**
  615.      * @return DateTime
  616.      */
  617.     public function getLastNotification()
  618.     {
  619.         return $this->lastNotification;
  620.     }
  621.     /**
  622.      * @param DateTime $lastNotification
  623.      */
  624.     public function setLastNotification($lastNotification)
  625.     {
  626.         $this->lastNotification $lastNotification;
  627.     }
  628.     /**
  629.      * Get removed
  630.      *
  631.      * @return bool
  632.      */
  633.     public function getRemoved()
  634.     {
  635.         return $this->removed;
  636.     }
  637.     public function getRoles(): array
  638.     {
  639.         return [];
  640.     }
  641.     #[OA\Property(type"string")]
  642.     private $salt;     // TODO: unused, req by docs
  643.     public function getSalt()
  644.     {
  645.         return 'asda9s0d08kjadh';    // TODO: random salt?
  646.     }
  647.     public function eraseCredentials()
  648.     {
  649.     }
  650.     /**
  651.      * @return \Doctrine\Common\Collections\Collection
  652.      */
  653.     public function getApiTokens(): Collection
  654.     {
  655.         return $this->apiTokens;
  656.     }
  657.     public function getUserIdentifier(): string
  658.     {
  659.         return $this->username;
  660.     }
  661.     public function getUnitMeasure(): ?int
  662.     {
  663.         return $this->unit_measure;
  664.     }
  665.     public function setUnitMeasure(int $unit_measure): self
  666.     {
  667.         $this->unit_measure $unit_measure;
  668.         return $this;
  669.     }
  670.     public function getUserPoints(): ?int
  671.     {
  672.         return $this->user_points;
  673.     }
  674.     public function setUserPoints(int $user_points): self
  675.     {
  676.         $this->user_points $user_points;
  677.         return $this;
  678.     }
  679.     public function addUserPoints(int $user_points): self
  680.     {
  681.         $this->user_points += $user_points;
  682.         return $this;
  683.     }
  684.     public function getHealthyMinutes(): ?int
  685.     {
  686.         return $this->healthy_minutes;
  687.     }
  688.     public function setHealthyMinutes(int $healthy_minutes): self
  689.     {
  690.         $this->healthy_minutes $healthy_minutes;
  691.         return $this;
  692.     }
  693.     public function addHealthyMinutes(int $healthy_minutes): self
  694.     {
  695.         $this->healthy_minutes += $healthy_minutes;
  696.         return $this;
  697.     }
  698.     /**
  699.      * @return Collection<int, UserVouchers>
  700.      */
  701.     public function getUserVouchers(): Collection
  702.     {
  703.         return $this->userVouchers;
  704.     }
  705.     public function addUserVoucher(UserVouchers $userVoucher): self
  706.     {
  707.         if (!$this->userVouchers->contains($userVoucher)) {
  708.             $this->userVouchers[] = $userVoucher;
  709.             $userVoucher->setUser($this);
  710.         }
  711.         return $this;
  712.     }
  713.     public function removeUserVoucher(UserVouchers $userVoucher): self
  714.     {
  715.         if ($this->userVouchers->removeElement($userVoucher)) {
  716.             // set the owning side to null (unless already changed)
  717.             if ($userVoucher->getUser() === $this) {
  718.                 $userVoucher->setUser(null);
  719.             }
  720.         }
  721.         return $this;
  722.     }
  723.     /**
  724.      * @return Collection<int, UserPointsHistory>
  725.      */
  726.     public function getUserPointsHistories(): Collection
  727.     {
  728.         return $this->userPointsHistories;
  729.     }
  730.     public function addUserPointsHistory(UserPointsHistory $userPointsHistory): self
  731.     {
  732.         if (!$this->userPointsHistories->contains($userPointsHistory)) {
  733.             $this->userPointsHistories[] = $userPointsHistory;
  734.             $userPointsHistory->setUser($this);
  735.         }
  736.         return $this;
  737.     }
  738.     public function removeUserPointsHistory(UserPointsHistory $userPointsHistory): self
  739.     {
  740.         if ($this->userPointsHistories->removeElement($userPointsHistory)) {
  741.             // set the owning side to null (unless already changed)
  742.             if ($userPointsHistory->getUser() === $this) {
  743.                 $userPointsHistory->setUser(null);
  744.             }
  745.         }
  746.         return $this;
  747.     }
  748.     public function hasValidSubscription()
  749.     {
  750.         $now = (new DateTime('now', new DateTimeZone('UTC')));
  751.     
  752.         if (!$this->latestSubscription)
  753.             return false;
  754.         $start $this->latestSubscription->getStartSubscription();
  755.         $end $this->latestSubscription->getEndSubscription();
  756.         $start = new DateTime($start->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));
  757.         $end = new DateTime($end->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));
  758.         
  759.         return $start && $end && $start <= $now && $end >= $now;
  760.     }
  761.     /**
  762.      * @return Collection<int, Feedbacks>
  763.      */
  764.     public function getFeedbacks(): Collection
  765.     {
  766.         return $this->feedbacks;
  767.     }
  768.     public function addFeedback(Feedbacks $feedback): self
  769.     {
  770.         if (!$this->feedbacks->contains($feedback)) {
  771.             $this->feedbacks[] = $feedback;
  772.             $feedback->setUser($this);
  773.         }
  774.         return $this;
  775.     }
  776.     public function removeFeedback(Feedbacks $feedback): self
  777.     {
  778.         if ($this->feedbacks->removeElement($feedback)) {
  779.             // set the owning side to null (unless already changed)
  780.             if ($feedback->getUser() === $this) {
  781.                 $feedback->setUser(null);
  782.             }
  783.         }
  784.         return $this;
  785.     }
  786.     public function isActive(): ?bool
  787.     {
  788.         return $this->active;
  789.     }
  790.     public function isRemoved(): ?bool
  791.     {
  792.         return $this->removed;
  793.     }
  794.     public function addApiToken(ApiToken $apiToken): static
  795.     {
  796.         if (!$this->apiTokens->contains($apiToken)) {
  797.             $this->apiTokens->add($apiToken);
  798.             $apiToken->setUser($this);
  799.         }
  800.         return $this;
  801.     }
  802.     public function removeApiToken(ApiToken $apiToken): static
  803.     {
  804.         if ($this->apiTokens->removeElement($apiToken)) {
  805.             // set the owning side to null (unless already changed)
  806.             if ($apiToken->getUser() === $this) {
  807.                 $apiToken->setUser(null);
  808.             }
  809.         }
  810.         return $this;
  811.     }
  812.     public function checkCompliance(DateTime $tosConsentAtDateTime $gdprConsentAt) {
  813.         $tosCheckFailed = !$this->tosConsentAt || $this->tosConsentAt $tosConsentAt;
  814.         $gdprCheckFailed = !$this->gdprConsentAt || $this->gdprConsentAt $gdprConsentAt;
  815.         if ($tosCheckFailed || $gdprCheckFailed) {
  816.             $errors = [];
  817.             if ($tosCheckFailed) {
  818.                 $errors[] = "tos";
  819.             }
  820.             if ($gdprCheckFailed) {
  821.                 $errors[] = "gdpr";
  822.             }
  823.             throw new ComplianceException(implode(","$errors));
  824.         }
  825.     }
  826.     /**
  827.      * Get the value of latestSubscription
  828.      *
  829.      * @return ?UserSubscriptions
  830.      */
  831.     public function getLatestSubscription(): ?UserSubscriptions
  832.     {
  833.         return $this->latestSubscription;
  834.     }
  835.     /**
  836.      * Set the value of latestSubscription
  837.      *
  838.      * @param ?UserSubscriptions $latestSubscription
  839.      *
  840.      * @return self
  841.      */
  842.     public function setLatestSubscription(?UserSubscriptions $latestSubscription): self
  843.     {
  844.         $this->latestSubscription $latestSubscription;
  845.         return $this;
  846.     }
  847. }