Your IP : 18.223.122.196
<?php
namespace Bitrix\Im;
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
class User
{
private static $instance = Array();
private $userId = 0;
private $userData = null;
static $formatNameTemplate = 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['LIVECHAT'])
{
$imolUserData = \Bitrix\ImOpenLines\Queue::getUserData($options['LIVECHAT'], $this->getId(), true);
if ($imolUserData)
{
$result = array_merge($result, $imolUserData);
$result['AVATAR_HR'] = $result['AVATAR'];
}
}
if ($options['JSON'])
{
foreach ($result as $key => $value)
{
if ($value instanceof \Bitrix\Main\Type\DateTime)
{
$result[$key] = date('c', $value->getTimestamp());
}
else if (is_string($value) && is_string($key) && 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' => \Bitrix\Im\User::formatFullNameFromDatabase($user),
'FIRST_NAME' => \Bitrix\Im\User::formatNameFromDatabase($user),
'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 && is_string($field) && 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;
}
public static function formatNameFromDatabase($fields)
{
if (empty($fields['NAME']) && empty($fields['LAST_NAME']))
{
if (in_array($fields['EXTERNAL_AUTH_ID'], \Bitrix\Main\UserTable::getExternalUserTypes()))
{
return Loc::getMessage('IM_USER_GUEST_NAME');
}
else if (!empty($fields['LOGIN']))
{
return $fields['LOGIN'];
}
else
{
return Loc::getMessage('IM_USER_ANONYM_NAME');
}
}
return $fields['NAME'];
}
public static function formatFullNameFromDatabase($fields)
{
if (is_null(self::$formatNameTemplate))
{
self::$formatNameTemplate = \CSite::GetNameFormat(false);
}
if (empty($fields['NAME']) && empty($fields['LAST_NAME']))
{
if (in_array($fields['EXTERNAL_AUTH_ID'], \Bitrix\Main\UserTable::getExternalUserTypes()))
{
return Loc::getMessage('IM_USER_GUEST_NAME');
}
else if (!empty($fields['LOGIN']))
{
return $fields['LOGIN'];
}
else
{
return Loc::getMessage('IM_USER_ANONYM_NAME');
}
}
return \CUser::FormatName(self::$formatNameTemplate, $fields, true, false);
}
}