private 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 = false; while (strlen($type) > 0) { if ($type == "CBPStateMachineWorkflowActivity") { $bStateMachine = true; break; } $type = get_parent_class($type); } 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"]; } 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; }