• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session/update.php
  • Класс: BitrixImOpenLinesSessionUpdate
  • Вызов: Update::updateStatus
private function updateStatus(): void
{
	if (
		isset($this->newData['SKIP_CHANGE_STATUS'])
		&& $this->newData['SKIP_CHANGE_STATUS'] === true
		&& isset($this->newData['STATUS'])
	)
	{
		unset($this->newData['STATUS']);
	}

	unset(
		$this->newData['USER_ID'],
		$this->newData['SKIP_DATE_CLOSE'],
		$this->newData['SKIP_CHANGE_STATUS'],
		$this->newData['FORCE_CLOSE'],
		$this->newData['INPUT_MESSAGE']
	);

	if (
		!empty($this->newData['STATUS'])
		&& $this->session->getSessionField('STATUS') != $this->newData['STATUS'])
	{
		$this->session->chat->updateSessionStatus($this->newData['STATUS']);

		if (
			(int)$this->session->getSessionField('STATUS') !== Session::STATUS_OPERATOR
			&& (int)$this->newData['STATUS'] === Session::STATUS_OPERATOR
		)
		{
			$this->isResponseOperator = true;
		}
		elseif (
			(int)$this->session->getSessionField('STATUS') === Session::STATUS_OPERATOR
			&& (int)$this->newData['STATUS'] !== Session::STATUS_OPERATOR
		)
		{
			$this->isResponseOperator = false;
		}

		$sessionClose = false;
		if (
			isset($this->newData['CLOSED'])
			&& $this->newData['CLOSED'] === 'Y'
		)
		{
			$sessionClose = true;
		}

		if (
			!empty($this->session->getSessionField('SOURCE'))
			&& Connector::isLiveChat($this->session->getSessionField('SOURCE'))
			&& !empty($this->session->getSessionField('USER_CODE'))
		)
		{
			$chatEntityId = BitrixImOpenLinesChat::parseLinesChatEntityId($this->session->getSessionField('USER_CODE'));
			if (!empty($chatEntityId['connectorChatId']))
			{
				BitrixPullEvent::add($this->session->getSessionField('USER_ID'), [
					'module_id' => 'imopenlines',
					'command' => 'sessionStatus',
					'params' => [
						'chatId' => (int)$chatEntityId['connectorChatId'],
						'sessionId' => (int)$this->session->getSessionField('ID'),
						'sessionStatus' => (int)$this->newData['STATUS'],
						'spam' => $this->session->getSessionField('SPAM') == 'Y',
						'sessionClose' => $sessionClose
					]
				]);
			}
		}
	}
}