src/Entity/Message.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Enum\Origin;
  4. use App\Repository\MessageRepository;
  5. use DateTimeZone;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\DBAL\Types\Types;
  9. use Doctrine\ORM\Mapping as ORM;
  10. use Symfony\Component\Serializer\Annotation\Groups;
  11. use Symfony\Component\Validator\Constraints as Assert;
  12. use Symfony\Component\Uid\Uuid;
  13. #[ORM\Entity(repositoryClassMessageRepository::class)]
  14. #[ORM\Table(name'messages')]
  15. class Message
  16. {
  17.     #[ORM\Id]
  18.     #[ORM\Column(type'string'length22uniquetrue)]
  19.     #[Groups(['message_read''mission_read''message_write'])]
  20.     private string $id;
  21.     #[ORM\Column(type'text'nullabletrue)]
  22.     #[Groups(['message_read''mission_read''message_write'])]
  23.     private ?string $content null;
  24.     #[ORM\ManyToOne(targetEntityUser::class, inversedBy'messages')]
  25.     #[Groups(['message_read''mission_read''message_write'])]
  26.     private User $user;
  27.     #[ORM\ManyToMany(targetEntityUser::class)] // Relation unidirectionnelle
  28.     #[ORM\JoinTable(name'pinned_message_user')] // Nom de la table pivot
  29.     #[Groups(['message_read''mission_read''message_write'])]
  30.     private Collection $pinnedByUsers;
  31.     
  32.     #[ORM\ManyToOne(targetEntityCampaign::class, inversedBy'messages')]
  33.     private Campaign $campaign;
  34.     #[ORM\Column(type'datetime')]
  35.     #[Groups(['message_read''mission_read''message_write'])]
  36.     private \DateTimeInterface $createdAt;
  37.     #[ORM\OneToMany(mappedBy'messages'targetEntityFileMessage::class, cascade: ["persist"])]
  38.     #[Groups(['message_read''mission_read'])]
  39.     private $fileMessages;
  40.     #[ORM\Column(type'array'nullabletrue)]
  41.     #[Groups(['message_read''mission_read''message_write'])]
  42.     private $userListWhoRead = [];
  43.     #[ORM\ManyToOne(targetEntityMission::class, inversedBy'messages')]
  44.     private $mission;
  45.     #[ORM\Column(type'string'length255nullabletrue)]
  46.     #[Groups(['message_read''mission_read'])]
  47.     private $origin;
  48.     #[ORM\Column(type'array'nullabletrue)]
  49.     #[Groups(['message_read''mission_read'])]
  50.     private $replyTo = [];
  51.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  52.     private ?string $originalContent null;
  53.     #[ORM\OneToMany(mappedBy'message'targetEntityMessageReaction::class)]
  54.     #[Groups(['message_read''mission_read''message_write'])]
  55.     private Collection $messageReactions;
  56.     #[ORM\Column(type'boolean'nullabletrue)]
  57.     #[Groups(['message_read''mission_read''message_write'])]
  58.     private $isDeleted;
  59.     #[ORM\Column(type'datetime'nullabletrue)]
  60.     private \DateTimeInterface $insertPinned;
  61.     #[ORM\Column(type'boolean'nullabletrue)]
  62.     #[Groups(['message_read''mission_read''message_write'])]
  63.     private $isModified;
  64.     //For api
  65.     #[Groups(['message_read''mission_read''message_write'])]
  66.     private $reactionListApi = []; 
  67.     #[ORM\ManyToOne(targetEntityDiscussionGroup::class, inversedBy'messages')]
  68.     #[ORM\JoinColumn(nullabletrue)]
  69.     #[Groups(['message_read''mission_read''message_write'])]
  70.     private ?DiscussionGroup $discussionGroup null;
  71.     // for Api Only; 
  72.     #[Groups(['message_read''mission_read''message_write'])]
  73.     private $createdAtTimestamp
  74.     #[Groups(['message_read''mission_read''message_write'])]
  75.     private $createdAtCustom
  76.     #[Groups(['message_read''mission_read''message_write'])]
  77.     private $lastMessageUread
  78.     #[Groups(['message_read''mission_read''message_write'])]
  79.     private $userListWhoReadApi;
  80.      #[ORM\ManyToMany(targetEntityUser::class)]
  81.     #[ORM\JoinTable(name'message_shared_user')]
  82.     private Collection $sharedWithUsers;
  83.      #[ORM\Column(length255nullabletrue)]
  84.      private ?string $platform null;
  85.     public function __construct()
  86.     {
  87.         $this->id Uuid::v4()->toBase58();
  88.         // $date = new \DateTime('now');
  89.         // $utcTimeZone = new DateTimeZone("UTC");
  90.         //$utcTimeZone = new DateTimeZone("Europe/Paris");
  91.         // $date->setTimezone($utcTimeZone);
  92.         $date = new \DateTime("now", new DateTimeZone("UTC"));
  93.         $this->createdAt $date;
  94.         $this->fileMessages = new ArrayCollection();
  95.         $this->userListWhoRead=[];
  96.         $this->origin Origin::HUMAN->value;
  97.         $this->messageReactions = new ArrayCollection();
  98.         $this->isDeleted false;
  99.         $this->pinnedByUsers = new ArrayCollection();
  100.         $this->sharedWithUsers = new ArrayCollection();
  101.     }
  102.     public function getId(): ?string
  103.     {
  104.         return $this->id;
  105.     }
  106.     public function getContent(): ?string
  107.     {
  108.         return $this->content;
  109.     }
  110.     public function setLastMessageUread(string $lastMessageUread){
  111.          $this->lastMessageUread $lastMessageUread;; 
  112.     }
  113.     public function getLastMessageUread(){
  114.          return $this->lastMessageUread
  115.     }
  116.     public function setContent(?string $content, ?bool $replaceChar=true, ?bool $htmlspecialchars=true): self
  117.     {   
  118.         // $this->setOriginalContent($content);
  119.         // $content = $htmlspecialchars ? htmlspecialchars($content) : $content;
  120.         if($replaceChar){
  121.             $pattern="/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}([-a-zA-Z0-9()@:%_\+.~#?&\/\/=;]*)/";
  122.             $content preg_replace_callback($pattern, function ($matches) {
  123.                 $url $matches[0];
  124.                 return '<a href="' $url '" target="_blank">' $matches[0] . '</a>';
  125.             }, $content );
  126.         }
  127.  
  128.         $content str_replace(['<br />''<br>','<br/>''<br >'], ''$content); 
  129.         $this->content =nl2br($content); 
  130.         return $this;
  131.     }
  132.     public function getUser(): ?User
  133.     {
  134.         return $this->user;
  135.     }
  136.     public function setUser(?User $user): self
  137.     {
  138.         $this->user $user;
  139.         return $this;
  140.     }
  141.     public function getCampaign(): ?Campaign
  142.     {
  143.         return $this->campaign;
  144.     }
  145.     public function setCampaign(?Campaign $campaign): self
  146.     {
  147.         $this->campaign $campaign;
  148.         return $this;
  149.     }
  150.     public function getCreatedAtTimestamp(){
  151.          return  $this->getCreatedAt()->getTimestamp();
  152.     }
  153.     public function  getCreatedAtCustom(){
  154.         // $timezone = new \DateTimeZone(date_default_timezone_get());
  155.         // $now = new \DateTime('now', $timezone);
  156.         // $offsetInSeconds = $timezone->getOffset($now);
  157.         // $offsetInHours = $offsetInSeconds / 3600;
  158.         return  $this->getCreatedAt()->format('Y-m-d\TH:i');
  159.     }
  160.     public function getCreatedAt(): ?\DateTimeInterface
  161.     {
  162.         // if ($this->createdAt) {
  163.         //     // Convertit la date en UTC
  164.         //     $this->createdAt->setTimezone(new \DateTimeZone('UTC'));
  165.         // }
  166.     
  167.         return $this->createdAt;
  168.     }
  169.     public function setCreatedAt(\DateTimeInterface $createdAt): self
  170.     {
  171.         $this->createdAt $createdAt;
  172.         return $this;
  173.     }
  174.     /**
  175.      * @return Collection|FileMessage[]
  176.      */
  177.     public function getFileMessages(): Collection
  178.     {
  179.         return $this->fileMessages;
  180.     }
  181.     public function addFileMessage(FileMessage $fileMessage): self
  182.     {
  183.         if (!$this->fileMessages->contains($fileMessage)) {
  184.             $this->fileMessages[] = $fileMessage;
  185.             $fileMessage->setMessages($this);
  186.         }
  187.         return $this;
  188.     }
  189.     public function removeFileMessage(FileMessage $fileMessage): self
  190.     {
  191.         if ($this->fileMessages->removeElement($fileMessage)) {
  192.             // set the owning side to null (unless already changed)
  193.             if ($fileMessage->getMessages() === $this) {
  194.                 $fileMessage->setMessages(null);
  195.             }
  196.         }
  197.         return $this;
  198.     }
  199.     public function getUserListWhoRead(): ?array
  200.     {
  201.         return $this->userListWhoRead;
  202.     }
  203.     public function getUserListWhoReadApi(): ?array
  204.     {
  205.         return $this->userListWhoReadApi;
  206.     }
  207.     public function setUserListWhoReadApi(?array $userListWhoReadApi): self
  208.     {
  209.         $this->userListWhoReadApi $userListWhoReadApi;
  210.         return $this;
  211.     }
  212.    public function getReactionListApi(){
  213.       return $this->reactionListApi
  214.    }
  215.    public function setReactionListApi(array $reactionListApi){
  216.          $this->reactionListApi $reactionListApi
  217.    }
  218.     public function setUserListWhoRead(?array $userListWhoRead): self
  219.     {
  220.         $this->userListWhoRead $userListWhoRead;
  221.         return $this;
  222.     }
  223.     public function getMission(): ?Mission
  224.     {
  225.         return $this->mission;
  226.     }
  227.     public function setMission(?Mission $mission): self
  228.     {
  229.         $this->mission $mission;
  230.         return $this;
  231.     }
  232.     public function getOrigin(): ?string
  233.     {
  234.         return $this->origin;
  235.     }
  236.     public function setOrigin(?string $origin): self
  237.     {
  238.         $this->origin $origin;
  239.         return $this;
  240.     }
  241.     public function getReplyTo(): ?array
  242.     {
  243.         return $this->replyTo;
  244.     }
  245.     public function setReplyToWithMessage(?Message $message=null){
  246.         if($message!=null){
  247.             $this->setReplyTo([
  248.                 'content'=>$message->getcontent(),
  249.                 'id'=>$message->getId(),
  250.                 'date'=>$message->getCreatedAt(),
  251.                 'userFullname'=>$message->getUser()->getFullname()
  252.             ]);
  253.         }
  254.     }
  255.     public function setReplyTo(?array $replyTo): self
  256.     {
  257.         $this->replyTo $replyTo;
  258.         return $this;
  259.     }
  260.     private function addAtTheLine($content){
  261.         $pattern "/\r/";
  262.         return preg_replace($pattern,'<br>',$content);
  263.     }
  264.     public function getOriginalContent(): ?string
  265.     {
  266.         return $this->originalContent;
  267.     }
  268.     public function setOriginalContent(?string $originalContent): static
  269.     {
  270.         $this->originalContent $originalContent;
  271.         return $this;
  272.     }
  273.     private  function putBoldUserMentioned($content){
  274.         return $content preg_replace_callback('/(?:^|\s)@(\w+)[;,\.]?(?=\s|$)(?![\w.-]*@\w+\.\w+)/u', function($match) {
  275.             $user = [...explode('__'$match[0])];
  276.             if ("@tous" == $user[0]){
  277.                 return '<strong data-origin="@tous">' $match[0] . '</strong>';
  278.             }
  279.             else{
  280.                 if(sizeof($user) == ){
  281.                     [$originFirstname$originLastname] = $user;
  282.                     $firstnamepreg_replace('/_/u'" "$originFirstname);
  283.                     $lastname preg_replace('/_/u'" "$originLastname);
  284.                     return "<strong data-origin='{$originFirstname}__{$originLastname}'>$firstname </strong>";
  285.                 }
  286.                 else{
  287.                     return $match[0];
  288.                 }
  289.             }
  290.          
  291.         }, $content);
  292.     }
  293.     /**
  294.      * @return Collection<int, MessageReaction>
  295.      */
  296.     public function getMessageReactions(): Collection
  297.     {
  298.         return $this->messageReactions;
  299.     }
  300.     public function addMessageReaction(MessageReaction $messageReaction): static
  301.     {
  302.         if (!$this->messageReactions->contains($messageReaction)) {
  303.             $this->messageReactions->add($messageReaction);
  304.             $messageReaction->setMessage($this);
  305.         }
  306.         return $this;
  307.     }
  308.     public function removeMessageReaction(MessageReaction $messageReaction): static
  309.     {
  310.         if ($this->messageReactions->removeElement($messageReaction)) {
  311.             // set the owning side to null (unless already changed)
  312.             if ($messageReaction->getMessage() === $this) {
  313.                 $messageReaction->setMessage(null);
  314.             }
  315.         }
  316.         return $this;
  317.     }
  318.     public function isDeleted(): ?bool
  319.     {
  320.         return $this->isDeleted;
  321.     }
  322.     public function setIsDeleted(?bool $isDeleted): self
  323.     {
  324.         $this->isDeleted $isDeleted;
  325.         return $this;
  326.     }
  327.     public function isModified(): ?bool
  328.     {
  329.         return $this->isModified;
  330.     }
  331.     public function setIsModified(?bool $isModified): self
  332.     {
  333.         $this->isModified $isModified;
  334.         return $this;
  335.     }
  336.     public function isIsDeleted(): ?bool
  337.     {
  338.         return $this->isDeleted;
  339.     }
  340.     public function isIsModified(): ?bool
  341.     {
  342.         return $this->isModified;
  343.     }
  344.     public function getDiscussionGroup(): ?DiscussionGroup
  345.     {
  346.         return $this->discussionGroup;
  347.     }
  348.     public function setDiscussionGroup(?DiscussionGroup $discussionGroup): static
  349.     {
  350.         $this->discussionGroup $discussionGroup;
  351.         return $this;
  352.     }
  353.     
  354.     public function getInsertPinned(): ?\DateTimeInterface
  355.     {
  356.         return $this->insertPinned;
  357.     }
  358.     public function setInsertPinned(?\DateTimeInterface $insertPinned): static
  359.     {
  360.         $this->insertPinned $insertPinned;
  361.         return $this;
  362.     }
  363.     public function getPinnedBy(): ?User
  364.     {
  365.         return $this->pinnedBy;
  366.     }
  367.     public function setPinnedBy(?User $pinnedBy): static
  368.     {
  369.         $this->pinnedBy $pinnedBy;
  370.         return $this;
  371.     }
  372.     /**
  373.      * @return Collection<int, User>
  374.      */
  375.     public function getPinnedByUsers(): Collection
  376.     {
  377.         return $this->pinnedByUsers;
  378.     }
  379.     public function addPinnedByUser(User $pinnedByUser): static
  380.     {
  381.         if (!$this->pinnedByUsers->contains($pinnedByUser)) {
  382.             $this->pinnedByUsers->add($pinnedByUser);
  383.         }
  384.         return $this;
  385.     }
  386.     public function removePinnedByUser(User $pinnedByUser): static
  387.     {
  388.         $this->pinnedByUsers->removeElement($pinnedByUser);
  389.         return $this;
  390.     }
  391.     public function isPinnedBy(User $user){
  392.         $pinned false;
  393.         foreach ($this->getPinnedByUsers() as $userPinned) {
  394.             if ($user->getId() == $userPinned->getId()) {
  395.                 $pinned true;
  396.                 break;
  397.             }
  398.         }
  399.         return $pinned;
  400.     }
  401.     /**
  402.      * @return Collection<int, User>
  403.      */
  404.     public function getSharedWithUsers(): Collection
  405.     {
  406.         return $this->sharedWithUsers;
  407.     }
  408.     public function addSharedWithUser(User $sharedWithUser): static
  409.     {
  410.         if (!$this->sharedWithUsers->contains($sharedWithUser)) {
  411.             $this->sharedWithUsers->add($sharedWithUser);
  412.         }
  413.         return $this;
  414.     }
  415.     public function removeSharedWithUser(User $sharedWithUser): static
  416.     {
  417.         $this->sharedWithUsers->removeElement($sharedWithUser);
  418.         return $this;
  419.     }
  420.     public function getPlatform(): ?string
  421.     {
  422.         return $this->platform;
  423.     }
  424.     public function setPlatform(?string $platform): static
  425.     {
  426.         $this->platform $platform;
  427.         return $this;
  428.     }
  429. }