/**
	 * _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;
	}