• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/tools/correction.php
  • Класс: BitrixImOpenLinesToolsCorrection
  • Вызов: Correction::repairSessionsThatNotShown
static function repairSessionsThatNotShown(bool $correction = true, int $closeDay = -1, int $limit = 0): array
{
	$result = [
		'CLOSE' => [],
		'UPDATE' => []
	];

	$oldCloseTime = new DateTime();
	$queueTime = new DateTime();
	if ($closeDay > 0)
	{
		$oldCloseTime->add('-' . $closeDay . ' DAY');
	}

	$sessions = self::setSessionsThatNotShown($limit);

	foreach ($sessions as $session)
	{
		$message = 0;

		if (!empty($session['LAST_MESSAGE_ID']) && Loader::includeModule('im'))
		{
			$message = MessageTable::getById($session['LAST_MESSAGE_ID'])->fetch();
		}

		if (empty($message) || ($closeDay > 0 && $message['DATE_CREATE'] instanceof DateTime && $message['DATE_CREATE']->getTimestamp() < $oldCloseTime->getTimestamp()))
		{
			if ($correction)
			{
				$chat = new Chat($session['CHAT_ID']);

				$chat->dismissedOperatorFinish();
			}

			$result['CLOSE'][] = $session['SESSION_ID'];
		}
		else
		{
			if ($correction)
			{
				$resultSessionUpdate = SessionCheckTable::update($session['SESSION_ID'], ['DATE_QUEUE' => $queueTime]);

				if ($resultSessionUpdate->isSuccess())
				{
					$result['UPDATE'][] = $session['SESSION_ID'];
				}
			}
			else
			{
				$result['UPDATE'][] = $session['SESSION_ID'];
			}
		}
	}

	return $result;
}