Message.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. <?php
  2. namespace AppBundle\Entity\Message;
  3. use AppBundle\Entity\AccessAndFunction\Access;
  4. use AppBundle\Entity\Core\Tagg;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Dunglas\ApiBundle\Annotation\Iri;
  7. use Symfony\Component\Serializer\Annotation\Groups;
  8. use Symfony\Component\Validator\Constraints as Assert;
  9. use AppBundle\Entity\Traits\TimestampableEntity;
  10. use AppBundle\Entity\Traits\CreatorUpdaterEntity;
  11. use AppBundle\Entity\Organization\Organization;
  12. use Doctrine\Common\Collections\ArrayCollection;
  13. use AppBundle\Annotation\DefaultField;
  14. use AppBundle\Annotation\ExportTranslate;
  15. /**
  16. * Classe de base de @see Mail, Email, Sms
  17. *
  18. * @Iri("http://schema.org/Message")
  19. */
  20. #[ORM\Entity(repositoryClass: 'AppBundle\Entity\Message\Repository\MessageRepository')]
  21. #[ORM\Table(name: 'Message')]
  22. #[ORM\InheritanceType('SINGLE_TABLE')]
  23. #[ORM\DiscriminatorColumn(name: 'discr', type: 'string')]
  24. #[ORM\DiscriminatorMap(['message' => 'Message', 'mail' => 'Mail', 'email' => 'Email', 'sms' => 'Sms'])]
  25. class Message implements MessageInterface
  26. {
  27. use TimestampableEntity;
  28. use CreatorUpdaterEntity;
  29. /**
  30. * @var int
  31. */
  32. #[ORM\Column(type: 'integer')]
  33. #[ORM\Id]
  34. #[ORM\GeneratedValue(strategy: 'AUTO')]
  35. #[Groups(['message', 'email_detail', 'mail', 'email', 'sms', 'newsletter', 'reportmessage', 'message_list', 'messagesend_list', 'template_list'])]
  36. private $id;
  37. /**
  38. * @var Access
  39. *
  40. * @DefaultField
  41. */
  42. #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\AccessAndFunction\Access', inversedBy: 'messages')]
  43. #[ORM\JoinColumn(nullable: true)]
  44. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'reportmessage', 'message_list', 'messagesend_list', 'template_list', 'email_detail'])]
  45. private $author;
  46. /**
  47. * @var Organization
  48. *
  49. * @DefaultField
  50. */
  51. #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Organization\Organization')]
  52. #[ORM\JoinColumn(nullable: true)]
  53. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'reportmessage'])]
  54. private $organization;
  55. /**
  56. * @var String
  57. *
  58. * @ExportTranslate(true)
  59. */
  60. #[ORM\Column(type: 'string', options: ['default' => 'ORGANIZATION'])]
  61. #[Assert\Type(type: 'string')]
  62. #[Groups(['message', 'mail', 'email', 'newsletter', 'reportmessage', 'message_list', 'email_detail', 'messagesend_list'])]
  63. private $sender;
  64. /**
  65. * @var String
  66. */
  67. #[ORM\Column(type: 'string', options: ['default' => 'MEMBER_AND_GUARDIANS'])]
  68. #[Assert\Type(type: 'string')]
  69. #[Assert\Choice(callback: ['AppBundle\Enum\Message\SendToEnum', 'toArray'])]
  70. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'message_list', 'messagesend_list', 'email_detail', 'template_list'])]
  71. private $sendTo;
  72. /**
  73. * @var bool
  74. */
  75. #[ORM\Column(type: 'boolean', options: ['default' => false])]
  76. #[Assert\Type(type: 'boolean')]
  77. #[Groups(['mail', 'email', 'newsletter', 'message_list', 'messagesend_list', 'template_list'])]
  78. private $sharingWithAdministration;
  79. /**
  80. * @var string
  81. */
  82. #[ORM\Column(type: 'string', length: 255, nullable: true)]
  83. #[Assert\Type(type: 'string')]
  84. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'reportmessage', 'mail_reference', 'email_reference', 'sms_reference', 'message_list', 'messagesend_list', 'email_detail', 'email_detail_mailattached', 'template_list'])]
  85. private $about;
  86. /**
  87. * @var string
  88. */
  89. #[ORM\Column(type: 'text', nullable: true)]
  90. #[Assert\Type(type: 'string')]
  91. #[Groups(['message', 'mail', 'email', 'newsletter', 'reportmessage'])]
  92. private $headline;
  93. /**
  94. * @var string
  95. */
  96. #[ORM\Column(type: 'text', nullable: true)]
  97. #[Assert\Type(type: 'string')]
  98. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'reportmessage', 'email_detail'])]
  99. private $text;
  100. /**
  101. * @var string
  102. */
  103. #[ORM\Column(type: 'string', options: ['default' => 'DRAFT'])]
  104. #[Assert\Type(type: 'string')]
  105. #[Assert\Choice(callback: ['AppBundle\Enum\Message\MessageStatusEnum', 'toArray'])]
  106. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'reportmessage', 'message_list', 'messagesend_list'])]
  107. private $status;
  108. /**
  109. * @var bool
  110. */
  111. #[ORM\Column(type: 'boolean', options: ['default' => false])]
  112. #[Assert\Type(type: 'boolean')]
  113. #[Assert\NotNull]
  114. #[Groups(['super_admin'])]
  115. private $isSystem = false;
  116. /**
  117. * @var bool
  118. */
  119. #[ORM\Column(type: 'boolean', options: ['default' => 0])]
  120. #[Assert\Type(type: 'boolean')]
  121. #[Assert\NotNull]
  122. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter'])]
  123. private $template = false;
  124. /**
  125. * @var ArrayCollection<AppBundle\Entity\Core\File>.
  126. */
  127. #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\File', cascade: ['persist'], orphanRemoval: true)]
  128. #[ORM\JoinTable(name: 'messages_files', joinColumns: [], inverseJoinColumns: [])]
  129. #[ORM\JoinColumn(name: 'message_id', referencedColumnName: 'id', onDelete: 'cascade')]
  130. #[ORM\JoinColumn(name: 'file_id', referencedColumnName: 'id', onDelete: 'cascade')]
  131. #[Groups(['message', 'mail', 'email', 'newsletter', 'reportmessage', 'email_detail'])]
  132. private $files;
  133. /**
  134. * @var ArrayCollection<AppBundle\Entity\Core\Document>.
  135. */
  136. #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\Document')]
  137. #[ORM\JoinTable(name: 'messages_documents', joinColumns: [], inverseJoinColumns: [])]
  138. #[ORM\JoinColumn(name: 'message_id', referencedColumnName: 'id')]
  139. #[ORM\JoinColumn(name: 'document_id', referencedColumnName: 'id')]
  140. #[Groups(['message', 'mail', 'email', 'newsletter', 'reportmessage'])]
  141. private $documents;
  142. /**
  143. * @var array
  144. */
  145. #[ORM\Column(type: 'text', nullable: true)]
  146. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'reportmessage', 'email_detail'])]
  147. private $recipientRule;
  148. /**
  149. * @var \DateTime
  150. */
  151. #[ORM\Column(type: 'datetime', nullable: true)]
  152. #[Assert\Date]
  153. #[Groups(['reportmessage', 'message_list', 'messagesend_list'])]
  154. private $dateSent;
  155. /**
  156. *
  157. * @var string
  158. */
  159. #[ORM\Column(type: 'string', length: 35, nullable: true)]
  160. #[Assert\Length(min: 0, max: 35)]
  161. #[Groups(['message', 'mail', 'email', 'sms', 'newsletter', 'reportmessage', 'message_list', 'messagesend_list', 'template_list', 'mail_reference', 'email_reference', 'email_detail', 'sms_reference'])]
  162. private $reference;
  163. /**
  164. * @var boolean
  165. */
  166. #[ORM\Column(type: 'boolean', options: ['default' => 0])]
  167. #[Assert\Type(type: 'boolean')]
  168. #[Groups(['email', 'reportmessage', 'message_list', 'email_detail', 'messagesend_list'])]
  169. private $acknowledgment;
  170. /**
  171. * @var ArrayCollection<Access>
  172. */
  173. #[ORM\OneToMany(targetEntity: 'AppBundle\Entity\Message\ReportMessage', mappedBy: 'message', orphanRemoval: true, cascade: ['persist'])]
  174. #[Groups(['messagesend_list'])]
  175. private $reportMessage;
  176. /**
  177. * @var string
  178. */
  179. #[Groups(['messagesend_list'])]
  180. private $reportMessageTemplate;
  181. /**
  182. * @var string
  183. */
  184. #[Groups(['template', 'message_list', 'messagesend_list'])]
  185. private $type;
  186. /**
  187. * @var bool
  188. */
  189. #[ORM\Column(type: 'boolean', options: ['default' => false])]
  190. #[Assert\Type(type: 'boolean')]
  191. #[Groups(['mail', 'email', 'newsletter', 'message_list', 'messagesend_list', 'email_detail', 'template_list'])]
  192. private $childrenOrganization;
  193. /**
  194. * @var ArrayCollection<Tagg>
  195. */
  196. #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\Tagg', cascade: ['persist'], inversedBy: 'messages')]
  197. #[Assert\Valid]
  198. #[ORM\JoinTable(name: 'tag_message', joinColumns: [], inverseJoinColumns: [])]
  199. #[ORM\JoinColumn(name: 'message_id', referencedColumnName: 'id')]
  200. #[ORM\JoinColumn(name: 'tag_id', referencedColumnName: 'id')]
  201. #[Groups(['message_tags', 'manage_tags', 'messagesend_list', 'message_list', 'template_list', 'email_detail'])]
  202. private $tags;
  203. /**
  204. * The constructor
  205. */
  206. public function __construct() {
  207. $this->sender = \AppBundle\Enum\Message\SenderEnum::ORGANIZATION;
  208. $this->sendTo = \AppBundle\Enum\Message\SendToEnum::MEMBER;
  209. $this->status = \AppBundle\Enum\Message\MessageStatusEnum::DRAFT;
  210. $this->sharingWithAdministration = false;
  211. $this->childrenOrganization = false;
  212. $this->attachments = new ArrayCollection();
  213. $this->files = new ArrayCollection();
  214. $this->documents = new ArrayCollection();
  215. $this->reportMessage = new ArrayCollection();
  216. $this->tags = new ArrayCollection();
  217. $this->acknowledgment = false;
  218. }
  219. /**
  220. * Get id
  221. *
  222. * @return integer
  223. */
  224. public function getId()
  225. {
  226. return $this->id;
  227. }
  228. /**
  229. * Sets id
  230. *
  231. * @param int $id
  232. * @return this
  233. */
  234. public function setId($id)
  235. {
  236. $this->id = $id;
  237. return $this;
  238. }
  239. /**
  240. * Set about
  241. *
  242. * @param string $about
  243. *
  244. * @return Message
  245. */
  246. public function setAbout($about)
  247. {
  248. $this->about = $about;
  249. return $this;
  250. }
  251. /**
  252. * Get about
  253. *
  254. * @return string
  255. */
  256. public function getAbout()
  257. {
  258. return $this->about;
  259. }
  260. /**
  261. * Set text
  262. *
  263. * @param string $text
  264. *
  265. * @return Message
  266. */
  267. public function setText($text)
  268. {
  269. $this->text = $text;
  270. return $this;
  271. }
  272. /**
  273. * Get text
  274. *
  275. * @return string
  276. */
  277. public function getText()
  278. {
  279. return html_entity_decode($this->text);
  280. }
  281. /**
  282. * Set status
  283. *
  284. * @param string $status
  285. *
  286. * @return Message
  287. */
  288. public function setStatus($status)
  289. {
  290. $this->status = $status;
  291. return $this;
  292. }
  293. /**
  294. * Get status
  295. *
  296. * @return string
  297. */
  298. public function getStatus()
  299. {
  300. return $this->status;
  301. }
  302. /**
  303. * Set isSystem
  304. *
  305. * @param boolean $isSystem
  306. *
  307. * @return Message
  308. */
  309. public function setIsSystem($isSystem)
  310. {
  311. $this->isSystem = $isSystem;
  312. return $this;
  313. }
  314. /**
  315. * Get isSystem
  316. *
  317. * @return boolean
  318. */
  319. public function getIsSystem()
  320. {
  321. return $this->isSystem;
  322. }
  323. /**
  324. * Set template
  325. *
  326. * @param boolean $template
  327. *
  328. * @return Message
  329. */
  330. public function setTemplate($template)
  331. {
  332. $this->template = $template;
  333. return $this;
  334. }
  335. /**
  336. * Get template
  337. *
  338. * @return boolean
  339. */
  340. public function getTemplate()
  341. {
  342. return $this->template;
  343. }
  344. /**
  345. * Set author
  346. *
  347. * @param \AppBundle\Entity\AccessAndFunction\Access $author
  348. *
  349. * @return Message
  350. */
  351. public function setAuthor(\AppBundle\Entity\AccessAndFunction\Access $author = null)
  352. {
  353. $this->author = $author;
  354. return $this;
  355. }
  356. /**
  357. * Get author
  358. *
  359. * @return \AppBundle\Entity\AccessAndFunction\Access
  360. */
  361. public function getAuthor()
  362. {
  363. return $this->author;
  364. }
  365. /**
  366. * Set organization
  367. *
  368. * @param \AppBundle\Entity\Organization\Organization $organization
  369. *
  370. * @return Message
  371. */
  372. public function setOrganization(\AppBundle\Entity\Organization\Organization $organization = null)
  373. {
  374. $this->organization = $organization;
  375. return $this;
  376. }
  377. /**
  378. * Get organization
  379. *
  380. * @return \AppBundle\Entity\Organization\Organization
  381. */
  382. public function getOrganization()
  383. {
  384. return $this->organization;
  385. }
  386. /**
  387. * Set recipientRule
  388. *
  389. * @param String $recipientRule
  390. *
  391. * @return Message
  392. */
  393. public function setRecipientRule($recipientRule)
  394. {
  395. $this->recipientRule = $recipientRule;
  396. return $this;
  397. }
  398. /**
  399. * {@inheritdoc}
  400. */
  401. public function getRecipientRule()
  402. {
  403. return $this->recipientRule;
  404. }
  405. /**
  406. * Set dateSent
  407. *
  408. * @param \DateTime $dateSent
  409. *
  410. * @return Message
  411. */
  412. public function setDateSent($dateSent)
  413. {
  414. $this->dateSent = $dateSent;
  415. return $this;
  416. }
  417. /**
  418. * Get dateSent
  419. *
  420. * @return \DateTime
  421. */
  422. public function getDateSent()
  423. {
  424. return $this->dateSent;
  425. }
  426. /**
  427. * Set sender
  428. *
  429. * @param String $sender
  430. *
  431. * @return Message
  432. */
  433. public function setSender($sender)
  434. {
  435. $this->sender = $sender;
  436. return $this;
  437. }
  438. /**
  439. * {@inheritdoc}
  440. */
  441. public function getSender()
  442. {
  443. return $this->sender;
  444. }
  445. /**
  446. * Set reference
  447. *
  448. * @param string $reference
  449. *
  450. * @return Message
  451. */
  452. public function setReference($reference)
  453. {
  454. $this->reference = $reference;
  455. return $this;
  456. }
  457. /**
  458. * Get reference
  459. *
  460. * @return string
  461. */
  462. public function getReference()
  463. {
  464. return $this->reference;
  465. }
  466. /**
  467. * Add file
  468. *
  469. * @param \AppBundle\Entity\Core\File $file
  470. *
  471. * @return Message
  472. */
  473. public function addFile(\AppBundle\Entity\Core\File $file)
  474. {
  475. $this->files[] = $file;
  476. return $this;
  477. }
  478. /**
  479. * Remove file
  480. *
  481. * @param \AppBundle\Entity\Core\File $file
  482. */
  483. public function removeFile(\AppBundle\Entity\Core\File $file)
  484. {
  485. $this->files->removeElement($file);
  486. }
  487. /**
  488. * Get files
  489. *
  490. * @return \Doctrine\Common\Collections\Collection
  491. */
  492. public function getFiles()
  493. {
  494. return $this->files;
  495. }
  496. /**
  497. * Add document
  498. *
  499. * @param \AppBundle\Entity\Core\Document $document
  500. *
  501. * @return Message
  502. */
  503. public function addDocument(\AppBundle\Entity\Core\Document $document)
  504. {
  505. $this->documents[] = $document;
  506. return $this;
  507. }
  508. /**
  509. * Remove document
  510. *
  511. * @param \AppBundle\Entity\Core\Document $document
  512. */
  513. public function removeDocument(\AppBundle\Entity\Core\Document $document)
  514. {
  515. $this->documents->removeElement($document);
  516. }
  517. /**
  518. * Get documents
  519. *
  520. * @return \Doctrine\Common\Collections\Collection
  521. */
  522. public function getDocuments()
  523. {
  524. return $this->documents;
  525. }
  526. /**
  527. * Set headline
  528. *
  529. * @param string $headline
  530. *
  531. * @return Message
  532. */
  533. public function setHeadline($headline)
  534. {
  535. $this->headline = $headline;
  536. return $this;
  537. }
  538. /**
  539. * Get headline
  540. *
  541. * @return string
  542. */
  543. public function getHeadline()
  544. {
  545. return $this->headline;
  546. }
  547. /**
  548. * Set sendTo
  549. *
  550. * @param string $sendTo
  551. *
  552. * @return Message
  553. */
  554. public function setSendTo($sendTo)
  555. {
  556. $this->sendTo = $sendTo;
  557. return $this;
  558. }
  559. /**
  560. * Get sendTo
  561. *
  562. * @return string
  563. */
  564. public function getSendTo()
  565. {
  566. return $this->sendTo;
  567. }
  568. /**
  569. * Set sharingWithAdministration
  570. *
  571. * @param boolean $sharingWithAdministration
  572. *
  573. * @return Message
  574. */
  575. public function setSharingWithAdministration($sharingWithAdministration)
  576. {
  577. $this->sharingWithAdministration = $sharingWithAdministration;
  578. return $this;
  579. }
  580. /**
  581. * Get sharingWithAdministration
  582. *
  583. * @return boolean
  584. */
  585. public function getSharingWithAdministration()
  586. {
  587. return $this->sharingWithAdministration;
  588. }
  589. /**
  590. * Set childrenOrganization
  591. *
  592. * @param boolean $childrenOrganization
  593. *
  594. * @return Message
  595. */
  596. public function setChildrenOrganization($childrenOrganization)
  597. {
  598. $this->childrenOrganization = $childrenOrganization;
  599. return $this;
  600. }
  601. /**
  602. * Get childrenOrganization
  603. *
  604. * @return boolean
  605. */
  606. public function getChildrenOrganization()
  607. {
  608. return $this->childrenOrganization;
  609. }
  610. /**
  611. * Set acknowledgment
  612. *
  613. * @param boolean $acknowledgment
  614. *
  615. * @return $this
  616. */
  617. public function setAcknowledgment($acknowledgment)
  618. {
  619. $this->acknowledgment = $acknowledgment;
  620. return $this;
  621. }
  622. /**
  623. * Get acknowledgment
  624. *
  625. * @return boolean
  626. */
  627. public function getAcknowledgment()
  628. {
  629. return $this->acknowledgment;
  630. }
  631. public function getAllReportMessage()
  632. {
  633. return $this->reportMessage;
  634. }
  635. /**
  636. * @return ArrayCollection
  637. */
  638. public function getReportMessage()
  639. {
  640. return $this->reportMessage->slice(0,2);
  641. }
  642. /**
  643. * @param ArrayCollection $reportMessage
  644. */
  645. public function setReportMessage(ArrayCollection $reportMessage)
  646. {
  647. $this->reportMessage = $reportMessage;
  648. }
  649. public function addReportMessage(ReportMessage $reportMessage)
  650. {
  651. $reportMessage->setMessage($this);
  652. $this->reportMessage[] = $reportMessage;
  653. return $this;
  654. }
  655. public function getReportMessageTemplate()
  656. {
  657. $reportMessageTemplate = "";
  658. $reportMessages = $this->getReportMessage();
  659. if(count($reportMessages) > 1){
  660. $reportMessageTemplate = "Multi-destinataires";
  661. }else if(count($reportMessages) === 1){
  662. $reportMessageTemplate = $reportMessages[0] ? $reportMessages[0]->getRecipient() : '';
  663. }
  664. return $reportMessageTemplate;
  665. }
  666. /**
  667. * get type
  668. *
  669. * @return mixed
  670. */
  671. public function getType()
  672. {
  673. $explodeClass = explode("\\",get_class($this));
  674. return lcfirst(end($explodeClass));
  675. }
  676. /**
  677. * Add tag
  678. *
  679. * @param \AppBundle\Entity\Core\Tagg $tag
  680. *
  681. * @return Message
  682. */
  683. public function addTag(\AppBundle\Entity\Core\Tagg $tag)
  684. {
  685. $this->tags[] = $tag;
  686. return $this;
  687. }
  688. /**
  689. * Remove tag
  690. *
  691. * @param \AppBundle\Entity\Core\Tagg $tag
  692. */
  693. public function removeTag(\AppBundle\Entity\Core\Tagg $tag)
  694. {
  695. $this->tags->removeElement($tag);
  696. }
  697. /**
  698. * Get tags
  699. *
  700. * @return \Doctrine\Common\Collections\Collection
  701. */
  702. public function getTags()
  703. {
  704. return $this->tags;
  705. }
  706. }