- Модуль: mail
- Путь к файлу: ~/bitrix/modules/mail/lib/internals/mailcontact.php
- Класс: BitrixMailInternalsMailContactTable
- Вызов: MailContactTable::addContactsBatch
static function addContactsBatch($contactsData)
{
if (empty($contactsData))
{
return true;
}
$contactsToCheck = [];
foreach ($contactsData as $index => $item)
{
$item['EMAIL'] = trim($item['EMAIL']);
$contactsToCheck[$item['USER_ID']][] = $item;
}
$alreadyAdded = [];
foreach ($contactsToCheck as $userId => $items)
{
$alreadyAdded = static::query()
->addSelect('EMAIL', 'EMAIL')
->addSelect('ID', 'ID')
->addSelect('NAME', 'NAME')
->where('USER_ID', $userId)
->whereIn('EMAIL', array_column($items, 'EMAIL'))
->exec()
->fetchAll();
$alreadyAddedEmail = array_column($alreadyAdded, 'EMAIL');
foreach ($items as $item)
{
if (!in_array($item['EMAIL'], $alreadyAddedEmail, true))
{
$contactsToAdd[$item['EMAIL']] = $item;
}
}
}
if (empty($contactsToAdd))
{
return $alreadyAdded;
}
$sqlHelper = Application::getConnection()->getSqlHelper();
$values = [];
foreach ($contactsToAdd as $item)
{
$item = [
'USER_ID' => intval($item['USER_ID']),
'NAME' => "'" . $sqlHelper->forSql(trim($item['NAME'])) . "'",
'ICON' => "'" . $sqlHelper->forSql(serialize($item['ICON'])) . "'",
'EMAIL' => "'" . $sqlHelper->forSql(trim($item['EMAIL'])) . "'",
'ADDED_FROM' => "'" . $sqlHelper->forSql($item['ADDED_FROM']) . "'",
];
$values[] = implode(", ", $item);
}
$keys = implode(', ', array_keys(reset($contactsToAdd)));
$values = implode('), (', $values);
$tableName = static::getTableName();
$sql = $sqlHelper->getInsertIgnore($tableName, "($keys)", " VALUES($values)");
Application::getConnection()->query($sql);
return true;
}