• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session/update.php
  • Класс: BitrixImOpenLinesSessionUpdate
  • Вызов: Update::modifyOnNotPause
private function modifyOnNotPause(): DateTime
{
	$dateCrmClose = new DateTime();
	$dateCrmClose->add('1 DAY');
	$dateCrmClose->add($this->session->getConfig('AUTO_CLOSE_TIME').' SECONDS');

	$fullCloseTime = $this->session->getConfig('FULL_CLOSE_TIME');

	/** var DateTime */
	$dateClose = clone $this->newData['DATE_MODIFY'];

	if (
		isset($this->newData['USER_ID'])
		&& User::getInstance($this->newData['USER_ID'])->isConnector()
	)
	{
		if (
			$this->session->getSessionField('VOTE_SESSION')
			&& $this->checkIfWaitAction()
		)
		{
			$this->setStatus(Session::STATUS_WAIT_CLIENT);
			if (!empty($fullCloseTime))
			{
				$dateClose->add($fullCloseTime . ' MINUTES');
			}

			$this->updateDateCrmClose = $dateCrmClose;
		}
		else
		{
			$dateClose->add('1 MONTH');
			$this->updateCheckTable['DATE_CLOSE'] = $dateClose;
			$this->updateChatSession['WAIT_ACTION'] = "N";
			$this->session->setSessionField('WAIT_ACTION', 'N');
			$this->newData['WAIT_ACTION'] = "N";

			if (
				$this->session->getSessionField('STATUS') >= Session::STATUS_OPERATOR
				|| $this->session->getSessionField('STATUS') == Session::STATUS_ANSWER
			)
			{
				$this->updateDateCrmClose = $dateCrmClose;
			}

			if ($this->session->getSessionField('WAIT_ANSWER') === 'N')
			{
				$status = $this->session->getSessionField('STATUS') >= Session::STATUS_OPERATOR
					? Session::STATUS_CLIENT_AFTER_OPERATOR
					: Session::STATUS_CLIENT;
				$this->setStatus($status);
			}
		}
	}
	else
	{
		if (isset($this->newData['SKIP_DATE_CLOSE']))
		{
			$dateClose->add('1 MONTH');
		}
		elseif (
			(
				$this->session->getSessionField('WAIT_ANSWER') == 'Y'
				&& $this->newData['WAIT_ANSWER'] != 'N'
			)
			||
			(
				isset($this->newData['WAIT_ANSWER'])
				&& $this->newData['WAIT_ANSWER'] == 'Y'
			)
		)
		{
			$status = $this->session->getSessionField('STATUS') >= Session::STATUS_CLIENT_AFTER_OPERATOR
				? Session::STATUS_CLIENT_AFTER_OPERATOR
				: Session::STATUS_CLIENT;
			$this->setStatus($status);

			$dateClose->add('1 MONTH');

			if ($this->session->getSessionField('STATUS') >=  Session::STATUS_OPERATOR)
			{
				$this->updateDateCrmClose = $dateCrmClose;
			}
		}
		elseif ($this->checkIfWaitAction())
		{
			$this->setStatus(Session::STATUS_WAIT_CLIENT);
			if (!empty($fullCloseTime))
			{
				$dateClose->add($fullCloseTime . ' MINUTES');
			}

			$this->updateDateCrmClose = $dateCrmClose;
		}
		else
		{
			$this->setStatus(Session::STATUS_OPERATOR);
			$dateClose->add($this->session->getConfig('AUTO_CLOSE_TIME') . ' SECONDS');

			$this->updateDateCrmClose = $dateCrmClose;
		}
	}

	return $dateClose;
}