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

	$raw = $this->template;
	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
		|| (isset($parallelActivity['Activated']) && $parallelActivity['Activated'] === 'N')
	)
	{
		$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
				|| $activity['Type'] === static::$robotDelayActivityType)
			{
				$delay = $activity;
				continue;
			}

			if ($activity['Type'] === static::$conditionActivityType)
			{
				$condition = ConditionGroup::convertBizprocActivity($activity, $this->getDocumentType(), $this);
				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']);
				$delayInterval->setActivated(CBPHelper::getBool($delay['Activated'] ?? true));

				$robotActivity->setDelayInterval($delayInterval);
				$robotActivity->setDelayName($delay['Name']);

				if($delayInterval->isActivated() !== $robotActivity->isActivated())
				{
					$this->isExternalModified = true;
					$this->robots = [];

					return false; // modified
				}

				$delay = null;
			}

			if ($condition !== null)
			{
				if ($condition->isActivated() !== $robotActivity->isActivated())
				{
					$this->isExternalModified = true;
					$this->robots = [];

					return false; // modified
				}

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

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

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

	$this->isConverted = true;
	return $this->robots;
}