• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/automation/engine/template.php
  • Класс: Bitrix\Crm\Automation\Engine\Template
  • Вызов: Template::convertTemplate
protected function convertTemplate()
{
	$this->robots = array();

	$raw = $this->getBizprocTemplate();
	if (!is_array($raw) || !isset($raw['TEMPLATE']))
	{
		return false; // BP template is lost.
	}

	if (!empty($raw['PARAMETERS']) || !empty($raw['VARIABLES']) || !empty($raw['CONSTANTS']))
	{
		$this->isExternalModified = true;
		return false; // modified or incorrect.
	}

	if (empty($raw['TEMPLATE'][0]['Children']) || !is_array($raw['TEMPLATE'][0]['Children']))
		return true;

	if (count($raw['TEMPLATE'][0]['Children']) > 1)
	{
		$this->isExternalModified = true;
		return false; // modified or incorrect.
	}

	$parallelActivity = $raw['TEMPLATE'][0]['Children'][0];
	if (!$parallelActivity || $parallelActivity['Type'] !== static::$parallelActivityType)
	{
		$this->isExternalModified = true;
		return false; // modified or incorrect.
	}

	foreach ($parallelActivity['Children'] as $sequence)
	{
		$delay = $condition = null;
		$robotsCnt = 0;
		foreach ($sequence['Children'] as $activity)
		{
			if ($activity['Type'] === static::$delayActivityType)
			{
				$delay = $activity;
				continue;
			}

			if ($activity['Type'] === static::$conditionActivityType)
			{
				$condition = Condition::convertBizprocActivity($activity);
				if ($condition === false)
				{
					$this->isExternalModified = true;
					$this->robots = array();
					return false; // modified or incorrect.
				}
			}

			if (!$this->isRobot($activity))
			{
				$this->isExternalModified = true;
				$this->robots = array();
				return false; // modified or incorrect.
			}

			$robotActivity = new Robot($activity);
			if ($delay !== null)
			{
				$delayInterval = DelayInterval::createFromActivityProperties($delay['Properties']);
				$robotActivity->setDelayInterval($delayInterval);
				$robotActivity->setDelayName($delay['Name']);
				$delay = null;
			}

			if ($condition !== null)
			{
				$robotActivity->setCondition($condition);
				$condition = null;
			}

			if ($robotsCnt > 0)
			{
				$robotActivity->setExecuteAfterPrevious();
			}

			++$robotsCnt;
			$this->robots[] = $robotActivity;
		}
	}

	return $this->robots;
}