예제 #1
0
 /**
  * @param Lead  $lead
  * @param array $options
  *
  * @return array
  */
 public function getLeadIpLogs(Lead $lead, array $options = [])
 {
     $qb = $this->getEntityManager()->getConnection()->createQueryBuilder();
     $sqb = $this->getEntityManager()->getConnection()->createQueryBuilder();
     // Just a check to ensure reused IDs (happens with innodb) doesn't infect data
     $dt = new DateTimeHelper($lead->getDateAdded(), 'Y-m-d H:i:s', 'local');
     $sqb->select('MAX(l.date_added) as date_added, l.ip_address')->from(MAUTIC_TABLE_PREFIX . 'audit_log', 'l')->where($sqb->expr()->andX($sqb->expr()->eq('l.bundle', $sqb->expr()->literal('lead')), $sqb->expr()->eq('l.object', $sqb->expr()->literal('lead')), $sqb->expr()->eq('l.action', $sqb->expr()->literal('ipadded')), $sqb->expr()->eq('l.object_id', $lead->getId()), $sqb->expr()->gte('l.date_added', $sqb->expr()->literal($dt->getUtcTimestamp()))))->groupBy('l.ip_address');
     $qb->select('ip.date_added, ip.ip_address')->from(sprintf('(%s)', $sqb->getSQL()), 'ip');
     return $this->getTimelineResults($qb, $options, 'ip.ip_address', 'ip.date_added', [], ['date_added']);
 }
 /**
  * {@inheritDoc}
  */
 public function getDateAdded()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getDateAdded', array());
     return parent::getDateAdded();
 }
예제 #3
0
 /**
  * Merge two leads; if a conflict of data occurs, the newest lead will get precedence
  *
  * @param Lead $lead
  * @param Lead $lead2
  * @param bool $autoMode If true, the newest lead will be merged into the oldes then deleted; otherwise, $lead will be merged into $lead2 then deleted
  *
  * @return Lead
  */
 public function mergeLeads(Lead $lead, Lead $lead2, $autoMode = true)
 {
     $logger = $this->factory->getLogger();
     $logger->debug('LEAD: Merging leads');
     $leadId = $lead->getId();
     $lead2Id = $lead2->getId();
     //if they are the same lead, then just return one
     if ($leadId === $lead2Id) {
         $logger->debug('LEAD: Leads are the same');
         return $lead;
     }
     if ($autoMode) {
         //which lead is the oldest?
         $mergeWith = $lead->getDateAdded() < $lead2->getDateAdded() ? $lead : $lead2;
         $mergeFrom = $mergeWith->getId() === $leadId ? $lead2 : $lead;
     } else {
         $mergeWith = $lead2;
         $mergeFrom = $lead;
     }
     $logger->debug('LEAD: Lead ID# ' . $mergeFrom->getId() . ' will be merged into ID# ' . $mergeWith->getId());
     //dispatch pre merge event
     $event = new LeadMergeEvent($mergeWith, $mergeFrom);
     if ($this->dispatcher->hasListeners(LeadEvents::LEAD_PRE_MERGE)) {
         $this->dispatcher->dispatch(LeadEvents::LEAD_PRE_MERGE, $event);
     }
     //merge IP addresses
     $ipAddresses = $mergeFrom->getIpAddresses();
     foreach ($ipAddresses as $ip) {
         $mergeWith->addIpAddress($ip);
         $logger->debug('LEAD: Associating with IP ' . $ip->getIpAddress());
     }
     //merge fields
     $mergeFromFields = $mergeFrom->getFields();
     foreach ($mergeFromFields as $group => $groupFields) {
         foreach ($groupFields as $alias => $details) {
             //overwrite old lead's data with new lead's if new lead's is not empty
             if (!empty($details['value'])) {
                 $mergeWith->addUpdatedField($alias, $details['value']);
                 $logger->debug('LEAD: Updated ' . $alias . ' = ' . $details['value']);
             }
         }
     }
     //merge owner
     $oldOwner = $mergeWith->getOwner();
     $newOwner = $mergeFrom->getOwner();
     if ($oldOwner === null && $newOwner !== null) {
         $mergeWith->setOwner($newOwner);
         $logger->debug('LEAD: New owner is ' . $newOwner->getId());
     }
     //sum points
     $mergeWithPoints = $mergeWith->getPoints();
     $mergeFromPoints = $mergeFrom->getPoints();
     $mergeWith->setPoints($mergeWithPoints + $mergeFromPoints);
     $logger->debug('LEAD: Adding ' . $mergeFromPoints . ' points to lead');
     //merge tags
     $mergeFromTags = $mergeFrom->getTags();
     $addTags = $mergeFromTags->getKeys();
     $this->modifyTags($mergeWith, $addTags, null, false);
     //save the updated lead
     $this->saveEntity($mergeWith, false);
     //post merge events
     if ($this->dispatcher->hasListeners(LeadEvents::LEAD_POST_MERGE)) {
         $this->dispatcher->dispatch(LeadEvents::LEAD_POST_MERGE, $event);
     }
     //delete the old
     $this->deleteEntity($mergeFrom);
     //return the merged lead
     return $mergeWith;
 }
예제 #4
0
 /**
  * Merge two leads; if a conflict of data occurs, the newest lead will get precedence
  *
  * @param Lead $lead
  * @param Lead $lead2
  */
 public function mergeLeads(Lead $lead, Lead $lead2)
 {
     $leadId = $lead->getId();
     $lead2Id = $lead2->getId();
     //if they are the same lead, then just return one
     if ($leadId === $lead2Id) {
         return $lead;
     }
     //which lead is the oldest?
     $mergeWith = $lead->getDateAdded() < $lead2->getDateAdded() ? $lead : $lead2;
     $mergeFrom = $mergeWith->getId() === $leadId ? $lead2 : $lead;
     //dispatch pre merge event
     $event = new LeadMergeEvent($mergeWith, $mergeFrom);
     if ($this->dispatcher->hasListeners(LeadEvents::LEAD_PRE_MERGE)) {
         $this->dispatcher->dispatch(LeadEvents::LEAD_PRE_MERGE, $event);
     }
     //merge IP addresses
     $ipAddresses = $mergeFrom->getIpAddresses();
     foreach ($ipAddresses as $ip) {
         $mergeWith->addIpAddress($ip);
     }
     //merge fields
     $mergeFromFields = $mergeFrom->getFields();
     foreach ($mergeFromFields as $group => $groupFields) {
         foreach ($groupFields as $alias => $details) {
             //overwrite old lead's data with new lead's if new lead's is not empty
             if (!empty($details['value'])) {
                 $mergeWith->addUpdatedField($alias, $details['value']);
             }
         }
     }
     //merge owner
     $oldOwner = $mergeWith->getOwner();
     $newOwner = $mergeFrom->getOwner();
     if ($oldOwner === null) {
         $mergeWith->setOwner($newOwner);
     }
     //sum points
     $mergeWithPoints = $mergeWith->getPoints();
     $mergeFromPoints = $mergeFrom->getPoints();
     $mergeWith->setPoints($mergeWithPoints + $mergeFromPoints);
     //save the updated lead
     $this->saveEntity($mergeWith, false);
     //post merge events
     if ($this->dispatcher->hasListeners(LeadEvents::LEAD_POST_MERGE)) {
         $this->dispatcher->dispatch(LeadEvents::LEAD_POST_MERGE, $event);
     }
     //delete the old
     $this->deleteEntity($mergeFrom);
     //return the merged lead
     return $mergeWith;
 }