Beispiel #1
0
 /**
  * {@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();
 }
Beispiel #3
0
 /**
  * {@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);
         }
     }
 }