app/Entity/Schema/ORM/UserInvitation.php line 14

Open in your IDE?
  1. <?php
  2. namespace Sq\Entity\Schema\ORM;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Sq\Entity\Schema\Column\UserInvitationRole;
  5. use Sq\GraphQL\Utility\Utility;
  6. use Sq\Service\Repository\ORM\UserInvitationRepository;
  7. #[ORM\Entity(repositoryClassUserInvitationRepository::class)]
  8. #[ORM\Table(name'user_invitations')]
  9. #[ORM\Index(name'fk__ui_org_id'columns: ['ui_org_id'])]
  10. #[ORM\UniqueConstraint(name'uqx__ui_token'columns: ['ui_token'])]
  11. class UserInvitation
  12. {
  13.     /**
  14.      *
  15.      * @var int|null
  16.      */
  17.     #[ORM\Id]
  18.     #[ORM\Column(name'ui_id'type'integer'nullablefalseoptions: ['unsigned' => true])]
  19.     #[ORM\GeneratedValue(strategy'AUTO')]
  20.     private $id;
  21.     /**
  22.      * @var \DateTimeInterface
  23.      */
  24.     #[ORM\Column(name'ui_created_at'type'datetime'nullablefalse)]
  25.     private $createdAt;
  26.     /**
  27.      *
  28.      * @var Organization
  29.      */
  30.     #[ORM\ManyToOne(targetEntityOrganization::class, inversedBy'userInvitations')]
  31.     #[ORM\JoinColumn(name'ui_org_id'referencedColumnName'o_id'nullablefalse)]
  32.     private $organization;
  33.     /**
  34.      * @var string
  35.      */
  36.     #[ORM\Column(name'ui_token'type'string'length160nullablefalse)]
  37.     private $token;
  38.     /**
  39.      * @var string
  40.      */
  41.     #[ORM\Column(name'ui_email'type'binary_aes_encrypted'nullablefalse)]
  42.     private $email;
  43.     /**
  44.      * @var string
  45.      */
  46.     #[ORM\Column(name'ui_role'type'string'columnDefinition"ENUM('admin', 'editor')"nullablefalse)]
  47.     private $role;
  48.     /**
  49.      * @var string
  50.      */
  51.     #[ORM\Column(name'ui_workspace_ids'type'string'nullablefalse)]
  52.     private $workspaceIds;
  53.     /**
  54.      *
  55.      * @var User|null
  56.      */
  57.     #[ORM\ManyToOne(targetEntityUser::class)]
  58.     #[ORM\JoinColumn(name'ui_invited_by_uid'referencedColumnName'u_id'nullabletrue)]
  59.     private $invitedBy;
  60.     public function __construct(
  61.         Organization $organization,
  62.         string $email,
  63.         array $workspaceIds,
  64.         string $role UserInvitationRole::EDITOR,
  65.         ?User $invitedBy null
  66.     ) {
  67.         $this->organization $organization;
  68.         $this->email $email;
  69.         $this->setWorkspaceIds($workspaceIds);
  70.         $this->invitedBy $invitedBy;
  71.         $this->role $role;
  72.         $this->token bin2hex(random_bytes(80));
  73.         $this->createdAt = new \DateTimeImmutable;
  74.     }
  75.     public function getId(): ?int
  76.     {
  77.         return $this->id;
  78.     }
  79.     public function getCreatedAt(): \DateTimeInterface
  80.     {
  81.         return clone $this->createdAt;
  82.     }
  83.     public function getOrganization(): Organization
  84.     {
  85.         return $this->organization;
  86.     }
  87.     public function setOrganization(Organization $organization): self
  88.     {
  89.         $this->organization $organization;
  90.         return $this;
  91.     }
  92.     public function getToken(): string
  93.     {
  94.         return $this->token;
  95.     }
  96.     public function getEmail(): string
  97.     {
  98.         return $this->email;
  99.     }
  100.     public function setEmail(string $email): self
  101.     {
  102.         $this->email $email;
  103.         return $this;
  104.     }
  105.     public function getRole(): string
  106.     {
  107.         return $this->role;
  108.     }
  109.     public function setRole(string $role): self
  110.     {
  111.         $this->role $role;
  112.         return $this;
  113.     }
  114.     public function getWorkspaceIds(): array
  115.     {
  116.         $workspaceIds json_decode($this->workspaceIdstrue);
  117.         if (json_last_error() !== JSON_ERROR_NONE)
  118.         {
  119.             return [];
  120.         }
  121.         return is_array($workspaceIds) ? $workspaceIds : [];
  122.     }
  123.     public function setWorkspaceIds(array $workspaceIds): void
  124.     {
  125.         $workspaceIds Utility::filterListOfIDs(array_map(function ($workspaceId)
  126.         {
  127.             return $workspaceId instanceof Workspace
  128.                 $workspaceId->getId()
  129.                 : $workspaceId;
  130.         }, $workspaceIds));
  131.         $this->workspaceIds json_encode($workspaceIds);
  132.     }
  133.     public function getInvitedBy(): ?User
  134.     {
  135.         return $this->invitedBy;
  136.     }
  137. }