예제 #1
0
 /**
  * Trigger events for the current lead
  *
  * @param Lead $lead
  */
 public function triggerEvents(Lead $lead)
 {
     $points = $lead->getPoints();
     //find all published triggers that is applicable to this points
     /** @var \Mautic\PointBundle\Entity\TriggerEventRepository $repo */
     $repo = $this->getEventRepository();
     $events = $repo->getPublishedByPointTotal($points);
     if (!empty($events)) {
         //get a list of actions that has already been applied to this lead
         $appliedEvents = $repo->getLeadTriggeredEvents($lead->getId());
         $ipAddress = $this->factory->getIpAddress();
         $persist = array();
         foreach ($events as $event) {
             if (isset($appliedEvents[$event['id']])) {
                 //don't apply the event to the lead if it's already been done
                 continue;
             }
             if ($this->triggerEvent($event, $lead, true)) {
                 $log = new LeadTriggerLog();
                 $log->setIpAddress($ipAddress);
                 $log->setEvent($this->em->getReference('MauticPointBundle:TriggerEvent', $event['id']));
                 $log->setLead($lead);
                 $log->setDateFired(new \DateTime());
                 $persist[] = $log;
             }
         }
         if (!empty($persist)) {
             $this->getEventRepository()->saveEntities($persist);
             $this->em->clear('Mautic\\PointBundle\\Entity\\LeadTriggerLog');
             $this->em->clear('Mautic\\PointBundle\\Entity\\TriggerEvent');
         }
     }
 }
 /**
  * {@inheritDoc}
  */
 public function setLead($lead)
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'setLead', array($lead));
     return parent::setLead($lead);
 }