Нет описания

SegmentEntity.php 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace MailPoet\Entities;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
  5. use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
  6. use MailPoet\Doctrine\EntityTraits\DeletedAtTrait;
  7. use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
  8. use MailPoetVendor\Doctrine\Common\Collections\ArrayCollection;
  9. use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
  10. use MailPoetVendor\Symfony\Component\Validator\Constraints as Assert;
  11. /**
  12. * @ORM\Entity()
  13. * @ORM\Table(name="segments")
  14. */
  15. class SegmentEntity {
  16. use AutoincrementedIdTrait;
  17. use CreatedAtTrait;
  18. use UpdatedAtTrait;
  19. use DeletedAtTrait;
  20. const TYPE_WP_USERS = 'wp_users';
  21. const TYPE_WC_USERS = 'woocommerce_users';
  22. const TYPE_DEFAULT = 'default';
  23. const TYPE_DYNAMIC = 'dynamic';
  24. const TYPE_WITHOUT_LIST = 'without-list';
  25. const SEGMENT_ENABLED = 'active';
  26. const SEGMENT_DISABLED = 'disabled';
  27. /**
  28. * @ORM\Column(type="string")
  29. * @Assert\NotBlank()
  30. * @var string
  31. */
  32. private $name;
  33. /**
  34. * @ORM\Column(type="string")
  35. * @var string
  36. */
  37. private $type;
  38. /**
  39. * @ORM\Column(type="string")
  40. * @var string
  41. */
  42. private $description;
  43. /**
  44. * @ORM\OneToMany(targetEntity="MailPoet\Entities\DynamicSegmentFilterEntity", mappedBy="segment")
  45. * @var ArrayCollection<int, DynamicSegmentFilterEntity>
  46. */
  47. private $dynamicFilters;
  48. /**
  49. * @ORM\Column(type="float", nullable=true)
  50. * @var float|null
  51. */
  52. private $averageEngagementScore;
  53. /**
  54. * @ORM\Column(type="datetimetz", nullable=true)
  55. * @var \DateTimeInterface|null
  56. */
  57. private $averageEngagementScoreUpdatedAt;
  58. public function __construct(
  59. string $name,
  60. string $type,
  61. string $description
  62. ) {
  63. $this->name = $name;
  64. $this->type = $type;
  65. $this->description = $description;
  66. $this->dynamicFilters = new ArrayCollection();
  67. }
  68. public function __clone() {
  69. // reset ID
  70. $this->id = null;
  71. }
  72. /**
  73. * @return string
  74. */
  75. public function getName() {
  76. return $this->name;
  77. }
  78. /**
  79. * @param string $name
  80. */
  81. public function setName($name) {
  82. $this->name = $name;
  83. }
  84. /**
  85. * @return string
  86. */
  87. public function getType() {
  88. return $this->type;
  89. }
  90. /**
  91. * @param string $type
  92. */
  93. public function setType($type) {
  94. $this->type = $type;
  95. }
  96. /**
  97. * @return string
  98. */
  99. public function getDescription() {
  100. return $this->description;
  101. }
  102. /**
  103. * @param string $description
  104. */
  105. public function setDescription($description) {
  106. $this->description = $description;
  107. }
  108. /**
  109. * @return ArrayCollection<int, DynamicSegmentFilterEntity>
  110. */
  111. public function getDynamicFilters() {
  112. return $this->dynamicFilters;
  113. }
  114. public function addDynamicFilter(DynamicSegmentFilterEntity $dynamicSegmentFilterEntity) {
  115. $this->dynamicFilters->add($dynamicSegmentFilterEntity);
  116. }
  117. public function isStatic(): bool {
  118. return in_array($this->getType(), [self::TYPE_DEFAULT, self::TYPE_WP_USERS, self::TYPE_WC_USERS], true);
  119. }
  120. public function getAverageEngagementScore(): ?float {
  121. return $this->averageEngagementScore;
  122. }
  123. public function setAverageEngagementScore(?float $averageEngagementScore): void {
  124. $this->averageEngagementScore = $averageEngagementScore;
  125. }
  126. public function getAverageEngagementScoreUpdatedAt(): ?\DateTimeInterface {
  127. return $this->averageEngagementScoreUpdatedAt;
  128. }
  129. public function setAverageEngagementScoreUpdatedAt(?\DateTimeInterface $averageEngagementScoreUpdatedAt): void {
  130. $this->averageEngagementScoreUpdatedAt = $averageEngagementScoreUpdatedAt;
  131. }
  132. /**
  133. * Returns connect operand from the first filter, when doesn't exist, then returns a default value.
  134. * @return string
  135. */
  136. public function getFiltersConnectOperator(): string {
  137. $firstFilter = $this->getDynamicFilters()->first();
  138. $filterData = $firstFilter ? $firstFilter->getFilterData() : null;
  139. if (!$firstFilter || !$filterData) {
  140. return DynamicSegmentFilterData::CONNECT_TYPE_AND;
  141. }
  142. return $filterData->getParam('connect') ?: DynamicSegmentFilterData::CONNECT_TYPE_AND;
  143. }
  144. }