- Модуль: 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;
}