%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/im/lib/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/im/lib/user.php |
<?php namespace Bitrix\Im; use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class User { private static $instance = Array(); private $userId = 0; private $userData = null; const FILTER_LIMIT = 50; const PHONE_ANY = 'PHONE_ANY'; const PHONE_WORK = 'work_phone'; const PHONE_PERSONAL = 'personal_phone'; const PHONE_MOBILE = 'personal_mobile'; const PHONE_INNER = 'uf_phone_inner'; function __construct($userId = null) { global $USER; $this->userId = (int)$userId; if ($this->userId <= 0 && is_object($USER) && $USER->GetID() > 0) { $this->userId = (int)$USER->GetID(); } } /** * @param null $userId * @return User */ public static function getInstance($userId = null) { global $USER; $userId = (int)$userId; if ($userId <= 0 && is_object($USER) && $USER->GetID() > 0) { $userId = (int)$USER->GetID(); } if (!isset(self::$instance[$userId])) { self::$instance[$userId] = new self($userId); } return self::$instance[$userId]; } /** * @return int */ public function getId() { return $this->userId; } /** * @return string */ public function getFullName($safe = true) { $fields = $this->getFields(); if (!$fields) return ''; return $safe? $fields['name']: htmlspecialcharsback($fields['name']); } /** * @return string */ public function getName($safe = true) { $fields = $this->getFields(); if (!$fields) return ''; return $safe? $fields['first_name']: htmlspecialcharsback($fields['first_name']); } /** * @return string */ public function getLastName($safe = true) { $fields = $this->getFields(); if (!$fields) return ''; return $safe? $fields['last_name']: htmlspecialcharsback($fields['last_name']); } /** * @return string */ public function getAvatar() { $fields = $this->getFields(); return $fields && $fields['avatar'] != '/bitrix/js/im/images/blank.gif'? $fields['avatar']: ''; } /** * @return string */ public function getAvatarHr() { $fields = $this->getFields(); if (!$fields) { return ''; } if (array_key_exists('avatar_hr', $fields)) { return $fields['avatar_hr']; } else if ($fields['avatar_id']) { $avatar = \CFile::ResizeImageGet( $fields['avatar_id'], array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true ); $this->userData['user']['avatar_hr'] = $avatar['src']; return $avatar['src']; } return ''; } /** * @return string */ public function getStatus() { $fields = $this->getFields(); return $fields? $fields['status']: ''; } /** * @return string */ public function getIdle() { $fields = $this->getFields(); if ($fields && $fields['idle']) { return $fields['idle']; } else { return false; } } /** * @return string */ public function getLastActivityDate() { $fields = $this->getFields(); if ($fields && $fields['last_activity_date']) { return $fields['last_activity_date']; } else { return false; } } /** * @return string */ public function getMobileLastDate() { $fields = $this->getFields(); if ($fields && $fields['mobile_last_date']) { return $fields['mobile_last_date']; } else { return false; } } /** * @return string */ public function getBirthday() { $fields = $this->getFields(); return $fields? $fields['birthday']: ''; } /** * @return string */ public function getAvatarId() { $fields = $this->getFields(); return $fields? $fields['avatar_id']: 0; } /** * @return string */ public function getWorkPosition($safe = false) { $fields = $this->getFields(); if ($fields) { return $safe? $fields['work_position']: htmlspecialcharsback($fields['work_position']); } else { return false; } } /** * @return string */ public function getGender() { $fields = $this->getFields(); return $fields? $fields['gender']: ''; } /** * @return string */ public function getExternalAuthId() { $fields = $this->getFields(); return $fields? $fields['external_auth_id']: ''; } /** * @return string */ public function getWebsite() { $fields = $this->getFields(); return $fields? $fields['website']: ''; } /** * @return string */ public function getEmail() { $fields = $this->getFields(); return $fields? $fields['email']: ''; } /** * @param string $type * @return string */ public function getPhone($type = self::PHONE_ANY) { $fields = $this->getPhones(); $result = ''; if ($type == self::PHONE_ANY) { if (isset($fields[self::PHONE_MOBILE])) { $result = $fields[self::PHONE_MOBILE]; } else if (isset($fields[self::PHONE_PERSONAL])) { $result = $fields[self::PHONE_PERSONAL]; } else if (isset($fields[self::PHONE_WORK])) { $result = $fields[self::PHONE_WORK]; } } else if (isset($fields[$type])) { $result = $fields[$type]; } return $result; } /** * @return string */ public function getColor() { $fields = $this->getFields(); return $fields? $fields['color']: ''; } /** * @return string */ public function getTzOffset() { $fields = $this->getFields(); return $fields? $fields['tz_offset']: ''; } /** * @return bool */ public function isOnline() { $fields = $this->getFields(); return $fields? $fields['status'] != 'offline': false; } /** * @return bool */ public function isExtranet() { $fields = $this->getFields(); return $fields? (bool)$fields['extranet']: null; } /** * @return bool */ public function isActive() { $fields = $this->getFields(); return $fields? (bool)$fields['active']: null; } /** * @return bool */ public function isAbsent() { $fields = $this->getFields(); if ($fields && $fields['absent']) { return $fields['absent']; } else { return false; } } /** * @return bool */ public function isNetwork() { $fields = $this->getFields(); return $fields? (bool)$fields['network']: null; } /** * @return bool */ public function isBot() { $fields = $this->getFields(); return $fields? (bool)$fields['bot']: null; } /** * @return bool */ public function isConnector() { $fields = $this->getFields(); return $fields? (bool)$fields['connector']: null; } /** * @return bool */ public function isExists() { $fields = $this->getFields(); return $fields? true: false; } /** * @return array|null */ public function getFields() { $params = $this->getParams(); return $params? $params['user']: null; } /** * @return array|null */ public function getPhones() { $params = $this->getFields(); return $params? $params['phones']: null; } /** * @return array|null */ public function getDepartments() { $params = $this->getFields(); return $params? $params['departments']: Array(); } /** * @return array|null */ public function getArray($options = array()) { if (!$this->isExists()) { return null; } $result = Array( 'ID' => $this->getId(), 'NAME' => $this->getFullName(false), 'FIRST_NAME' => $this->getName(false), 'LAST_NAME' => $this->getLastName(false), 'WORK_POSITION' => $this->getWorkPosition(false), 'COLOR' => $this->getColor(), 'AVATAR' => $this->getAvatar(), 'GENDER' => $this->getGender(), 'BIRTHDAY' => (string)$this->getBirthday(), 'EXTRANET' => $this->isExtranet(), 'NETWORK' => $this->isNetwork(), 'BOT' => $this->isBot(), 'CONNECTOR' => $this->isConnector(), 'EXTERNAL_AUTH_ID' => $this->getExternalAuthId(), 'STATUS' => $this->getStatus(), 'IDLE' => $this->getIdle(), 'LAST_ACTIVITY_DATE' => $this->getLastActivityDate(), 'MOBILE_LAST_DATE' => $this->getMobileLastDate(), 'DEPARTMENTS' => $this->getDepartments(), 'ABSENT' => $this->isAbsent(), 'PHONES' => $this->getPhones(), ); if ($options['HR_PHOTO']) { $result['AVATAR_HR'] = $this->getAvatarHr(); } if ($options['JSON']) { foreach ($result as $key => $value) { if ($value instanceof \Bitrix\Main\Type\DateTime) { $result[$key] = date('c', $value->getTimestamp()); } else if (in_array($key, ['AVATAR', 'AVATAR_HR']) && is_string($value) && $value && strpos($value, 'http') !== 0) { $result[$key] = \Bitrix\Im\Common::getPublicDomain().$value; } } $result = array_change_key_case($result, CASE_LOWER); } return $result; } /** * @return array|null */ private function getParams() { if (is_null($this->userData)) { $userData = \CIMContactList::GetUserData(Array( 'ID' => self::getId(), 'PHONES' => 'Y', 'EXTRA_FIELDS' => 'Y', 'DATE_ATOM' => 'N' )); if (isset($userData['users'][self::getId()])) { $this->userData['user'] = $userData['users'][self::getId()]; } } return $this->userData; } public static function uploadAvatar($avatarUrl = '') { if (!$ar = parse_url($avatarUrl)) return ''; if (!preg_match('#\.(png|jpg|jpeg|gif)$#i', $ar['path'])) return ''; $orm = \Bitrix\Im\Model\ExternalAvatarTable::getList(Array( 'filter' => Array('=LINK_MD5' => md5($avatarUrl)) )); if ($cache = $orm->fetch()) { return $cache['AVATAR_ID']; } $recordFile = \CFile::MakeFileArray($avatarUrl); if (!\CFile::IsImage($recordFile['name'], $recordFile['type'])) return ''; if (is_array($recordFile) && $recordFile['size'] && $recordFile['size'] > 0 && $recordFile['size'] < 1000000) { $recordFile = array_merge($recordFile, array('MODULE_ID' => 'imbot')); } else { $recordFile = 0; } if ($recordFile) { $recordFile = \CFile::SaveFile($recordFile, 'botcontroller'); } if ($recordFile > 0) { \Bitrix\Im\Model\ExternalAvatarTable::add(Array( 'LINK_MD5' => md5($avatarUrl), 'AVATAR_ID' => intval($recordFile) )); } return $recordFile; } /** * @return bool */ public static function clearStaticCache() { self::$instance = Array(); return true; } public static function isOpenlinesOperator($userId = null) { $userId = \Bitrix\Im\Common::getUserId($userId); if (!$userId) { return false; } $list = \Bitrix\ImOpenLines\Config::getQueueList($userId); return empty($list); } public static function getList($params) { $params = is_array($params)? $params: Array(); if (!isset($params['CURRENT_USER']) && is_object($GLOBALS['USER'])) { $params['CURRENT_USER'] = $GLOBALS['USER']->GetID(); } $params['CURRENT_USER'] = intval($params['CURRENT_USER']); $userId = $params['CURRENT_USER']; if ($userId <= 0) { return false; } $enableLimit = false; if (isset($params['OFFSET'])) { $filterLimit = intval($params['LIMIT']); $filterLimit = $filterLimit <= 0? self::FILTER_LIMIT: $filterLimit; $filterOffset = intval($params['OFFSET']); $enableLimit = true; } else { $filterLimit = false; $filterOffset = false; } $ormParams = self::getListParams($params); if (is_null($ormParams)) { return false; } $filter = $ormParams['filter']; $filter['ACTIVE'] = 'Y'; $intranetInstalled = \Bitrix\Main\Loader::includeModule('intranet'); $voximplantInstalled = \Bitrix\Main\Loader::includeModule('voximplant'); $select = array( "ID", "LAST_NAME", "NAME", "LOGIN", "PERSONAL_PHOTO", "SECOND_NAME", "PERSONAL_BIRTHDAY", "WORK_POSITION", "PERSONAL_GENDER", "EXTERNAL_AUTH_ID", "WORK_PHONE", "PERSONAL_PHONE", "PERSONAL_MOBILE", "TIME_ZONE_OFFSET", "ACTIVE", "LAST_ACTIVITY_DATE", "COLOR" => "ST.COLOR", "STATUS" => "ST.STATUS", "IDLE" => "ST.IDLE", "MOBILE_LAST_DATE" => "ST.MOBILE_LAST_DATE", ); if($intranetInstalled) { $select[] = 'UF_PHONE_INNER'; $select[] = 'UF_DEPARTMENT'; } if ($voximplantInstalled) { $select[] = 'UF_VI_PHONE'; } $ormParams = Array( 'select' => $select, 'filter' => $filter, 'runtime' => Array( new \Bitrix\Main\Entity\ReferenceField( 'ST', '\Bitrix\Im\Model\StatusTable', array( "=ref.USER_ID" => "this.ID", ), array("join_type"=>"LEFT") ) ), ); if ($enableLimit) { $ormParams['offset'] = $filterOffset; $ormParams['limit'] = $filterLimit; } $orm = \Bitrix\Main\UserTable::getList($ormParams); $bots = \Bitrix\Im\Bot::getListCache(); $nameTemplate = \CSite::GetNameFormat(false); $users = array(); while ($user = $orm->fetch()) { if (isset($extranetUsers[$user['ID']])) { continue; } $tmpFile = \CFile::ResizeImageGet( $user["PERSONAL_PHOTO"], array('width' => 100, 'height' => 100), BX_RESIZE_IMAGE_EXACT, false, false, true ); if ($params['HR_PHOTO']) { $tmpFileHr = \CFile::ResizeImageGet( $user["PERSONAL_PHOTO"], array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true ); } $color = false; if (isset($user['COLOR']) && strlen($user['COLOR']) > 0) { $color = \Bitrix\Im\Color::getColor($user['COLOR']); } if (!$color) { $color = \CIMContactList::GetUserColor($user["ID"], $user['PERSONAL_GENDER'] == 'M'? 'M': 'F'); } $users[$user["ID"]] = Array( 'ID' => (int)$user["ID"], 'NAME' => \CUser::FormatName($nameTemplate, $user, true, false), 'FIRST_NAME' => $user['NAME'], 'LAST_NAME' => $user['LAST_NAME'], 'WORK_POSITION' => $user['WORK_POSITION'], 'COLOR' => $color, 'AVATAR' => !empty($tmpFile['src'])? $tmpFile['src']: '', 'GENDER' => $user['PERSONAL_GENDER'] == 'F'? 'F': 'M', 'BIRTHDAY' => $user['PERSONAL_BIRTHDAY'] instanceof \Bitrix\Main\Type\Date? $user['PERSONAL_BIRTHDAY']->format('d-m'): false, 'EXTRANET' => \CIMContactList::IsExtranet($user), 'NETWORK' => $user['EXTERNAL_AUTH_ID'] == \CIMContactList::NETWORK_AUTH_ID || $user['EXTERNAL_AUTH_ID'] == \Bitrix\Im\Bot::EXTERNAL_AUTH_ID && $bots[$user["ID"]]['TYPE'] == \Bitrix\Im\Bot::TYPE_NETWORK, 'BOT' => $user['EXTERNAL_AUTH_ID'] == \Bitrix\Im\Bot::EXTERNAL_AUTH_ID, 'CONNECTOR' => $user['EXTERNAL_AUTH_ID'] == "imconnector", 'EXTERNAL_AUTH_ID' => $user['EXTERNAL_AUTH_ID']? $user['EXTERNAL_AUTH_ID']: 'default', 'STATUS' => $user['STATUS'], 'IDLE' => $user['IDLE'] instanceof \Bitrix\Main\Type\DateTime? $user['IDLE']: false, 'LAST_ACTIVITY_DATE' => $user['MOBILE_LAST_DATE'] instanceof \Bitrix\Main\Type\DateTime? $user['MOBILE_LAST_DATE']: false, 'MOBILE_LAST_DATE' => $user['LAST_ACTIVITY_DATE'] instanceof \Bitrix\Main\Type\DateTime? $user['LAST_ACTIVITY_DATE']: false, 'DEPARTMENTS' => is_array($user['UF_DEPARTMENT']) && !empty($user['UF_DEPARTMENT'])? $user['UF_DEPARTMENT']: [], 'ABSENT' => \CIMContactList::formatAbsentResult($user["ID"]), ); if ($params['HR_PHOTO']) { $users[$user["ID"]]['AVATAR_HR'] = !empty($tmpFileHr['src'])? $tmpFileHr['src']: ''; } if ($voximplantInstalled) { $user["WORK_PHONE"] = \CVoxImplantPhone::Normalize($user["WORK_PHONE"]); if ($user["WORK_PHONE"]) { $users[$user["ID"]]['PHONES']['WORK_PHONE'] = $user['WORK_PHONE']; } $user["PERSONAL_MOBILE"] = \CVoxImplantPhone::Normalize($user["PERSONAL_MOBILE"]); if ($user["PERSONAL_MOBILE"]) { $users[$user["ID"]]['PHONES']['PERSONAL_MOBILE'] = $user['PERSONAL_MOBILE']; } $user["PERSONAL_PHONE"] = \CVoxImplantPhone::Normalize($user["PERSONAL_PHONE"]); if ($user["PERSONAL_PHONE"]) { $users[$user["ID"]]['PHONES']['PERSONAL_PHONE'] = $user['PERSONAL_PHONE']; } $user["UF_PHONE_INNER"] = preg_replace("/[^0-9\#\*]/i", "", $user["UF_PHONE_INNER"]); if ($user["UF_PHONE_INNER"]) { $users[$user["ID"]]['PHONES']['INNER_PHONE'] = $user["UF_PHONE_INNER"]; } } else { $users[$user["ID"]]['PHONES']['WORK_PHONE'] = $user['WORK_PHONE']; $users[$user["ID"]]['PHONES']['PERSONAL_MOBILE'] = $user['PERSONAL_MOBILE']; $users[$user["ID"]]['PHONES']['PERSONAL_PHONE'] = $user['PERSONAL_PHONE']; $users[$user["ID"]]['PHONES']['INNER_PHONE'] = $user["UF_PHONE_INNER"]; } } if ($params['JSON']) { foreach ($users as $key => $userData) { foreach ($userData as $field => $value) { if ($value instanceof \Bitrix\Main\Type\DateTime) { $users[$key][$field] = date('c', $value->getTimestamp()); } else if (is_string($value) && $value && in_array($field, Array('AVATAR', 'AVATAR_HR')) && strpos($value, 'http') !== 0) { $users[$key][$field] = \Bitrix\Im\Common::getPublicDomain().$value; } else if (is_array($value)) { $users[$key][$field] = array_change_key_case($value, CASE_LOWER); } } $users[$key] = array_change_key_case($users[$key], CASE_LOWER);; } } return $users; } public static function getListParams($params) { if (isset($params['FILTER']['SEARCH'])) { $filter = \Bitrix\Main\UserUtils::getUserSearchFilter(Array('FIND' => $params['FILTER']['SEARCH'])); if (empty($filter)) { return null; } } else { $filter = Array(); } $filter['=ACTIVE'] = 'Y'; $filter['=CONFIRM_CODE'] = false; foreach (\Bitrix\Main\UserTable::getExternalUserTypes() as $authId) { if ($authId != \Bitrix\Im\Bot::EXTERNAL_AUTH_ID) { $filter['!=EXTERNAL_AUTH_ID'][] = $authId; } } $filterByUsers = []; if (User::getInstance($params['CURRENT_USER'])->isExtranet()) { $groups = \Bitrix\Im\Integration\Socialnetwork\Extranet::getGroup(Array(), $params['CURRENT_USER']); if (is_array($groups)) { foreach ($groups as $group) { foreach ($group['USERS'] as $userId) { $filterByUsers[$userId] = $userId; } } $filterByUsers[$params['CURRENT_USER']] = $params['CURRENT_USER']; } } if ( $params['FILTER']['BUSINESS'] == 'Y' && \Bitrix\Main\Loader::includeModule('bitrix24') && !\CBitrix24BusinessTools::isLicenseUnlimited() ) { $businessUsers = \CBitrix24BusinessTools::getUnlimUsers(); if (User::getInstance($params['CURRENT_USER'])->isExtranet()) { $extranetBusinessResult = []; foreach ($filterByUsers as $userId) { if (in_array($userId, $businessUsers)) { $extranetBusinessResult[$userId] = $userId; } } $filterByUsers = $extranetBusinessResult; } else { foreach ($businessUsers as $userId) { $filterByUsers[$userId] = $userId; } } } if ($filterByUsers) { $filter['=ID'] = array_keys($filterByUsers); } return ['filter' => $filter]; } public static function getBusiness($userId = null, $options = array()) { $userId = \Bitrix\Im\Common::getUserId($userId); if (!$userId) { return false; } $pagination = isset($options['LIST'])? true: false; $limit = isset($options['LIST']['LIMIT'])? intval($options['LIST']['LIMIT']): 50; $offset = isset($options['LIST']['OFFSET'])? intval($options['LIST']['OFFSET']): 0; $list = Array(); $businessUsersAvailable = false; if (\Bitrix\Main\Loader::includeModule('bitrix24') && !\CBitrix24BusinessTools::isLicenseUnlimited()) { $businessUsers = \CBitrix24BusinessTools::getUnlimUsers(); if (User::getInstance($userId)->isExtranet()) { $extranetBusinessResult = []; $groups = \Bitrix\Im\Integration\Socialnetwork\Extranet::getGroup(Array(), $userId); if (is_array($groups)) { foreach ($groups as $group) { foreach ($group['USERS'] as $uid) { if (in_array($uid, $businessUsers)) { $extranetUserList[$uid] = $uid; } } } } $list = $extranetBusinessResult; } else { foreach ($businessUsers as $userId) { $list[$userId] = $userId; } } $businessUsersAvailable = true; } $count = count($list); $list = array_slice($list, $offset, $limit); if ($options['USER_DATA'] == 'Y') { $result = Array(); $getOptions = Array(); if ($options['JSON'] == 'Y') { $getOptions['JSON'] = 'Y'; } foreach ($list as $userId) { $result[] = \Bitrix\Im\User::getInstance($userId)->getArray($getOptions); } } else { $result = array_values($list); } if ($pagination) { $result = Array('TOTAL' => $count, 'RESULT' => $result, 'AVAILABLE' => $businessUsersAvailable); if ($options['JSON'] == 'Y') { $result = array_change_key_case($result, CASE_LOWER); } } else { if (!$businessUsersAvailable) { $result = false; } } return $result; } public static function getMessages($userId = null, $options = Array()) { $userId = \Bitrix\Im\Common::getUserId($userId); if (!$userId) { return false; } $filter = Array( '=AUTHOR_ID' => $userId ); if (isset($options['FIRST_ID'])) { $order = array(); if (intval($options['FIRST_ID']) > 0) { $filter['>ID'] = $options['FIRST_ID']; } } else { $order = Array('ID' => 'DESC'); if (isset($options['LAST_ID']) && intval($options['LAST_ID']) > 0) { $filter['<ID'] = intval($options['LAST_ID']); } } if (isset($options['LIMIT'])) { $options['LIMIT'] = intval($options['LIMIT']); $limit = $options['LIMIT'] >= 500? 500: $options['LIMIT']; } else { $limit = 50; } $skipMessage = isset($options['SKIP_MESSAGE']) && $options['SKIP_MESSAGE'] == 'Y'; $select = Array( 'ID', 'CHAT_ID', 'DATE_CREATE', 'CHAT_TITLE' => 'CHAT.TITLE' ); if (!$skipMessage) { $select[] = 'MESSAGE'; } $orm = \Bitrix\Im\Model\MessageTable::getList(array( 'filter' => $filter, 'select' => $select, 'order' => $order, 'limit' => $limit )); $messages = Array(); $messagesChat = Array(); while($message = $orm->fetch()) { $messages[$message['ID']] = Array( 'ID' => (int)$message['ID'], 'DATE' => $message['DATE_CREATE'], 'TEXT' => (string)$message['MESSAGE'], ); if ($skipMessage) { unset($messages[$message['ID']]['TEXT']); } $messagesChat[$message['ID']] = Array( 'ID' => (int)$message['ID'], 'CHAT_ID' => (int)$message['CHAT_ID'] ); } $params = \CIMMessageParam::Get(array_keys($messages)); $fileIds = Array(); foreach ($params as $messageId => $param) { $messages[$messageId]['params'] = empty($param)? null: $param; if (isset($param['FILE_ID'])) { foreach ($param['FILE_ID'] as $fileId) { $fileIds[$messagesChat[$messageId]['CHAT_ID']][$fileId] = $fileId; } } } $messages = \CIMMessageLink::prepareShow($messages, $params); $files = array(); foreach ($fileIds as $chatId => $fileId) { if ($result = \CIMDisk::GetFiles($chatId, $fileId)) { $files = array_merge($files, $result); } } $result = Array( 'MESSAGES' => $messages, 'FILES' => $files, ); if ($options['JSON']) { foreach ($result['MESSAGES'] as $key => $value) { if ($value['DATE'] instanceof \Bitrix\Main\Type\DateTime) { $result['MESSAGES'][$key]['DATE'] = date('c', $value['DATE']->getTimestamp()); } $result['MESSAGES'][$key] = array_change_key_case($result['MESSAGES'][$key], CASE_LOWER); } $result['MESSAGES'] = array_values($result['MESSAGES']); foreach ($result['FILES'] as $key => $value) { if ($value['date'] instanceof \Bitrix\Main\Type\DateTime) { $result['FILES'][$key]['date'] = date('c', $value['date']->getTimestamp()); } foreach (['urlPreview', 'urlShow', 'urlDownload'] as $field) { $url = $result['FILES'][$key][$field]; if (is_string($url) && $url && strpos($url, 'http') !== 0) { $result['FILES'][$key][$field] = \Bitrix\Im\Common::getPublicDomain().$url; } } } $result = array_change_key_case($result, CASE_LOWER); } return $result; } }