/** * @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')); } }
/** * @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); }
/** * @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); }
/** * @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); }