• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session.php
  • Класс: BitrixImOpenLinesSession
  • Вызов: Session::dismissedOperatorFinish
public function dismissedOperatorFinish()
{
	if (empty($this->session))
	{
		return false;
	}

	$update = [];

	$this->session['CLOSED'] = 'Y';
	$update['FORCE_CLOSE'] = 'Y';

	if (!empty($this->session['DATE_LAST_MESSAGE']))
	{
		$closeDate = $this->session['DATE_LAST_MESSAGE']->add('60 MINUTES');
	}
	else
	{
		$closeDate = new DateTime();
	}

	if ($this->session['CHAT_ID'])
	{
		$chatData = ChatTable::getById($this->session['CHAT_ID'])->fetch();
		$lastMessageId = $chatData['LAST_MESSAGE_ID'];
	}
	else
	{
		$lastMessageId = 0;
	}

	$update['WAIT_ACTION'] = 'N';
	$update['WAIT_ANSWER'] = 'N';
	$update['WAIT_VOTE'] = 'N';
	$update['CLOSED'] = 'Y';

	if (!(
		$this->session['CLOSED'] == 'Y'
		|| $this->session['SPAM'] == 'Y'
		|| $this->session['WAIT_ACTION'] == 'Y' && $this->session['WAIT_ANSWER'] == 'N'
	))
	{
		if ($this->config['ACTIVE'] != 'N')
		{
			if (!User::getInstance($this->session['OPERATOR_ID'])->isBot())
			{
				$update['DATE_OPERATOR_CLOSE'] = $closeDate;
			}
			if ($this->session['DATE_CREATE'])
			{
				$update['TIME_CLOSE'] = $closeDate->getTimestamp()-$this->session['DATE_CREATE']->getTimestamp();
			}
		}
		$update['DATE_MODIFY'] = $closeDate;
	}

	if ($this->session['CRM_ACTIVITY_ID'] > 0)
	{
		$crmManager = new Crm($this);
		if ($crmManager->isLoaded())
		{
			$crmManager->setSessionClosed(['DATE_CLOSE' => $closeDate]);
		}
	}

	$update['DATE_CLOSE'] = $closeDate;

	if ($this->session['TIME_CLOSE'] <= 0 && $this->session['DATE_CREATE'])
	{
		$update['TIME_CLOSE'] = $update['DATE_CLOSE']->getTimestamp()-$this->session['DATE_CREATE']->getTimestamp();
	}
	if (User::getInstance($this->session['OPERATOR_ID'])->isBot() && $this->session['TIME_BOT'] <= 0 && $this->session['DATE_CREATE'])
	{
		$update['TIME_BOT'] = $update['DATE_CLOSE']->getTimestamp()-$this->session['DATE_CREATE']->getTimestamp();
	}

	if ($this->session['CHAT_ID'])
	{
		$update['END_ID'] = $lastMessageId;
	}

	Im::chatHide($this->session['CHAT_ID']);

	//The data in the chat is not specially updated in order to avoid any notifications.
	$this->update($update);

	Debug::addSession($this,  __METHOD__, ['update' => $update]);
	$this->addEventToLog(Library::EVENT_SESSION_DISMISSED_OPERATOR_FINISH, $update);

	return true;
}