/** @return bool */ protected final function filterConnectorData() { $result = true; $endpoint = $this->getConnector(); if (is_array($endpoint) && !empty($endpoint['CODE'])) { // do not send mails if connector will not found $result = false; // try to find connector $connector = ConnectorManager::getConnector($endpoint); $this->connector = $connector; } elseif (is_object($endpoint) && $endpoint instanceof Connector) { $this->connector = $endpoint; } if ($this->connector) { // merge connector filter and proxy fields. proxy fields have priority $connectorFields = $this->getProxyFieldsFromEventToConnector(); if (!empty($connectorFields)) { $connectorFields = $connectorFields + $this->getFields(); } // set fields to connector $this->connector->setFieldValues($connectorFields); $result = false; // add recipient from data if connector get it $recipientDb = $this->connector->getData(); if ($recipient = $recipientDb->Fetch()) { $this->recipient = $recipient; $result = true; } } return $result; }
/** * @return \Bitrix\Sender\ConnectorResult */ public function getRecipientResult() { $result = parent::getRecipientResult(); if (!$this->connector) { return $result; } $personalizeList = array(); $connectorPersonalizeList = $this->connector->getPersonalizeList(); foreach ($connectorPersonalizeList as $tag) { if (strlen($tag['CODE']) > 0) { $personalizeList[] = $tag['CODE']; } } $result->setFilterFields(array_merge($result->getFilterFields(), $personalizeList)); return $result; }
/** * @param Connector $connector * @param null $pageNumber * @param int $timeout * @return array * @throws \Bitrix\Main\ArgumentException */ public static function addFromConnector(Connector $connector, $pageNumber = null, $timeout = 0) { $startTime = getmicrotime(); $withoutNav = empty($pageNumber); $result = false; $onlyOneLoop = false; $rowsInPage = 5; $countAll = 0; $countProcessed = 0; $countUpdated = 0; $countAdded = 0; $countError = 0; $dataDb = $connector->getResult(); if ($dataDb->resourceCDBResult) { $dataDb = $dataDb->resourceCDBResult; } elseif ($dataDb->resource) { $dataDb = new \CDBResult($dataDb->resource); } else { $dataDb = new \CDBResult(); $dataDb->InitFromArray(array()); } if (!is_subclass_of($dataDb, 'CDBResultMysql')) { $rowsInPage = 50; $onlyOneLoop = true; } while ($timeout == 0 || getmicrotime() - $startTime < $timeout) { if (!$withoutNav) { $dataDb->NavStart($rowsInPage, false, $pageNumber); $countAll = $dataDb->SelectedRowsCount(); } $listId = null; while ($arData = $dataDb->Fetch()) { if ($withoutNav) { $countAll++; } $countProcessed++; if (!$listId) { $listId = ListTable::addIfNotExist($connector->getModuleId() . '_' . $connector->getCode(), Loc::getMessage('CONTACT_PULL_LIST_PREFIX') . $connector->getName()); } $id = null; $contactDb = ContactTable::getList(array('select' => array('ID'), 'filter' => array('EMAIL' => $arData['EMAIL']))); if ($arContact = $contactDb->fetch()) { $id = $arContact['ID']; $countUpdated++; } else { $resultAdd = static::add(array('NAME' => $arData['NAME'], 'EMAIL' => $arData['EMAIL'], 'USER_ID' => $arData['USER_ID'])); if ($resultAdd->isSuccess()) { $id = $resultAdd->getId(); $countAdded++; } else { $countError++; } } if ($id) { ContactListTable::addIfNotExist($id, $listId); } } if ($withoutNav) { $result = false; break; } if ($dataDb->NavPageCount <= $pageNumber) { $result = false; break; } else { $pageNumber++; $result = $pageNumber; } if ($onlyOneLoop) { break; } } if ($withoutNav) { $countProgress = $countAll; } else { $countProgress = ($pageNumber - 1) * $dataDb->NavPageSize; if (!$result || $countProgress > $countAll) { $countProgress = $countAll; } } return array('STATUS' => $result, 'COUNT_ALL' => $countAll, 'COUNT_PROGRESS' => $countProgress, 'COUNT_PROCESSED' => $countProcessed, 'COUNT_NEW' => $countAdded, 'COUNT_ERROR' => $countError); }