src/Entity/Conversation.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\Traits\ToArray;
  4. use App\Enum\Conversation\Type;
  5. use App\Repository\ConversationRepository;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\ORM\Mapping as ORM;
  9. /**
  10.  * @ORM\Entity(repositoryClass=ConversationRepository::class)
  11.  */
  12. class Conversation
  13. {
  14.     use ToArray;
  15.     /**
  16.      * @ORM\Id
  17.      * @ORM\GeneratedValue
  18.      * @ORM\Column(type="integer")
  19.      */
  20.     private $id;
  21.     /**
  22.      * @ORM\Column(type="datetime")
  23.      */
  24.     private $createdAt;
  25.     /**
  26.      * @ORM\Column(type="enum", options={"values"="conversation_enum"})
  27.      */
  28.     private $type;
  29.     /**
  30.      * @ORM\OneToMany(targetEntity=Member::class, mappedBy="conversation")
  31.      */
  32.     private $members;
  33.     /**
  34.      * @ORM\OneToMany(targetEntity=Message::class, mappedBy="conversation", orphanRemoval=true)
  35.      */
  36.     private $messages;
  37.     /**
  38.      * @ORM\Column(type="guid", unique=true)
  39.      */
  40.     private $conversationId;
  41.     public function __construct()
  42.     {
  43.         $this->createdAt = new \DateTime();
  44.         $this->members = new ArrayCollection();
  45.         $this->messages = new ArrayCollection();
  46.     }
  47.     public function getId(): ?int
  48.     {
  49.         return $this->id;
  50.     }
  51.     public function getCreatedAt(): ?\DateTimeInterface
  52.     {
  53.         return $this->createdAt;
  54.     }
  55.     public function setCreatedAt(\DateTimeInterface $createdAt): self
  56.     {
  57.         $this->createdAt $createdAt;
  58.         return $this;
  59.     }
  60.     public function getType()
  61.     {
  62.         return $this->type;
  63.     }
  64.     public function setType($type): self
  65.     {
  66.         $this->type $type;
  67.         return $this;
  68.     }
  69.     /**
  70.      * @return Collection<int, Member>
  71.      */
  72.     public function getMembers(): Collection
  73.     {
  74.         return $this->members;
  75.     }
  76.     public function addMember(Member $member): self
  77.     {
  78.         if (!$this->members->contains($member)) {
  79.             $this->members[] = $member;
  80.             $member->setConversation($this);
  81.         }
  82.         return $this;
  83.     }
  84.     public function removeMember(Member $member): self
  85.     {
  86.         if ($this->members->removeElement($member)) {
  87.             // set the owning side to null (unless already changed)
  88.             if ($member->getConversation() === $this) {
  89.                 $member->setConversation(null);
  90.             }
  91.         }
  92.         return $this;
  93.     }
  94.     /**
  95.      * @return Collection<int, Message>
  96.      */
  97.     public function getMessages(): Collection
  98.     {
  99.         return $this->messages;
  100.     }
  101.     public function addMessage(Message $message): self
  102.     {
  103.         if (!$this->messages->contains($message)) {
  104.             $this->messages[] = $message;
  105.             $message->setConversation($this);
  106.         }
  107.         return $this;
  108.     }
  109.     public function removeMessage(Message $message): self
  110.     {
  111.         if ($this->messages->removeElement($message)) {
  112.             // set the owning side to null (unless already changed)
  113.             if ($message->getConversation() === $this) {
  114.                 $message->setConversation(null);
  115.             }
  116.         }
  117.         return $this;
  118.     }
  119.     public function hasMember(User $user): bool
  120.     {
  121.         foreach ($this->members as $member) {
  122.             if ($member->getUser()->getId() === $user->getId()) {
  123.                 return true;
  124.             }
  125.         }
  126.         return false;
  127.     }
  128.     public function getOppositeUser(User $user): ?User
  129.     {
  130.         if ($this->getType() !== Type::TYPE_PRIVATE) {
  131.             return null;
  132.         }
  133.         if ($this->members->count() == 1) {
  134.             return $this->members->first()->getUser();
  135.         }
  136.         foreach ($this->members as $member) {
  137.             if ($member->getUser()->getId() !== $user->getId()) {
  138.                 return $member->getUser();
  139.             }
  140.         }
  141.         return null;
  142.     }
  143.     public function getTitle(User $sender null): ?string
  144.     {
  145.         if ($this->getType() == Type::TYPE_PRIVATE && $sender &&
  146.             $this->getMembers()->count() > 1) {
  147.             foreach ($this->getMembers() as $member) {
  148.                 if ($member->getUser()->getId() != $sender->getId()) {
  149.                     return $member->getUser()->getName();
  150.                 }
  151.             }
  152.             return null;
  153.         } elseif ($this->getType() == Type::TYPE_PRIVATE
  154.             && $this->getMembers()->count() ==1) {
  155.             return "Заметки";
  156.         } else {
  157.             return "Группа";
  158.         }
  159.     }
  160.     public function getConversationId(): ?string
  161.     {
  162.         return $this->conversationId;
  163.     }
  164.     public function setConversationId(string $conversationId): self
  165.     {
  166.         $this->conversationId $conversationId;
  167.         return $this;
  168.     }
  169. }