src/Entity/User.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Enums\CompanyRoleEnum;
  4. use App\Enums\UserRoleEnum;
  5. use DateTime;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Doctrine\Common\Annotations\Annotation\IgnoreAnnotation;
  10. use Serializable;
  11. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  12. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  13. use Symfony\Component\Security\Core\User\UserInterface;
  14. use Symfony\Component\Serializer\Annotation\Ignore;
  15. use Symfony\Component\Validator\Constraints as Validation;
  16. use Doctrine\ORM\Mapping\AttributeOverrides;
  17. use Doctrine\ORM\Mapping\AttributeOverride;
  18. /**
  19.  * @ORM\Table(name="fos_user")
  20.  * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
  21.  */
  22. #[UniqueEntity(
  23.     fields: ['username''email'],
  24.     message'Nalog sa ovim korisničkim imenom već postoji!',
  25.     errorPath'email'
  26. ),
  27.     UniqueEntity(
  28.         fields: ['phoneNumber'],
  29.         message'Ovaj broj telefona već postoji!',
  30.         errorPath'phoneNumber'
  31.     )
  32. ]
  33. class User implements UserInterfacePasswordAuthenticatedUserInterface
  34. {
  35.     public const VRTIC 1798;
  36.     /**
  37.      * @ORM\Id
  38.      * @ORM\Column(type="integer")
  39.      * @ORM\GeneratedValue(strategy="AUTO")
  40.      */
  41.     private int $id;
  42.     /**
  43.      * @ORM\Column(name="username", type="string", length=180)
  44.      */
  45.     private string $username;
  46.     /**
  47.      * @ORM\Column(name="username_canonical", type="string", length=180, unique=true)
  48.      */
  49.     private string $usernameCanonical;
  50.     /**
  51.      * @ORM\Column(name="email", type="string", length=180)
  52.      */
  53.     private string $email;
  54.     /**
  55.      * @ORM\Column(name="email_canonical", type="string", length=180, unique=true)
  56.      */
  57.     private string $emailCanonical;
  58.     /**
  59.      * @ORM\Column(name="enabled", type="boolean")
  60.      */
  61.     private bool $enabled;
  62.     /**
  63.      * The salt to use for hashing.
  64.      * @ORM\Column(name="salt", type="string", nullable=true)
  65.      */
  66.     private string|null $salt;
  67.     /**
  68.      * Encrypted password. Must be persisted.
  69.      * @ORM\Column(name="password", type="string")
  70.      */
  71.     private string $password;
  72.     /**
  73.      * @ORM\Column(name="last_login", type="datetime", nullable=true)
  74.      */
  75.     private DateTime|null $lastLogin;
  76.     /**
  77.      * Random string sent to the user email address in order to verify it.
  78.      * @ORM\Column(name="confirmation_token", type="string", length=180, unique=true, nullable=true)
  79.      */
  80.     private string|null $confirmationToken;
  81.     /**
  82.      * @ORM\Column(name="password_requested_at", type="datetime", nullable=true)
  83.      */
  84.     private DateTime|null $passwordRequestedAt;
  85.     /**
  86.      * @var array<string>
  87.      * @ORM\Column(name="roles", type="array")
  88.      */
  89.     private array $roles;
  90.     /**
  91.      * @Validation\NotBlank(message="PLEASE_ENTER_FIRSTNAME", groups={"RequireData"})
  92.      * @Validation\Length(
  93.      *     min="2",
  94.      *     max="32",
  95.      *     minMessage="FIRST_NAME_IS_TOO_SHORT",
  96.      *     maxMessage="FIRST_NAME_IS_TOO_LONG",
  97.      *     groups={"RequireData"}
  98.      *     )
  99.      */
  100.     private string|null $plainPassword null;
  101.     /**
  102.      * @Validation\NotBlank(message="PLEASE_ENTER_FIRSTNAME", groups={"RequireData"})
  103.      * @Validation\Length(
  104.      *     min="2",
  105.      *     max="32",
  106.      *     minMessage="FIRST_NAME_IS_TOO_SHORT",
  107.      *     maxMessage="FIRST_NAME_IS_TOO_LONG",
  108.      *     groups={"RequireData"}
  109.      *     )
  110.      * @ORM\Column(name="firstname", type="string", length=255, nullable=true)
  111.      */
  112.     private string|null $firstname;
  113.     /**
  114.      * @Validation\NotBlank(message="PLEASE_ENTER_LASTNAME", groups={"RequireData"})
  115.      * @Validation\Length(
  116.      *     min="2",
  117.      *     max="32",
  118.      *     minMessage="LAST_NAME_IS_TOO_SHORT",
  119.      *     maxMessage="LAST_NAME_IS_TOO_LONG",
  120.      *     groups={"RequireData"}
  121.      *     )
  122.      * @ORM\Column(name="lastname", type="string", length=255, nullable=true)
  123.      */
  124.     private string|null $lastname;
  125.     /**
  126.      * @Validation\NotBlank(message="MUST_ACCEPT_PRIVACY_POLICY", groups={"RequireData"})
  127.      * @ORM\Column(name="has_accepted_terms", type="boolean")
  128.      */
  129.     private bool $hasAcceptedTerms;
  130.     /**
  131.      * @Validation\Length(max="50", maxMessage="ADDRESS_TOO_LONG")
  132.      * @ORM\Column(name="address", type="string", nullable=true)
  133.      * @Validation\NotBlank(message="FIELD_MUST_NOT_BE_EMPTY", groups={"RequireData"})
  134.      */
  135.     private string|null $address null;
  136.     /**
  137.      * @Validation\Length(max="4", maxMessage="STREETNUMBER_TOO_LONG")
  138.      * @ORM\Column(name="streetnumber", type="string", nullable=true)
  139.      * @Validation\NotBlank(message="FIELD_MUST_NOT_BE_EMPTY", groups={"RequireData"})
  140.      */
  141.     private string|null $streetNumber;
  142.     /**
  143.      * @Validation\Length(max="8", maxMessage="ZIP_TOO_LONG")
  144.      * @ORM\Column(name="zip", type="string", nullable=true)
  145.      * @Validation\NotBlank(message="FIELD_MUST_NOT_BE_EMPTY", groups={"RequireData"})
  146.      */
  147.     private string|null $zip;
  148.     /**
  149.      * @Validation\Length(max="100", maxMessage="CITY_IS_TOO_LONG", groups={"RequireData"})
  150.      * @ORM\Column(name="city", type="string", length=255, nullable=true)
  151.      * @Validation\NotBlank(message="FIELD_MUST_NOT_BE_EMPTY", groups={"RequireData"})
  152.      */
  153.     private string|null $city null;
  154.     /**
  155.      * @ORM\Column(name="phone_number", type="string", length=255, nullable=true, unique=true)
  156.      */
  157.     private string|null $phoneNumber null;
  158.     /**
  159.      * @ORM\Column(name="company_name", type="string", length=255, nullable=true, unique=true)
  160.      */
  161.     private string|null $companyName null;
  162.     /**
  163.      * @ORM\Column(name="created_at", type="datetime")
  164.      */
  165.     private DateTime|null $createdAt null;
  166.     /**
  167.      * @ORM\Column(name="updated_at", type="datetime")
  168.      */
  169.     private DateTime|null $updatedAt null;
  170.     /**
  171.      * @ORM\Column(name="mat_id", type="string", length=64, nullable=true)
  172.      */
  173.     private string|null $matId null;
  174.     /**
  175.      * @ORM\Column(name="pib", type="string", length=64, nullable=true)
  176.      */
  177.     private string|null $pib null;
  178.     /**
  179.      * @ORM\Column(name="company_title", type="string", length=255, nullable=true)
  180.      */
  181.     private string|null $companyTitle;
  182.     /**
  183.      * @ORM\Column(name="license_id", type="string", length=64, nullable=true)
  184.      */
  185.     private string|null $licenseId;
  186.     /**
  187.      * @ORM\Column(name="bank_account", type="string", length=128, nullable=true)
  188.      */
  189.     private string|null $bankAccount null;
  190.     /**
  191.      * @ORM\Column(name="enable_qr", type="boolean", options={"default" : true})
  192.      */
  193.     private bool $enableQr true;
  194.     /**
  195.      * @var Collection<int, Obligation>
  196.      * @ORM\OneToMany(targetEntity="App\Entity\Obligation", mappedBy="user")
  197.      */
  198.     #[Ignore]
  199.     private Collection $obligations;
  200.     /**
  201.      * @ORM\Column(name="task_notification_email", type="string", length=180, nullable=true)
  202.      */
  203.     private string|null $taskNotificationEmail;
  204.     /**
  205.      * @ORM\ManyToOne(targetEntity="App\Entity\User", cascade={"persist"})
  206.      * @ORM\JoinColumns({
  207.      *   @ORM\JoinColumn(name="main_user_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
  208.      * })
  209.      */
  210.     #[Ignore]
  211.     private User|null $mainUser null;
  212.     /**
  213.      * @var Collection<int, ActionLog>
  214.      * @ORM\OneToMany(targetEntity=ActionLog::class, mappedBy="user")
  215.      */
  216.     #[Ignore]
  217.     private Collection $actionLogs;
  218.     public function __construct()
  219.     {
  220.         $this->enabled false;
  221.         $this->roles = array();
  222.         $this->obligations = new ArrayCollection();
  223.         $this->actionLogs = new ArrayCollection();
  224.         $this->incrementCreatedAt();
  225.     }
  226.     /**
  227.      * @return int
  228.      */
  229.     public function getId(): int
  230.     {
  231.         return $this->id;
  232.     }
  233.     /**
  234.      * @return string
  235.      */
  236.     public function getUsername(): string
  237.     {
  238.         return $this->username;
  239.     }
  240.     /**
  241.      * @param string $username
  242.      */
  243.     public function setUsername(string $username): void
  244.     {
  245.         $this->username $username;
  246.     }
  247.     /**
  248.      * @return string
  249.      */
  250.     public function getUsernameCanonical(): string
  251.     {
  252.         return $this->usernameCanonical;
  253.     }
  254.     /**
  255.      * @param string $usernameCanonical
  256.      */
  257.     public function setUsernameCanonical(string $usernameCanonical): void
  258.     {
  259.         $this->usernameCanonical $usernameCanonical;
  260.     }
  261.     /**
  262.      * @return string
  263.      */
  264.     public function getEmail(): string
  265.     {
  266.         return $this->email;
  267.     }
  268.     /**
  269.      * @param string $email
  270.      */
  271.     public function setEmail(string $email): void
  272.     {
  273.         $this->setUsername($email);
  274.         $this->email $email;
  275.     }
  276.     /**
  277.      * @return string
  278.      */
  279.     public function getEmailCanonical(): string
  280.     {
  281.         return $this->emailCanonical;
  282.     }
  283.     /**
  284.      * @param string $emailCanonical
  285.      */
  286.     public function setEmailCanonical(string $emailCanonical): void
  287.     {
  288.         $this->emailCanonical $emailCanonical;
  289.     }
  290.     /**
  291.      * @return bool
  292.      */
  293.     public function isEnabled(): bool
  294.     {
  295.         return $this->enabled;
  296.     }
  297.     /**
  298.      * @return bool
  299.      */
  300.     public function isSuperAdmin(): bool
  301.     {
  302.         return $this->hasRole(UserRoleEnum::ROLE_SUPER_ADMIN->value);
  303.     }
  304.     /**
  305.      * @param bool $enabled
  306.      */
  307.     public function setEnabled(bool $enabled): void
  308.     {
  309.         $this->enabled $enabled;
  310.     }
  311.     /**
  312.      * @return string|null
  313.      */
  314.     public function getSalt(): ?string
  315.     {
  316.         return $this->salt;
  317.     }
  318.     /**
  319.      * @param string|null $salt
  320.      */
  321.     public function setSalt(?string $salt): void
  322.     {
  323.         $this->salt $salt;
  324.     }
  325.     /**
  326.      * @return string
  327.      */
  328.     public function getPassword(): string
  329.     {
  330.         return $this->password;
  331.     }
  332.     /**
  333.      * @param string $password
  334.      */
  335.     public function setPassword(string $password): void
  336.     {
  337.         $this->password $password;
  338.     }
  339.     /**
  340.      * @return DateTime|null
  341.      */
  342.     public function getLastLogin(): ?DateTime
  343.     {
  344.         return $this->lastLogin;
  345.     }
  346.     /**
  347.      * @param DateTime|null $lastLogin
  348.      */
  349.     public function setLastLogin(?DateTime $lastLogin): void
  350.     {
  351.         $this->lastLogin $lastLogin;
  352.     }
  353.     /**
  354.      * @return string|null
  355.      */
  356.     public function getConfirmationToken(): ?string
  357.     {
  358.         return $this->confirmationToken;
  359.     }
  360.     /**
  361.      * @param string|null $confirmationToken
  362.      */
  363.     public function setConfirmationToken(?string $confirmationToken): void
  364.     {
  365.         $this->confirmationToken $confirmationToken;
  366.     }
  367.     /**
  368.      * @return DateTime|null
  369.      */
  370.     public function getPasswordRequestedAt(): ?DateTime
  371.     {
  372.         return $this->passwordRequestedAt;
  373.     }
  374.     /**
  375.      * @param DateTime|null $passwordRequestedAt
  376.      */
  377.     public function setPasswordRequestedAt(?DateTime $passwordRequestedAt): void
  378.     {
  379.         $this->passwordRequestedAt $passwordRequestedAt;
  380.     }
  381.     /**
  382.      * @return string[]
  383.      */
  384.     public function getRoles(): array
  385.     {
  386.         $roles $this->roles;
  387.         // we need to make sure to have at least one role
  388.         $roles[] = UserRoleEnum::ROLE_DEFAULT->value;
  389.         return array_unique($roles);
  390.     }
  391.     /**
  392.      * @param string $role
  393.      * @return bool
  394.      */
  395.     #[Ignore]
  396.     public function hasRole(string $role): bool
  397.     {
  398.         return in_array(strtoupper($role), $this->getRoles(), true);
  399.     }
  400.     /**
  401.      * @param string[] $roles
  402.      * @return $this
  403.      */
  404.     public function setRoles(array $roles): self
  405.     {
  406.         $this->roles = array();
  407.         foreach ($roles as $role) {
  408.             $this->addRole($role);
  409.         }
  410.         return $this;
  411.     }
  412.     /**
  413.      * @param int $ttl
  414.      * @return bool
  415.      */
  416.     #[Ignore]
  417.     public function isPasswordRequestNonExpired(int $ttl): bool
  418.     {
  419.         return $this->getPasswordRequestedAt() instanceof \DateTime &&
  420.             $this->getPasswordRequestedAt()->getTimestamp() + $ttl time();
  421.     }
  422.     /**
  423.      * @return string|null
  424.      */
  425.     public function getPlainPassword(): ?string
  426.     {
  427.         return $this->plainPassword;
  428.     }
  429.     /**
  430.      * @param string|null $plainPassword
  431.      */
  432.     public function setPlainPassword(?string $plainPassword): void
  433.     {
  434.         $this->plainPassword $plainPassword;
  435.     }
  436.     /**
  437.      * @return string|null
  438.      */
  439.     public function getFirstname(): ?string
  440.     {
  441.         return $this->firstname;
  442.     }
  443.     /**
  444.      * @param string|null $firstname
  445.      */
  446.     public function setFirstname(?string $firstname): void
  447.     {
  448.         $this->firstname $firstname;
  449.     }
  450.     /**
  451.      * @return string|null
  452.      */
  453.     public function getLastname(): ?string
  454.     {
  455.         return $this->lastname;
  456.     }
  457.     /**
  458.      * @param string|null $lastname
  459.      */
  460.     public function setLastname(?string $lastname): void
  461.     {
  462.         $this->lastname $lastname;
  463.     }
  464.     /**
  465.      * @return bool
  466.      */
  467.     public function getHasAcceptedTerms(): bool
  468.     {
  469.         return $this->hasAcceptedTerms;
  470.     }
  471.     /**
  472.      * @param bool $hasAcceptedTerms
  473.      */
  474.     public function setHasAcceptedTerms(bool $hasAcceptedTerms): void
  475.     {
  476.         $this->hasAcceptedTerms $hasAcceptedTerms;
  477.     }
  478.     /**
  479.      * @return string|null
  480.      */
  481.     public function getAddress(): ?string
  482.     {
  483.         return $this->address;
  484.     }
  485.     /**
  486.      * @param string|null $address
  487.      */
  488.     public function setAddress(?string $address): void
  489.     {
  490.         $this->address $address;
  491.     }
  492.     /**
  493.      * @return string|null
  494.      */
  495.     public function getStreetnumber(): ?string
  496.     {
  497.         return $this->streetNumber;
  498.     }
  499.     /**
  500.      * @param string|null $streetNumber
  501.      */
  502.     public function setStreetNumber(?string $streetNumber): void
  503.     {
  504.         $this->streetNumber $streetNumber;
  505.     }
  506.     /**
  507.      * @return string|null
  508.      */
  509.     public function getZip(): ?string
  510.     {
  511.         return $this->zip;
  512.     }
  513.     /**
  514.      * @param string|null $zip
  515.      */
  516.     public function setZip(?string $zip): void
  517.     {
  518.         $this->zip $zip;
  519.     }
  520.     /**
  521.      * @return string|null
  522.      */
  523.     public function getCity(): ?string
  524.     {
  525.         return $this->city;
  526.     }
  527.     /**
  528.      * @param string|null $city
  529.      */
  530.     public function setCity(?string $city): void
  531.     {
  532.         $this->city $city;
  533.     }
  534.     /**
  535.      * @return string|null
  536.      */
  537.     public function getPhoneNumber(): ?string
  538.     {
  539.         return $this->phoneNumber;
  540.     }
  541.     /**
  542.      * @param string|null $phoneNumber
  543.      */
  544.     public function setPhoneNumber(?string $phoneNumber): void
  545.     {
  546.         $this->phoneNumber $phoneNumber;
  547.     }
  548.     /**
  549.      * @return string|null
  550.      */
  551.     public function getCompanyName(): ?string
  552.     {
  553.         return $this->companyName;
  554.     }
  555.     /**
  556.      * @param string|null $companyName
  557.      */
  558.     public function setCompanyName(?string $companyName): void
  559.     {
  560.         $this->companyName $companyName;
  561.     }
  562.     /**
  563.      * @return DateTime|null
  564.      */
  565.     public function getCreatedAt(): ?DateTime
  566.     {
  567.         return $this->createdAt;
  568.     }
  569.     /**
  570.      * @param DateTime $createdAt
  571.      */
  572.     public function setCreatedAt(DateTime $createdAt): void
  573.     {
  574.         $this->createdAt $createdAt;
  575.     }
  576.     /**
  577.      * @return DateTime
  578.      */
  579.     public function getUpdatedAt(): DateTime
  580.     {
  581.         return $this->updatedAt;
  582.     }
  583.     /**
  584.      * @param DateTime $updatedAt
  585.      */
  586.     public function setUpdatedAt(DateTime $updatedAt): void
  587.     {
  588.         $this->updatedAt $updatedAt;
  589.     }
  590.     /**
  591.      * @ORM\PrePersist
  592.      */
  593.     public function incrementCreatedAt(): void
  594.     {
  595.         if ($this->createdAt === null) {
  596.             $this->createdAt = new DateTime();
  597.         }
  598.         $this->updatedAt = new DateTime();
  599.     }
  600.     /**
  601.      * @ORM\PreUpdate
  602.      */
  603.     public function incrementUpdatedAt(): void
  604.     {
  605.         $this->updatedAt = new DateTime();
  606.     }
  607.     /**
  608.      * @return string|null
  609.      */
  610.     public function getMatId(): ?string
  611.     {
  612.         return $this->matId;
  613.     }
  614.     /**
  615.      * @param string|null $matId
  616.      */
  617.     public function setMatId(?string $matId): void
  618.     {
  619.         $this->matId $matId;
  620.     }
  621.     /**
  622.      * @return string|null
  623.      */
  624.     public function getPib(): ?string
  625.     {
  626.         return $this->pib;
  627.     }
  628.     /**
  629.      * @param string|null $pib
  630.      */
  631.     public function setPib(?string $pib): void
  632.     {
  633.         $this->pib $pib;
  634.     }
  635.     /**
  636.      * @return string|null
  637.      */
  638.     public function getCompanyTitle(): ?string
  639.     {
  640.         return $this->companyTitle;
  641.     }
  642.     /**
  643.      * @param string|null $companyTitle
  644.      */
  645.     public function setCompanyTitle(?string $companyTitle): void
  646.     {
  647.         $this->companyTitle $companyTitle;
  648.     }
  649.     /**
  650.      * @return string|null
  651.      */
  652.     public function getLicenseId(): ?string
  653.     {
  654.         return $this->licenseId;
  655.     }
  656.     /**
  657.      * @param string|null $licenseId
  658.      */
  659.     public function setLicenseId(?string $licenseId): void
  660.     {
  661.         $this->licenseId $licenseId;
  662.     }
  663.     /**
  664.      * @return string|null
  665.      */
  666.     public function getBankAccount(): ?string
  667.     {
  668.         return $this->bankAccount;
  669.     }
  670.     /**
  671.      * @param string|null $bankAccount
  672.      */
  673.     public function setBankAccount(?string $bankAccount): void
  674.     {
  675.         $this->bankAccount $bankAccount;
  676.     }
  677.     /**
  678.      * @return bool
  679.      */
  680.     public function getEnableQr(): bool
  681.     {
  682.         return $this->enableQr;
  683.     }
  684.     /**
  685.      * @param bool $enableQr
  686.      */
  687.     public function setEnableQr(bool $enableQr): void
  688.     {
  689.         $this->enableQr $enableQr;
  690.     }
  691.     /**
  692.      * @return Collection<int, Obligation>
  693.      */
  694.     #[Ignore]
  695.     public function getObligations(): Collection
  696.     {
  697.         return $this->obligations;
  698.     }
  699.     /**
  700.      * @param Obligation $obligation
  701.      * @return $this
  702.      */
  703.     public function addObligation(Obligation $obligation): self
  704.     {
  705.         if (!$this->obligations->contains($obligation)) {
  706.             $this->obligations[] = $obligation;
  707.             $obligation->setUser($this);
  708.         }
  709.         return $this;
  710.     }
  711.     /**
  712.      * @param Obligation $obligation
  713.      * @return $this
  714.      */
  715.     public function removeObligation(Obligation $obligation): self
  716.     {
  717.         if ($this->obligations->contains($obligation)) {
  718.             $this->obligations->removeElement($obligation);
  719.             if ($obligation->getUser() === $this) {
  720.                 $obligation->setUser(null);
  721.             }
  722.         }
  723.         return $this;
  724.     }
  725.     /**
  726.      * @return string|null
  727.      */
  728.     public function getTaskNotificationEmail(): ?string
  729.     {
  730.         return $this->taskNotificationEmail;
  731.     }
  732.     /**
  733.      * @param string|null $taskNotificationEmail
  734.      */
  735.     public function setTaskNotificationEmail(?string $taskNotificationEmail): void
  736.     {
  737.         $this->taskNotificationEmail $taskNotificationEmail;
  738.     }
  739.     /**
  740.      * @return User|null
  741.      */
  742.     #[Ignore]
  743.     public function getMainUser(): ?User
  744.     {
  745.         return $this->mainUser;
  746.     }
  747.     /**
  748.      * @param User|null $mainUser
  749.      */
  750.     #[Ignore]
  751.     public function setMainUser(?User $mainUser): void
  752.     {
  753.         $this->mainUser $mainUser;
  754.     }
  755.     /**
  756.      * Returns company role or null
  757.      * @return string|null
  758.      */
  759.     public function getCompanyRole(): ?string
  760.     {
  761.         foreach ($this->getRoles() as $role) {
  762.             if (in_array($roleCompanyRoleEnum::getAllValues(), true)) {
  763.                 return $role;
  764.             }
  765.         }
  766.         return null;
  767.     }
  768.     /**
  769.      * Returns property which is used for createdBy fields of other tables
  770.      *
  771.      * @return string
  772.      */
  773.     public function getCreatedByValue(): string
  774.     {
  775.         return sprintf('%s.%s.'mb_substr($this->getFirstname(), 01), mb_substr($this->getLastname(), 01));
  776.     }
  777.     /**
  778.      * @return User
  779.      */
  780.     #[Ignore]
  781.     public function getSharedCompanyUser(): User
  782.     {
  783.         return $this->mainUser !== null $this->mainUser $this;
  784.     }
  785.     /**
  786.      * @return array<User>
  787.      */
  788.     public function getUserAndMainUser(): array
  789.     {
  790.         $users = [];
  791.         $users[] = $this;
  792.         if ($this->mainUser) {
  793.             $users[] = $this->mainUser;
  794.         }
  795.         return $users;
  796.     }
  797.     /**
  798.      * @param string $role
  799.      * @return $this
  800.      */
  801.     public function addRole(string $role): self
  802.     {
  803.         $role strtoupper($role);
  804.         if ($role === UserRoleEnum::ROLE_DEFAULT->value) {
  805.             return $this;
  806.         }
  807.         if (!in_array($role$this->rolestrue)) {
  808.             if (in_array($roleCompanyRoleEnum::getAllValues(), true)) {
  809.                 foreach (CompanyRoleEnum::getAllValues() as $companyRole) {
  810.                     $this->removeRole($companyRole);
  811.                 }
  812.             }
  813.             $this->roles[] = $role;
  814.         }
  815.         return $this;
  816.     }
  817.     /**
  818.      * @param string $role
  819.      * @return $this
  820.      */
  821.     public function removeRole(string $role): self
  822.     {
  823.         if (false !== $key array_search(strtoupper($role), $this->rolestrue)) {
  824.             unset($this->roles[$key]);
  825.             $this->roles array_values($this->roles);
  826.         }
  827.         return $this;
  828.     }
  829.     /**
  830.      * @return string
  831.      */
  832.     public function getFullName(): string
  833.     {
  834.         return sprintf('%s %s'$this->getFirstname(), $this->getLastname());
  835.     }
  836.     /**
  837.      * @return Collection<int, ActionLog>
  838.      */
  839.     #[Ignore]
  840.     public function getActionLogs(): Collection
  841.     {
  842.         return $this->actionLogs;
  843.     }
  844.     /**
  845.      * @param ActionLog $actionLog
  846.      * @return $this
  847.      */
  848.     public function addActionLog(ActionLog $actionLog): self
  849.     {
  850.         if (!$this->actionLogs->contains($actionLog)) {
  851.             $this->actionLogs[] = $actionLog;
  852.             $actionLog->setUser($this);
  853.         }
  854.         return $this;
  855.     }
  856.     /**
  857.      * @param ActionLog $actionLog
  858.      * @return $this
  859.      */
  860.     public function removeActionLog(ActionLog $actionLog): self
  861.     {
  862.         if ($this->actionLogs->removeElement($actionLog)) {
  863.             // set the owning side to null (unless already changed)
  864.             if ($actionLog->getUser() === $this) {
  865.                 $actionLog->setUser(null);
  866.             }
  867.         }
  868.         return $this;
  869.     }
  870.     /**
  871.      * @return string
  872.      */
  873.     public function __toString(): string
  874.     {
  875.         return (string) $this->getUsername();
  876.     }
  877.     //
  878.     //    /**
  879.     //     * @return string
  880.     //     */
  881.     //    public function serialize(): string
  882.     //    {
  883.     //        return serialize(array(
  884.     //            $this->password,
  885.     //            $this->getSalt(),
  886.     //            $this->usernameCanonical,
  887.     //            $this->username,
  888.     //            $this->enabled,
  889.     //            $this->id,
  890.     //            $this->email,
  891.     //            $this->emailCanonical,
  892.     //        ));
  893.     //    }
  894.     //
  895.     //    /**
  896.     //     * @param string $serialized
  897.     //     */
  898.     //    public function unserialize($serialized): void
  899.     //    {
  900.     //        $data = unserialize($serialized);
  901.     //
  902.     //        if (13 === count($data)) {
  903.     //            // Unserializing a User object from 1.3.x
  904.     //            unset($data[4], $data[5], $data[6], $data[9], $data[10]);
  905.     //            $data = array_values($data);
  906.     //        } elseif (11 === count($data)) {
  907.     //            // Unserializing a User from a dev version somewhere between 2.0-alpha3 and 2.0-beta1
  908.     //            unset($data[4], $data[7], $data[8]);
  909.     //            $data = array_values($data);
  910.     //        }
  911.     //
  912.     //        list(
  913.     //            $this->password,
  914.     //            $this->salt,
  915.     //            $this->usernameCanonical,
  916.     //            $this->username,
  917.     //            $this->enabled,
  918.     //            $this->id,
  919.     //            $this->email,
  920.     //            $this->emailCanonical
  921.     //            ) = $data;
  922.     //    }
  923.     public function eraseCredentials(): void
  924.     {
  925.         $this->setPlainPassword(null);
  926.     }
  927.     /**
  928.      * @param bool $boolean
  929.      * @return $this
  930.      */
  931.     public function setSuperAdmin(bool $boolean): self
  932.     {
  933.         if ($boolean === true) {
  934.             $this->addRole(UserRoleEnum::ROLE_SUPER_ADMIN->value);
  935.         } else {
  936.             $this->removeRole(UserRoleEnum::ROLE_SUPER_ADMIN->value);
  937.         }
  938.         return $this;
  939.     }
  940.     /**
  941.      * @return string
  942.      */
  943.     public function getUserIdentifier(): string
  944.     {
  945.         return $this->getUsername();
  946.     }
  947.     /**
  948.      * @return bool
  949.      */
  950.     public function isUserCyrillic(): bool
  951.     {
  952.         $userArray = ['draganaDjordjevic'];
  953.         if (in_array($this->getCompanyName(), $userArray)) {
  954.             return true;
  955.         }
  956.         return false;
  957.     }
  958. }