public static function processDueItem(OwnedModel $item)
 {
     assert('is_object($item)');
     $itemId = $item->id;
     $itemClass = get_class($item);
     assert('$itemClass === "AutoresponderItem" || $itemClass === "CampaignItem"');
     $contact = $item->contact;
     if (empty($contact) || $contact->id < 0) {
         throw new NotFoundException();
     }
     $ownerModelRelationName = static::resolveItemOwnerModelRelationName($itemClass);
     $itemOwnerModel = $item->{$ownerModelRelationName};
     assert('is_object($itemOwnerModel)');
     assert('get_class($itemOwnerModel) === "Autoresponder" || get_class($itemOwnerModel) === "Campaign"');
     if ($contact->primaryEmail->optOut || get_class($itemOwnerModel) === "Campaign" && MarketingListMember::getByMarketingListIdContactIdAndSubscribed($itemOwnerModel->marketingList->id, $contact->id, true) != false) {
         $activityClass = $itemClass . 'Activity';
         $personId = $contact->getClassId('Person');
         $type = $activityClass::TYPE_SKIP;
         $activityClass::createNewActivity($type, $itemId, $personId);
     } else {
         $marketingList = $itemOwnerModel->marketingList;
         assert('is_object($marketingList)');
         assert('get_class($marketingList) === "MarketingList"');
         $textContent = $itemOwnerModel->textContent;
         $htmlContent = null;
         if ($itemClass == 'CampaignItem' && $itemOwnerModel->supportsRichText || $itemClass == 'AutoresponderItem') {
             $htmlContent = $itemOwnerModel->htmlContent;
         }
         static::resolveContent($textContent, $htmlContent, $contact, $itemOwnerModel->enableTracking, (int) $itemId, $itemClass, (int) $marketingList->id);
         try {
             $item->emailMessage = static::resolveEmailMessage($textContent, $htmlContent, $itemOwnerModel, $contact, $marketingList, $itemId, $itemClass);
         } catch (MissingRecipientsForEmailMessageException $e) {
             // TODO: @Shoaibi/@Jason: Medium: Do something about it.
         }
     }
     static::markItemAsProcessed($item);
 }
 /**
  * @depends testOptOutAction
  */
 public function testSubscribeActionAfterOptOutActionDisableOptOut()
 {
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $marketingList = MarketingList::getByName('marketingList 04');
     $this->assertNotEmpty($marketingList);
     $marketingList = $marketingList[0];
     $marketingListId = $marketingList->id;
     $contact = Contact::getByName('contact 05 contact 05son');
     $this->assertNotEmpty($contact);
     $contact = $contact[0];
     $this->assertEquals(1, $contact->primaryEmail->optOut);
     $personId = $contact->getClassId('Person');
     $member = MarketingListMember::getByMarketingListIdContactIdAndSubscribed($marketingList->id, $contact->id, 1);
     $this->assertNotEmpty($member);
     Yii::app()->user->userModel = null;
     $hash = EmailMessageActivityUtil::resolveHashForUnsubscribeAndManageSubscriptionsUrls($personId, $marketingListId, 1, 'AutoresponderItem', false);
     $this->setGetArray(array('hash' => $hash));
     @$this->runControllerWithRedirectExceptionAndGetUrl($this->subscribeUrl);
     $content = $this->runControllerWithNoExceptionsAndGetContent($this->manageSubscriptionsUrl);
     $this->assertTrue(strpos($content, '<td>marketingList 01</td>') !== false);
     $this->assertTrue(strpos($content, '<td>marketingList 03</td>') !== false);
     $this->assertTrue(strpos($content, 'marketingLists/external/subscribe?hash=') !== false);
     $this->assertTrue(strpos($content, 'id="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_') !== false);
     $this->assertTrue(strpos($content, 'id="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_') !== false);
     $this->assertTrue(strpos($content, 'type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_') !== false);
     $this->assertTrue(strpos($content, 'id="marketingListsManageSubscriptionListView-toggleUnsubscribed_' . $marketingListId . '_0" checked="checked" type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_' . $marketingListId) !== false);
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $contact = Contact::getByName('contact 05 contact 05son');
     $this->assertNotEmpty($contact);
     $contact = $contact[0];
     $this->assertEquals(0, $contact->primaryEmail->optOut);
 }
 protected function resolveMembers($unsubscribed, Contact $contact, $marketingListId, $optOut)
 {
     if ($optOut) {
         $members = MarketingListMember::getByContactIdAndSubscribed($contact->id, $unsubscribed);
     } else {
         $members = MarketingListMember::getByMarketingListIdContactIdAndSubscribed($marketingListId, $contact->id, $unsubscribed);
     }
     if (!is_array($members) && $members !== false) {
         $members = array($members);
     }
     if (empty($members)) {
         $marketingList = MarketingList::getById(intval($marketingListId));
         if ($unsubscribed === 1 && !empty($marketingList) && $marketingList->anyoneCanSubscribe && !$marketingList->memberAlreadyExists($contact->id)) {
             $members[0] = new MarketingListMember();
             $members[0]->contact = $contact;
             $members[0]->marketingList = $marketingList;
         } else {
             return false;
         }
     }
     return $members;
 }