public function testRun() { $count = ExternalApiEmailMessageActivity::getCount(); $this->assertEquals(0, $count); $job = new SendGridTestEmailEventsJob(); $this->assertTrue($job->run()); $activities = ExternalApiEmailMessageActivity::getAll(); $this->assertEquals(3, count($activities)); $this->assertEquals("550 No Such User Here", trim($activities[0]->reason)); $this->assertEquals("Bounced Address", trim($activities[1]->reason)); $this->assertEquals("Marked as spam", $activities[2]->reason); }
public function testGetCountByTypeAndEmailMessageActivity() { // setup pre-req data $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 01', 'description 01', 'fromName 01', '*****@*****.**'); $campaign = CampaignTestHelper::createCampaign('campaign 01', 'subject 01', 'text Content 01', 'html Content 01', 'fromName 01', '*****@*****.**', null, null, null, null, $marketingList); $processed = 0; $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact); $modelId = $campaignItem->id; $modelType = get_class($campaignItem); $personId = $contact->getClassId('Person'); $this->assertNotNull($personId); $activityData = array('modelId' => $campaignItem->id, 'modelType' => 'CampaignItem', 'personId' => $personId, 'url' => null, 'type' => CampaignItemActivity::TYPE_OPEN); $activityCreatedOrUpdated = CampaignItemActivityUtil::createOrUpdateActivity($activityData); $emailMessageActivities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl(CampaignItemActivity::TYPE_OPEN, $campaignItem->id, $personId, null); $externalMessageActivityCount = ExternalApiEmailMessageActivity::getByTypeAndEmailMessageActivity(CampaignItemActivity::TYPE_OPEN, $emailMessageActivities[0], "sendgrid"); $this->assertEquals(0, $externalMessageActivityCount); $externalApiEmailMessageActivity = new ExternalApiEmailMessageActivity(); $externalApiEmailMessageActivity->emailMessageActivity = $emailMessageActivities[0]; $externalApiEmailMessageActivity->api = 'sendgrid'; $externalApiEmailMessageActivity->type = CampaignItemActivity::TYPE_OPEN; $externalApiEmailMessageActivity->reason = 'Test reason'; $externalApiEmailMessageActivity->emailAddress = '*****@*****.**'; $externalApiEmailMessageActivity->itemClass = 'CampaignItem'; $externalApiEmailMessageActivity->itemId = $campaignItem->id; $this->assertTrue($externalApiEmailMessageActivity->save()); $id = $externalApiEmailMessageActivity->id; $externalMessageActivityCount = ExternalApiEmailMessageActivity::getByTypeAndEmailMessageActivity(CampaignItemActivity::TYPE_OPEN, $emailMessageActivities[0], "sendgrid"); $this->assertEquals(1, $externalMessageActivityCount); $externalApiActivity = ExternalApiEmailMessageActivity::getById($id); $externalApiActivity->reason = 'New reason 1'; $this->assertTrue($externalApiActivity->save()); $externalApiActivity = ExternalApiEmailMessageActivity::getById($id); $this->assertEquals('New reason 1', $externalApiActivity->reason); $activities = ExternalApiEmailMessageActivity::getByEmailAddress('*****@*****.**', "sendgrid", false); $this->assertEquals(1, count($activities)); $this->assertEquals('New reason 1', $activities[0]->reason); }
/** * Resolve content for sendgrid bounce or spam email activity. * @param CampaignItem $campaignItem * @param int $type * @return string */ protected static function resolveContentForSendGridBounceOrSpamEventActivity(CampaignItem $campaignItem, $type) { $typesArray = CampaignItemActivity::getTypesArray(); $campaignItemActivities = CampaignItemActivity::getByTypeAndModelIdAndPersonIdAndUrl($type, $campaignItem->id, $campaignItem->contact->getClassId('Person'), null, 'latestDateTime'); $content = null; foreach ($campaignItemActivities as $campaignItemActivity) { $externalMessageActivities = ExternalApiEmailMessageActivity::getByEmailMessageActivity($campaignItemActivity, "sendgrid", false); foreach ($externalMessageActivities as $externalMessageActivity) { $content .= '<tr>'; $content .= '<td>' . $typesArray[$externalMessageActivity->type] . '</td>'; $content .= '<td>' . DateTimeUtil::convertDbFormattedDateTimeToLocaleFormattedDisplay($campaignItemActivity->latestDateTime) . '</td>'; $content .= '<td>' . $campaignItemActivity->quantity . '</td>'; $content .= '<td>' . $campaignItemActivity->latestSourceIP . '</td>'; $content .= '<td></td>'; $content .= '</tr>'; } } return $content; }
/** * Renders email address stage based on last email activity * @param String $emailAddress * @param RedBeanModel $model * @return string $content */ public static function renderEmailAddressState($emailAddress, RedBeanModel $model) { assert('is_string($emailAddress) || $emailAddress == null'); if ($emailAddress == null) { return; } $records = ExternalApiEmailMessageActivity::resolveAndGetByEmailAddress($emailAddress, 'sendgrid'); if (!empty($records)) { $record = $records[0]; if ($record->type == EmailMessageActivity::TYPE_BOUNCE || $record->type == EmailMessageActivity::TYPE_HARD_BOUNCE || $record->type == EmailMessageActivity::TYPE_SOFT_BOUNCE) { $tooltipTitle = $record->reason; $tooltip = '<span id="last-email-activity-status-tooltip" class="tooltip" title="' . $tooltipTitle . '">?</span>'; $content = '<i>●</i><span>' . Zurmo::t('MarketingModule', 'Bounced') . '</span>' . $tooltip; $content = ZurmoHtml::tag('div', array('class' => 'email-recipient-stage-status stage-false'), $content); $content = ZurmoHtml::tag('div', array('class' => 'clearfix'), $content); $content = ZurmoHtml::tag('div', array('class' => 'continuum', 'id' => 'bouncedcontact'), $content); } if ($record->type == EmailMessageActivity::TYPE_SPAM) { $tooltipTitle = $record->reason; $tooltip = '<span id="last-email-activity-status-tooltip" class="tooltip" title="' . $tooltipTitle . '">?</span>'; $content = '<i>●</i><span>' . Zurmo::t('MarketingModule', 'Spam') . '</span>' . $tooltip; $content = ZurmoHtml::tag('div', array('class' => 'email-recipient-stage-status queued'), $content); $content = ZurmoHtml::tag('div', array('class' => 'clearfix'), $content); $content = ZurmoHtml::tag('div', array('class' => 'continuum', 'id' => 'spammedcontact'), $content); } $qtip = new ZurmoTip(); $qtip->addQTip("#last-email-activity-status-tooltip"); $content = ZurmoHtml::tag('div', array('class' => 'last-email-activity-status'), $content); return $content; } return null; }
/** * Process actiity information. * @param array $value */ protected function processActivityInformation($value) { $type = $this->getActivityTypeByEvent($value); $activityClassName = EmailMessageActivityUtil::resolveModelClassNameByModelType($value['itemClass']); $activityUtilClassName = $activityClassName . 'Util'; $activityData = array('modelId' => $value['itemId'], 'modelType' => $value['itemClass'], 'personId' => $value['personId'], 'url' => null, 'type' => $type); if ($activityUtilClassName::createOrUpdateActivity($activityData)) { //$activityClassName = CampaignItemActivity $emailMessageActivities = $activityClassName::getByTypeAndModelIdAndPersonIdAndUrl($type, $value['itemId'], $value['personId'], null); self::resolveAndUpdateEventInformationByStatus($value); $externalMessageActivityCount = ExternalApiEmailMessageActivity::getByTypeAndEmailMessageActivity($value['type'], $emailMessageActivities[0], "sendgrid"); if ($externalMessageActivityCount == 0) { $this->saveExternalApiEmailMessageActivity($emailMessageActivities[0], $value); } } }