1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
alias.php
См. документацию.
1<?php
2namespace Bitrix\Im;
3
4use Bitrix\Im\Model\AliasTable;
5use Bitrix\Main\Result;
6use Bitrix\Main\Type\DateTime;
7
8class Alias
9{
10 const ENTITY_TYPE_USER = 'USER';
11 const ENTITY_TYPE_CHAT = 'CHAT';
12 const ENTITY_TYPE_OPEN_LINE = 'LINES';
13 const ENTITY_TYPE_LIVECHAT = 'LIVECHAT';
14 const ENTITY_TYPE_VIDEOCONF = 'VIDEOCONF';
15 const ENTITY_TYPE_OTHER = 'OTHER';
16
17 const CACHE_TTL = 31536000;
18 const CACHE_PATH = '/bx/im/alias/';
19
20 const FILTER_BY_ALIAS = 'alias';
21 const FILTER_BY_ID = 'id';
22
23 public static function add(array $fields)
24 {
25 $alias = self::prepareAlias($fields['ALIAS']);
26 $entityType = $fields['ENTITY_TYPE'];
27 $entityId = $fields['ENTITY_ID'];
28
29 if (
30 ($fields['ENTITY_TYPE'] !== self::ENTITY_TYPE_VIDEOCONF && empty($entityId))
31 || empty($entityType)
32 || empty($alias))
33 {
34 return false;
35 }
36
37 $aliasData = self::get($alias);
38 if ($aliasData)
39 return false;
40
41 $result = \Bitrix\Im\Model\AliasTable::add(Array(
42 'ALIAS' => $alias,
43 'ENTITY_TYPE' => $entityType,
44 'ENTITY_ID' => $entityId,
45 'DATE_CREATE' => new DateTime()
46 ));
47 if (!$result->isSuccess())
48 {
49 return false;
50 }
51
52 self::cleanChatCache($entityType, (int)$entityId);
53
54 return $result->getId();
55 }
56
57 public static function addUnique(array $fields)
58 {
59 $alias = \Bitrix\Im\Alias::prepareAlias(self::generateUnique());
60 $fields['ALIAS'] = $alias;
61
62 $id = self::add($fields);
63 if (!$id)
64 {
66 }
67
68 return Array(
69 'ID' => $id,
70 'ALIAS' => $alias,
71 'LINK' => self::getPublicLink($fields['ENTITY_TYPE'], $alias)
72 );
73 }
74
75 public static function update($id, $fields)
76 {
77 $id = intval($id);
78 if ($id <= 0)
79 return false;
80
81 $update = Array();
82 if (isset($fields['ALIAS']))
83 {
84 $update['ALIAS'] = self::prepareAlias($fields['ALIAS']);
85 $result = self::get($update['ALIAS']);
86 if ($result)
87 {
88 return false;
89 }
90 }
91
92 if (isset($fields['ENTITY_TYPE']))
93 {
94 $update['ENTITY_TYPE'] = $fields['ENTITY_TYPE'];
95 }
96 if (isset($fields['ENTITY_ID']))
97 {
98 $update['ENTITY_ID'] = $fields['ENTITY_ID'];
99 }
100
101 if (empty($update))
102 return false;
103
104 $oldRecord = AliasTable::getByPrimary($id)->fetch();
105 \Bitrix\Im\Model\AliasTable::update($id, $update);
106 if ((int)$oldRecord['ENTITY_ID'] !== 0)
107 {
108 self::cleanChatCache($oldRecord['ENTITY_TYPE'], (int)$oldRecord['ENTITY_ID']);
109 }
110 if (
111 isset($fields['ENTITY_TYPE'], $fields['ENTITY_ID'])
112 && (int)$fields['ENTITY_ID'] !== (int)$oldRecord['ENTITY_ID']
113 && (int)$fields['ENTITY_ID'] !== 0
114 )
115 {
116 self::cleanChatCache($fields['ENTITY_TYPE'], (int)$fields['ENTITY_ID']);
117 }
118
119 return true;
120 }
121
122 public static function delete($id, $filter = self::FILTER_BY_ID)
123 {
124 if ($filter == self::FILTER_BY_ALIAS)
125 {
126 $aliasData = self::get($id);
127 if (!$aliasData)
128 return new Result();
129 }
130 else
131 {
132 $aliasData = AliasTable::getByPrimary($id)->fetch();
133 }
134
135 $result = \Bitrix\Im\Model\AliasTable::delete((int)$aliasData['ID']);
136 self::cleanChatCache($aliasData['ENTITY_TYPE'], (int)$aliasData['ENTITY_ID']);
137
138 return $result;
139 }
140
141 public static function get($alias)
142 {
143 $alias = self::prepareAlias($alias);
144 if (empty($alias))
145 {
146 return false;
147 }
148
149 $query = \Bitrix\Im\Model\AliasTable::query();
150
152 if ($connection instanceof \Bitrix\Main\DB\PgsqlConnection)
153 {
154 $alias = $connection->getSqlHelper()->forSql($alias);
155 $query
156 ->setSelect(['*'])
157 ->whereExpr("LOWER(%s) = LOWER('{$alias}')", ['ALIAS'])
158 ;
159 }
160 else
161 {
162 $query
163 ->setSelect(['*'])
164 ->where('ALIAS', $alias)
165 ;
166 }
167
168 $result = $query->exec()->fetch();
169
170 if (!$result)
171 {
172 return false;
173 }
174
175 $result['LINK'] = self::getPublicLink($result['ENTITY_TYPE'], $result['ALIAS']);
176
177 return $result;
178 }
179
180 public static function getByIdAndCode($id, $code)
181 {
182 $query = \Bitrix\Im\Model\AliasTable::query();
183 $query
184 ->setSelect(['*'])
185 ->where('ID', $id)
186 ;
187
189 if ($connection instanceof \Bitrix\Main\DB\PgsqlConnection)
190 {
191 $code = $connection->getSqlHelper()->forSql($code);
192 $query->whereExpr("LOWER(%s) = LOWER('{$code}')", ['ALIAS']);
193 }
194 else
195 {
196 $query->where('ALIAS', $code);
197 }
198
199 return $query->exec()->fetch();
200 }
201
202 public static function getByEntity($entityType, $entityId)
203 {
204 $result = \Bitrix\Im\Model\AliasTable::getList(Array(
205 'filter' => ['=ENTITY_TYPE' => $entityType, '=ENTITY_ID' => $entityId]
206 ))->fetch();
207
208 if (!$result)
209 {
210 return false;
211 }
212
213 $result['LINK'] = self::getPublicLink($result['ENTITY_TYPE'], $result['ALIAS']);
214
215 return $result;
216 }
217
218 public static function prepareAlias($alias)
219 {
220 $alias = preg_replace("/[^\.\-0-9a-zA-Z]+/", "", $alias);
221 $alias = mb_substr($alias, 0, 255);
222
223 return $alias;
224 }
225
226 public static function getPublicLink($type, $alias)
227 {
228 $path = '/online/';
229
230 if ($type === self::ENTITY_TYPE_VIDEOCONF)
231 {
232 $path = '/video/';
233 }
234 else if ($type === self::ENTITY_TYPE_LIVECHAT)
235 {
236 return '';
237 }
238
239 return \Bitrix\Im\Common::getPublicDomain() . $path . $alias;
240 }
241
242 public static function generateUnique()
243 {
244 if (\Bitrix\Main\Loader::includeModule('security'))
245 {
246 return \Bitrix\Main\Security\Random::getString(8, true);
247 }
248 else
249 {
250 return mb_substr(uniqid(),-8);
251 }
252 }
253
254 protected static function cleanChatCache(string $entityType, int $entityId): void
255 {
256 if ($entityType !== self::ENTITY_TYPE_USER)
257 {
259 }
260 }
261}
$path
Определения access_edit.php:21
$connection
Определения actionsdefinitions.php:38
$type
Определения options.php:106
Определения alias.php:9
const ENTITY_TYPE_LIVECHAT
Определения alias.php:13
static generateUnique()
Определения alias.php:242
const CACHE_PATH
Определения alias.php:18
static getByIdAndCode($id, $code)
Определения alias.php:180
const ENTITY_TYPE_USER
Определения alias.php:10
const ENTITY_TYPE_VIDEOCONF
Определения alias.php:14
static update($id, $fields)
Определения alias.php:75
static addUnique(array $fields)
Определения alias.php:57
const FILTER_BY_ID
Определения alias.php:21
static cleanChatCache(string $entityType, int $entityId)
Определения alias.php:254
static getByEntity($entityType, $entityId)
Определения alias.php:202
const CACHE_TTL
Определения alias.php:17
const ENTITY_TYPE_OPEN_LINE
Определения alias.php:12
static prepareAlias($alias)
Определения alias.php:218
const ENTITY_TYPE_OTHER
Определения alias.php:15
static getPublicLink($type, $alias)
Определения alias.php:226
static add(array $fields)
Определения alias.php:23
const ENTITY_TYPE_CHAT
Определения alias.php:11
static get($alias)
Определения alias.php:141
const FILTER_BY_ALIAS
Определения alias.php:20
static getConnection($name="")
Определения application.php:638
Определения result.php:20
static cleanCache()
Определения datamanager.php:1983
</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
$query
Определения get_search.php:11
$filter
Определения iblock_catalog_list.php:54
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
Определения arrayresult.php:2
$entityId
Определения payment.php:4
$fields
Определения yandex_run.php:501