• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/classes/general/workflowtemplateloader.php
  • Класс: CBPWorkflowTemplateLoader
  • Вызов: CBPWorkflowTemplateLoader::parseDocumentTypeStates
static function parseDocumentTypeStates($arTemplatesListItem)
{
	$arWorkflowTemplate = $arTemplatesListItem["TEMPLATE"];
	if (!is_array($arWorkflowTemplate))
		throw new CBPArgumentTypeException("arTemplatesListItem");

	$result = array(
		"ID" => "",
		"TEMPLATE_ID" => $arTemplatesListItem["ID"],
		"TEMPLATE_NAME" => $arTemplatesListItem["NAME"],
		"TEMPLATE_DESCRIPTION" => $arTemplatesListItem["DESCRIPTION"],
		"STATE_NAME" => "",
		"STATE_TITLE" => "",
		"TEMPLATE_PARAMETERS" => $arTemplatesListItem["PARAMETERS"],
		"STATE_PARAMETERS" => array(),
		"STATE_PERMISSIONS" => array(),
		"WORKFLOW_STATUS" => -1,
	);

	$type = "CBP".$arWorkflowTemplate[0]["Type"];
	$bStateMachine = (
		$type === CBPStateMachineWorkflowActivity::class
		|| (
			class_exists($type)
			&& is_subclass_of($type, CBPStateMachineWorkflowActivity::class)
		)
	);

	if ($bStateMachine)
	{
		//if (strlen($stateName) <= 0)
		$stateName = $arWorkflowTemplate[0]["Properties"]["InitialStateName"];

		if (is_array($arWorkflowTemplate[0]["Children"]))
		{
			foreach ($arWorkflowTemplate[0]["Children"] as $state)
			{
				if ($stateName == $state["Name"])
				{
					$result["STATE_NAME"] = $stateName;
					$result["STATE_TITLE"] = $state["Properties"]["Title"];
					$result["STATE_PARAMETERS"] = array();
					$result["STATE_PERMISSIONS"] = $state["Properties"]["Permission"];

					if (is_array($state["Children"]))
					{
						foreach ($state["Children"] as $event)
						{
							if ($event["Type"] == "EventDrivenActivity")
							{
								if ($event["Children"][0]["Type"] == "HandleExternalEventActivity")
								{
									$result["STATE_PARAMETERS"][] = array(
										"NAME" => $event["Children"][0]["Name"],
										"TITLE" => $event["Children"][0]["Properties"]["Title"],
										"PERMISSION" => $event["Children"][0]["Properties"]["Permission"],
									);
								}
							}
						}
					}

					break;
				}
			}
		}
	}
	else
	{
		$result["STATE_PERMISSIONS"] = $arWorkflowTemplate[0]["Properties"]["Permission"] ?? null;
	}

	if (is_array($result["STATE_PERMISSIONS"]))
	{
		$arKeys = array_keys($result["STATE_PERMISSIONS"]);
		foreach ($arKeys as $key)
		{
			$ar = self::ExtractValuesFromVariables($result["STATE_PERMISSIONS"][$key], $arTemplatesListItem["VARIABLES"], $arTemplatesListItem["CONSTANTS"]);
			$result["STATE_PERMISSIONS"][$key] = CBPHelper::MakeArrayFlat($ar);
		}
	}

	return $result;
}