src/Entity/User.php line 37

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