• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/userpause.php
  • Класс: BitrixImOpenLinesUserPause
  • Вызов: UserPause::getHistory
static function getHistory(DateTime $dateStart, ?DateTime $dateEnd = null, int $configId = 0, int $userId = 0): array
{
	if (!Loader::includeModule('im'))
	{
		return [];
	}

	$history = UserLogTable::query()
		->setSelect([
			'USER_ID',
			'DATA',
			'DATE_CREATE',
		])
		->setOrder(['DATE_CREATE' => 'ASC'])
		->addFilter('=TYPE', Log::TYPE_PAUSE)
		->addFilter('>=DATE_CREATE', $dateStart)
		->addFilter('addFilter('=USER_ID', $userId);
	}
	elseif ($configId)
	{
		$subQuery = ConfigQueueTable::query()
			->setSelect(['ENTITY_ID'])
			->where('CONFIG_ID', $configId)
			->where('ENTITY_TYPE', 'user')
		;

		$history->whereIn('USER_ID', $subQuery);
	}

	$result = $startDates = [];
	foreach ($history->fetchAll() as $row)
	{
		if (!isset($startDates[$row['USER_ID']]))
		{
			$startDates[$row['USER_ID']] = null;
		}

		if (!isset($result[$row['USER_ID']]))
		{
			$user = User::getInstance($row['USER_ID']);
			$result[$row['USER_ID']]['user'] = (new RestAdapter($user))->toRestFormat();
		}

		if ($row['DATA'] === 'Y')
		{
			$startDates[$row['USER_ID']] = $row['DATE_CREATE'];
		}
		else
		{
			$result[$row['USER_ID']]['history'][] = [
				'start' => $startDates[$row['USER_ID']] ? $startDates[$row['USER_ID']]->toString() : null,
				'end' => $row['DATE_CREATE']->toString(),
			];

			$startDates[$row['USER_ID']] = null;
		}
	}

	foreach ($startDates as $userId => $startDate)
	{
		if ($startDate)
		{
			$result[$userId]['history'][] = [
				'start' => $startDate->toString(),
				'end' => null
			];
		}
	}

	return $result;
}