getContainer()->get('hookManager'); } public function run() { if (empty($_GET['id'])) { throw new BadRequest(); } $queueItemId = $_GET['id']; $queueItem = $this->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); if ($massEmail->get('optOutEntirely')) { $emailAddress = $target->get('emailAddress'); if ($emailAddress) { $ea = $this->getEntityManager()->getRepository('EmailAddress')->getByAddress($emailAddress); if ($ea) { $ea->set('optOut', true); $this->getEntityManager()->saveEntity($ea); } } } $link = null; $m = array( 'Account' => 'accounts', 'Contact' => 'contacts', 'Lead' => 'leads', 'User' => 'users' ); if (!empty($m[$target->getEntityType()])) { $link = $m[$target->getEntityType()]; } if ($link) { $targetListList = $massEmail->get('targetLists'); foreach ($targetListList as $targetList) { $optedOutResult = $this->getEntityManager()->getRepository('TargetList')->updateRelation($targetList, $link, $target->id, array( 'optedOut' => true )); if ($optedOutResult) { $hookData = [ 'link' => $link, 'targetId' => $targetId, 'targetType' => $targetType ]; $this->getHookManager()->process('TargetList', 'afterOptOut', $targetList, [], $hookData); } } $data = [ 'queueItemId' => $queueItemId ]; $runScript = " Espo.require('crm:controllers/unsubscribe', function (Controller) { var controller = new Controller(app.baseController.params, app.getControllerInjection()); controller.masterView = app.masterView; controller.doAction('unsubscribe', ".json_encode($data)."); }); "; $this->getClientManager()->display($runScript); } } } } if ($campaign && $target) { $campaignService = $this->getServiceFactory()->create('Campaign'); $campaignService->logOptedOut($campaignId, $queueItemId, $target, $queueItem->get('emailAddress'), null, $queueItem->get('isTest')); } } }