• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/ustat/ustat.php
  • Класс: BitrixIntranetUStatUStat
  • Вызов: UStat::recountHourlyCompanyActivity
static function recountHourlyCompanyActivity()
{
	$currentHour = new TypeDateTime(date('Y-m-d H:00:00'), 'Y-m-d H:00:00');

	// last record
	$lastRow = DepartmentHourTable::getRow(array(
		'filter' => array('=DEPT_ID' => 0, '<=HOUR' => ConvertTimeStamp($currentHour->getTimestamp(), "FULL")),
		'order' => array('HOUR' => 'DESC'),
		'limit' => 1
	));

	if (!empty($lastRow))
	{
		$lastRowDate = is_object($lastRow['HOUR']) ? $lastRow['HOUR'] : new TypeDateTime($lastRow['HOUR'], 'Y-m-d H:00:00');
		$lastActivity = static::getHourlyCompanyActivitySince($lastRowDate);
	}
	else
	{
		// first ever company activity
		$lastActivity = static::getHourlyCompanyActivitySince(null);
	}

	// update db
	foreach ($lastActivity as $activity)
	{
		// skip if nothing changed for last hour
		if ($lastRow['HOUR'] === $activity['HOUR'] && $lastRow['TOTAL'] === $activity['TOTAL'])
		{
			continue;
		}

		$activityHour = is_object($activity['HOUR']) ? $activity['HOUR'] : new TypeDateTime($activity['HOUR'], 'Y-m-d H:00:00');
		unset($activity['HOUR']);

		$updResult = DepartmentHourTable::update(array('DEPT_ID' => 0, 'HOUR' => $activityHour), $activity);

		if (!$updResult->getAffectedRowsCount())
		{
			try
			{
				DepartmentHourTable::add(array_merge(array('DEPT_ID' => 0, 'HOUR' => $activityHour), $activity));
			}
			catch (SqlException $e) {}
		}
	}

	return '\'.__METHOD__.'();';
}