getEntityManager()->getEntity('EmailQueueItem', $queueItemId); if (!$queueItem) { throw new NotFound(); } $campaign = null; $target = null; $massEmailId = $queueItem->get('massEmailId'); if ($massEmailId) { $massEmail = $this->getEntityManager()->getEntity('MassEmail', $massEmailId); if ($massEmail) { $campaignId = $massEmail->get('campaignId'); if ($campaignId) { $campaign = $this->getEntityManager()->getEntity('Campaign', $campaignId); } $targetType = $queueItem->get('targetType'); $targetId = $queueItem->get('targetId'); if ($targetType && $targetId) { $target = $this->getEntityManager()->getEntity($targetType, $targetId); $link = null; $m = array( 'Account' => 'accounts', 'Contact' => 'contacts', 'Lead' => 'leads', 'User' => 'users' ); if (!empty($m[$target->getEntityType()])) { $link = $m[$target->getEntityType()]; } if ($link) { if ($campaign) { $targetListList = $campaign->get('targetLists'); } else { $targetListList = $massEmail->get('targetLists'); } foreach ($targetListList as $targetList) { $this->getEntityManager()->getRepository('TargetList')->updateRelation($targetList, $link, $target->id, array( 'optedOut' => true )); } echo $this->getLanguage()->translate('unsubscribed', 'messages', 'Campaign'); } } } } if ($campaign && $target) { $campaignService = $this->getServiceFactory()->create('Campaign'); $campaignService->logOptedOut($campaignId, $queueItemId, $target, $queueItem->get('emailAddress')); } } }