86 if (empty($contactsData))
91 static $checkedUserEmails = [];
93 $contactsToCheck = [];
95 foreach ($contactsData as $item)
97 $item[
'EMAIL'] = trim($item[
'EMAIL']);
98 $contactsToCheck[$item[
'USER_ID']][] = $item;
106 if (!isset($checkedUserEmails[
$userId]))
108 $checkedUserEmails[
$userId] = [];
111 $emailsToCheck = array_diff(array_column(
$items,
'EMAIL'), $checkedUserEmails[
$userId]);
113 if (!empty($emailsToCheck))
115 $alreadyAdded = static::query()
116 ->addSelect(
'EMAIL',
'EMAIL')
117 ->addSelect(
'ID',
'ID')
118 ->addSelect(
'NAME',
'NAME')
120 ->whereIn(
'EMAIL', $emailsToCheck)
125 $alreadyAddedEmail = array_merge(array_column($alreadyAdded,
'EMAIL'), $checkedUserEmails[
$userId]);
126 $checkedUserEmails[
$userId] = array_merge($checkedUserEmails[
$userId], $emailsToCheck);
130 if (!in_array($item[
'EMAIL'], $alreadyAddedEmail,
true))
132 $contactsToAdd[$item[
'EMAIL']] = $item;
137 if (empty($contactsToAdd))
140 'All contacts have already been added to the database',
141 'ALL_CONTACTS_ALREADY_ADDED',
143 'lastFound' => $alreadyAdded,
150 $sqlHelper = Application::getConnection()->getSqlHelper();
153 foreach ($contactsToAdd as $item)
156 'USER_ID' => intval($item[
'USER_ID']),
157 'NAME' =>
"'" . $sqlHelper->forSql(trim($item[
'NAME'])) .
"'",
158 'ICON' => $item[
'ICON'] !==
null ?
"'" . $sqlHelper->forSql(serialize($item[
'ICON'])) .
"'" :
"''",
159 'EMAIL' =>
"'" . $sqlHelper->forSql(trim($item[
'EMAIL'])) .
"'",
160 'ADDED_FROM' =>
"'" . $sqlHelper->forSql($item[
'ADDED_FROM']) .
"'",
162 $values[] = implode(
", ", $item);
165 $values = implode(
'), (', $values);
167 $tableName = static::getTableName();
169 Application::getConnection()->query($sqlHelper->getInsertIgnore($tableName,
"(USER_ID, NAME, ICON, EMAIL, ADDED_FROM)",
" VALUES($values)"));