*/ private $events; private ?Group $group = null; public function __clone() { $this->id = null; parent::__clone(); } public function __construct() { $this->events = new ArrayCollection(); } public static function loadMetadata(ORM\ClassMetadata $metadata): void { $builder = new ClassMetadataBuilder($metadata); $builder->setTable('point_triggers') ->setCustomRepositoryClass(TriggerRepository::class); $builder->addIdColumns(); $builder->addPublishDates(); $builder->addField('points', 'integer'); $builder->createField('color', 'string') ->length(7) ->build(); $builder->createField('triggerExistingLeads', 'boolean') ->columnName('trigger_existing_leads') ->build(); $builder->addCategory(); $builder->createOneToMany('events', 'TriggerEvent') ->setIndexBy('id') ->setOrderBy(['order' => 'ASC']) ->mappedBy('trigger') ->cascadeAll() ->fetchExtraLazy() ->build(); $builder->createManyToOne('group', Group::class) ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') ->build(); } public static function loadValidatorMetadata(ClassMetadata $metadata): void { $metadata->addPropertyConstraint('name', new Assert\NotBlank([ 'message' => 'mautic.core.name.required', ])); } /** * Prepares the metadata for API usage. */ public static function loadApiMetadata(ApiMetadataDriver $metadata): void { $metadata->setGroupPrefix('trigger') ->addListProperties( [ 'id', 'name', 'category', 'description', ] ) ->addProperties( [ 'publishUp', 'publishDown', 'points', 'color', 'events', 'triggerExistingLeads', ] ) ->build(); } /** * @param string $prop * @param mixed $val */ protected function isChanged($prop, $val) { if ('events' == $prop) { // changes are already computed so just add them $this->changes[$prop][$val[0]] = $val[1]; } else { parent::isChanged($prop, $val); } } /** * Get id. * * @return int */ public function getId() { return $this->id; } /** * Set description. * * @param string $description * * @return Trigger */ public function setDescription($description) { $this->isChanged('description', $description); $this->description = $description; return $this; } /** * Get description. * * @return string */ public function getDescription() { return $this->description; } /** * Set name. * * @param string $name * * @return Trigger */ public function setName($name) { $this->isChanged('name', $name); $this->name = $name; return $this; } /** * Get name. * * @return string */ public function getName() { return $this->name; } /** * Add events. * * @return Point */ public function addTriggerEvent($key, TriggerEvent $event) { if ($changes = $event->getChanges()) { $this->isChanged('events', [$key, $changes]); } $this->events[$key] = $event; return $this; } /** * Remove events. */ public function removeTriggerEvent(TriggerEvent $event): void { $this->events->removeElement($event); } /** * Get events. * * @return \Doctrine\Common\Collections\Collection */ public function getEvents() { return $this->events; } /** * Set publishUp. * * @param \DateTime $publishUp * * @return Point */ public function setPublishUp($publishUp) { $this->isChanged('publishUp', $publishUp); $this->publishUp = $publishUp; return $this; } /** * Get publishUp. * * @return \DateTimeInterface */ public function getPublishUp() { return $this->publishUp; } /** * Set publishDown. * * @param \DateTime $publishDown * * @return Point */ public function setPublishDown($publishDown) { $this->isChanged('publishDown', $publishDown); $this->publishDown = $publishDown; return $this; } /** * Get publishDown. * * @return \DateTimeInterface */ public function getPublishDown() { return $this->publishDown; } /** * @return mixed */ public function getPoints() { return $this->points; } /** * @param mixed $points */ public function setPoints($points): void { $this->isChanged('points', $points); $this->points = $points; } /** * @return mixed */ public function getColor() { return $this->color; } /** * @param mixed $color */ public function setColor($color): void { $this->color = $color; } /** * @return mixed */ public function getTriggerExistingLeads() { return $this->triggerExistingLeads; } /** * @param mixed $triggerExistingLeads */ public function setTriggerExistingLeads($triggerExistingLeads): void { $this->triggerExistingLeads = $triggerExistingLeads; } /** * @return mixed */ public function getCategory() { return $this->category; } /** * @param mixed $category */ public function setCategory($category): void { $this->category = $category; } public function getGroup(): ?Group { return $this->group; } public function setGroup(Group $group): void { $this->group = $group; } }