- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/chat.php
- Класс: BitrixImOpenLinesChat
- Вызов: Chat::updateFieldData
public function updateFieldData($fields)
{
$result = new Result;
$updateDate = [];
if(!$this->isDataLoaded())
{
$result->addError(new Error(Loc::getMessage('IMOL_CHAT_ERROR_NOT_LOAD_DATA'), 'IMOL_CHAT_ERROR_NOT_LOAD_DATA', __METHOD__, ['chat' => $this->chat]));
}
if($result->isSuccess() && is_array($fields))
{
foreach ($fields as $fieldType => $fieldData)
{
if (in_array($fieldType, [self::FIELD_CRM, self::FIELD_SESSION, self::FIELD_LIVECHAT]) && !empty($fieldData))
{
if ($fieldType == self::FIELD_SESSION)
{
$data = self::getFieldData($fieldType);
if (isset($fieldData['CRM']))
{
$data['CRM'] = $fieldData['CRM'];
}
if (isset($fieldData['CRM_ENTITY_TYPE']))
{
$data['CRM_ENTITY_TYPE'] = $fieldData['CRM_ENTITY_TYPE'];
}
if (isset($fieldData['CRM_ENTITY_ID']))
{
$data['CRM_ENTITY_ID'] = $fieldData['CRM_ENTITY_ID'];
}
if (isset($fieldData['PAUSE']))
{
$data['PAUSE'] = $fieldData['PAUSE'];
}
if (isset($fieldData['WAIT_ACTION']))
{
$data['WAIT_ACTION'] = $fieldData['WAIT_ACTION'];
}
if (isset($fieldData['ID']))
{
$data['ID'] = $fieldData['ID'];
}
if (isset($fieldData['DATE_CREATE']))
{
$data['DATE_CREATE'] = $fieldData['DATE_CREATE'] instanceof DateTime? $fieldData['DATE_CREATE']->getTimestamp(): intval($fieldData['DATE_CREATE']);
}
if (isset($fieldData['LINE_ID']) && intval($fieldData['LINE_ID']) > 0)
{
$data['LINE_ID'] = intval($fieldData['LINE_ID']);
}
if (isset($fieldData['BLOCK_DATE']))
{
$data['BLOCK_DATE'] = $fieldData['BLOCK_DATE'] instanceof DateTime? $fieldData['BLOCK_DATE']->getTimestamp(): (int)$fieldData['BLOCK_DATE'];
}
if (isset($fieldData['BLOCK_REASON']))
{
$data['BLOCK_REASON'] = $fieldData['BLOCK_REASON'];
}
$this->chat[self::getFieldName($fieldType)] = $data['CRM'].'|'
.$data['CRM_ENTITY_TYPE'].'|'
.$data['CRM_ENTITY_ID'].'|'
.$data['PAUSE'].'|'
.$data['WAIT_ACTION'].'|'
.$data['ID'].'|'
.$data['DATE_CREATE'].'|'
.$data['LINE_ID'].'|'
.$data['BLOCK_DATE'].'|'
.$data['BLOCK_REASON'];
$updateDate[self::getFieldName($fieldType)] = $this->chat[self::getFieldName($fieldType)];
}
else if ($fieldType == self::FIELD_CRM)
{
$strungData = '';
$data = self::getFieldData($fieldType);
if (isset($fieldData['LEAD']))
{
$data['LEAD'] = $fieldData['LEAD'];
}
if (isset($fieldData['COMPANY']))
{
$data['COMPANY'] = $fieldData['COMPANY'];
}
if (isset($fieldData['CONTACT']))
{
$data['CONTACT'] = $fieldData['CONTACT'];
}
if (isset($fieldData['DEAL']))
{
$data['DEAL'] = $fieldData['DEAL'];
}
foreach ($data as $type => $value)
{
if(!empty($strungData))
$strungData .= '|';
$strungData .= $type . '|' . $value;
}
if(!empty($strungData))
{
$updateDate[self::getFieldName($fieldType)] = $this->chat[self::getFieldName($fieldType)] = $strungData;
}
}
elseif ($fieldType == self::FIELD_LIVECHAT)
{
$data = self::getFieldData($fieldType);
if (isset($fieldData['READED']))
{
$data['READED'] = $fieldData['READED'];
}
if (isset($fieldData['READED_ID']))
{
$data['READED_ID'] = intval($fieldData['READED_ID']);
}
if (isset($fieldData['READED_TIME']))
{
$data['READED_TIME'] = $fieldData['READED_TIME'] instanceof DateTime? date('c', $fieldData['READED_TIME']->getTimestamp()): false;
}
if (isset($fieldData['SESSION_ID']))
{
$data['SESSION_ID'] = intval($fieldData['SESSION_ID']);
}
if (isset($fieldData['SHOW_FORM']))
{
$data['SHOW_FORM'] = $fieldData['SHOW_FORM'] == 'N'? 'N': 'Y';
}
if (isset($fieldData['WELCOME_FORM_NEEDED']))
{
$data['WELCOME_FORM_NEEDED'] = $fieldData['WELCOME_FORM_NEEDED'] === 'N'? 'N': 'Y';
}
if (isset($fieldData['WELCOME_TEXT_SENT']))
{
$data['WELCOME_TEXT_SENT'] = $fieldData['WELCOME_TEXT_SENT'] === 'N'? 'N': 'Y';
}
$this->chat[self::getFieldName($fieldType)] = $data['READED'].'|'
.$data['READED_ID'].'|'
.$data['READED_TIME'].'|'
.$data['SESSION_ID'].'|'
.$data['SHOW_FORM'].'|'
.$data['WELCOME_FORM_NEEDED'].'|'
.$data['WELCOME_TEXT_SENT'];
$updateDate[self::getFieldName($fieldType)] = $this->chat[self::getFieldName($fieldType)];
}
}
}
}
if($result->isSuccess() && empty($updateDate))
{
$result->addError(new Error(Loc::getMessage('IMOL_CRM_ERROR_NOT_GIVEN_CORRECT_DATA'), self::IMOL_CRM_ERROR_NOT_GIVEN_CORRECT_DATA, __METHOD__));
}
if($result->isSuccess())
{
$rawUpdate = ChatTable::update($this->chat['ID'], $updateDate);
if(!$rawUpdate->isSuccess())
{
$result->addErrors($rawUpdate->getErrors());
}
}
if($result->isSuccess())
{
$users = [];
$relationList = RelationTable::getList([
"select" => array("ID", "USER_ID", "EXTERNAL_AUTH_ID" => "USER.EXTERNAL_AUTH_ID"),
"filter" => array(
"=CHAT_ID" => $this->chat['ID']
)
]);
while ($relation = $relationList->fetch())
{
if (
!User::getInstance($relation['USER_ID'])->isBot() &&
!User::getInstance($relation['USER_ID'])->isNetwork() &&
(isset($fields[self::FIELD_LIVECHAT]) || !User::getInstance($relation['USER_ID'])->isConnector())
)
{
CIMContactList::CleanChatCache($relation['USER_ID']);
$users[] = $relation['USER_ID'];
}
}
if (!empty($users))
{
if (isset($updateDate['NAME']))
{
$updateDate['NAME'] = htmlspecialcharsbx($updateDate['NAME']);
}
PullEvent::add($users, Array(
'module_id' => 'im',
'command' => 'chatUpdateParams',
'params' => Array(
'dialogId' => 'chat'.$this->chat['ID'],
'chatId' => (int)$this->chat['ID'],
'params' => array_change_key_case($updateDate)
),
'extra' => BitrixImCommon::getPullExtra()
));
}
}
return $result;
}