src/Entity/ChannelUserData/ChannelUserData.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Entity\ChannelUserData;
  3. use App\Entity\Account\User;
  4. use App\Entity\Channel\Channel;
  5. use App\Entity\Channel\PositioningTest\Attempt\Attempt;
  6. use App\Entity\ChannelUserData\Cursus\AbstractCursus;
  7. use App\Entity\Common\ImportableData\ImportableDataInterface;
  8. use App\Entity\Common\ImportableData\ImportableDataTrait;
  9. use App\Entity\Sync\SyncableInterface;
  10. use App\Repository\ChannelUserData\ChannelUserDataRepository;
  11. use DateTimeInterface;
  12. use Doctrine\Common\Collections\ArrayCollection;
  13. use Doctrine\Common\Collections\Collection;
  14. use Doctrine\ORM\Mapping as ORM;
  15. use Drosalys\Bundle\ApiBundle\Serializer\Attributes\IdGroups;
  16. use Nellapp\Bundle\SDKBundle\Channel\Entity\ChannelInterface;
  17. use Nellapp\Bundle\SDKBundle\Channel\Entity\ChannelUserData\ChannelUserDataInterface;
  18. use Nellapp\Bundle\SDKBundle\Channel\Entity\ChannelUserData\ChannelUserDataMethodTrait;
  19. use Nellapp\Bundle\SDKBundle\Enum\ChannelUserData\RqthStatusEnum;
  20. use Nellapp\Bundle\SDKBundle\Permission\Entity\ChannelResourceInterface;
  21. use Nellapp\Bundle\SDKBundle\Permission\UserOwner\UserOwnerResourceInterface;
  22. use Nellapp\Bundle\SDKBundle\Planning\Entity\PlanningResourceInterface;
  23. use Nellapp\Bundle\SDKBundle\Planning\Entity\PlanningResourceTrait;
  24. use Nellapp\Bundle\SDKBundle\Sync\EntityKeys;
  25. use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  26. use Symfony\Component\Serializer\Annotation as Serial;
  27. use Symfony\Component\Validator\Constraints as Assert;
  28. #[
  29.     ORM\Entity(repositoryClass: ChannelUserDataRepository::class),
  30.     ORM\Table(name: 'channel_user_data'),
  31.     ORM\UniqueConstraint(fields: ['user', 'channel']),
  32.     ORM\InheritanceType('JOINED'),
  33.     ORM\DiscriminatorColumn(name: 'type', type: 'string'),
  34.     ORM\DiscriminatorMap(['learnerType' => ChannelUserData::class, 'adminType' => AdminChannelUserData::class]),
  35. ]
  36. class ChannelUserData implements ChannelUserDataInterface, SyncableInterface, ChannelResourceInterface, ImportableDataInterface, UserOwnerResourceInterface, PlanningResourceInterface
  37. {
  38.     use ImportableDataTrait;
  39.     use ChannelUserDataMethodTrait;
  40.     use PlanningResourceTrait;
  41.     #[
  42.         ORM\Id, ORM\GeneratedValue(strategy: 'CUSTOM'),
  43.         ORM\CustomIdGenerator(class: UuidGenerator::class),
  44.         ORM\Column(type: 'string', length: 36)
  45.     ]
  46.     #[Serial\Groups(['Sync', 'Manager', 'GlobalJSVariable'])]
  47.     private ?string $id = null;
  48.     #[ORM\ManyToOne(targetEntity: User::class, cascade: ['persist'], inversedBy: 'channelUserDatas')]
  49.     #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
  50.     #[Assert\Valid(groups: ['Default', 'admin_learner_profile', 'admin_admin_profile'])]
  51.     #[Serial\Groups(['Manager'])]
  52.     #[IdGroups(['Sync'])]
  53.     private ?User $user = null;
  54.     #[ORM\ManyToOne(targetEntity: Channel::class)]
  55.     #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
  56.     #[IdGroups(['Sync'])]
  57.     private ?Channel $channel = null;
  58.     #[ORM\Column(type: 'boolean', nullable: false, options: ['default' => true])]
  59.     #[Assert\NotBlank(groups: ['flow_channel_user_create_step3'])]
  60.     #[Serial\Groups(['Sync'])]
  61.     private ?bool $isLearner = null;
  62.     #[ORM\Column(type: 'boolean', nullable: false, options: ['default' => true])]
  63.     #[Serial\Groups(['Sync'])]
  64.     private ?bool $isActive = true;
  65.     #[ORM\Column(type: 'string', length: 255, nullable: true)]
  66.     #[Assert\Length(max: 255, maxMessage: 'channel_user_data.birthName.Length.maxMessage', groups: ['Default', 'admin_learner_profile', 'admin_admin_profile'])]
  67.     private ?string $birthName = null;
  68.     #[ORM\Column(type: 'date', nullable: true)]
  69.     private ?DateTimeInterface $birthAt = null;
  70.     #[ORM\OneToMany(mappedBy: 'channelUserData', targetEntity: AbstractCursus::class, cascade: ['remove'], fetch: 'LAZY', orphanRemoval: true)]
  71.     private Collection $cursuses;
  72.     #[ORM\OneToMany(mappedBy: 'channelUserData', targetEntity: Attempt::class, fetch: 'LAZY')]
  73.     private ?Collection $positioningTestAttempts;
  74.     #[ORM\Column(type: 'string', length: 15, nullable: true)]
  75.     #[
  76.         Assert\Length(min: 4, max: 15, minMessage: 'common.address.postCode.Length.min', maxMessage: 'common.address.postCode.Length.max', groups: ['Default', 'admin_learner_profile', 'admin_admin_profile']),
  77.         Assert\Regex(pattern: '/^\d{4,15}$/', message: 'common.address.postCode.Regex', groups: ['Default', 'admin_learner_profile', 'admin_admin_profile'])
  78.     ]
  79.     private ?string $birthPostalCode = null;
  80.     #[ORM\Column(type: 'string', nullable: true)]
  81.     #[Assert\Length(min: 2, max: 255, minMessage: 'common.address.city.Length.min', maxMessage: 'common.address.city.Length.max', groups: ['Default', 'admin_learner_profile', 'admin_admin_profile'])]
  82.     private ?string $birthCity = null;
  83.     #[ORM\Column(type: 'string', length: 2, nullable: true)]
  84.     #[
  85.         Assert\Length(min: 2, max: 2, exactMessage: 'common.address.country.Length.exact'),
  86.         Assert\Country(message: 'common.address.country.Country')
  87.     ]
  88.     private ?string $birthCountry = null;
  89.     #[ORM\Column(type: 'string', length: 255, nullable: true)]
  90.     #[Assert\Length(max: 255, maxMessage: 'channel_user_data.nationality.Length.maxMessage', groups: ['Default', 'admin_learner_profile', 'admin_admin_profile'])]
  91.     private ?string $nationality = null;
  92.     #[ORM\Column(type: 'integer', nullable: true)]
  93.     #[Assert\Choice(callback: [RqthStatusEnum::class, 'getChoices'])]
  94.     private ?int $rqth = null;
  95.     #[ORM\Column(type: 'string', length: 255, nullable: true)]
  96.     #[Assert\Length(max: 255, maxMessage: 'channel_user_data.rqthDetails.Length.maxMessage', groups: ['Default', 'admin_learner_profile'])]
  97.     private ?string $rqthDetails = null;
  98.     #[ORM\Column(type: 'string', length: 255, nullable: true)]
  99.     private ?string $lastWorkQualificationDetails = null;
  100.     #[ORM\Column(type: 'integer', nullable: true)]
  101.     private ?int $lastWorkQualification = null;
  102.     #[ORM\Column(type: 'integer', nullable: true)]
  103.     private ?int $lastWorkStatus = null;
  104.     #[ORM\Column(type: 'integer', nullable: true)]
  105.     private ?int $scholarLevel = null;
  106.     #[ORM\Column(type: 'integer', nullable: true)]
  107.     private ?int $scholarDiploma = null;
  108.     #[ORM\Column(type: 'string', nullable: true)]
  109.     #[Assert\Length(max: 255, maxMessage: 'channel_user_data.scholarDiplomaOther.Length.maxMessage')]
  110.     private ?string $scholarDiplomaOther = null;
  111.     public function __construct()
  112.     {
  113.         $this->cursuses = new ArrayCollection();
  114.         $this->positioningTestAttempts = new ArrayCollection();
  115.     }
  116.     public static function getSyncKey(): string
  117.     {
  118.         return EntityKeys::CHANNEL_USER_DATA;
  119.     }
  120.     public function getSyncDisplayLabel(): string
  121.     {
  122.         return $this->getUser();
  123.     }
  124.     public function isLearner(): ?bool
  125.     {
  126.         return !$this instanceof AdminChannelUserData;
  127.     }
  128.     public function getBirthName(): ?string
  129.     {
  130.         return $this->birthName;
  131.     }
  132.     public function setBirthName(?string $birthName): self
  133.     {
  134.         $this->birthName = $birthName;
  135.         return $this;
  136.     }
  137.     public function getBirthAt(): ?DateTimeInterface
  138.     {
  139.         return $this->birthAt;
  140.     }
  141.     public function setBirthAt(?DateTimeInterface $birthAt): self
  142.     {
  143.         $this->birthAt = $birthAt;
  144.         return $this;
  145.     }
  146.     public function getNationality(): ?string
  147.     {
  148.         return $this->nationality;
  149.     }
  150.     public function setNationality(?string $nationality): self
  151.     {
  152.         $this->nationality = $nationality;
  153.         return $this;
  154.     }
  155.     public function getRqth(): ?int
  156.     {
  157.         return $this->rqth;
  158.     }
  159.     public function setRqth(?int $rqth): self
  160.     {
  161.         $this->rqth = $rqth;
  162.         return $this;
  163.     }
  164.     public function getRqthDetails(): ?string
  165.     {
  166.         return $this->rqthDetails;
  167.     }
  168.     public function setRqthDetails(?string $rqthDetails): self
  169.     {
  170.         $this->rqthDetails = $rqthDetails;
  171.         return $this;
  172.     }
  173.     public function getLastWorkQualificationDetails(): ?string
  174.     {
  175.         return $this->lastWorkQualificationDetails;
  176.     }
  177.     public function setLastWorkQualificationDetails(?string $lastWorkQualificationDetails): self
  178.     {
  179.         $this->lastWorkQualificationDetails = $lastWorkQualificationDetails;
  180.         return $this;
  181.     }
  182.     public function getLastWorkQualification(): ?int
  183.     {
  184.         return $this->lastWorkQualification;
  185.     }
  186.     public function setLastWorkQualification(?int $lastWorkQualification): ChannelUserData
  187.     {
  188.         $this->lastWorkQualification = $lastWorkQualification;
  189.         return $this;
  190.     }
  191.     public function getLastWorkStatus(): ?int
  192.     {
  193.         return $this->lastWorkStatus;
  194.     }
  195.     public function setLastWorkStatus(?int $lastWorkStatus): ChannelUserData
  196.     {
  197.         $this->lastWorkStatus = $lastWorkStatus;
  198.         return $this;
  199.     }
  200.     public function getScholarLevel(): ?int
  201.     {
  202.         return $this->scholarLevel;
  203.     }
  204.     public function setScholarLevel(?int $scholarLevel): ChannelUserData
  205.     {
  206.         $this->scholarLevel = $scholarLevel;
  207.         return $this;
  208.     }
  209.     public function getScholarDiploma(): ?int
  210.     {
  211.         return $this->scholarDiploma;
  212.     }
  213.     public function setScholarDiploma(?int $scholarDiploma): ChannelUserData
  214.     {
  215.         $this->scholarDiploma = $scholarDiploma;
  216.         return $this;
  217.     }
  218.     public function getBirthPostalCode(): ?string
  219.     {
  220.         return $this->birthPostalCode;
  221.     }
  222.     public function setBirthPostalCode(?string $birthPostalCode): ChannelUserData
  223.     {
  224.         $this->birthPostalCode = $birthPostalCode;
  225.         return $this;
  226.     }
  227.     public function getBirthCity(): ?string
  228.     {
  229.         return $this->birthCity;
  230.     }
  231.     public function setBirthCity(?string $birthCity): ChannelUserData
  232.     {
  233.         $this->birthCity = $birthCity;
  234.         return $this;
  235.     }
  236.     public function getBirthCountry(): ?string
  237.     {
  238.         return $this->birthCountry;
  239.     }
  240.     public function setBirthCountry(?string $birthCountry): ChannelUserData
  241.     {
  242.         $this->birthCountry = $birthCountry;
  243.         return $this;
  244.     }
  245.     public function getCursuses(): Collection
  246.     {
  247.         return $this->cursuses;
  248.     }
  249.     public function setCursuses(Collection $cursuses): ChannelUserData
  250.     {
  251.         $this->cursuses = $cursuses;
  252.         return $this;
  253.     }
  254.     public function getPositioningTestAttempts(): ?Collection
  255.     {
  256.         return $this->positioningTestAttempts;
  257.     }
  258.     public function addPositioningTestAttempt(Attempt $positioningTestAttempt): self
  259.     {
  260.         if (!$this->positioningTestAttempts->contains($positioningTestAttempt)) {
  261.             $positioningTestAttempt->setChannelUserData($this);
  262.             $this->positioningTestAttempts[] = $positioningTestAttempt;
  263.         }
  264.         return $this;
  265.     }
  266.     public function removePositioningTestAttempt(Attempt $positioningTestAttempt): self
  267.     {
  268.         if ($this->positioningTestAttempts->contains($positioningTestAttempt)) {
  269.             $positioningTestAttempt->setChannelUserData(null);
  270.             $this->positioningTestAttempts->removeElement($positioningTestAttempt);
  271.         }
  272.         return $this;
  273.     }
  274.     public function getScholarDiplomaOther(): ?string
  275.     {
  276.         return $this->scholarDiplomaOther;
  277.     }
  278.     public function setScholarDiplomaOther(?string $scholarDiplomaOther): ChannelUserData
  279.     {
  280.         $this->scholarDiplomaOther = $scholarDiplomaOther;
  281.         return $this;
  282.     }
  283.     public function toggleIsActive(): void
  284.     {
  285.         $this->isActive = !$this->isActive;
  286.     }
  287.     public static function getPermissionResourceClass(): ?string
  288.     {
  289.         return null;
  290.     }
  291.     public function getOwnerChannel(): ?ChannelInterface
  292.     {
  293.         return $this->getChannel();
  294.     }
  295.     public function __toString()
  296.     {
  297.         return $this->getUser();
  298.     }
  299.     public function getUserOwners(): array
  300.     {
  301.         return $this->getUser() !== null ? [$this->getUser()] : [];
  302.     }
  303.     public function getPlanningResourceId(): ?string
  304.     {
  305.         return $this->getUser()?->getId();
  306.     }
  307. }