5use \Bitrix\Main\Localization\Loc;
24 $this->
id = self::PROVIDER_ID;
36 'ID' => self::PROVIDER_ID,
37 'CLASS' => self::class,
38 'PROVIDER_NAME' => Loc::getMessage(
'chat_auth_provider'),
39 'NAME' => Loc::getMessage(
'chat_auth_provider_name'),
52 return self::ACCESS_CODE_PREFIX. $chatId;
67 $accessCodePrefix = self::ACCESS_CODE_PREFIX;
68 foreach ($codes as
$code)
70 if (preg_match(
"/^{$accessCodePrefix}([0-9]+)$/i",
$code, $match))
72 $chatIds[] = (int)$match[1];
77 if (
count($chatIds) > 0)
79 $resChatData = \Bitrix\Im\Model\ChatTable::getList([
80 'select' => [
'ID',
'TITLE'],
81 'filter' => [
'=ID' => $chatIds],
83 while ($chat = $resChatData->fetch())
87 'provider' => Loc::getMessage(
'chat_auth_provider'),
89 if (!empty($chat[
'TITLE']))
91 $result[$accessCode][
'name'] = $chat[
'TITLE'];
95 $result[$accessCode][
'name'] = Loc::getMessage(
'chat_auth_title', [
'#CHAT_ID#' => $chat[
'ID']]);
116 $providerId = $helper->forSql($this->
id);
118 DELETE FROM b_user_access
119 WHERE PROVIDER_ID = '{$providerId}' AND USER_ID = {$userId}
135 $userIds = array_filter(array_map(
'intVal', $userIds));
136 if ($chatId > 0 && !empty($userIds))
140 $providerId = $helper->forSql($this->
id);
143 $users = implode(
',', $userIds);
145 $sql = $helper->getInsertIgnore(
147 '(USER_ID, PROVIDER_ID, ACCESS_CODE)',
148 "SELECT ID, '{$providerId}', '{$accessCode}'
150 WHERE ID IN({$users})"
155 foreach ($userIds as
$uid)
157 \CAccess::ClearCache(
$uid);
175 $providerId = $helper->forSql($this->
id);
178 if ($userIds ===
null)
180 $res = \Bitrix\Main\UserAccessTable::getList([
181 'filter' => [
'=ACCESS_CODE' => $accessCode],
182 'select' => [
'USER_ID']
185 while ($row =
$res->fetch())
187 $userIds[] = (int)$row[
'USER_ID'];
191 DELETE FROM b_user_access
192 WHERE PROVIDER_ID = '{$providerId}' AND ACCESS_CODE = '{$accessCode}'
197 $userIds = array_filter(array_map(
'intVal', $userIds));
198 if (
count($userIds) > 0)
200 $users = implode(
',', $userIds);
202 DELETE FROM b_user_access
203 WHERE PROVIDER_ID = '{$providerId}'
204 AND ACCESS_CODE = '{$accessCode}'
205 AND USER_ID IN({$users})
210 foreach ($userIds as
$uid)
212 \CAccess::ClearCache(
$uid);
219 $result = UserAccessTable::query()
220 ->setSelect([
'USER_ID'])
223 ->where(
'PROVIDER_ID', $this->
id)
243 $providerId = $helper->forSql($this->
id);
246 $sql = $helper->getInsertIgnore(
248 '(USER_ID, PROVIDER_ID, ACCESS_CODE)',
249 "SELECT R.USER_ID, '{$providerId}', '{$accessCode}'
251 INNER JOIN b_user U ON R.USER_ID = U.ID
252 LEFT JOIN b_user_access A
254 AND A.PROVIDER_ID = '{$providerId}'
255 AND A.ACCESS_CODE = '{$accessCode}'
257 R.CHAT_ID = {$chatId}
260 WHEN U.EXTERNAL_AUTH_ID = 'imconnector' AND POSITION('livechat|' in U.XML_Id) = 1 THEN 1
261 WHEN U.EXTERNAL_AUTH_ID = 'imconnector' THEN 0
269 DELETE FROM b_user_access
270 WHERE PROVIDER_ID = '{$providerId}'
271 AND ACCESS_CODE = '{$accessCode}'
275 WHERE R.CHAT_ID = {$chatId}
279 $res = \Bitrix\Main\UserAccessTable::getList([
280 'filter' => [
'=ACCESS_CODE' => $accessCode],
281 'select' => [
'USER_ID']
283 while ($row =
$res->fetch())
285 \CAccess::ClearCache($row[
'USER_ID']);
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
generateAccessCode(int $chatId)
updateChatCodesByRelations(int $chatId)
isCodeAlreadyExists(int $chatId, int $userId)
removeUserCode(int $chatId, int $userId)
deleteChatCodes(int $chatId, ?array $userIds=null)
addChatCodes(int $chatId, array $userIds)
addUserCode(int $chatId, int $userId)
static getConnection($name="")
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"