- Модуль: 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;
}