1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
mailcontact.php
См. документацию.
1<?php
2
3namespace Bitrix\Mail\Internals;
4
5use Bitrix\Main\Application;
6use Bitrix\Main\Entity;
7use Bitrix\Main\Localization;
8use Bitrix\Main;
9
11
30{
31 const ADDED_TYPE_FROM = 'FROM';
32 const ADDED_TYPE_CC = 'CC';
33 const ADDED_TYPE_BCC = 'BCC';
34 const ADDED_TYPE_TO = 'TO';
35 const ADDED_TYPE_REPLY_TO = 'REPLY_TO';
36
37 public static function getFilePath()
38 {
39 return __FILE__;
40 }
41
42 public static function getTableName()
43 {
44 return 'b_mail_contact';
45 }
46
47 public static function getMap()
48 {
49 return [
50 'ID' => [
51 'data_type' => 'integer',
52 'primary' => true,
53 'autocomplete' => true,
54 ],
55 'EMAIL' => [
56 'data_type' => 'string',
57 ],
58 'NAME' => [
59 'data_type' => 'string',
60 ],
61 'ICON' => [
62 'data_type' => 'string',
63 'serialized' => true,
64 ],
65 'FILE_ID' => [
66 'data_type' => 'integer',
67 ],
68 'USER_ID' => [
69 'data_type' => 'integer',
70 'required' => true,
71 ],
72 'ADDED_FROM' => [
73 'data_type' => 'string',
74 ],
75 ];
76 }
77
82 public static function addContactsBatch($contactsData): Main\Result
83 {
84 $result = new Main\Result();
85
86 if (empty($contactsData))
87 {
88 return $result;
89 }
90
91 static $checkedUserEmails = [];
92
93 $contactsToCheck = [];
94
95 foreach ($contactsData as $item)
96 {
97 $item['EMAIL'] = trim($item['EMAIL']);
98 $contactsToCheck[$item['USER_ID']][] = $item;
99 }
100
101 $alreadyAdded = [];
102 $contactsToAdd = [];
103
104 foreach ($contactsToCheck as $userId => $items)
105 {
106 if (!isset($checkedUserEmails[$userId]))
107 {
108 $checkedUserEmails[$userId] = [];
109 }
110
111 $emailsToCheck = array_diff(array_column($items, 'EMAIL'), $checkedUserEmails[$userId]);
112
113 if (!empty($emailsToCheck))
114 {
115 $alreadyAdded = static::query()
116 ->addSelect('EMAIL', 'EMAIL')
117 ->addSelect('ID', 'ID')
118 ->addSelect('NAME', 'NAME')
119 ->where('USER_ID', $userId)
120 ->whereIn('EMAIL', $emailsToCheck)
121 ->exec()
122 ->fetchAll();
123 }
124
125 $alreadyAddedEmail = array_merge(array_column($alreadyAdded, 'EMAIL'), $checkedUserEmails[$userId]);
126 $checkedUserEmails[$userId] = array_merge($checkedUserEmails[$userId], $emailsToCheck);
127
128 foreach ($items as $item)
129 {
130 if (!in_array($item['EMAIL'], $alreadyAddedEmail, true))
131 {
132 $contactsToAdd[$item['EMAIL']] = $item;
133 }
134 }
135 }
136
137 if (empty($contactsToAdd))
138 {
139 $result->addError(new Main\Error(
140 'All contacts have already been added to the database',
141 'ALL_CONTACTS_ALREADY_ADDED',
142 [
143 'lastFound' => $alreadyAdded,
144 ]
145 ));
146
147 return $result;
148 }
149
150 $sqlHelper = Application::getConnection()->getSqlHelper();
151 $values = [];
152
153 foreach ($contactsToAdd as $item)
154 {
155 $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']) . "'",
161 ];
162 $values[] = implode(", ", $item);
163 }
164
165 $values = implode('), (', $values);
166
167 $tableName = static::getTableName();
168
169 Application::getConnection()->query($sqlHelper->getInsertIgnore($tableName, "(USER_ID, NAME, ICON, EMAIL, ADDED_FROM)", " VALUES($values)"));
170
171 return $result;
172 }
173
179 public static function getContactByEmail(string $email, int $userId): array
180 {
181 $contact = [
182 'NAME' => '',
183 'ID' => 0,
184 ];
185
186 $email = trim(mb_strtolower($email));
187
188 if (!check_email($email))
189 {
190 return $contact;
191 }
192
193 $contactResult = self::getList(
194 [
195 'select' => [
196 'ID',
197 'NAME',
198 ],
199 'filter' => [
200 '=USER_ID' => $userId,
201 '=EMAIL' => $email,
202 ],
203 ]
204 )->fetch();
205
206 if (isset($contactResult['ID']))
207 {
208 $contact = [
209 'NAME' => $contactResult['NAME'],
210 'ID' => (int) $contactResult['ID'],
211 ];
212 }
213
214 return $contact;
215 }
216}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static getContactByEmail(string $email, int $userId)
Определения mailcontact.php:179
static addContactsBatch($contactsData)
Определения mailcontact.php:82
Определения result.php:20
Определения error.php:15
static loadMessages($file)
Определения loc.php:65
static getList(array $parameters=array())
Определения datamanager.php:431
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
check_email($email, $strict=false, $domainCheck=false)
Определения tools.php:4571
$email
Определения payment.php:49
$items
Определения template.php:224