• Модуль: conversion
  • Путь к файлу: ~/bitrix/modules/conversion/lib/generatorcontext.php
  • Класс: BitrixConversionGeneratorContext
  • Вызов: GeneratorContext::generateInitialData
public function generateInitialData(Date $from)
{
	if (   ($to = Option::get('conversion', 'START_DATE_TIME', 'undefined')) != 'undefined'
		&& DateTime::isCorrect($to, 'Y-m-d H:i:s')
		&& ($to = new DateTime($to, 'Y-m-d H:i:s'))
		&&  $to->format('Y-m-d H:i:s') > $from->format('Y-m-d H:i:s')
		&& Option::get('conversion', 'GENERATE_INITIAL_DATA', 'undefined') == 'undefined')
	{
		Option::set('conversion', 'GENERATE_INITIAL_DATA', 'generated');

		$context = new self;

		// generate data

		$data = array();

		foreach (EventManager::getInstance()->findEventHandlers('conversion', 'OnGenerateInitialData') as $handler)
		{
			$result = ExecuteModuleEventEx($handler, array($from, $to)); // TODO validate

			foreach ($result as $row)
			{
				$context->id = null;
				$context->attributes = array();
				$context->setAttributes($row['ATTRIBUTES']);
				$context->save();

				if ($dayCounters =& $data[$context->id])
				{
					self::appendDayCounters($dayCounters, $row['DAY_COUNTERS']);
				}
				else
				{
					$dayCounters = $row['DAY_COUNTERS'];
				}
			}
		}

		unset($dayCounters);

		// save data to database

		$numerators = CounterManager::getTypes(array('GROUP' => 'day'));
		unset($numerators['conversion_visit_day']);

		foreach ($data as $id => $dayCounters)
		{
			$context->id = $id;

			foreach ($dayCounters as $day => $counters)
			{
				$day = new Date($day, 'Y-m-d');

				$visitSum      = 0;
				$visitQuantity = 0;

				unset($counters['conversion_visit_day']);

				foreach ($counters as $name => $value)
				{
					$context->addCounter($day, $name, $value);

					if ($numerators[$name])
					{
						$visitSum      += $value;
						$visitQuantity += 1;
					}
				}

				$context->addCounter($day, 'conversion_visit_day', $visitQuantity ? round($visitSum / $visitQuantity * 100) + 1 : 1);
			}
		}
	}
}