1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
userutils.php
См. документацию.
1<?php
8namespace Bitrix\Main;
9
10use Bitrix\Socialnetwork\UserTagTable;
11
13{
18 public static function getUserSearchFilter(array $fields)
19 {
20 $result = array();
21
22 if (UserIndexTable::getEntity()->fullTextIndexEnabled('SEARCH_USER_CONTENT'))
23 {
24 $find = '';
25 $findDepartmentOnly = false;
26
27 if (array_key_exists('FIND', $fields))
28 {
29 $find = trim($fields['FIND']);
30
31 if (Search\Content::isIntegerToken($find))
32 {
34 }
35 else
36 {
38 }
39 }
40 else
41 {
42 $validFields = Array('ID' => 1, 'NAME' => 1, 'LAST_NAME' => 1, 'SECOND_NAME' => 1, 'WORK_POSITION' => 1);
43 foreach ($fields as $key => $value)
44 {
45 if (isset($validFields[$key]) && $validFields[$key])
46 {
47 if (Search\Content::isIntegerToken($value))
48 {
49 $find .= ' '.Search\Content::prepareIntegerToken($value);
50 }
51 else
52 {
53 $find .= ' '.Search\Content::prepareStringToken($value);
54 }
55 $find = trim($find);
56 }
57 }
58
59 if (array_key_exists('UF_DEPARTMENT_NAME', $fields))
60 {
61 if (!$find)
62 {
63 $findDepartmentOnly = true;
64 }
65 if (Search\Content::isIntegerToken($fields['UF_DEPARTMENT_NAME']))
66 {
67 $find .= ' '.Search\Content::prepareIntegerToken($fields['UF_DEPARTMENT_NAME']);
68 }
69 else
70 {
71 $find .= ' '.Search\Content::prepareStringToken($fields['UF_DEPARTMENT_NAME']);
72 }
73 $find = trim($find);
74 }
75 }
76
77 if (Search\Content::canUseFulltextSearch($find, Search\Content::TYPE_MIXED))
78 {
79 $fiendField = $findDepartmentOnly? '*INDEX.SEARCH_DEPARTMENT_CONTENT': '*INDEX.SEARCH_USER_CONTENT';
80 $result[$fiendField] = $find;
81 }
82 }
83 else
84 {
85 $helper = Application::getConnection()->getSqlHelper();
86 if (array_key_exists('FIND', $fields))
87 {
88 $find = trim($fields['FIND']);
89 $find = explode(' ', $find);
90 foreach ($find as $findWord)
91 {
92 if (!$findWord)
93 {
94 continue;
95 }
96
97 $intResult = Array('LOGIC' => 'OR');
98 $validFields = Array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'WORK_POSITION', 'UF_DEPARTMENT_NAME');
99 foreach ($validFields as $key)
100 {
101 if ($key == 'ID')
102 {
103 $intResult['=ID'] = intval($findWord);
104 }
105 else
106 {
107 $intResult['%=INDEX.'.$key] = $helper->forSql($findWord).'%';
108 }
109 }
110 $result[] = $intResult;
111 }
112 if (!empty($result))
113 {
114 $result['LOGIC'] = 'AND';
115 $result = Array($result);
116 }
117 }
118 else
119 {
120 $validFields = Array('ID' => 1, 'NAME' => 1, 'LAST_NAME' => 1, 'SECOND_NAME' => 1, 'WORK_POSITION' => 1, 'UF_DEPARTMENT_NAME' => 1);
121 foreach ($fields as $key => $value)
122 {
123 if (!$value)
124 {
125 continue;
126 }
127 if (isset($validFields[$key]))
128 {
129 if ($key == 'ID')
130 {
131 $result['=ID'] = intval($value);
132 }
133 else
134 {
135 $result['%=INDEX.'.$key] = $helper->forSql($value).'%';
136 }
137 }
138 }
139 }
140 }
141
142 return $result;
143 }
144
149 public static function getAdminSearchFilter(array $fields)
150 {
151 $result = array();
152
153 if (UserIndexTable::getEntity()->fullTextIndexEnabled('SEARCH_ADMIN_CONTENT'))
154 {
155 $find = '';
156 if (array_key_exists('FIND', $fields))
157 {
158 $find = trim($fields['FIND']);
159
160 if (Search\Content::isIntegerToken($find))
161 {
163 }
164 else
165 {
167 }
168 }
169 else
170 {
171 $validFields = Array('ID' => 1, 'NAME' => 1, 'LAST_NAME' => 1, 'SECOND_NAME' => 1, 'WORK_POSITION' => 1, 'EMAIL' => 1, 'LOGIN' => 1);
172 foreach ($fields as $key => $value)
173 {
174 if (isset($validFields[$key]) && $validFields[$key])
175 {
176 if (Search\Content::isIntegerToken($value))
177 {
178 $find .= ' '.Search\Content::prepareIntegerToken($value);
179 }
180 else
181 {
182 $find .= ' '.Search\Content::prepareStringToken($value);
183 }
184 $find = trim($find);
185 }
186 }
187 }
188
189 if (Search\Content::canUseFulltextSearch($find, Search\Content::TYPE_MIXED))
190 {
191 $result['*INDEX.SEARCH_ADMIN_CONTENT'] = $find;
192 }
193 }
194 else
195 {
196 $helper = Application::getConnection()->getSqlHelper();
197 if (array_key_exists('FIND', $fields))
198 {
199 $find = trim($fields['FIND']);
200 $find = explode(' ', $find);
201 foreach ($find as $findWord)
202 {
203 if (!$findWord)
204 {
205 continue;
206 }
207
208 $intResult = Array('LOGIC' => 'OR');
209 $validFields = Array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'WORK_POSITION', 'LOGIN', 'EMAIL');
210 foreach ($validFields as $key)
211 {
212 if ($key == 'ID')
213 {
214 $intResult['=ID'] = intval($findWord);
215 }
216 else if ($key == 'LOGIN' || $key == 'EMAIL')
217 {
218 $intResult['%='.$key] = $helper->forSql($findWord).'%';
219 }
220 else
221 {
222 $intResult['%=INDEX.'.$key] = $helper->forSql($findWord).'%';
223 }
224 }
225 $result[] = $intResult;
226 }
227 if (!empty($result))
228 {
229 $result['LOGIC'] = 'AND';
230 $result = Array($result);
231 }
232 }
233 else
234 {
235 $validFields = Array('ID' => 1, 'NAME' => 1, 'LAST_NAME' => 1, 'SECOND_NAME' => 1, 'WORK_POSITION' => 1, 'LOGIN' => 1, 'EMAIL' => 1);
236 foreach ($fields as $key => $value)
237 {
238 if (!$value)
239 {
240 continue;
241 }
242 if (isset($validFields[$key]))
243 {
244 if ($key == 'ID')
245 {
246 $result['=ID'] = intval($value);
247 }
248 else if ($key == 'LOGIN' || $key == 'EMAIL')
249 {
250 $result['%='.$key] = $helper->forSql($value).'%';
251 }
252 else
253 {
254 $result['%=INDEX.'.$key] = $helper->forSql($value).'%';
255 }
256 }
257 }
258 }
259 }
260
261 return $result;
262 }
263
264 public static function getGroupIds($userId)
265 {
267 }
268
280 public static function getDepartmentName($departmentId)
281 {
282 $result = self::getDepartmentNames(Array($departmentId));
283 return $result[0] ?? false;
284 }
285
297 public static function getDepartmentNames($departmentIds)
298 {
299 // todo метод на новый апи
300 $result = Array();
301 if (!ModuleManager::isModuleInstalled('intranet'))
302 {
303 return $result;
304 }
305
306 $cacheTtl = 2592000;
307 $cacheName = 'iblock_structure';
308 $cachePath = '/bx/user/company/structure';
309 $iblockStructureId = Config\Option::get('intranet', 'iblock_structure', 0);
310
311 $taggedCache = Application::getInstance()->getTaggedCache();
312
313 $companyStructure = Array();
314 $cache = Data\Cache::createInstance();
315 if ($cache->initCache($cacheTtl, $cacheName, $cachePath) && false)
316 {
317 $companyStructure = $cache->getVars();
318 }
319 else if ($iblockStructureId <= 0 || !Loader::includeModule('iblock'))
320 {
321 return $result;
322 }
323 else
324 {
325 $orm = \Bitrix\Iblock\SectionTable::getList(Array('select' => Array('ID', 'NAME', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID'), 'filter' => Array('=IBLOCK_ID' => $iblockStructureId, '=ACTIVE' => 'Y',),));
326 while ($department = $orm->fetch())
327 {
328 $companyStructure[$department['ID']] = $department;
329 }
330
331 $taggedCache->startTagCache($cachePath);
332 $taggedCache->registerTag('iblock_id_'.$iblockStructureId);
333 $taggedCache->endTagCache();
334
335 if ($cache->startDataCache())
336 {
337 $cache->endDataCache($companyStructure);
338 }
339 }
340
341 if (is_array($departmentIds) && !empty($departmentIds))
342 {
343 foreach ($departmentIds as $id)
344 {
345 if (!array_key_exists($id, $companyStructure))
346 {
347 continue;
348 }
349
350 $result[] = $companyStructure[$id];
351 }
352 }
353
354 return $result;
355 }
356
357 public static function getCountryValue(array $params = [])
358 {
359 static $countriesList = null;
360 $result = '';
361
362 $value = (isset($params['VALUE']) ? intval($params['VALUE']) : 0);
363 if ($value <= 0)
364 {
365 return $result;
366 }
367
368 if ($countriesList === null)
369 {
370 $countriesList = [];
371 $countries = getCountryArray();
372 foreach($countries['reference_id'] as $key => $countryId)
373 {
374 $countriesList[$countryId] = $countries['reference'][$key];
375 }
376 }
377
378 if (isset($countriesList[$value]))
379 {
380 $result = $countriesList[$value];
381 }
382
383 return $result;
384 }
385
386 public static function getUFContent($userId)
387 {
388 global $USER_FIELD_MANAGER;
389
390 static $supportedUserFieldTypeIDs = [
391 'address',
392 'string',
393 'integer',
394 'double',
395 'boolean',
396// 'date',
397// 'datetime',
398 'enumeration',
399 'employee',
400 'file',
401 'url',
402 'crm',
403 'crm_status',
404 'iblock_element',
405 'iblock_section'
406 ];
407
408 $ufList = $USER_FIELD_MANAGER->getUserFields(UserTable::getUfId(), $userId, LANGUAGE_ID, false);
409
410 $userTypeMap = array_fill_keys($supportedUserFieldTypeIDs, true);
411 foreach($ufList as $key => $userField)
412 {
413 if(
414 !isset($userTypeMap[$userField['USER_TYPE_ID']])
415 || $userField['EDIT_IN_LIST'] === "N"
416 || $userField['IS_SEARCHABLE'] !== 'Y'
417 )
418 {
419 unset($ufList[$key]);
420 }
421 }
422 $ufList = self::postFilterFields($ufList);
423
424 $ufValuesList = [];
425 foreach($ufList as $userField)
426 {
427 $ufValuesList[] = self::getUserFieldValue($userField);
428 }
429
430 return implode(' ', $ufValuesList);
431 }
432
433 private static function postFilterFields(array $fields)
434 {
435 static $ufReserved = [
436 'UF_DEPARTMENT',
437 'UF_USER_CRM_ENTITY',
438 'UF_PUBLIC',
439 'UF_TIMEMAN',
440 'UF_TM_REPORT_REQ',
441 'UF_TM_FREE',
442 'UF_REPORT_PERIOD',
443 'UF_1C',
444 'UF_TM_ALLOWED_DELTA',
445 'UF_SETTING_DATE',
446 'UF_LAST_REPORT_DATE',
447 'UF_DELAY_TIME',
448 'UF_TM_REPORT_DATE',
449 'UF_TM_DAY',
450 'UF_TM_TIME',
451 'UF_TM_REPORT_TPL',
452 'UF_TM_MIN_DURATION',
453 'UF_TM_MIN_FINISH',
454 'UF_TM_MAX_START',
455 'UF_CONNECTOR_MD5',
456 'UF_WORK_BINDING',
457 'UF_IM_SEARCH',
458 'UF_BXDAVEX_CALSYNC',
459 'UF_BXDAVEX_MLSYNC',
460 'UF_UNREAD_MAIL_COUNT',
461 'UF_BXDAVEX_CNTSYNC',
462 'UF_BXDAVEX_MAILBOX',
463 'UF_VI_PASSWORD',
464 'UF_VI_BACKPHONE',
465 'UF_VI_PHONE',
466 'UF_VI_PHONE_PASSWORD'
467 ];
468
469 foreach ($ufReserved as $ufId)
470 {
471 if (isset($fields[$ufId]))
472 {
473 unset($fields[$ufId]);
474 }
475 }
476
477 return $fields;
478 }
479
480 private static function getUserFieldValue(array $userField)
481 {
482 global $USER_FIELD_MANAGER;
483
484 $userTypeID = $userField['USER_TYPE_ID'] ?? '';
485 if($userTypeID === 'boolean')
486 {
487 $values = [];
488 if(isset($userField['VALUE']) && (bool)$userField['VALUE'] && isset($userField['EDIT_FORM_LABEL']))
489 {
490 $values[] = $userField['EDIT_FORM_LABEL'];
491 }
492 }
493 else
494 {
495 $values = explode(',', $USER_FIELD_MANAGER->getPublicText($userField));
496 }
497
498 return implode(' ', $values);
499 }
500
501 public static function getTagsContent($userId)
502 {
503 $result = '';
504
505 if (Loader::includeModule('socialnetwork'))
506 {
507 $tagsList = [];
508
509 $res = UserTagTable::getList([
510 'filter' => [
511 'USER_ID' => $userId
512 ],
513 'select' => [ 'NAME' ]
514 ]);
515 while($tagFields = $res->fetch())
516 {
517 $tagsList[] = $tagFields['NAME'];
518 }
519
520 $result = implode(' ', $tagsList);
521 }
522
523 return $result;
524 }
525}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static getInstance()
Определения application.php:98
static getConnection($name="")
Определения application.php:638
static includeModule($moduleName)
Определения loader.php:67
static isModuleInstalled($moduleName)
Определения modulemanager.php:125
static getList(array $parameters=array())
Определения datamanager.php:431
static prepareIntegerToken($token)
Определения content.php:28
static prepareStringToken($token)
Определения content.php:18
static getUfId()
Определения user.php:54
static getUserGroupIds($userId)
Определения user.php:250
static getTagsContent($userId)
Определения userutils.php:501
static getUFContent($userId)
Определения userutils.php:386
static getGroupIds($userId)
Определения userutils.php:264
static getDepartmentName($departmentId)
Определения userutils.php:280
static getUserSearchFilter(array $fields)
Определения userutils.php:18
static getAdminSearchFilter(array $fields)
Определения userutils.php:149
static getDepartmentNames($departmentIds)
Определения userutils.php:297
static getCountryValue(array $params=[])
Определения userutils.php:357
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
global $USER_FIELD_MANAGER
Определения attempt.php:6
$result
Определения get_property_values.php:14
Определения content.php:3
if(empty($signedUserToken)) $key
Определения quickway.php:257
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$fields
Определения yandex_run.php:501