Your IP : 18.222.204.214
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if (!CModule::IncludeModule("bizproc") || !CModule::IncludeModule("iblock"))
return false;
if (!$GLOBALS["USER"]->IsAuthorized())
{
$GLOBALS["APPLICATION"]->AuthForm("");
die();
}
if (!$USER->IsAdmin() && (count(array_intersect($USER->GetUserGroupArray(), $arParams["ADMIN_ACCESS"])) <= 0))
{
$GLOBALS["APPLICATION"]->AuthForm("");
die();
}
$pathToTemplates = $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/bizproc/templates_bp";
$arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y");
$arParams["SET_NAV_CHAIN"] = ($arParams["SET_NAV_CHAIN"] == "N" ? "N" : "Y");
if (strLen($arParams["PAGE_VAR"]) <= 0)
$arParams["PAGE_VAR"] = "page";
if (strLen($arParams["BLOCK_VAR"]) <= 0)
$arParams["BLOCK_VAR"] = "block_id";
$arParams["PATH_TO_NEW"] = trim($arParams["PATH_TO_NEW"]);
if (strlen($arParams["PATH_TO_NEW"]) <= 0)
$arParams["PATH_TO_NEW"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=new");
$arParams["PATH_TO_LIST"] = trim($arParams["PATH_TO_LIST"]);
if (strlen($arParams["PATH_TO_LIST"]) <= 0)
$arParams["PATH_TO_LIST"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=list&".$arParams["BLOCK_VAR"]."=#block_id#");
$arParams["PATH_TO_INDEX"] = trim($arParams["PATH_TO_INDEX"]);
if (strlen($arParams["PATH_TO_INDEX"]) <= 0)
$arParams["PATH_TO_INDEX"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=index");
$arParams["PATH_TO_TASK"] = trim($arParams["PATH_TO_TASK"]);
if (strlen($arParams["PATH_TO_TASK"]) <= 0)
$arParams["PATH_TO_TASK"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=task&".$arParams["TASK_VAR"]."=#task_id#");
$arParams["PATH_TO_TASK"] = $arParams["PATH_TO_TASK"].((strpos($arParams["PATH_TO_TASK"], "?") === false) ? "?" : "&").bitrix_sessid_get();
$arParams["PATH_TO_BP"] = trim($arParams["PATH_TO_BP"]);
if (strlen($arParams["PATH_TO_BP"]) <= 0)
$arParams["PATH_TO_BP"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=bp&".$arParams["BLOCK_VAR"]."=#block_id#");
$arParams["PATH_TO_BP"] = $arParams["PATH_TO_BP"].((strpos($arParams["PATH_TO_BP"], "?") === false) ? "?" : "&").bitrix_sessid_get();
$arResult["BackUrl"] = urlencode(strlen($_REQUEST["back_url"]) <= 0 ? $APPLICATION->GetCurPageParam() : $_REQUEST["back_url"]);
$arResult["PATH_TO_INDEX"] = htmlspecialcharsbx(CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_INDEX"], array()));
$arResult["FatalErrorMessage"] = "";
$arResult["ErrorMessage"] = "";
$arParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"]);
if (strlen($arParams["IBLOCK_TYPE"]) <= 0)
$arResult["FatalErrorMessage"] .= GetMessage("BPWC_WNC_EMPTY_IBLOCK_TYPE").". ";
$arParams["BLOCK_ID"] = intval($arParams["BLOCK_ID"]);
if (strlen($arResult["FatalErrorMessage"]) <= 0)
{
$arResult["BlockType"] = null;
$ar = CIBlockType::GetByIDLang($arParams["IBLOCK_TYPE"], LANGUAGE_ID, true);
if ($ar)
$arResult["BlockType"] = $ar;
else
$arResult["FatalErrorMessage"] .= GetMessage("BPWC_WNC_WRONG_IBLOCK_TYPE").". ";
}
if (strlen($arResult["FatalErrorMessage"]) <= 0)
{
if (strlen($_REQUEST["doCancel"]) > 0)
LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_INDEX"], array()));
}
if (strlen($arResult["FatalErrorMessage"]) <= 0)
{
$arResult["Step"] = intval($_REQUEST["bp_step"]);
if ($arResult["Step"] <= 0)
$arResult["Step"] = 1;
if ($arResult["Step"] > 1 && !check_bitrix_sessid())
{
$arResult["Step"] = 1;
$arResult["ErrorMessage"] .= GetMessage("BPWC_WNC_SESSID").". ";
}
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$documentService = $runtime->GetService("DocumentService");
$arResult["DocumentFields"] = $documentService->GetDocumentFields(array("bizproc", "CBPVirtualDocument", "type_".intval($arParams["BLOCK_ID"])));
$arResult["Data"] = array(
"Name" => "",
"Description" => "",
"FilterableFields" => array(),
"VisibleFields" => array(),
"Sort" => 100,
"Image" => 0,
"ElementAdd" => GetMessage("BPWC_WNC_PNADD"),
"UserGroups" => array(2),
"Template" => "",
"TemplateVariables" => array(),
"ComponentTemplates" => array(),
);
if ($arParams["BLOCK_ID"] > 0)
{
$db = CIBlock::GetList(array(), array("ID" => $arParams["BLOCK_ID"], "TYPE" => $arParams["IBLOCK_TYPE"], "ACTIVE" => "Y"));
if ($ar = $db->Fetch())
{
$arMessagesTmp = CIBlock::GetMessages($ar["ID"]);
$arG = array();
$arP = CIBlock::GetGroupPermissions($ar["ID"]);
foreach ($arP as $key => $value)
{
if ($value == "R")
$arG[] = $key;
}
$v1 = $ar["DESCRIPTION"];
$v2 = array();
$v3 = array();
$v5 = array();
if (strlen($ar["DESCRIPTION"]) > 0 && substr($ar["DESCRIPTION"], 0, strlen("v2:")) == "v2:")
{
$v4 = @unserialize(substr($ar["DESCRIPTION"], 3));
if (is_array($v4))
{
$v1 = $v4["DESCRIPTION"];
$v2 = is_array($v4["FILTERABLE_FIELDS"]) ? $v4["FILTERABLE_FIELDS"] : (strlen($v4["FILTERABLE_FIELDS"]) > 0 ? array($v4["FILTERABLE_FIELDS"]) : array());
$v3 = is_array($v4["VISIBLE_FIELDS"]) ? $v4["VISIBLE_FIELDS"] : (strlen($v4["VISIBLE_FIELDS"]) > 0 ? array($v4["VISIBLE_FIELDS"]) : array());
$v5 = is_array($v4["COMPONENT_TEMPLATES"]) ? $v4["COMPONENT_TEMPLATES"] : (strlen($v4["COMPONENT_TEMPLATES"]) > 0 ? array($v4["COMPONENT_TEMPLATES"]) : array());
}
}
$arResult["Data"] = array(
"Name" => $ar["NAME"],
"Description" => $v1,
"FilterableFields" => $v2,
"VisibleFields" => $v3,
"ComponentTemplates" => $v5,
"Sort" => $ar["SORT"],
"Image" => $ar["PICTURE"],
"ElementAdd" => is_array($arMessagesTmp) && array_key_exists("ELEMENT_ADD", $arMessagesTmp) ? $arMessagesTmp["ELEMENT_ADD"] : GetMessage("BPWC_WNC_PNADD"),
"UserGroups" => $arG,
);
}
else
{
$arParams["BLOCK_ID"] = 0;
}
}
if ($arResult["Step"] > 1)
{
$errorMessageTmp = "";
if (array_key_exists("bp_image", $_FILES))
$imageId = CFile::SaveFile($_FILES["bp_image"], "bizproc_wf", true, true);
else
$imageId = intval($_REQUEST["bp_image"]);
$arResult["NewTemplateType"] = "";
if ($_REQUEST["bp_template"] == "-")
{
$arResult["NewTemplateType"] = "statemachine";
$_REQUEST["bp_template"] = "";
}
elseif (strlen($_REQUEST["bp_template"]) <= 0)
{
$arResult["NewTemplateType"] = "sequential";
}
$arResult["Data"] = array(
"Name" => trim($_REQUEST["bp_name"]),
"Description" => trim($_REQUEST["bp_description"]),
"Sort" => intval($_REQUEST["bp_sort"]) > 0 ? intval($_REQUEST["bp_sort"]) : 100,
"Image" => $imageId,
"ElementAdd" => trim($_REQUEST["bp_element_add"]),
"UserGroups" => is_array($_REQUEST["bp_user_groups"]) ? $_REQUEST["bp_user_groups"] : array(),
"Template" => preg_replace("/[^a-zA-Z0-9_.-]+/i", "", $_REQUEST["bp_template"]),
"FilterableFields" => is_array($_REQUEST["bp_filterablefields"]) ? $_REQUEST["bp_filterablefields"] : (strlen($_REQUEST["bp_filterablefields"]) > 0 ? array($_REQUEST["bp_filterablefields"]) : array()),
"VisibleFields" => is_array($_REQUEST["bp_visiblefields"]) ? $_REQUEST["bp_visiblefields"] : (strlen($_REQUEST["bp_visiblefields"]) > 0 ? array($_REQUEST["bp_visiblefields"]) : array()),
"ComponentTemplates" => array(
"Start" => trim($_REQUEST["bp_start_tpl"]),
"List" => trim($_REQUEST["bp_list_tpl"]),
"View" => trim($_REQUEST["bp_view_tpl"])
),
);
if (strlen($arResult["Data"]["Name"]) <= 0)
$errorMessageTmp .= GetMessage("BPWC_WNC_EMPTY_NAME").". ";
if ($arParams["BLOCK_ID"] <= 0 && strlen($arResult["Data"]["Template"]) > 0)
{
$arResult["Data"]["PathToTemplate"] = $pathToTemplates."/".$arResult["Data"]["Template"];
if (!file_exists($arResult["Data"]["PathToTemplate"]) || !is_file($arResult["Data"]["PathToTemplate"]))
$errorMessageTmp .= GetMessage("BPWC_WNC_WRONG_TMPL").". ";
}
if (strlen($errorMessageTmp) > 0)
{
$arResult["ErrorMessage"] .= $errorMessageTmp;
$arResult["Step"] = 1;
}
}
if ($arResult["Step"] > 1)
{
$bpTemplateObject = null;
if ($arParams["BLOCK_ID"] > 0 || strlen($arResult["Data"]["Template"]) <= 0)
{
$arResult["Step"] = 3;
}
else
{
include($arResult["Data"]["PathToTemplate"]);
if (!$bpTemplateObject || !is_object($bpTemplateObject))
{
$arResult["ErrorMessage"] .= GetMessage("BPWC_WNC_ERROR_TMPL")."";
$arResult["Step"] = 1;
}
elseif (!method_exists($bpTemplateObject, "GetVariables"))
{
$arResult["Step"] = 3;
}
}
}
if ($arResult["Step"] > 2)
{
if ($bpTemplateObject)
{
if (method_exists($bpTemplateObject, "GetVariables"))
{
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$arResult["DocumentService"] = $runtime->GetService("DocumentService");
$arRequest = $_REQUEST;
foreach ($_FILES as $k => $v)
{
if (array_key_exists("name", $v))
{
if (is_array($v["name"]))
{
$ks = array_keys($v["name"]);
for ($i = 0, $cnt = count($ks); $i < $cnt; $i++)
{
$ar = array();
foreach ($v as $k1 => $v1)
$ar[$k1] = $v1[$ks[$i]];
$arRequest[$k][] = $ar;
}
}
else
{
$arRequest[$k] = $v;
}
}
}
$arErrorMessageTmp = array();
$arTemplateVariables = $bpTemplateObject->GetVariables();
foreach ($arTemplateVariables as $variableKey => $arVariable)
{
$arErrorsTmp = array();
$arResult["Data"]["TemplateVariables"][$variableKey] = $arResult["DocumentService"]->GetFieldInputValue(
array("bizproc", "CBPVirtualDocument", "type_0"),
$arVariable,
$variableKey,
$arRequest,
$arErrorsTmp
);
if (count($arErrorsTmp) > 0)
{
foreach ($arErrorsTmp as $e)
$arErrorMessageTmp[] = $e["message"];
}
}
if (count($arErrorMessageTmp) > 0)
{
foreach ($arErrorMessageTmp as $e)
$arResult["ErrorMessage"] .= $e;
$arResult["Step"] = 2;
}
}
if (method_exists($bpTemplateObject, "ValidateVariables"))
{
$arErrorMessageTmp = array();
if (!$bpTemplateObject->ValidateVariables($arResult["Data"]["TemplateVariables"], $arErrorMessageTmp))
{
foreach ($arErrorMessageTmp as $e)
$arResult["ErrorMessage"] .= $e;
$arResult["Step"] = 2;
}
}
}
}
if ($arResult["Step"] > 2)
{
$ib = new CIBlock();
$v1 = "v2:".serialize(
array(
"DESCRIPTION" => $arResult["Data"]["Description"],
"FILTERABLE_FIELDS" => $arResult["Data"]["FilterableFields"],
"VISIBLE_FIELDS" => $arResult["Data"]["VisibleFields"],
"COMPONENT_TEMPLATES" => $arResult["Data"]["ComponentTemplates"]
)
);
$arFields = array(
"IBLOCK_TYPE_ID" => $arParams["IBLOCK_TYPE"],
"LID" => SITE_ID,
"NAME" => $arResult["Data"]["Name"],
"ACTIVE" => 'Y',
"SORT" => $arResult["Data"]["Sort"],
"PICTURE" => intval($arResult["Data"]["Image"]) > 0 ? CFile::MakeFileArray($arResult["Data"]["Image"]) : false,
"DESCRIPTION" => $v1,
"DESCRIPTION_TYPE" => 'text',
"WORKFLOW" => 'N',
"BIZPROC" => 'Y',
"VERSION" => 1,
"ELEMENT_ADD" => $arResult["Data"]["ElementAdd"],
);
foreach ($arResult["Data"]["UserGroups"] as $v)
$arFields["GROUP_ID"][$v] = "R";
if ($arParams["BLOCK_ID"] <= 0)
{
$opRes = $iblockId = $ib->Add($arFields);
}
else
{
$opRes = $ib->Update($arParams["BLOCK_ID"], $arFields);
$iblockId = $arParams["BLOCK_ID"];
}
if ($opRes)
{
global $CACHE_MANAGER;
$CACHE_MANAGER->Clean("component_bizproc_wizards_templates");
if (intval($arResult["Data"]["Image"]) > 0)
CFile::Delete($arResult["Data"]["Image"]);
if ($arParams["BLOCK_ID"] <= 0 && strlen($arResult["Data"]["Template"]) > 0)
{
$arVariables = false;
if (method_exists($bpTemplateObject, "GetVariables"))
{
$arVariables = $bpTemplateObject->GetVariables();
$ks = array_keys($arVariables);
foreach ($ks as $k)
$arVariables[$k]["Default"] = $arResult["Data"]["TemplateVariables"][$k];
}
$arFieldsT = array(
"DOCUMENT_TYPE" => array("bizproc", "CBPVirtualDocument", "type_".$iblockId),
"AUTO_EXECUTE" => CBPDocumentEventType::Create,
"NAME" => $arResult["Data"]["Name"],
"DESCRIPTION" => $arResult["Data"]["Description"],
"TEMPLATE" => $bpTemplateObject->GetTemplate(),
"PARAMETERS" => $bpTemplateObject->GetParameters(),
"VARIABLES" => $arVariables,
"USER_ID" => $GLOBALS["USER"]->GetID(),
"ACTIVE" => 'Y',
"MODIFIER_USER" => new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser),
);
CBPWorkflowTemplateLoader::Add($arFieldsT);
if (method_exists($bpTemplateObject, "GetDocumentFields"))
{
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$arResult["DocumentService"] = $runtime->GetService("DocumentService");
$arDocumentFields = $bpTemplateObject->GetDocumentFields();
if ($arDocumentFields && is_array($arDocumentFields) && count($arDocumentFields) > 0)
{
foreach ($arDocumentFields as $f)
{
$arResult["DocumentService"]->AddDocumentField(
array("bizproc", "CBPVirtualDocument", "type_".$iblockId),
$f
);
}
}
}
}
$redirectPath = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_LIST"], array("block_id" => $iblockId));
$redirectPath .= ((strpos($redirectPath, "?") !== false) ? "&" : "?")."template_type=".$arResult["NewTemplateType"];
LocalRedirect($redirectPath);
}
else
{
$arResult["ErrorMessage"] .= $ib->LAST_ERROR;
$arResult["Step"] = 1;
}
}
}
if (strlen($arResult["FatalErrorMessage"]) <= 0)
{
if ($arResult["Step"] == 1)
{
$arResult["AvailableUserGroups"] = array();
$dbRes = CGroup::GetList($by = "c_sort", $order = "asc");
while ($arRes = $dbRes->Fetch())
{
if ($arRes["ID"] <> 1)
$arResult["AvailableUserGroups"][$arRes["ID"]] = $arRes["NAME"];
}
$arResult["AvailableTemplates"] = array();
if ($handle = @opendir($pathToTemplates))
{
while (($file = readdir($handle)) !== false)
{
if ($file == "." || $file == ".." || !is_file($pathToTemplates."/".$file))
continue;
$bpTemplateObject = null;
include($pathToTemplates."/".$file);
if ($bpTemplateObject && is_object($bpTemplateObject) && method_exists($bpTemplateObject, "GetName"))
$arResult["AvailableTemplates"][$file] = $bpTemplateObject->GetName();
}
@closedir($handle);
}
$arResult["ComponentTemplates"] = array(
"Start" => CComponentUtil::GetTemplatesList("bitrix:bizproc.wizards.start"),
"List" => CComponentUtil::GetTemplatesList("bitrix:bizproc.wizards.list"),
"View" => CComponentUtil::GetTemplatesList("bitrix:bizproc.wizards.view"),
);
}
elseif ($arResult["Step"] == 2)
{
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$arResult["DocumentService"] = $runtime->GetService("DocumentService");
$arResult["TemplateParameters"] = $bpTemplateObject->GetVariables();
}
}
$this->IncludeComponentTemplate();
if (strlen($arResult["FatalErrorMessage"]) <= 0)
{
if ($arParams["SET_TITLE"] == "Y")
$APPLICATION->SetTitle(str_replace("#NAME#", $arResult["BlockType"]["NAME"], GetMessage("BPWC_WNC_PAGE_TITLE")));
if ($arParams["SET_NAV_CHAIN"] == "Y")
{
$APPLICATION->AddChainItem($arResult["BlockType"]["NAME"], $arParams["PATH_TO_INDEX"]);
$APPLICATION->AddChainItem(GetMessage("BPWC_WNC_PAGE_NAV_CHAIN"));
}
}
else
{
if ($arParams["SET_TITLE"] == "Y")
$APPLICATION->SetTitle(GetMessage("BPWC_WNC_ERROR"));
if ($arParams["SET_NAV_CHAIN"] == "Y")
$APPLICATION->AddChainItem(GetMessage("BPWC_WNC_ERROR"));
}
?>