示例#1
0
 /**
  * @param CampaignExecutionEvent $event
  */
 public function onCampaignAction(CampaignExecutionEvent $event)
 {
     $event->setChannel('social.twitter');
     if ($response = $this->helper->sendTweetAction($event->getLead(), $event->getEvent())) {
         $event->setResult($response);
     } else {
         $event->setFailed($this->translator->trans('mautic.social.twitter.error.handle_not_found'));
     }
 }
示例#2
0
 /**
  * @param CampaignExecutionEvent $event
  */
 public function onCampaignTriggerDecision(CampaignExecutionEvent $event)
 {
     $eventDetails = $event->getEventDetails();
     $eventParent = $event->getEvent()['parent'];
     if ($eventDetails == null) {
         return $event->setResult(false);
     }
     //check to see if the parent event is a "send email" event and that it matches the current email opened
     if (!empty($eventParent) && $eventParent['type'] === 'email.send') {
         return $event->setResult($eventDetails->getId() === (int) $eventParent['properties']['email']);
     }
     return $event->setResult(false);
 }
示例#3
0
 /**
  * @param CampaignExecutionEvent $event
  */
 public function onCampaignTriggerActionChangePoints(CampaignExecutionEvent $event)
 {
     if (!$event->checkContext('lead.changepoints')) {
         return;
     }
     $lead = $event->getLead();
     $points = $event->getConfig()['points'];
     $somethingHappened = false;
     if ($lead !== null && !empty($points)) {
         $lead->adjustPoints($points);
         //add a lead point change log
         $log = new PointsChangeLog();
         $log->setDelta($points);
         $log->setLead($lead);
         $log->setType('campaign');
         $log->setEventName("{$event->getEvent()['campaign']['id']}: {$event->getEvent()['campaign']['name']}");
         $log->setActionName("{$event->getEvent()['id']}: {$event->getEvent()['name']}");
         $log->setIpAddress($this->ipLookupHelper->getIpAddress());
         $log->setDateAdded(new \DateTime());
         $lead->addPointsChangeLog($log);
         $this->leadModel->saveEntity($lead);
         $somethingHappened = true;
     }
     return $event->setResult($somethingHappened);
 }
示例#4
0
 /**
  * @param CampaignExecutionEvent $event
  */
 public function onCampaignTriggerAction(CampaignExecutionEvent $event)
 {
     $emailSent = false;
     $lead = $event->getLead();
     $leadCredentials = $lead instanceof Lead ? $lead->getProfileFields() : $lead;
     $leadCredentials['owner_id'] = $lead instanceof Lead && ($owner = $lead->getOwner()) ? $owner->getId() : 0;
     if (!empty($leadCredentials['email'])) {
         $config = $event->getConfig();
         $emailId = (int) $config['email'];
         $email = $this->emailModel->getEntity($emailId);
         $type = isset($config['email_type']) ? $config['email_type'] : 'transactional';
         $options = ['source' => ['campaign.event', $event->getEvent()['id']], 'email_attempts' => isset($config['attempts']) ? $config['attempts'] : 3, 'email_priority' => isset($config['priority']) ? $config['priority'] : 2, 'email_type' => $type];
         $event->setChannel('email', $emailId);
         if ($email != null && $email->isPublished()) {
             // Determine if this email is transactional/marketing
             $stats = [];
             if ('marketing' == $type) {
                 // Determine if this lead has received the email before
                 $leadIds = implode(',', [$leadCredentials['id']]);
                 $stats = $this->emailModel->getStatRepository()->checkContactsSentEmail($leadIds, $emailId);
                 $emailSent = true;
                 // Assume it was sent to prevent the campaign event from getting rescheduled over and over
             }
             if (empty($stats)) {
                 $emailSent = $this->emailModel->sendEmail($email, $leadCredentials, $options);
             }
         } else {
             return $event->setFailed('Email not found or published');
         }
     } else {
         return $event->setFailed('Contact does not have an email');
     }
     return $event->setResult($emailSent);
 }