- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/contact.php
- Класс: BitrixSenderContactTable
- Вызов: ContactTable::addFromConnector
static function addFromConnector(ConnectorBase $connector, ?int $pageNumber = null, int $timeout = 0): array
{
$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 ($row = $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' => $row['EMAIL'])
));
if($contactRow = $contactDb->fetch())
{
$id = $contactRow['ID'];
$countUpdated++;
}
else
{
$resultAdd = static::add(array(
'NAME' => $row['NAME'],
'EMAIL' => $row['EMAIL'],
'USER_ID' => $row['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,
);
}