![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/CampaignBundle/Entity/ |
<?php namespace Mautic\CampaignBundle\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping as ORM; use Mautic\ApiBundle\Serializer\Driver\ApiMetadataDriver; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; use Mautic\LeadBundle\Entity\Lead as Contact; class Event implements ChannelInterface { public const TABLE_NAME = 'campaign_events'; public const TYPE_DECISION = 'decision'; public const TYPE_ACTION = 'action'; public const TYPE_CONDITION = 'condition'; public const PATH_INACTION = 'no'; public const PATH_ACTION = 'yes'; public const TRIGGER_MODE_DATE = 'date'; public const TRIGGER_MODE_INTERVAL = 'interval'; public const TRIGGER_MODE_IMMEDIATE = 'immediate'; public const CHANNEL_EMAIL = 'email'; /** * @var int */ private $id; /** * @var string */ private $name; /** * @var string|null */ private $description; /** * @var string */ private $type; /** * @var string */ private $eventType; /** * @var int */ private $order = 0; /** * @var array */ private $properties = []; /** * @var \DateTimeInterface|null */ private $triggerDate; /** * @var int|null */ private $triggerInterval = 0; /** * @var string|null */ private $triggerIntervalUnit; /** * @var \DateTimeInterface|null */ private $triggerHour; /** * @var \DateTimeInterface|null */ private $triggerRestrictedStartHour; /** * @var \DateTimeInterface|null */ private $triggerRestrictedStopHour; /** * @var array|null */ private $triggerRestrictedDaysOfWeek = []; /** * @var string|null */ private $triggerMode; /** * @var Campaign */ private $campaign; /** * @var ArrayCollection<int, \Mautic\CampaignBundle\Entity\Event> **/ private $children; /** * @var Event|null **/ private $parent; /** * @var string|null **/ private $decisionPath; /** * @var string|null **/ private $tempId; /** * @var ArrayCollection<int, \Mautic\CampaignBundle\Entity\LeadEventLog> */ private $log; /** * Used by API to house contact specific logs. * * @var array */ private $contactLog = []; /** * @var string|null */ private $channel; /** * @var int|null */ private $channelId; /** * @var array */ private $changes = []; private ?\DateTimeInterface $deleted = null; private int $failedCount = 0; public function __construct() { $this->log = new ArrayCollection(); $this->children = new ArrayCollection(); } /** * Clean up after clone. */ public function __clone() { $this->tempId = null; $this->campaign = null; $this->channel = null; $this->channelId = null; } public static function loadMetadata(ORM\ClassMetadata $metadata): void { $builder = new ClassMetadataBuilder($metadata); $builder->setTable(self::TABLE_NAME) ->setCustomRepositoryClass(EventRepository::class) ->addIndex(['type', 'event_type'], 'campaign_event_search') ->addIndex(['event_type'], 'campaign_event_type') ->addIndex(['channel', 'channel_id'], 'campaign_event_channel'); $builder->addIdColumns(); $builder->createField('type', 'string') ->length(50) ->build(); $builder->createField('eventType', 'string') ->columnName('event_type') ->length(50) ->build(); $builder->createField('order', 'integer') ->columnName('event_order') ->build(); $builder->addField('properties', 'array'); $builder->addNullableField('deleted', 'datetime'); $builder->createField('triggerDate', 'datetime') ->columnName('trigger_date') ->nullable() ->build(); $builder->createField('triggerInterval', 'integer') ->columnName('trigger_interval') ->nullable() ->build(); $builder->createField('triggerIntervalUnit', 'string') ->columnName('trigger_interval_unit') ->length(1) ->nullable() ->build(); $builder->createField('triggerHour', 'time') ->columnName('trigger_hour') ->nullable() ->build(); $builder->createField('triggerRestrictedStartHour', 'time') ->columnName('trigger_restricted_start_hour') ->nullable() ->build(); $builder->createField('triggerRestrictedStopHour', 'time') ->columnName('trigger_restricted_stop_hour') ->nullable() ->build(); $builder->createField('triggerRestrictedDaysOfWeek', 'array') ->columnName('trigger_restricted_dow') ->nullable() ->build(); $builder->createField('triggerMode', 'string') ->columnName('trigger_mode') ->length(10) ->nullable() ->build(); $builder->createManyToOne('campaign', 'Campaign') ->inversedBy('events') ->addJoinColumn('campaign_id', 'id', false, false, 'CASCADE') ->build(); $builder->createOneToMany('children', 'Event') ->setIndexBy('id') ->setOrderBy(['order' => 'ASC']) ->mappedBy('parent') ->build(); $builder->createManyToOne('parent', 'Event') ->inversedBy('children') ->cascadePersist() ->addJoinColumn('parent_id', 'id') ->build(); $builder->createField('decisionPath', 'string') ->columnName('decision_path') ->nullable() ->build(); $builder->createField('tempId', 'string') ->columnName('temp_id') ->nullable() ->build(); $builder->createOneToMany('log', 'LeadEventLog') ->mappedBy('event') ->cascadePersist() ->fetchExtraLazy() ->build(); $builder->createField('channel', 'string') ->nullable() ->build(); $builder->createField('channelId', 'integer') ->columnName('channel_id') ->nullable() ->build(); $builder->createField('failedCount', 'integer') ->columnName('failed_count') ->build(); } /** * Prepares the metadata for API usage. */ public static function loadApiMetadata(ApiMetadataDriver $metadata): void { $metadata->setGroupPrefix('campaignEvent') ->addListProperties( [ 'id', 'name', 'description', 'type', 'eventType', 'channel', 'channelId', ] ) ->addProperties( [ 'order', 'properties', 'triggerDate', 'triggerInterval', 'triggerIntervalUnit', 'triggerHour', 'triggerRestrictedStartHour', 'triggerRestrictedStopHour', 'triggerRestrictedDaysOfWeek', 'triggerMode', 'decisionPath', 'channel', 'channelId', 'parent', 'children', ] ) ->setMaxDepth(1, 'parent') ->setMaxDepth(1, 'children') // Add standalone groups ->setGroupPrefix('campaignEventStandalone') ->addListProperties( [ 'id', 'name', 'description', 'type', 'eventType', 'channel', 'channelId', ] ) ->addProperties( [ 'campaign', 'order', 'properties', 'triggerDate', 'triggerInterval', 'triggerIntervalUnit', 'triggerHour', 'triggerRestrictedStartHour', 'triggerRestrictedStopHour', 'triggerRestrictedDaysOfWeek', 'triggerMode', 'children', 'parent', 'decisionPath', ] ) // Include logs ->setGroupPrefix('campaignEventWithLogs') ->addListProperties( [ 'id', 'name', 'description', 'type', 'eventType', 'contactLog', 'triggerDate', 'triggerInterval', 'triggerIntervalUnit', 'triggerHour', 'triggerRestrictedStartHour', 'triggerRestrictedStopHour', 'triggerRestrictedDaysOfWeek', 'triggerMode', 'decisionPath', 'order', 'parent', 'channel', 'channelId', ] ) ->addProperties( [ 'campaign', ] ) ->build(); } /** * @param string $prop * @param mixed $val */ private function isChanged($prop, $val): void { $getter = 'get'.ucfirst($prop); $current = $this->$getter(); if ('category' == $prop || 'parent' == $prop) { $currentId = ($current) ? $current->getId() : ''; $newId = ($val) ? $val->getId() : null; if ($currentId != $newId) { $this->changes[$prop] = [$currentId, $newId]; } } elseif ($this->$prop != $val) { $this->changes[$prop] = [$this->$prop, $val]; } } /** * @return array */ public function getChanges() { return $this->changes; } /** * @return int */ public function getId() { return $this->id; } public function nullId(): void { $this->id = null; } /** * @param int $order * * @return Event */ public function setOrder($order) { $this->isChanged('order', $order); $this->order = $order; return $this; } /** * @return int */ public function getOrder() { return $this->order; } /** * @param array $properties * * @return Event */ public function setProperties($properties) { $this->isChanged('properties', $properties); $this->properties = $properties; return $this; } /** * @return array */ public function getProperties() { return $this->properties; } /** * @return Event */ public function setCampaign(Campaign $campaign) { $this->campaign = $campaign; return $this; } /** * @return Campaign */ public function getCampaign() { return $this->campaign; } /** * @param string $type * * @return Event */ public function setType($type) { $this->isChanged('type', $type); $this->type = $type; return $this; } /** * @return string */ public function getType() { return $this->type; } public function convertToArray(): array { return get_object_vars($this); } /** * @param string $description * * @return Event */ public function setDescription($description) { $this->isChanged('description', $description); $this->description = $description; return $this; } /** * @return string */ public function getDescription() { return $this->description; } /** * @param string $name * * @return Event */ public function setName($name) { $this->isChanged('name', $name); $this->name = $name; return $this; } /** * @return string */ public function getName() { return $this->name; } /** * @return Event */ public function addLog(LeadEventLog $log) { $this->log[] = $log; return $this; } /** * Remove log. */ public function removeLog(LeadEventLog $log): void { $this->log->removeElement($log); } /** * @return Collection */ public function getLog() { return $this->log; } /** * Get log for a contact and a rotation. * * @return LeadEventLog|null */ public function getLogByContactAndRotation(Contact $contact, $rotation) { $criteria = Criteria::create() ->where(Criteria::expr()->eq('lead', $contact)) ->andWhere(Criteria::expr()->eq('rotation', $rotation)) ->setMaxResults(1); $log = $this->getLog()->matching($criteria); if (count($log)) { return $log->first(); } return null; } /** * Add children. * * @return Event */ public function addChild(Event $children) { $this->children[] = $children; return $this; } /** * Remove children. */ public function removeChild(Event $children): void { $this->children->removeElement($children); } /** * @return ArrayCollection<int,Event>|Collection<(int|string), mixed> */ public function getChildren() { $criteria = Criteria::create()->where(Criteria::expr()->isNull('deleted')); return $this->children->matching($criteria); } /** * @return ArrayCollection<int,Event> */ public function getPositiveChildren() { $criteria = Criteria::create()->where(Criteria::expr()->eq('decisionPath', self::PATH_ACTION)); return $this->getChildren()->matching($criteria); } /** * @return ArrayCollection<int,Event> */ public function getNegativeChildren() { $criteria = Criteria::create()->where(Criteria::expr()->eq('decisionPath', self::PATH_INACTION)); return $this->getChildren()->matching($criteria); } /** * @param string $type * * @return ArrayCollection<int,Event> */ public function getChildrenByType($type) { $criteria = Criteria::create()->where(Criteria::expr()->eq('type', $type)); return $this->getChildren()->matching($criteria); } /** * @param string $type * * @return ArrayCollection<int,Event> */ public function getChildrenByEventType($type) { $criteria = Criteria::create()->where(Criteria::expr()->eq('eventType', $type)); return $this->getChildren()->matching($criteria); } /** * Set parent. * * @return Event */ public function setParent(Event $parent = null) { $this->isChanged('parent', $parent); $this->parent = $parent; return $this; } /** * Remove parent. */ public function removeParent(): void { $this->isChanged('parent', ''); $this->parent = null; } /** * @return ?Event */ public function getParent() { return $this->parent; } /** * @return mixed */ public function getTriggerDate() { return $this->triggerDate; } /** * @param \DateTime|null $triggerDate */ public function setTriggerDate($triggerDate): void { $this->isChanged('triggerDate', $triggerDate); $this->triggerDate = $triggerDate; } /** * @return int */ public function getTriggerInterval() { return $this->triggerInterval; } /** * @param int $triggerInterval */ public function setTriggerInterval($triggerInterval): void { $this->isChanged('triggerInterval', $triggerInterval); $this->triggerInterval = $triggerInterval; } /** * @return \DateTimeInterface|null */ public function getTriggerHour() { return $this->triggerHour; } /** * @param string $triggerHour * * @return Event */ public function setTriggerHour($triggerHour) { if (empty($triggerHour)) { $triggerHour = null; } elseif (!$triggerHour instanceof \DateTime) { $triggerHour = new \DateTime($triggerHour); } $this->isChanged('triggerHour', $triggerHour ? $triggerHour->format('H:i') : $triggerHour); $this->triggerHour = $triggerHour; return $this; } /** * @return mixed */ public function getTriggerIntervalUnit() { return $this->triggerIntervalUnit; } /** * @param mixed $triggerIntervalUnit */ public function setTriggerIntervalUnit($triggerIntervalUnit): void { $this->isChanged('triggerIntervalUnit', $triggerIntervalUnit); $this->triggerIntervalUnit = $triggerIntervalUnit; } /** * @return mixed */ public function getEventType() { return $this->eventType; } /** * @return $this */ public function setEventType($eventType) { $this->isChanged('eventType', $eventType); $this->eventType = $eventType; return $this; } /** * @return mixed */ public function getTriggerMode() { return $this->triggerMode; } /** * @param mixed $triggerMode */ public function setTriggerMode($triggerMode): void { $this->isChanged('triggerMode', $triggerMode); $this->triggerMode = $triggerMode; } /** * @return mixed */ public function getDecisionPath() { return $this->decisionPath; } /** * @param mixed $decisionPath */ public function setDecisionPath($decisionPath): void { $this->isChanged('decisionPath', $decisionPath); $this->decisionPath = $decisionPath; } /** * @return mixed */ public function getTempId() { return $this->tempId; } /** * @param mixed $tempId */ public function setTempId($tempId): void { $this->isChanged('tempId', $tempId); $this->tempId = $tempId; } /** * @return mixed */ public function getChannel() { return $this->channel; } /** * @param mixed $channel */ public function setChannel($channel): void { $this->isChanged('channel', $channel); $this->channel = $channel; } /** * @return int */ public function getChannelId() { return $this->channelId; } /** * @param int $channelId */ public function setChannelId($channelId): void { $this->isChanged('channelId', $channelId); $this->channelId = (int) $channelId; } /** * Used by the API. * * @return LeadEventLog[]|\Doctrine\Common\Collections\Collection|static */ public function getContactLog(Contact $contact = null) { if ($this->contactLog) { return $this->contactLog; } return $this->log->matching( Criteria::create() ->where( Criteria::expr()->eq('lead', $contact) ) ); } /** * Used by the API. * * @param array $contactLog * * @return Event */ public function setContactLog($contactLog) { $this->contactLog = $contactLog; return $this; } /** * Used by the API. * * @return Event */ public function addContactLog($contactLog) { $this->contactLog[] = $contactLog; return $this; } /** * Get the value of triggerRestrictedStartHour. * * @return \DateTimeInterface|null */ public function getTriggerRestrictedStartHour() { return $this->triggerRestrictedStartHour; } /** * Set the value of triggerRestrictedStartHour. * * @param \DateTime|null $triggerRestrictedStartHour * * @return self */ public function setTriggerRestrictedStartHour($triggerRestrictedStartHour) { if (empty($triggerRestrictedStartHour)) { $triggerRestrictedStartHour = null; } elseif (!$triggerRestrictedStartHour instanceof \DateTime) { $triggerRestrictedStartHour = new \DateTime($triggerRestrictedStartHour); } $this->isChanged('triggerRestrictedStartHour', $triggerRestrictedStartHour ? $triggerRestrictedStartHour->format('H:i') : $triggerRestrictedStartHour); $this->triggerRestrictedStartHour = $triggerRestrictedStartHour; return $this; } /** * Get the value of triggerRestrictedStopHour. * * @return \DateTimeInterface|null */ public function getTriggerRestrictedStopHour() { return $this->triggerRestrictedStopHour; } /** * Set the value of triggerRestrictedStopHour. * * @param \DateTime|null $triggerRestrictedStopHour * * @return self */ public function setTriggerRestrictedStopHour($triggerRestrictedStopHour) { if (empty($triggerRestrictedStopHour)) { $triggerRestrictedStopHour = null; } elseif (!$triggerRestrictedStopHour instanceof \DateTime) { $triggerRestrictedStopHour = new \DateTime($triggerRestrictedStopHour); } $this->isChanged('triggerRestrictedStopHour', $triggerRestrictedStopHour ? $triggerRestrictedStopHour->format('H:i') : $triggerRestrictedStopHour); $this->triggerRestrictedStopHour = $triggerRestrictedStopHour; return $this; } /** * Get the value of triggerRestrictedDaysOfWeek. * * @return array */ public function getTriggerRestrictedDaysOfWeek() { return (array) $this->triggerRestrictedDaysOfWeek; } /** * Set the value of triggerRestrictedDaysOfWeek. * * @return self */ public function setTriggerRestrictedDaysOfWeek(array $triggerRestrictedDaysOfWeek = null) { $this->triggerRestrictedDaysOfWeek = $triggerRestrictedDaysOfWeek; $this->isChanged('triggerRestrictedDaysOfWeek', $triggerRestrictedDaysOfWeek); return $this; } public function setDeleted(?\DateTimeInterface $deleted): Event { $this->isChanged('deleted', $deleted); $this->deleted = $deleted; return $this; } public function getDeleted(): ?\DateTimeInterface { return $this->deleted; } public function isDeleted(): bool { return !is_null($this->deleted); } public function getFailedCount(): int { return $this->failedCount; } }