/** * {@inheritdoc} * * @param \Mautic\PointBundle\Entity\Trigger $entity * @param bool $unlock */ public function saveEntity($entity, $unlock = true) { $isNew = $entity->getId() ? false : true; parent::saveEntity($entity, $unlock); //should we trigger for existing leads? if ($entity->getTriggerExistingLeads() && $entity->isPublished()) { $events = $entity->getEvents(); $repo = $this->getEventRepository(); $persist = array(); $ipAddress = $this->factory->getIpAddress(); foreach ($events as $event) { $dateTime = $this->factory->getDate($entity->getDateAdded()); $filter = array('force' => array(array('column' => 'l.date_added', 'expr' => 'lte', 'value' => $dateTime->toUtcString()), array('column' => 'l.points', 'expr' => 'gte', 'value' => $entity->getPoints()))); if (!$isNew) { //get a list of leads that has already had this event applied $leadIds = $repo->getLeadsForEvent($event->getId()); if (!empty($leadIds)) { $filter['force'][] = array('column' => 'l.id', 'expr' => 'notIn', 'value' => $leadIds); } } //get a list of leads that are before the trigger's date_added and trigger if not already done so /** @var \Mautic\LeadBundle\Model\LeadModel $leadModel */ $leadModel = $this->factory->getModel('lead'); $leads = $leadModel->getEntities(array('filter' => $filter)); foreach ($leads as $l) { if ($this->triggerEvent($event->convertToArray(), $l, true)) { $log = new LeadTriggerLog(); $log->setIpAddress($ipAddress); $log->setEvent($event); $log->setLead($l); $log->setDateFired(new \DateTime()); $event->addLog($log); $persist[] = $event; } } } if (!empty($persist)) { $repo->saveEntities($persist); } } }
/** * {@inheritDoc} */ public function getId() { if ($this->__isInitialized__ === false) { return (int) parent::getId(); } $this->__initializer__ && $this->__initializer__->__invoke($this, 'getId', array()); return parent::getId(); }
/** * {@inheritdoc} * * @param \Mautic\PointBundle\Entity\Trigger $entity * @param bool $unlock */ public function saveEntity($entity, $unlock = true) { $isNew = $entity->getId() ? false : true; parent::saveEntity($entity, $unlock); //should we trigger for existing leads? if ($entity->getTriggerExistingLeads() && $entity->isPublished()) { $events = $entity->getEvents(); $repo = $this->getEventRepository(); $persist = []; $ipAddress = $this->ipLookupHelper->getIpAddress(); foreach ($events as $event) { $filter = ['force' => [['column' => 'l.date_added', 'expr' => 'lte', 'value' => (new DateTimeHelper($entity->getDateAdded()))->toUtcString()], ['column' => 'l.points', 'expr' => 'gte', 'value' => $entity->getPoints()]]]; if (!$isNew) { //get a list of leads that has already had this event applied $leadIds = $repo->getLeadsForEvent($event->getId()); if (!empty($leadIds)) { $filter['force'][] = ['column' => 'l.id', 'expr' => 'notIn', 'value' => $leadIds]; } } //get a list of leads that are before the trigger's date_added and trigger if not already done so $leads = $this->leadModel->getEntities(['filter' => $filter]); foreach ($leads as $l) { if ($this->triggerEvent($event->convertToArray(), $l, true)) { $log = new LeadTriggerLog(); $log->setIpAddress($ipAddress); $log->setEvent($event); $log->setLead($l); $log->setDateFired(new \DateTime()); $event->addLog($log); $persist[] = $event; } } } if (!empty($persist)) { $repo->saveEntities($persist); } } }