1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
User.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Entity\User;
4
5use Bitrix\Im\Common;
6use Bitrix\Im\Integration\Socialnetwork\Extranet;
7use Bitrix\Im\Model\RelationTable;
8use Bitrix\Im\Model\StatusTable;
9use Bitrix\Im\V2\Chat\ChatError;
10use Bitrix\Im\V2\Chat\FavoriteChat;
11use Bitrix\Im\V2\Chat\PrivateChat;
12use Bitrix\Im\V2\Common\ContextCustomer;
13use Bitrix\Im\V2\Entity\Department\Departments;
14use Bitrix\Im\V2\Rest\RestEntity;
15use Bitrix\Im\V2\Result;
16use Bitrix\Im\V2\Service\Locator;
17use Bitrix\Main\Engine\Response\Converter;
18use Bitrix\Main\Loader;
19use Bitrix\Main\ModuleManager;
20use Bitrix\Main\ORM\Fields\Relations\Reference;
21use Bitrix\Main\ORM\Query\Join;
22use Bitrix\Main\SystemException;
23use Bitrix\Main\Type\DateTime;
24use Bitrix\Main\UserTable;
25
26class User implements RestEntity
27{
28 use ContextCustomer;
29
30 public const PHONE_MOBILE = 'PERSONAL_MOBILE';
31 public const PHONE_WORK = 'WORK_PHONE';
32 public const PHONE_INNER = 'INNER_PHONE';
33 public const PERSONAL_PHONE = 'PERSONAL_PHONE';
35 'USER_ID' => 'ID',
36 'IDLE' => 'STATUS.IDLE',
37 'DESKTOP_LAST_DATE' => 'STATUS.DESKTOP_LAST_DATE',
38 'MOBILE_LAST_DATE' => 'STATUS.MOBILE_LAST_DATE',
39 'LAST_ACTIVITY_DATE'
40 ];
42 'USER_ID' => 'ID',
43 'LAST_ACTIVITY_DATE'
44 ];
45
49 protected static string $moduleManager = ModuleManager::class;
53 protected static string $loader = Loader::class;
54
58 protected static array $userStaticCache = [];
59
60 protected array $accessCache = [];
61 protected array $userData = [];
62
63 protected bool $isOnlineDataFilled = false;
64 protected bool $isOnlineDataWithStatusFilled = false;
65 protected ?bool $isAdmin = null;
66
67 protected ?DateTime $idle = null;
68 protected ?DateTime $lastActivityDate = null;
69 protected ?DateTime $mobileLastDate = null;
70 protected ?DateTime $desktopLastDate = null;
71
72 public static function getInstance(?int $id): self
73 {
74 if (!isset($id))
75 {
76 return new NullUser();
77 }
78
79 if (isset(self::$userStaticCache[$id]))
80 {
81 return self::$userStaticCache[$id];
82 }
83
84 self::$userStaticCache[$id] = UserFactory::getInstance()->getUserById($id);
85
86 return self::$userStaticCache[$id];
87 }
88
89 public static function getCurrent(): self
90 {
91 return Locator::getContext()->getUser();
92 }
93
94 public static function initByArray(array $userData): self
95 {
96 if (!isset($userData['ID']))
97 {
98 return new NullUser();
99 }
100
101 $user = new static();
102 $user->userData = $userData;
103
104 return $user;
105 }
106
113 public function getChatWith(int $userId, bool $createIfNotExist = true): ?PrivateChat
114 {
115 $chatId = false;
116 if ($userId === $this->getId())
117 {
118 $result = FavoriteChat::find(['TO_USER_ID' => $userId])->getResult();
119 if ($result && isset($result['ID']))
120 {
121 $chatId = (int)$result['ID'];
122 }
123 }
124 else
125 {
126 $result = RelationTable::query()
127 ->setSelect(['CHAT_ID'])
128 ->registerRuntimeField(
129 'SELF',
130 new Reference(
131 'SELF',
132 RelationTable::class,
133 Join::on('this.CHAT_ID', 'ref.CHAT_ID'),
134 ['join_type' => Join::TYPE_INNER]
135 )
136 )->where('USER_ID', $this->getId())
137 ->where('SELF.USER_ID', $userId)
138 ->where('MESSAGE_TYPE', \IM_MESSAGE_PRIVATE)
139 ->setLimit(1)
140 ->fetch()
141 ;
142 if ($result && isset($result['CHAT_ID']))
143 {
144 $chatId = (int)$result['CHAT_ID'];
145 }
146 }
147
148 if ($chatId !== false)
149 {
150 $chat = PrivateChat::getInstance($chatId);
151
152 if ($chat instanceof PrivateChat)
153 {
154 return $chat;
155 }
156
157 return null;
158 }
159
160 if (!$createIfNotExist)
161 {
162 return null;
163 }
164
165 try
166 {
167 $createResult = (new PrivateChat())->add(['FROM_USER_ID' => $this->getId(), 'TO_USER_ID' => $userId]);
168 }
169 catch (SystemException $exception)
170 {
171 return null;
172 }
173
174 if (!$createResult->isSuccess())
175 {
176 return null;
177 }
178
179 return $createResult->getResult()['CHAT'];
180 }
181
182 final public function checkAccess(?int $idOtherUser = null): Result
183 {
184 $result = new Result();
185 $idOtherUser ??= Locator::getContext()->getUserId();
186 $otherUser = User::getInstance($idOtherUser);
187
188 if (!$otherUser->isExist())
189 {
190 return $result->addError(new UserError(UserError::NOT_FOUND));
191 }
192
193 if ($this->getId() === $idOtherUser)
194 {
195 return $result;
196 }
197
198 if (isset($this->accessCache[$idOtherUser]))
199 {
200 return $this->accessCache[$idOtherUser];
201 }
202
203 $this->accessCache[$idOtherUser] = $this->checkAccessInternal($otherUser);
204
205 return $this->accessCache[$idOtherUser];
206 }
207
208 protected function checkAccessInternal(self $otherUser): Result
209 {
210 $result = new Result();
211
212 if (!static::$moduleManager::isModuleInstalled('intranet'))
213 {
214 if (!$this->hasAccessBySocialNetwork($otherUser->getId()))
215 {
217 }
218
219 return $result;
220 }
221
222 if ($otherUser->isExtranet())
223 {
224 $inGroup = Extranet::isUserInGroup(
225 $this->getId(),
226 $otherUser->getId(),
227 false
228 );
229
230 if (!$inGroup)
231 {
233 }
234
235 return $result;
236 }
237
238 return $result;
239 }
240
241 final protected function hasAccessBySocialNetwork(int $idOtherUser): bool
242 {
243 $isContactPrivacy = (
246 );
247
248 return !(
249 $isContactPrivacy
250 && static::$loader::includeModule('socialnetwork')
251 && \CSocNetUser::IsFriendsAllowed()
252 && !\CSocNetUserRelations::IsFriends($this->getId(), $idOtherUser)
253 );
254 }
255
256 protected function fillOnlineData(bool $withStatus = false): void
257 {
258 if ((!$withStatus && $this->isOnlineDataFilled)
259 || $this->isOnlineDataWithStatusFilled)
260 {
261 return;
262 }
263
264 $select = $withStatus ? self::ONLINE_DATA_SELECTED_FIELDS : self::ONLINE_DATA_SELECTED_FIELDS_WITHOUT_STATUS;
265 $query = UserTable::query()
266 ->setSelect($select)
267 ->where('ID', $this->getId())
268 ;
269 if ($withStatus)
270 {
271 $query->registerRuntimeField(
272 new Reference(
273 'STATUS',
274 StatusTable::class,
275 Join::on('this.ID', 'ref.USER_ID'),
276 ['join_type' => Join::TYPE_LEFT]
277 )
278 );
279 }
280
281 $statusData = $query->fetch() ?: [];
282 $this->setOnlineData($statusData, $withStatus);
283 }
284
285 public function unsetOnlineData(): void
286 {
287 $this->isOnlineDataFilled = false;
288 $this->isOnlineDataWithStatusFilled = false;
289 }
290
291 public function getId(): ?int
292 {
293 return isset($this->userData['ID']) ? (int)$this->userData['ID'] : null;
294 }
295
296 public static function getRestEntityName(): string
297 {
298 return 'user';
299 }
300
301 public function toRestFormat(array $option = []): array
302 {
303 if (isset($option['USER_SHORT_FORMAT']) && $option['USER_SHORT_FORMAT'] === true)
304 {
305 return [
306 'id' => $this->getId(),
307 'name' => $this->getName(),
308 'avatar' => $this->getAvatar(),
309 'color' => $this->getColor(),
310 'type' => $this->getType()->value,
311 ];
312 }
313
314 $idle = false;
315 $lastActivityDate = false;
316 $mobileLastDate = false;
317 $desktopLastDate = false;
318
319 if (!isset($option['WITHOUT_ONLINE']) || $option['WITHOUT_ONLINE'] === false)
320 {
321 $idle = $this->getIdle() ? $this->getIdle()->format('c') : false;
322 $lastActivityDate = $this->getLastActivityDate() ? $this->getLastActivityDate()->format('c') : false;
323 $mobileLastDate = $this->getMobileLastDate() ? $this->getMobileLastDate()->format('c') : false;
324 $desktopLastDate = $this->getDesktopLastDate() ? $this->getDesktopLastDate()->format('c') : false;
325 }
326
327 return [
328 'id' => $this->getId(),
329 'active' => $this->isActive(),
330 'name' => $this->getName(),
331 'firstName' => $this->getFirstName(),
332 'lastName' => $this->getLastName(),
333 'workPosition' => $this->getWorkPosition(),
334 'color' => $this->getColor(),
335 'avatar' => $this->getAvatar($option['FOR_REST'] ?? true),
336 'avatarHr' => $this->getAvatarHr($option['FOR_REST'] ?? true),
337 'gender' => $this->getGender(),
338 'birthday' => (string)$this->getBirthday(),
339 'extranet' => $this->isExtranet(),
340 'network' => $this->isNetwork(),
341 'bot' => $this->isBot(),
342 'connector' => $this->isConnector(),
343 'externalAuthId' => $this->getExternalAuthId(),
344 'status' => $this->getStatus(),
345 'idle' => $idle,
346 'lastActivityDate' => $lastActivityDate,
347 'mobileLastDate' => $mobileLastDate,
348 'desktopLastDate' => $desktopLastDate,
349 'absent' => $this->getAbsent() !== null ? $this->getAbsent()->format('c') : false,
350 'departments' => $this->getDepartmentIds(),
351 'phones' => empty($this->getPhones()) ? false : $this->getPhones(),
352 'botData' => null,
353 'type' => $this->getType()->value,
354 ];
355 }
356
357 public function getArray(array $option = []): array
358 {
359 $option['FOR_REST'] = false;
361
362 $converter = new Converter(Converter::TO_SNAKE | Converter::TO_UPPER | Converter::KEYS);
363 $userData = $converter->process($userData);
364
365 if ($userData['PHONES'] ?? null)
366 {
367 $converter = new Converter(Converter::TO_LOWER | Converter::KEYS);
368 $userData['PHONES'] = $converter->process($userData['PHONES']);
369 }
370 if (isset($userData['BOT_DATA']))
371 {
372 $converter = new Converter(Converter::TO_SNAKE | Converter::TO_LOWER | Converter::KEYS);
373 $userData['BOT_DATA'] = $converter->process($userData['BOT_DATA']);
374 }
375
376 if (($option['JSON'] ?? 'N') === 'Y')
377 {
379 }
380
381 return $userData;
382 }
383
384 //region Getters & setters
385
386 public function isExist(): bool
387 {
388 return $this->getId() !== null;
389 }
390
391 public function setOnlineData(array $onlineData, bool $withStatus): void
392 {
393 $this->idle = $onlineData['IDLE'] ?? null;
394 $this->lastActivityDate = $onlineData['LAST_ACTIVITY_DATE'] ?? null;
395 $this->mobileLastDate = $onlineData['MOBILE_LAST_DATE'] ?? null;
396 $this->desktopLastDate = $onlineData['DESKTOP_LAST_DATE'] ?? null;
397 if ($withStatus)
398 {
399 $this->isOnlineDataWithStatusFilled = true;
400 }
401 else
402 {
403 $this->isOnlineDataFilled = true;
404 }
405 }
406
407 public function getName(): ?string
408 {
409 return $this->userData['NAME'] ?? null;
410 }
411
412 public function getFirstName(): ?string
413 {
414 return $this->userData['FIRST_NAME'] ?? null;
415 }
416
417 public function getLastName(): ?string
418 {
419 return $this->userData['LAST_NAME'] ?? null;
420 }
421
422 public function getAvatar(bool $forRest = true): string
423 {
424 $avatar = $this->userData['AVATAR'] ?? '';
425
426 return $forRest ? $this->prependPublicDomain($avatar) : $avatar;
427 }
428
429 public function getAvatarHr(bool $forRest = true): string
430 {
431 $avatarHr = $this->userData['AVATAR_HR'] ?? '';
432
433 return $forRest ? $this->prependPublicDomain($avatarHr) : $avatarHr;
434 }
435
436 public function getBirthday(): string
437 {
438 return $this->userData['BIRTHDAY'] ?? '';
439 }
440
441 public function getAvatarId(): int
442 {
443 return $this->userData['AVATAR_ID'] ?? 0;
444 }
445
446 public function getWorkPosition(): ?string
447 {
448 return $this->userData['WORK_POSITION'] ?? null;
449 }
450
451 public function getGender(): string
452 {
453 return $this->userData['PERSONAL_GENDER'] === 'F' ? 'F' : 'M';
454 }
455
456 public function getExternalAuthId(): string
457 {
458 return $this->userData['EXTERNAL_AUTH_ID'] ?? 'default';
459 }
460
461 public function isInternalType(): bool
462 {
463 return !in_array($this->getExternalAuthId(), \Bitrix\Im\Model\UserTable::getExternalUserTypes(), true);
464 }
465
466 public function getWebsite(): string
467 {
468 return $this->userData['PERSONAL_WWW'] ?? '';
469 }
470
471 public function getEmail(): string
472 {
473 return $this->userData['EMAIL'] ?? '';
474 }
475
476 public function getPhones(): array
477 {
478 $result = [];
479
480 foreach ([self::PHONE_MOBILE, self::PHONE_WORK, self::PHONE_INNER, self::PERSONAL_PHONE] as $phoneType)
481 {
482 if (isset($this->userData[$phoneType]) && $this->userData[$phoneType])
483 {
484 $result[mb_strtolower($phoneType)] = $this->userData[$phoneType];
485 }
486 }
487
488 return $result;
489 }
490
491 public function getServices(): array
492 {
493 $result = [];
494
495 if (isset($this->userData['UF_ZOOM']) && !empty($this->userData['UF_ZOOM']))
496 {
497 $result['zoom'] = $this->userData['UF_ZOOM'];
498 }
499
500 if (isset($this->userData['UF_SKYPE_LINK']) && !empty($this->userData['UF_SKYPE_LINK']))
501 {
502 $result['skype'] = $this->userData['UF_SKYPE_LINK'];
503 }
504 elseif (isset($this->userData['UF_SKYPE']) && !empty($this->userData['UF_SKYPE']))
505 {
506 $result['skype'] = 'skype://' . $this->userData['UF_SKYPE'];
507 }
508
509 return $result;
510 }
511
516 public function getPhoneDevice(): bool
517 {
518 return Loader::includeModule('voximplant') && $this->userData['UF_VI_PHONE'] === 'Y';
519 }
520
521 public function getColor(): string
522 {
523 return $this->userData['COLOR'] ?? '';
524 }
525
526 public function getLanguageId(): ?string
527 {
528 return $this->userData['LANGUAGE_ID'] ?? null;
529 }
530
531 public function isExtranet(): bool
532 {
533 return $this->userData['IS_EXTRANET'] ?? false;
534 }
535
536 public function isCollaber(): bool
537 {
538 return $this->getType() === UserType::COLLABER;
539 }
540
541 public function isActive(): bool
542 {
543 return $this->userData['ACTIVE'] === 'Y';
544 }
545
546 public function getAbsent(): ?DateTime
547 {
548 return $this->userData['ABSENT'] ?? null;
549 }
550
551 public function isNetwork(): bool
552 {
553 return $this->userData['IS_NETWORK'] ?? false;
554 }
555
556 public function isBot(): bool
557 {
558 return $this->userData['IS_BOT'] ?? false;
559 }
560
561 public function isConnector(): bool
562 {
563 return $this->userData['IS_CONNECTOR'] ?? false;
564 }
565
566 public function getDepartmentIds(): array
567 {
568 return
569 (isset($this->userData['UF_DEPARTMENT']) && is_array($this->userData['UF_DEPARTMENT']))
570 ? $this->userData['UF_DEPARTMENT']
571 : []
572 ;
573 }
574
575 public function getDepartments(): Departments
576 {
577 return new Departments(...$this->getDepartmentIds());
578 }
579
580 public function isOnlineDataFilled(bool $withStatus): bool
581 {
582 return $withStatus ? $this->isOnlineDataWithStatusFilled : $this->isOnlineDataWithStatusFilled || $this->isOnlineDataFilled;
583 }
584
585 public function getStatus(bool $real = false): ?string
586 {
587 if ($real)
588 {
589 return $this->userData['STATUS'] ?? 'online';
590 }
591
592 return 'online';
593 }
594
595 public function getTimeZone(): string
596 {
597 return $this->userData['TIME_ZONE'] ?? '';
598 }
599
600 public function getIdle(bool $real = false): ?DateTime
601 {
602 if ($real)
603 {
604 $this->fillOnlineData(true);
605 }
606
607 return $this->idle;
608 }
609
610 public function getLastActivityDate(): ?DateTime
611 {
612 $this->fillOnlineData();
613
615 }
616
617 public function getMobileLastDate(bool $real = false): ?DateTime
618 {
619 if ($real)
620 {
621 $this->fillOnlineData(true);
622 }
623
625 }
626
627 public function getDesktopLastDate(bool $real = false): ?DateTime
628 {
629 if ($real)
630 {
631 $this->fillOnlineData(true);
632 }
633
635 }
636
637 public function getType(): UserType
638 {
639 return UserType::USER;
640 }
641
642 public function isAdmin(): bool
643 {
644 if ($this->isAdmin !== null)
645 {
646 return $this->isAdmin;
647 }
648
649 global $USER;
650 if (Loader::includeModule('bitrix24'))
651 {
652 if (
653 $USER instanceof \CUser
654 && $USER->isAuthorized()
655 && $USER->isAdmin()
656 && (int)$USER->getId() === $this->getId()
657 )
658 {
659 $this->isAdmin = true;
660
661 return $this->isAdmin;
662 }
663 $this->isAdmin = \CBitrix24::isPortalAdmin($this->getId());
664
665 return $this->isAdmin;
666 }
667
668 if (
669 $USER instanceof \CUser
670 && $USER->isAuthorized()
671 && (int)$USER->getId() === $this->getId()
672 )
673 {
674 $this->isAdmin = $USER->isAdmin();
675
676 return $this->isAdmin;
677 }
678
679 $result = false;
680 $groups = UserTable::getUserGroupIds($this->getId());
681 foreach ($groups as $groupId)
682 {
683 if ((int)$groupId === 1)
684 {
685 $result = true;
686 break;
687 }
688 }
689 $this->isAdmin = $result;
690
691 return $this->isAdmin;
692 }
693
694 public function isSuperAdmin(): bool
695 {
696 global $USER;
697 if (!Loader::includeModule('socialnetwork') || (int)$USER->getId() !== $this->getId())
698 {
699 return false;
700 }
701
702 return $this->isAdmin() && \CSocNetUser::IsEnabledModuleAdmin();
703 }
704
705 //endregion
706
707 private function prependPublicDomain(string $url): string
708 {
709 if ($url !== '' && mb_strpos($url, 'http') !== 0)
710 {
711 return Common::getPublicDomain() . $url;
712 }
713
714 return $url;
715 }
716
717 public static function getFirstAdmin(): int
718 {
719 $adminIds = [];
720
721 if (Loader::includeModule('bitrix24'))
722 {
723 $adminIds = \CBitrix24::getAllAdminId();
724 }
725 else
726 {
727 $res = \CGroup::getGroupUserEx(1);
728 while ($row = $res->fetch())
729 {
730 $adminIds[] = (int)$row["USER_ID"];
731 }
732 }
733
734 $resultAdminIds = [];
735 foreach ($adminIds as $adminId)
736 {
737 $user = User::getInstance((int)$adminId);
738 if (!$user->isExtranet() && $user->isActive())
739 {
740 $resultAdminIds[] = (int)$adminId;
741 }
742 }
743
744 return !empty($resultAdminIds) ? (int)min($resultAdminIds) : 0;
745 }
746
747 public static function clearStaticCache(int $id): void
748 {
749 unset(self::$userStaticCache[$id]);
750 }
751}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static getPublicDomain()
Определения common.php:8
static isUserInGroup($userId, $currentUserId=null, bool $filterActiveUser=true)
Определения extranet.php:112
static formatLegacyJson(array $result)
Определения user.php:511
const ACCESS_DENIED
Определения ChatError.php:19
static find(array $params=[], ?Context $context=null)
Определения FavoriteChat.php:108
static getRestEntityName()
Определения User.php:296
getIdle(bool $real=false)
Определения User.php:600
getAbsent()
Определения User.php:546
isSuperAdmin()
Определения User.php:694
DateTime $lastActivityDate
Определения User.php:68
hasAccessBySocialNetwork(int $idOtherUser)
Определения User.php:241
getAvatarId()
Определения User.php:441
toRestFormat(array $option=[])
Определения User.php:301
getTimeZone()
Определения User.php:595
getAvatarHr(bool $forRest=true)
Определения User.php:429
static initByArray(array $userData)
Определения User.php:94
isCollaber()
Определения User.php:536
const PHONE_WORK
Определения User.php:31
isOnlineDataFilled(bool $withStatus)
Определения User.php:580
const ONLINE_DATA_SELECTED_FIELDS_WITHOUT_STATUS
Определения User.php:41
checkAccessInternal(self $otherUser)
Определения User.php:208
static getCurrent()
Определения User.php:89
getServices()
Определения User.php:491
setOnlineData(array $onlineData, bool $withStatus)
Определения User.php:391
getAvatar(bool $forRest=true)
Определения User.php:422
static getInstance(?int $id)
Определения User.php:72
DateTime $idle
Определения User.php:67
getChatWith(int $userId, bool $createIfNotExist=true)
Определения User.php:113
static array $userStaticCache
Определения User.php:58
getBirthday()
Определения User.php:436
getWorkPosition()
Определения User.php:446
static string $loader
Определения User.php:53
isInternalType()
Определения User.php:461
isNetwork()
Определения User.php:551
getDesktopLastDate(bool $real=false)
Определения User.php:627
const PHONE_MOBILE
Определения User.php:30
unsetOnlineData()
Определения User.php:285
getPhones()
Определения User.php:476
DateTime $mobileLastDate
Определения User.php:69
getLastActivityDate()
Определения User.php:610
DateTime $desktopLastDate
Определения User.php:70
getLastName()
Определения User.php:417
array $accessCache
Определения User.php:60
getDepartments()
Определения User.php:575
array $userData
Определения User.php:61
static getFirstAdmin()
Определения User.php:717
static clearStaticCache(int $id)
Определения User.php:747
bool $isOnlineDataFilled
Определения User.php:63
bool $isOnlineDataWithStatusFilled
Определения User.php:64
isConnector()
Определения User.php:561
const PHONE_INNER
Определения User.php:32
getDepartmentIds()
Определения User.php:566
getLanguageId()
Определения User.php:526
isExtranet()
Определения User.php:531
getStatus(bool $real=false)
Определения User.php:585
const ONLINE_DATA_SELECTED_FIELDS
Определения User.php:34
getMobileLastDate(bool $real=false)
Определения User.php:617
getPhoneDevice()
Определения User.php:516
const PERSONAL_PHONE
Определения User.php:33
getFirstName()
Определения User.php:412
fillOnlineData(bool $withStatus=false)
Определения User.php:256
bool $isAdmin
Определения User.php:65
checkAccess(?int $idOtherUser=null)
Определения User.php:182
getGender()
Определения User.php:451
getExternalAuthId()
Определения User.php:456
getWebsite()
Определения User.php:466
static string $moduleManager
Определения User.php:49
getArray(array $option=[])
Определения User.php:357
static getInstance()
Определения application.php:98
Определения result.php:20
format($format)
Определения date.php:110
static IsFriends($firstUserID, $secondUserID)
Определения user_relations.php:355
const PRIVACY_RESULT_CONTACT
Определения im_settings.php:29
const PRIVACY_MESSAGE
Определения im_settings.php:23
static GetPrivacy($type, $userId=false)
Определения im_settings.php:519
</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
$result
Определения get_property_values.php:14
$query
Определения get_search.php:11
$select
Определения iblock_catalog_list.php:194
const IM_MESSAGE_PRIVATE
Определения include.php:22
global $USER
Определения csv_new_run.php:40
$groups
Определения options.php:30
Определения alias.php:2
@ COLLABER
Определения UserType.php:10
$user
Определения mysql_to_pgsql.php:33
return false
Определения prolog_main_admin.php:185
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$option
Определения options.php:1711
$url
Определения iframe.php:7