• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/chat.php
  • Класс: BitrixImOpenLinesChat
  • Вызов: Chat::setPauseFlag
public function setPauseFlag($params): Result
{
	$result = new Result();

	$pause = $params['ACTIVE'] === 'Y'? 'Y': 'N';
	$sessionField = $this->getFieldData(self::FIELD_SESSION);

	if ($sessionField['PAUSE'] === $pause)
	{
		$result->setResult(true);
	}
	elseif($this->isDataLoaded())
	{
		$session = new Session();
		$session->setChat($this);

		$resultLoad = $session->load([
			'USER_CODE' => $this->chat['ENTITY_ID']
		]);
		if ($resultLoad)
		{
			if($this->validationAction($session->getData('CHAT_ID')))
			{
				if(
					empty($params['USER_ID'])
					|| $params['USER_ID'] == $session->getData('OPERATOR_ID')
				)
				{
					$queueManager = Queue::initialization($session);

					if($queueManager && $queueManager->startLock())
					{
						$session->pause($pause == 'Y');

						$this->updateFieldData([self::FIELD_SESSION => [
							'PAUSE' => $pause
						]]);

						if ($pause == 'Y')
						{
							$datePause = new DateTime();
							$datePause->add('1 WEEK');

							$formattedDate = FormatDate('d F', $datePause->getTimestamp());
							Im::addMessage([
								'TO_CHAT_ID' => $this->chat['ID'],
								'MESSAGE' => Loc::getMessage('IMOL_CHAT_ASSIGN_ON', ['#DATE#' => '[b]'.$formattedDate.'[/b]']),
								'SYSTEM' => 'Y',
							]);
						}
						else
						{
							Im::addMessage([
								'TO_CHAT_ID' => $this->chat['ID'],
								'MESSAGE' => Loc::getMessage('IMOL_CHAT_ASSIGN_OFF'),
								'SYSTEM' => 'Y',
							]);
						}

						$queueManager->stopLock();
						$result->setResult(true);
					}
				}
				elseif ($params['USER_ID'] != $session->getData('OPERATOR_ID'))
				{
					$result->addError(new Error('Attempt to pin / unpin a chat by a user who is not an operator', self::ERROR_USER_NOT_OPERATOR, __METHOD__, ['USER_ID' => $params['USER_ID'], 'OPERATOR_ID' => $session->getData('OPERATOR_ID')]));
				}
			}
			else
			{
				$result->addError(new Error(Loc::getMessage('IMOL_CHAT_ERROR_NOT_LOAD_DATA'), 'IMOL_CHAT_ERROR_NOT_LOAD_DATA', __METHOD__, ['chat' => $this->chat]));
			}
		}
		else
		{
			$result->addError(new Error(Loc::getMessage('IMOL_CHAT_ERROR_ANSWER_NOT_LOAD_SESSION'), 'IMOL_CHAT_ERROR_ANSWER_NOT_LOAD_SESSION', __METHOD__, $params));
		}
	}
	else
	{
		$result->addError(new Error('Chat failed to load', 'NOT_LOAD_CHAT', __METHOD__, $params));
	}

	return $result;
}