/** * _ProcessJob_RemoveList * Add subscriber to another list(s) * * This function will return an associative array with the following value: * - error => Boolean => Indicates whether or not the function is successful * - halt => Boolean => Indicates whether or not to halt the operation * * @param Array $queue Queue record * @param Array $trigger Trigger record * @param Integer $subscriberid Subscriber ID to be copied to another list * @return Array Returns an array of the status (see comment above) */ private function _ProcessJob_AddList($queueid, $trigger, $subscriberid) { $return = array( 'error' => true, 'halt' => false ); $subscriberapi = new Subscribers_API(); $listapi = new Lists_API(); $subscriber_record = $subscriberapi->LoadSubscriberList($subscriberid); if(empty($subscriber_record)){ trigger_error("Cannot check database for particular subscriber ({$subscriberid})"); $this->_log("Cannot check database for particular subscriber ({$subscriberid})"); $return['halt'] = true; $return['error'] = true; return $return; } $subscriber_customfields = (isset($subscriber_record['CustomFields']) && is_array($subscriber_record['CustomFields'])) ? $subscriber_record['CustomFields'] : array(); $lists = $trigger['triggeractions']['addlist']['listid']; if (!is_array($lists)) { $lists = array($lists); } $this->Db->StartTransaction(); foreach ($lists as $list) { if ($list == $subscriber_record['listid']) { continue; } $duplicate = $subscriberapi->IsSubscriberOnList($subscriber_record['emailaddress'], $list); if ($duplicate) { $unsubscribed_check = $subscriberapi->IsUnSubscriber(false, $list, $duplicate); if ($unsubscribed_check) { $this->_log('Cannot add contact to this list: Is already in the list as unsubscriber'); } else { $this->_log('Cannot add contact to this list: Is already in the list'); } continue; } list($banned, $msg) = $subscriberapi->IsBannedSubscriber($subscriber_record['emailaddress'], $list, false); if ($banned) { $this->_log('Cannot add contact to this list: Email is banned to be added to the list'); continue; } // ----- Save subscriber and custom fields $this->Db->StartTransaction(); $subscriberapi->confirmcode = false; $subscriberapi->confirmed = $subscriber_record['confirmed']; $subscriberapi->confirmdate = 0; $subscriberid = $subscriberapi->AddToList($subscriber_record['emailaddress'], $list); if (!$subscriberid) { $this->Db->RollbackTransaction(); $this->_log('Cannot add contact to this list: API returned FALSE value'); continue; } $ListCustomFields = $listapi->GetCustomFields($list); $allfieldok = true; if (!empty($ListCustomFields)) { $transferred = array(); if (!empty($subscriber_customfields)) { // Match custom field foreach ($subscriber_customfields as $field) { // Found an exact match if (array_key_exists($field['fieldid'], $lists)) { $subscriberapi->SaveSubscriberCustomField($subscriberid, $field['fieldid'], $field['data']); $transferred[] = $field['fieldid']; continue; } // Check if there are any "name" and "type" match foreach ($ListCustomFields as $fieldid => $listfield) { if ((strtolower($listfield['name']) == strtolower($field['fieldname'])) && ($listfield['fieldtype'] == $field['fieldtype'])) { $subscriberapi->SaveSubscriberCustomField($subscriberid, $fieldid, $field['data']); $transferred[] = $field['fieldid']; continue; } } } } // Check if list required fields are all added in $allfieldok = true; foreach ($ListCustomFields as $fieldid => $field) { if ($field['required'] && !in_array($fieldid, $transferred)) { $allfieldok = false; break; } } } if ($allfieldok) { $this->Db->CommitTransaction(); } else { $this->_log('Cannot add contact to this list: Not all of the required custom fields are available to copied across'); $this->Db->RollbackTransaction(); continue; } // ----- } $this->Db->CommitTransaction(); // Record log if (!$this->RecordLogActions($trigger['triggeremailsid'], $subscriberid, 'addlist')) { $this->_log('Cannot write log to the database...'); } $return['error'] = false; return $return; }