src/Entity/Account/User.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Account;
  3. use App\Entity\ChannelUserData\ChannelUserData;
  4. use App\Entity\Common\Contact;
  5. use App\Enum\Serialization\ActivitySerializationGroups;
  6. use App\Enum\Serialization\OpportunitySerializationGroups;
  7. use App\Enum\Serialization\DriveFileSerializationGroups;
  8. use App\Enum\Serialization\FileSerializationGroups;
  9. use App\Enum\Serialization\UserSerializationGroups;
  10. use App\Repository\Account\UserRepository;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Doctrine\Common\Collections\Collection;
  13. use Doctrine\ORM\Mapping as ORM;
  14. use Nellapp\Bundle\SDKBundle\Auth\Entity\Token;
  15. use Nellapp\Bundle\SDKBundle\Auth\Entity\UserInterface;
  16. use Nellapp\Bundle\SDKBundle\Auth\Entity\UserMethodTrait;
  17. use Nellapp\Bundle\SDKBundle\Auth\Entity\UserWithContact\UserWithContactInterface;
  18. use Nellapp\Bundle\SDKBundle\Auth\Entity\UserWithContact\UserWithContactTrait;
  19. use Symfony\Component\Serializer\Annotation as Serial;
  20. #[ORM\Entity(repositoryClassUserRepository::class),
  21.     ORM\Index(columns: ['email'], flags: ['fulltext']),
  22.     ORM\Index(columns: ['first_name''last_name'], flags: ['fulltext']),
  23.     ORM\Table(name'account_users'),]
  24. class User implements UserInterfaceUserWithContactInterface
  25. {
  26.     use UserMethodTrait;
  27.     use UserWithContactTrait;
  28.     #[ORM\IdORM\Column(type'string')]
  29.     #[Serial\Groups([
  30.         UserSerializationGroups::COLLECTION,
  31.         UserSerializationGroups::DETAIL,
  32.         OpportunitySerializationGroups::API_COLLECTION,
  33.         ActivitySerializationGroups::GET,
  34.         FileSerializationGroups::COLLECTION,
  35.         FileSerializationGroups::DETAIL,
  36.         DriveFileSerializationGroups::COLLECTION,
  37.         DriveFileSerializationGroups::DETAIL,
  38.     ])]
  39.     private ?string $id null;
  40.     #[ORM\Column(type'string'length180uniquetrue)]
  41.     #[Serial\Groups([
  42.         UserSerializationGroups::COLLECTION,
  43.         UserSerializationGroups::DETAIL,
  44.         OpportunitySerializationGroups::API_COLLECTION,
  45.         ActivitySerializationGroups::GET,
  46.         FileSerializationGroups::COLLECTION,
  47.         FileSerializationGroups::DETAIL,
  48.         DriveFileSerializationGroups::COLLECTION,
  49.         DriveFileSerializationGroups::DETAIL,
  50.     ])]
  51.     private ?string $email null;
  52.     /**
  53.      * @var string[]
  54.      */
  55.     #[ORM\Column(type'json')]
  56.     private array $roles = [];
  57.     #[ORM\Column(type'string'nullabletrue)]
  58.     #[Serial\Groups([
  59.         UserSerializationGroups::COLLECTION,
  60.         UserSerializationGroups::DETAIL,
  61.         OpportunitySerializationGroups::API_COLLECTION,
  62.         ActivitySerializationGroups::GET,
  63.         FileSerializationGroups::COLLECTION,
  64.         FileSerializationGroups::DETAIL,
  65.         DriveFileSerializationGroups::COLLECTION,
  66.         DriveFileSerializationGroups::DETAIL,
  67.     ])]
  68.     private ?string $firstName null;
  69.     #[ORM\Column(type'string'nullabletrue)]
  70.     #[Serial\Groups([
  71.         UserSerializationGroups::COLLECTION,
  72.         UserSerializationGroups::DETAIL,
  73.         OpportunitySerializationGroups::API_COLLECTION,
  74.         ActivitySerializationGroups::GET,
  75.         FileSerializationGroups::COLLECTION,
  76.         FileSerializationGroups::DETAIL,
  77.         DriveFileSerializationGroups::COLLECTION,
  78.         DriveFileSerializationGroups::DETAIL,
  79.     ])]
  80.     private ?string $lastName null;
  81.     #[ORM\Column(type'text'nullabletrue)]
  82.     private ?string $description null;
  83.     #[ORM\Column(type'boolean'nullabletrue)]
  84.     private ?bool $avatar null;
  85.     #[ORM\Embedded(class: Token::class)]
  86.     private ?Token $token null;
  87.     #[ORM\Column(type'text'nullabletrue)]
  88.     #[Serial\Groups([
  89.         UserSerializationGroups::DETAIL,
  90.         OpportunitySerializationGroups::API_COLLECTION,
  91.         ActivitySerializationGroups::GET,
  92.         FileSerializationGroups::COLLECTION,
  93.         FileSerializationGroups::DETAIL,
  94.         DriveFileSerializationGroups::COLLECTION,
  95.         DriveFileSerializationGroups::DETAIL,
  96.     ])]
  97.     private ?string $avatarPath null;
  98.     #[ORM\OneToOne(targetEntityContact::class, cascade: ['persist'])]
  99.     #[ORM\JoinColumn(nullabletrueonDelete'SET NULL')]
  100.     private ?Contact $contact null;
  101.     #[ORM\Column(type'datetime'nullabletrue)]
  102.     private ?\DateTime $signingLimitDate null;
  103.     #[ORM\OneToMany(mappedBy'user'targetEntityChannelUserData::class)]
  104.     private ?Collection $channelUserDatas;
  105.     public function __construct()
  106.     {
  107.         $this->channelUserDatas = new ArrayCollection();
  108.     }
  109.     #[Serial\Groups([
  110.         UserSerializationGroups::COLLECTION,
  111.         UserSerializationGroups::DETAIL,
  112.         ActivitySerializationGroups::GET,
  113.         DriveFileSerializationGroups::COLLECTION,
  114.         DriveFileSerializationGroups::DETAIL,
  115.         FileSerializationGroups::COLLECTION,
  116.         FileSerializationGroups::DETAIL,
  117.     ])]
  118.     public function getFullName(): string
  119.     {
  120.         return trim(($this->getFirstName() ?? '') . ' ' . ($this->getLastName() ?? ''));
  121.     }
  122.     #[Serial\Groups([
  123.         UserSerializationGroups::COLLECTION,
  124.         UserSerializationGroups::DETAIL,
  125.         ActivitySerializationGroups::GET,
  126.         DriveFileSerializationGroups::COLLECTION,
  127.         DriveFileSerializationGroups::DETAIL,
  128.         FileSerializationGroups::COLLECTION,
  129.         FileSerializationGroups::DETAIL,
  130.     ])]
  131.     public function getUsername(): string
  132.     {
  133.         return $this->getFullName();
  134.     }
  135.     #[Serial\Groups([
  136.         UserSerializationGroups::COLLECTION,
  137.         UserSerializationGroups::DETAIL,
  138.     ])]
  139.     public function getFullNameWithEmail(): string
  140.     {
  141.         return trim($this->getFullName() . ' <' $this->getEmail() . '>');
  142.     }
  143.     #[Serial\Groups([
  144.         UserSerializationGroups::COLLECTION,
  145.         UserSerializationGroups::DETAIL,
  146.         ActivitySerializationGroups::GET,
  147.     ])]
  148.     public function getPhoneNumber(): ?string
  149.     {
  150.         return $this->getContact()?->getPhoneNumber();
  151.     }
  152. }