public static function deleteDataIblock($iblockId) { $iblockId = intval($iblockId); $documentType = array('lists', 'BizprocDocument', self::generateDocumentType($iblockId)); $errors = array(); $templateObject = CBPWorkflowTemplateLoader::GetList(array('ID' => 'DESC'), array('DOCUMENT_TYPE' => $documentType), false, false, array('ID')); while ($template = $templateObject->fetch()) { CBPDocument::deleteWorkflowTemplate($template['ID'], $documentType, $errors); } }
/** * Метод изменяет параметры шаблона рабочего потока. * * @param int $id - код шаблона рабочего потока. * @param array $documentType - код типа документа в виде массива array(модуль, сущность, код_типа_документа_в_модуле). * @param array $arFields - массив новых значений параметров шаблона рабочего потока. * @param array $arErrors - массив ошибок, которые произошли при выполнении в виде array(array("code" => код_ошибки, "message" => сообщение, "file" => путь_к_файлу), ...). */ public static function UpdateWorkflowTemplate($id, $documentType, $arFields, &$arErrors) { $arErrors = array(); $dbTemplates = CBPWorkflowTemplateLoader::GetList( array(), array("ID" => $id, "DOCUMENT_TYPE" => $documentType), false, false, array("ID") ); $arTemplate = $dbTemplates->Fetch(); if (!$arTemplate) { $arErrors[] = array( "code" => 0, "message" => str_replace("#ID#", $id, GetMessage("BPCGDOC_INVALID_WF_ID")), "file" => "" ); return; } try { CBPWorkflowTemplateLoader::Update($id, $arFields); } catch (Exception $e) { $arErrors[] = array( "code" => $e->getCode(), "message" => $e->getMessage(), "file" => $e->getFile()." [".$e->getLine()."]" ); } }
if (strlen($fatalErrorMessage) <= 0) { $documentType = array($moduleId, $entity, $documentType); $documentId = array($moduleId, $entity, $documentId); $runtime = CBPRuntime::GetRuntime(); $runtime->StartRuntime(); $documentService = $runtime->GetService("DocumentService"); $bCanUserStartDocumentWorkflow = CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $GLOBALS["USER"]->GetID(), $documentId, array("UserGroups" => $GLOBALS["USER"]->GetUserGroupArray())); if (!$bCanUserStartDocumentWorkflow) { $fatalErrorMessage .= GetMessage("BPABS_NO_PERMS") . ". "; } } if (strlen($fatalErrorMessage) <= 0) { $showMode = "SelectWorkflow"; $workflowTemplateId = intval($_REQUEST["workflow_template_id"]); $arWorkflowTemplates = array(); $dbWorkflowTemplate = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => $documentType, "ACTIVE" => "Y"), false, false, array("ID", "NAME", "DESCRIPTION", "MODIFIED", "USER_ID", "PARAMETERS")); while ($arWorkflowTemplate = $dbWorkflowTemplate->GetNext()) { $arWorkflowTemplates[$arWorkflowTemplate["ID"]] = $arWorkflowTemplate; $arWorkflowTemplates[$arWorkflowTemplate["ID"]]["URL"] = htmlspecialcharsex($APPLICATION->GetCurPageParam("workflow_template_id=" . $arWorkflowTemplate["ID"] . '&' . bitrix_sessid_get(), array("workflow_template_id", "sessid"))); } if ($workflowTemplateId > 0 && check_bitrix_sessid() && strlen($_POST["CancelStartParamWorkflow"]) <= 0 && array_key_exists($workflowTemplateId, $arWorkflowTemplates)) { $arWorkflowTemplate = $arWorkflowTemplates[$workflowTemplateId]; $arWorkflowParameters = array(); $bCanStartWorkflow = false; if (count($arWorkflowTemplate["PARAMETERS"]) <= 0) { $bCanStartWorkflow = true; } elseif ($_SERVER["REQUEST_METHOD"] == "POST" && strlen($_POST["DoStartParamWorkflow"]) > 0) { $arErrorsTmp = array(); $arRequest = $_REQUEST; foreach ($_FILES as $k => $v) { if (array_key_exists("name", $v)) {
else return "'".str_replace("'", "\'", $var)."'"; } $db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => $documentType)); if ($ar = $db->Fetch()) { $hFileTmp = fopen($_SERVER["DOCUMENT_ROOT"]."/+++++++2.+++", "a"); // DUMPING fwrite($hFileTmp, print_rrr($ar)); fclose($hFileTmp); } */ if (strlen($arResult["FatalErrorMessage"]) <= 0) { $workflowTemplateId = 0; $db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => $documentType), false, false, array("ID")); if ($ar = $db->Fetch()) { $workflowTemplateId = intval($ar["ID"]); } if ($workflowTemplateId <= 0) { $redirectPath = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BP"], array("block_id" => $arParams["BLOCK_ID"])); if ($_REQUEST["template_type"] == "statemachine") { $redirectPath .= (strpos($redirectPath, "?") !== false ? "&" : "?") . "init=statemachine"; } LocalRedirect($redirectPath); } } if (strlen($arResult["FatalErrorMessage"]) <= 0) { $arWorkflowTemplate = CBPWorkflowTemplateLoader::GetTemplateState($workflowTemplateId); if (!is_array($arWorkflowTemplate["STATE_PERMISSIONS"]) || count($arWorkflowTemplate["STATE_PERMISSIONS"]) <= 0) { $arWorkflowTemplate["STATE_PERMISSIONS"]["create"] = array("author");
# mailto:sources@bitrixsoft.com # ############################################## */ require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/bizproc/prolog.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/bizproc/include.php"; CUtil::InitJSCore(array("window", "ajax")); IncludeModuleLangFile(__FILE__); $APPLICATION->SetTitle(GetMessage("BIZPROC_WFEDIT_TITLE_EDIT")); $document_type = preg_replace("/[^0-9A-Za-z_-]/", "", $_REQUEST['document_type']); $strFatalError = false; $canWrite = false; $arTemplate = false; $ID = IntVal($_REQUEST['ID']); if ($ID > 0) { $dbTemplatesList = CBPWorkflowTemplateLoader::GetList(array(), array("ID" => $ID)); if ($arTemplate = $dbTemplatesList->Fetch()) { $canWrite = CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::CreateWorkflow, $GLOBALS["USER"]->GetID(), $arTemplate["DOCUMENT_TYPE"]); $document_type = $arTemplate["DOCUMENT_TYPE"][2]; $workflowTemplateName = $arTemplate["NAME"]; $workflowTemplateDescription = $arTemplate["DESCRIPTION"]; $workflowTemplateAutostart = $arTemplate["AUTO_EXECUTE"]; $arWorkflowTemplate = $arTemplate["TEMPLATE"]; $arWorkflowParameters = $arTemplate["PARAMETERS"]; $arWorkflowVariables = $arTemplate["VARIABLES"]; $arWorkflowConstants = $arTemplate["CONSTANTS"]; } else { $ID = 0; } } if ($ID <= 0) {
Default falues ********************************************************************/ $arResult["NAV_STRING"] = ""; $arResult["NAV_RESULT"] = ""; $arResult["TEMPLATES"] = array(); $arResult["GRID_TEMPLATES"] = array(); /******************************************************************** /Default falues ********************************************************************/ /******************************************************************** Data ********************************************************************/ $arResult["GRID_ID"] = "bizproc_wflist_" . $arParams["MODULE_ID"]; $gridOptions = new CGridOptions($arResult["GRID_ID"]); $gridSort = $gridOptions->GetSorting(array("sort" => array("NAME" => "ASC"))); $db_res = CBPWorkflowTemplateLoader::GetList($gridSort["sort"], array("DOCUMENT_TYPE" => $documentType), false, false, array("ID", "NAME", "DESCRIPTION", "MODIFIED", "USER_ID", "AUTO_EXECUTE", "USER_NAME", "USER_LAST_NAME", "USER_LOGIN", "ACTIVE", "USER_SECOND_NAME")); if ($db_res) { $db_res->NavStart(25, false); $arResult["NAV_RESULT"] = $db_res; $arResult["NAV_STRING"] = $db_res->GetPageNavStringEx($navComponentObject, GetMessage("BPATT_NAV"), ""); $adminPage = $APPLICATION->GetCurPageParam('back_url=' . urlencode($back_url) . '&action=delete&' . bitrix_sessid_get(), array('back_url', 'action', 'ID', 'sessid')); while ($res = $db_res->GetNext()) { $res["URL"] = array("EDIT" => CComponentEngine::MakePathFromTemplate($arParams["~EDIT_URL"], array("ID" => $res["ID"], "MODULE_ID" => $arParams["MODULE_ID"], "ENTITY" => $arParams["ENTITY"], "DOCUMENT_ID" => $arParams["DOCUMENT_ID"])), "DELETE" => $adminPage . "&ID=" . $res["ID"]); if (isset($arParams["~EDIT_VARS_URL"]) && strlen($arParams["~EDIT_VARS_URL"]) > 0) { $res["URL"]["VARS"] = CComponentEngine::MakePathFromTemplate($arParams["~EDIT_VARS_URL"], array("ID" => $res["ID"], "MODULE_ID" => $arParams["MODULE_ID"], "ENTITY" => $arParams["ENTITY"], "DOCUMENT_ID" => $arParams["DOCUMENT_ID"])); } if (isset($arParams["~EDIT_CONSTANTS_URL"]) && strlen($arParams["~EDIT_CONSTANTS_URL"]) > 0) { $res["URL"]["CONSTANTS"] = CComponentEngine::MakePathFromTemplate($arParams["~EDIT_CONSTANTS_URL"], array("ID" => $res["ID"], "MODULE_ID" => $arParams["MODULE_ID"], "ENTITY" => $arParams["ENTITY"], "DOCUMENT_ID" => $arParams["DOCUMENT_ID"])); } foreach ($res["URL"] as $key => $val) { $res["URL"]["~" . $key] = $val;
$arFields["EVENT1"] = "forum"; $arFields["EVENT2"] = "message"; $arFields["EVENT3"] = ""; } $arForum = array("ID" => CForumNew::Add($arFields)); } } } else { $arForum = array("ID" => ""); } if (CModule::IncludeModule('bizproc')) { if (CBPDocument::GetNumberOfWorkflowTemplatesForDocumentType(array("iblock", "CIBlockDocument", "iblock_" . $IBLOCK_ID)) <= 0) { CBPDocument::AddDefaultWorkflowTemplates(array("iblock", "CIBlockDocument", "iblock_" . $IBLOCK_ID)); } $TEMPLATE_ID = 0; $dbWorkflowTemplate = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("iblock", "CIBlockDocument", "iblock_" . $IBLOCK_ID), "SYSTEM_CODE" => "status.php", "ACTIVE" => "Y"), false, false, array("ID")); if ($arWorkflowTemplate = $dbWorkflowTemplate->Fetch()) { $TEMPLATE_ID = $arWorkflowTemplate["ID"]; } $arElement = array("IBLOCK_ID" => $IBLOCK_ID, "NAME" => GetMessage("DEMO_IBLOCK_CONTENT_ARTICLES_NAME"), "PREVIEW_TEXT" => GetMessage("DEMO_IBLOCK_CONTENT_ARTICLES_PREVIEW_TEXT"), "WF_STATUS_ID" => 2, "WF_NEW" => "Y", "PROPERTY_VALUES" => array("KEYWORDS" => GetMessage("DEMO_IBLOCK_CONTENT_ARTICLES_KEYWORDS"), "THEMES" => 4)); $obElement = new CIBlockElement(); $element_id = $obElement->Add($arElement); if ($element_id && $TEMPLATE_ID > 0) { $arErrorsTmp = array(); $bpId = CBPDocument::StartWorkflow($TEMPLATE_ID, array("iblock", "CIBlockDocument", $element_id), array("Creators" => array("author"), "Approvers" => array(1)), $arErrorsTmp); if (count($arErrorsTmp) <= 0) { $arDocumentStates = CBPDocument::GetDocumentStates(array("iblock", "CIBlockDocument", "iblock_" . $IBLOCK_ID), array("iblock", "CIBlockDocument", $element_id)); $arCurrentUserGroups = $GLOBALS["USER"]->GetUserGroupArray(); $arCurrentUserGroups[] = "Author"; $arEvents = CBPDocument::GetAllowableEvents($GLOBALS["USER"]->GetID(), $arCurrentUserGroups, array_pop($arDocumentStates)); CBPDocument::SendExternalEvent($bpId, $arEvents[0]["NAME"], array("Groups" => $arCurrentUserGroups, "User" => $GLOBALS["USER"]->GetID()), $arErrorTmp);
case "delete": $arErrorsTmp = array(); CBPDocument::DeleteWorkflowTemplate($ID, $documentType, $arErrorsTmp); if (count($arErrorsTmp) > 0) { foreach ($arErrorsTmp as $e) { $lAdmin->AddGroupError($e["message"], $ID); } } break; } } if (empty($lAdmin->arGroupErrors) && !empty($_REQUEST["back_url"])) { LocalRedirect($_REQUEST["back_url"]); } } $dbResultList = CBPWorkflowTemplateLoader::GetList(array($by => $order), $arFilter, false, false, array("ID", "NAME", "DESCRIPTION", "MODIFIED", "USER_ID", "AUTO_EXECUTE", "USER_NAME", "USER_LAST_NAME", "USER_LOGIN", "ACTIVE")); $dbResultList = new CAdminResult($dbResultList, $sTableID); $dbResultList->NavStart(); $lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("BPATT_NAV"))); $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "ID", "default" => true), array("id" => "NAME", "content" => GetMessage("BPATT_NAME"), "sort" => "NAME", "default" => true), array("id" => "MODIFIED", "content" => GetMessage("BPATT_MODIFIED"), "sort" => "MODIFIED", "default" => true), array("id" => "USER", "content" => GetMessage("BPATT_USER"), "sort" => "USER_ID", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("BPWFADM_ACT"), "sort" => "ACTIVE", "default" => true), array("id" => "AUTO_EXECUTE", "content" => GetMessage("BPATT_AUTO_EXECUTE"), "default" => true))); $arVisibleColumns = $lAdmin->GetVisibleHeaderColumns(); while ($arResultItem = $dbResultList->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arResultItem); $row->AddField("ID", '<a href="' . $editPage . '?ID=' . $f_ID . '&document_type=' . urlencode($documentType[2]) . '&lang=' . LANGUAGE_ID . '&back_url_list=' . urlencode($backUrl) . '" title="' . GetMessage("BPATT_DO_EDIT") . '">' . $f_ID . '</a>'); $row->AddInputField("NAME", array("SIZE" => "35")); $row->AddField("MODIFIED", $f_MODIFIED); $row->AddCheckField("ACTIVE"); $row->AddField("USER", '[<a href="/bitrix/admin/user_edit.php?ID=' . $f_USER_ID . '&document_type=' . urlencode($documentType[2]) . '&lang=' . LANGUAGE_ID . '" title="' . GetMessage("BPATT_USER_PROFILE") . '">' . $f_USER_ID . '</a>] (' . $f_USER_LOGIN . ') ' . $f_USER_NAME . " " . $f_USER_LAST_NAME); $autoExecuteText = ""; if ($f_AUTO_EXECUTE == CBPDocumentEventType::None) { $autoExecuteText .= GetMessage("BPATT_AE_NONE");
private static function importTemplate($documentType, $bpDescr, $bp) { $id = 0; $db = \CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => $documentType, "SYSTEM_CODE" => $bpDescr["SYSTEM_CODE"]), false, false, array("ID", "IS_MODIFIED")); if ($res = $db->Fetch()) { if ($res["IS_MODIFIED"] == "Y") { return; } $id = $res["ID"]; } try { \CBPWorkflowTemplateLoader::ImportTemplate($id, $documentType, $bpDescr["AUTO_EXECUTE"], $bpDescr["NAME"], $bpDescr["DESCRIPTION"], $bp, $bpDescr["SYSTEM_CODE"], true); } catch (\Exception $e) { } }
/******************************************************************** Default falues ********************************************************************/ $arResult["NAV_STRING"] = ""; $arResult["NAV_RESULT"] = ""; $arResult["TEMPLATES"] = array(); $arResult["GRID_TEMPLATES"] = array(); /******************************************************************** Data ********************************************************************/ $arResult['CREATE_NEW_TEMPLATES'] = false; $arResult['PROMPT_OLD_TEMPLATE'] = false; $checkNewTemplate = false; $checkOldTemplate = false; foreach ($documentData as $nameModule => $data) { $dbRes = CBPWorkflowTemplateLoader::GetList(array($by => $order), array("DOCUMENT_TYPE" => $data["DOCUMENT_TYPE"]), false, false, array("ID", "NAME", "DESCRIPTION", "MODIFIED", "USER_ID", "AUTO_EXECUTE", "USER_NAME", "USER_LAST_NAME", "USER_LOGIN", "ACTIVE", "USER_SECOND_NAME")); if ($dbRes) { $checklistTemplate = $dbRes->Fetch(); if (!empty($checklistTemplate) && $nameModule == 'DISK') { $checkNewTemplate = true; } elseif (!empty($checklistTemplate) && $nameModule == 'WEBDAV') { $checkOldTemplate = true; } $dbRes->NavStart(25, false); $arResult["NAV_RESULT"] = $dbRes; $arResult["NAV_STRING"] = $dbRes->GetPageNavStringEx($navComponentObject, GetMessage("BPATT_NAV"), ""); $adminPage = $APPLICATION->GetCurPageParam('back_url=' . urlencode($back_url) . '&action=delete&' . bitrix_sessid_get(), array('back_url', 'action', 'ID', 'sessid')); while ($res = $dbRes->GetNext()) { $res["URL"] = array("EDIT" => CComponentEngine::MakePathFromTemplate($arParams["~EDIT_URL"], array("ID" => $res["ID"], "MODULE_ID" => $arParams["MODULE_ID"], "ENTITY" => $arParams["ENTITY"], "STORAGE_ID" => $arResult["STORAGE_ID"])), "DELETE" => $adminPage . "&ID=" . $res["ID"]); foreach ($res["URL"] as $key => $val) { $res["URL"]["~" . $key] = $val;
$CrmPerms = new CCrmPerms($USER->GetID()); if (!$CrmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE')) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } $arTypes = array('CRM_LEAD' => array('ID' => 'CRM_LEAD', 'NAME' => GetMessage('CRM_BP_LEAD'), 'DOCUMENT' => 'CCrmDocumentLead', 'TYPE' => 'LEAD'), 'CRM_CONTACT' => array('ID' => 'CRM_CONTACT', 'NAME' => GetMessage('CRM_BP_CONTACT'), 'DOCUMENT' => 'CCrmDocumentContact', 'TYPE' => 'CONTACT'), 'CRM_COMPANY' => array('ID' => 'CRM_COMPANY', 'NAME' => GetMessage('CRM_BP_COMPANY'), 'DOCUMENT' => 'CCrmDocumentCompany', 'TYPE' => 'COMPANY'), 'CRM_DEAL' => array('ID' => 'CRM_DEAL', 'NAME' => GetMessage('CRM_BP_DEAL'), 'DOCUMENT' => 'CCrmDocumentDeal', 'TYPE' => 'DEAL')); $arResult['ENTITY_ID'] = isset($_REQUEST['entity_id']) ? $_REQUEST['entity_id'] : $arParams['BP_ENTITY_ID']; $arResult['BP_ID'] = isset($_REQUEST['bp_id']) ? $_REQUEST['bp_id'] : $arParams['BP_BP_ID']; $arResult['ENTITY_NAME'] = $arTypes[$arResult['ENTITY_ID']]['NAME']; $arResult['DOCUMENT_TYPE'] = $arTypes[$arResult['ENTITY_ID']]['TYPE']; $arResult['ENTITY_TYPE'] = $arTypes[$arResult['ENTITY_ID']]['DOCUMENT']; define('CRM_ENTITY', $arResult['ENTITY_TYPE']); $arResult['~ENTITY_LIST_URL'] = $arParams['~ENTITY_LIST_URL']; $arResult['ENTITY_LIST_URL'] = htmlspecialcharsbx($arResult['~ENTITY_LIST_URL']); $arResult['~BP_LIST_URL'] = str_replace('#entity_id#', $arResult['ENTITY_ID'], $arParams['~BP_LIST_URL']); $arResult['BP_LIST_URL'] = htmlspecialcharsbx($arResult['~BP_LIST_URL']); $arResult['~BP_EDIT_URL'] = str_replace(array('#entity_id#'), array($arResult['ENTITY_ID']), $arParams['~BP_EDIT_URL']); $arResult['BP_EDIT_URL'] = htmlspecialcharsbx($arResult['~BP_EDIT_URL']); if (strlen($arResult['BP_ID']) > 0) { $db_res = CBPWorkflowTemplateLoader::GetList(array($by => $order), array('DOCUMENT_TYPE' => array('crm', $arResult['ENTITY_TYPE'], $arResult['DOCUMENT_TYPE']), 'ID' => $arResult['BP_ID']), false, false, array('ID', 'NAME')); if ($db_res) { $arTemplate = $db_res->Fetch(); } } $this->IncludeComponentTemplate(); $APPLICATION->SetTitle(GetMessage('CRM_BP_LIST_TITLE_EDIT', array('#NAME#' => $arResult['ENTITY_NAME']))); $APPLICATION->AddChainItem(GetMessage('CRM_BP_ENTITY_LIST'), $arResult['~ENTITY_LIST_URL']); $APPLICATION->AddChainItem($arResult['ENTITY_NAME'], $arResult['~BP_LIST_URL']); if (strlen($arTemplate['NAME']) > 0) { $APPLICATION->AddChainItem($arTemplate['NAME'], CComponentEngine::MakePathFromTemplate($arResult['~BP_EDIT_URL'], array('bp_id' => $arResult['BP_ID']))); }
/** * Метод проверяет права на выполнение операций над документами заданного * типа. Проверяются операции 4 - право изменять шаблоны рабочий потоков для * данного типа документа. * * @param int $operation - операция. * @param int $userId - код пользователя, для которого проверяется право на выполнение операции. * @param string $documentId - код типа документа, к которому применяется операция. * @param array $arParameters - ассициативный массив вспомогательных * параметров. Используется для того, чтобы не рассчитывать заново те * вычисляемые значения, которые уже известны на момент вызова метода. * Стандартными являются ключи массива DocumentStates - массив состояний * рабочих потоков данного документа, WorkflowId - код рабочего потока (если * требуется проверить операцию на одном рабочем потоке). Массив может быть * дополнен другими произвольными ключами. * @return bool */ function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array()) { $documentType = trim($documentType); if (strlen($documentType) <= 0) { return false; } if ($storage = self::needProxyToDiskByDocType($documentType)) { return self::proxyToDisk(__FUNCTION__, array($operation, $userId, \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentType($storage->getId()), $arParameters)); } $iblockId = intval(substr($documentType, strlen("iblock_"))); if ($iblockId <= 0) { throw new CBPArgumentOutOfRangeException("documentType", $documentType); } $arParameters["IBlockId"] = intval(substr($documentType, strlen("iblock_"))); // Если нам явно не сказали, то узнаем инфоблочные права if (!array_key_exists("IBlockPermission", $arParameters)) { if (isset($arParameters['SectionId'])) { $arParameters['SectionId'] = intval($arParameters['SectionId']); $arParameters["IBlockPermission"] = CIBlockDocumentWebdav::GetIBRights('SECTION', $arParameters["IBlockId"], $arParameters['SectionId']); } else { $arParameters["IBlockPermission"] = CIBlockDocumentWebdav::GetIBRights('IBLOCK', $arParameters["IBlockId"]); } } if (CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_read") < "R") { return false; } elseif (CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_edit") >= "W") { return true; } // Если мы тут, то инфоблочные права равны U // Если нам явно не сказали, то узнаем группы пользователя $userId = intval($userId); if (!array_key_exists("AllUserGroups", $arParameters)) { if (!array_key_exists("UserGroups", $arParameters)) { $arParameters["UserGroups"] = CUser::GetUserGroup($userId); } $arParameters["AllUserGroups"] = $arParameters["UserGroups"]; $arParameters["AllUserGroups"][] = "Author"; } // Если нам явно не сказали, то узнаем текущие статусы документа if (!array_key_exists("DocumentStates", $arParameters)) { $arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("webdav", "CIBlockDocumentWebdav", "iblock_" . $arParameters["IBlockId"]), null); } // Если нужно проверить только для одного рабочего потока if (array_key_exists("WorkflowId", $arParameters) && !empty($arParameters["WorkflowId"])) { if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) { $arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]); } else { return false; } } $arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]); // $arAllowableOperations == null - поток не является автоматом // $arAllowableOperations == array() - в автомате нет допустимых операций // $arAllowableOperations == array("read", ...) - допустимые операции if (!is_array($arAllowableOperations)) { return false; } $r = false; switch ($operation) { case CBPCanUserOperateOperation::ViewWorkflow: $r = CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_read") > "U" || in_array("read", $arAllowableOperations); break; case CBPCanUserOperateOperation::StartWorkflow: // право на запуск бизнес-процесса есть у имеющих право "W", $r = CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_bizproc_start") > "U" || in_array("write", $arAllowableOperations); // если задан конкретный шаблон потока, то проверяем его if ($r && CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_bizproc_start") <= "U" && $arParameters["WorkflowTemplateId"] > 0) { // Выбираем все шаблоны для того, чтобы определить тип шаблона // так как для последовательных процессов мы даем право на запуск // бизнес-процесса без проверки прав на запись. if (!array_key_exists("WorkflowTemplateList" . $arParameters["IBlockId"], $GLOBALS["WEBDAV"]["CACHE"])) { if (array_key_exists("WorkflowTemplateList", $arParameters)) { $GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplateList" . $arParameters["IBlockId"]] = array(); foreach ($arParameters["WorkflowTemplateList"] as $res) { $GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplateList" . $arParameters["IBlockId"]][$res["ID"]] = $res; } } else { $res = array(); $db_res = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("webdav", "CIBlockDocumentWebdav", "iblock_" . $arParameters["IBlockId"]), "ACTIVE" => "Y"), false, false, array("ID", "NAME", "DESCRIPTION", "TEMPLATE", "PARAMETERS")); while ($arWorkflowTemplate = $db_res->GetNext()) { $res[$arWorkflowTemplate["ID"]] = $arWorkflowTemplate; } $GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplateList" . $arParameters["IBlockId"]] = $res; } } $arWorkflowTemplateList = $GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplateList" . $arParameters["IBlockId"]]; if (array_key_exists($arParameters["WorkflowTemplateId"], $arWorkflowTemplateList)) { $arTemplate = $arWorkflowTemplateList[$arParameters["WorkflowTemplateId"]]; // Если это машина состояний, то проверяем первое состояние if ($arTemplate["TEMPLATE"][0]["Type"] == "StateMachineWorkflowActivity") { // Выбираем парметры конкретного шаблона рабочего потока if (array_key_exists($arParameters["WorkflowTemplateId"], $arParameters["DocumentStates"])) { $arDocumentStates = $arParameters["DocumentStates"][$arParameters["WorkflowTemplateId"]]; } else { if (!array_key_exists("WorkflowTemplate" . $arParameters["WorkflowTemplateId"], $GLOBALS["WEBDAV"]["CACHE"])) { $GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplate" . $arParameters["WorkflowTemplateId"]] = CBPWorkflowTemplateLoader::GetTemplateState($arParameters["WorkflowTemplateId"]); } $arDocumentStates = $GLOBALS["WEBDAV"]["CACHE"]["WorkflowTemplate" . $arParameters["WorkflowTemplateId"]]; } $arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], array($arParameters["WorkflowTemplateId"] => $arDocumentStates)); $r = is_array($arAllowableOperations) && in_array("write", $arAllowableOperations); } } } break; case CBPCanUserOperateOperation::CreateWorkflow: $r = CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_edit") > "U"; break; case CBPCanUserOperateOperation::WriteDocument: $r = CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_edit") > "U" || in_array("write", $arAllowableOperations); break; case CBPWebDavCanUserOperateOperation::ReadDocument: $r = CWebDavIblock::CheckRight($arParameters["IBlockPermission"], "element_edit") > "U" || in_array("read", $arAllowableOperations); break; default: $r = false; } return $r; }
die; } $arParams["ID"] = intval($arParams["ID"]); $arParams['POPUP'] = isset($arParams["POPUP"]) && $arParams["POPUP"] == 'Y'; $arParams['AJAX_RESPONSE'] = isset($arParams["AJAX_RESPONSE"]) && $arParams["AJAX_RESPONSE"] == 'Y'; if (!empty($_SERVER['HTTP_BX_AJAX']) && SITE_CHARSET != "utf-8") { CUtil::decodeURIComponent($_REQUEST); CUtil::decodeURIComponent($_FILES); } if ($arParams['POPUP']) { $APPLICATION->ShowAjaxHead(); } $arTemplate = null; $canWrite = false; if ($arParams["ID"] > 0) { $dbTemplatesList = CBPWorkflowTemplateLoader::GetList(array(), array('ID' => $arParams['ID']), false, false, array('ID', 'DOCUMENT_TYPE', 'NAME', 'DESCRIPTION', 'CONSTANTS')); if ($arTemplate = $dbTemplatesList->Fetch()) { $canWrite = CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::CreateWorkflow, $GLOBALS["USER"]->GetID(), $arTemplate["DOCUMENT_TYPE"]); $arResult["DOCUMENT_TYPE"] = $arTemplate["DOCUMENT_TYPE"]; $arResult["NAME"] = $arTemplate["NAME"]; $arResult['DESCRIPTION'] = $arTemplate['DESCRIPTION']; $arResult["CONSTANTS"] = $arTemplate["CONSTANTS"]; $arResult["ID"] = $arTemplate["ID"]; } } if (!is_array($arTemplate) || !$canWrite) { $GLOBALS["APPLICATION"]->AuthForm(GetMessage("ACCESS_DENIED")); die; } $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; $arParams["SET_NAV_CHAIN"] = $arParams["SET_NAV_CHAIN"] == "N" ? "N" : "Y";
} /******************************************************************** /Main data ********************************************************************/ $arResult["SHOW_MODE"] = "SelectWorkflow"; $arResult["TEMPLATES"] = array(); $arResult["PARAMETERS_VALUES"] = array(); $arResult["ERROR_MESSAGE"] = ""; $runtime = CBPRuntime::GetRuntime(); $runtime->StartRuntime(); $arResult["DocumentService"] = $runtime->GetService("DocumentService"); /******************************************************************** Data ********************************************************************/ foreach ($documentData as $nameModule => $data) { $workflowTemplateObject = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => $data["DOCUMENT_TYPE"], "ACTIVE" => "Y"), false, false, array("ID", "NAME", "DESCRIPTION", "MODIFIED", "USER_ID", "PARAMETERS")); while ($workflowTemplate = $workflowTemplateObject->GetNext()) { if (!CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $GLOBALS["USER"]->GetID(), $data["DOCUMENT_ID"], array())) { continue; } if ($nameModule == 'DISK') { $arResult["TEMPLATES"][$workflowTemplate["ID"]] = $workflowTemplate; $arResult["TEMPLATES"][$workflowTemplate["ID"]]["URL"] = htmlspecialcharsex($APPLICATION->GetCurPageParam("workflow_template_id=" . $workflowTemplate["ID"] . '&' . bitrix_sessid_get(), array("workflow_template_id", "sessid"))); } else { $arResult["TEMPLATES_OLD"][$workflowTemplate["ID"]] = $workflowTemplate; $arResult["TEMPLATES_OLD"][$workflowTemplate["ID"]]["URL"] = htmlspecialcharsex($APPLICATION->GetCurPageParam("workflow_template_id=" . $workflowTemplate["ID"] . '&old=1&' . bitrix_sessid_get(), array("workflow_template_id", "sessid"))); } } } if ($arParams["TEMPLATE_ID"] > 0 && strlen($_POST["CancelStartParamWorkflow"]) <= 0 && (array_key_exists($arParams["TEMPLATE_ID"], $arResult["TEMPLATES"]) || array_key_exists($arParams["TEMPLATE_ID"], $arResult["TEMPLATES_OLD"]))) { $templates = array();
function InitializeIBlock($taskType, $ownerId, $forumId) { $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) { return 0; } $forumId = intval($forumId); $arTasksConverted2BP = array(); $keyTasksConverted2BP = $iblockId . "_" . $taskType . ($taskType == "group" ? "_" . $ownerId : ""); global $CACHE_MANAGER; if ($CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP")) { $arTasksConverted2BP = $CACHE_MANAGER->Get("IntranetTasksConverted2BP"); if (array_key_exists($keyTasksConverted2BP, $arTasksConverted2BP)) { return $arTasksConverted2BP[$keyTasksConverted2BP]; } } $globalParentSectionId = 0; $dbIBlock = CIBlock::GetList(array(), array("ID" => $iblockId, "ACTIVE" => "Y")); if ($arIBlock = $dbIBlock->Fetch()) { $arIBlockProperties = array(); $dbIBlockProps = CIBlock::GetProperties($iblockId); while ($arIBlockProps = $dbIBlockProps->Fetch()) { $ind = StrLen($arIBlockProps["CODE"]) > 0 ? $arIBlockProps["CODE"] : $arIBlockProps["ID"]; $arIBlockProperties[StrToUpper($ind)] = $arIBlockProps; } $arTasksProps = array("TASKPRIORITY" => array("NAME" => GetMessage("INTI_TASKPRIORITY"), "ACTIVE" => "Y", "SORT" => 100, "CODE" => "TaskPriority", "PROPERTY_TYPE" => "L", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, "VALUES" => array(array("VALUE" => " " . GetMessage("INTI_TASKPRIORITY_1"), "DEF" => "N", "SORT" => 100, "XML_ID" => "1"), array("VALUE" => " " . GetMessage("INTI_TASKPRIORITY_2"), "DEF" => "Y", "SORT" => 200, "XML_ID" => "2"), array("VALUE" => " " . GetMessage("INTI_TASKPRIORITY_3"), "DEF" => "N", "SORT" => 300, "XML_ID" => "3"))), "TASKCOMPLETE" => array("NAME" => GetMessage("INTI_TASKCOMPLETE"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskComplete", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKASSIGNEDTO" => array("NAME" => GetMessage("INTI_TASKASSIGNEDTO"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskAssignedTo", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKTRACKERS" => array("NAME" => GetMessage("INTI_TASKTRACKERS"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskTrackers", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKALERT" => array("NAME" => GetMessage("INTI_TASKALERT"), "ACTIVE" => "Y", "SORT" => 500, "CODE" => "TaskAlert", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "DEFAULT_VALUE" => "Y", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKSIZE" => array("NAME" => GetMessage("INTI_TASKSIZE"), "ACTIVE" => "Y", "SORT" => 600, "CODE" => "TaskSize", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKSIZEREAL" => array("NAME" => GetMessage("INTI_TASKSIZEREAL"), "ACTIVE" => "Y", "SORT" => 700, "CODE" => "TaskSizeReal", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKFINISH" => array("NAME" => GetMessage("INTI_TASKFINISH"), "ACTIVE" => "Y", "SORT" => 800, "CODE" => "TaskFinish", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKFILES" => array("NAME" => GetMessage("INTI_TASKFILES"), "ACTIVE" => "Y", "SORT" => 900, "CODE" => "TaskFiles", "PROPERTY_TYPE" => "F", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKREPORT" => array("NAME" => GetMessage("INTI_TASKREPORT"), "ACTIVE" => "Y", "SORT" => 1000, "CODE" => "TaskReport", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKREMIND" => array("NAME" => GetMessage("INTI_TASKREMIND"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskRemind", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "VERSION" => array("NAME" => GetMessage("INTI_VERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "VERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKVERSION" => array("NAME" => GetMessage("INTI_TASKVERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "TASKVERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId)); foreach ($arTasksProps as $propKey => $arProp) { if (!array_key_exists($propKey, $arIBlockProperties)) { $ibp = new CIBlockProperty(); $ibp->Add($arProp); } } $dbSectionsList = CIBlockSection::GetList(array(), array("GLOBAL_ACTIVE" => "Y", "XML_ID" => $taskType == "group" ? $ownerId : "users_tasks", "IBLOCK_ID" => $iblockId, "SECTION_ID" => 0), false); if ($arSection = $dbSectionsList->GetNext()) { $globalParentSectionId = $arSection["ID"]; } if ($globalParentSectionId <= 0) { if ($taskType == "group") { $folderName = "-"; $folderXmlId = $ownerId; if ($arGroup = CSocNetGroup::GetByID($ownerId)) { $folderName = $arGroup["NAME"] . " [" . $ownerId . "]"; $folderXmlId = $ownerId; } } else { $folderName = "User Tasks"; $folderXmlId = "users_tasks"; } $arFields = array("IBLOCK_ID" => $iblockId, "IBLOCK_SECTION_ID" => 0, "ACTIVE" => "Y", "NAME" => $folderName, "XML_ID" => $folderXmlId); $iblockSection = new CIBlockSection(); $globalParentSectionId = $iblockSection->Add($arFields, true); CIntranetTasks::InstallDefaultViews($taskType, $ownerId); } $db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("intranet", "CIntranetTasksDocument", "x" . $iblockId)), false, false, array("ID")); // while ($ar = $db->Fetch()) // { // try // { // CBPWorkflowTemplateLoader::Delete($ar["ID"]); // } // catch(Exception $e) // { // CBPWorkflowTemplateLoader::Update($ar["ID"], array("AUTO_EXECUTE" => 0)); // } // } $workflowTemplateId = 0; if ($ar = $db->Fetch()) { $workflowTemplateId = $ar["ID"]; } else { require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/intranet/classes/general/tasks_wf_template.php"; $workflowTemplateId = CBPWorkflowTemplateLoader::Add($arFields); } $arTaskStatusTmp = array(); $arTaskStatusTmpAlt = array(); $dbRes = CIBlockProperty::GetPropertyEnum("TaskStatus", array("SORT" => "ASC"), array("IBLOCK_ID" => $iblockId)); while ($arRes = $dbRes->Fetch()) { $arTaskStatusTmp[StrToUpper($arRes["XML_ID"])] = $arRes["ID"]; $arTaskStatusTmpAlt[$arRes["ID"]] = $arRes["XML_ID"]; } $dbResult = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $iblockId, "INCLUDE_SUBSECTIONS" => "Y", "!PROPERTY_TASKVERSION" => 2), false, false, array("ID", "PROPERTY_TASKSTATUS", "PROPERTY_TASKASSIGNEDTO", "IBLOCK_SECTION_ID")); if ($arResult = $dbResult->Fetch()) { $arOldTasksWFs = array(); $arOldTasksSTs = array(); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/intranet/classes/general/tasks_wf_template1.php"; $arOldTasksWFsTmp = array(); foreach ($arOldTasksWFs as $t1 => $t2) { if (array_key_exists($t1, $arTaskStatusTmp)) { $arOldTasksWFsTmp[$arTaskStatusTmp[$t1]] = $t2; } } $arOldTasksSTsTmp = array(); foreach ($arOldTasksSTs as $t1 => $t2) { if (array_key_exists($t1, $arTaskStatusTmp)) { $arOldTasksSTsTmp[$arTaskStatusTmp[$t1]] = $t2; } } do { $taskTypeTmp = ""; $ownerIdTmp = ""; $v = CIntranetTasks::PrepareSectionForPrint($arResult["IBLOCK_SECTION_ID"]); foreach ($v as $k1 => $v1) { $taskTypeTmp = $v1["XML_ID"] == "users_tasks" ? "user" : "group"; $ownerIdTmp = $taskTypeTmp == "user" ? $arResult["PROPERTY_TASKASSIGNEDTO_VALUE"] : $v1["XML_ID"]; break; } if ($taskTypeTmp == "group") { $pathTemplate = str_replace(array("#GROUP_ID#", "#TASK_ID#"), array($ownerIdTmp, "{=Document:ID}"), COption::GetOptionString("intranet", "path_task_group_entry", "/workgroups/group/#GROUP_ID#/tasks/task/view/#TASK_ID#/")); } else { $pathTemplate = str_replace(array("#USER_ID#", "#TASK_ID#"), array($ownerIdTmp, "{=Document:ID}"), COption::GetOptionString("intranet", "path_task_user_entry", "/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/")); } $pathTemplate = str_replace('#HTTP_HOST#', $_SERVER['HTTP_HOST'], "http://#HTTP_HOST#" . $pathTemplate); $workflowId = uniqid("", true); if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksWFsTmp)) { $v = $arOldTasksWFsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]; $v = str_replace(array("#TPT_TASK_ID_LEN#", "#TPT_TASK_ID#", "#TPT_WORKFLOW_ID_LEN#", "#TPT_WORKFLOW_ID#", "#TPT_DOCUMENT_LEN1#", "#TPT_DOCUMENT_LEN2#", "#TPT_DOCUMENT_LEN3#", "#TPT_DOCUMENT_ROOT#", "#TPT_OWNER_ID#", "#TPT_TASK_TYPE_LEN#", "#TPT_TASK_TYPE#", "#TPT_PATH_TEMPLATE_LEN#", "#TPT_PATH_TEMPLATE#", "#TPT_FORUM_ID#", "#TPT_IBLOCKID_ID#"), array(strlen($arResult["ID"]), $arResult["ID"], strlen($workflowId), $workflowId, 25 + strlen($_SERVER["DOCUMENT_ROOT"]), 25 + strlen($_SERVER["DOCUMENT_ROOT"]), 34 + strlen($_SERVER["DOCUMENT_ROOT"]), $_SERVER["DOCUMENT_ROOT"], $ownerIdTmp, strlen($taskTypeTmp), $taskTypeTmp, strlen($pathTemplate), $pathTemplate, $forumId, $iblockId), $v); CBPWorkflowPersister::__InsertWorkflowHack($workflowId, $v); } if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksSTsTmp)) { CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE_TITLE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PARAMS"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PERMS"]); } else { CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTs["COMPLETED"]["STATE"], $arOldTasksSTs["COMPLETED"]["STATE_TITLE"], $arOldTasksSTs["COMPLETED"]["PARAMS"], $arOldTasksSTs["COMPLETED"]["PERMS"]); } CIBlockElement::SetPropertyValues($arResult["ID"], $iblockId, 2, "TASKVERSION"); } while ($arResult = $dbResult->Fetch()); } $arTasksConverted2BP[$keyTasksConverted2BP] = $globalParentSectionId; $CACHE_MANAGER->Clean("IntranetTasksConverted2BP"); $CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP"); $CACHE_MANAGER->Set("IntranetTasksConverted2BP", $arTasksConverted2BP); } return $globalParentSectionId; }
public function executeComponent() { if ($this->arParams['SET_TITLE']) { $this->setPageTitle(Loc::getMessage('BPWI_PAGE_TITLE')); } if (!empty($_POST['ID']) && check_bitrix_sessid() && $this->isAdmin()) { foreach ((array) $_POST['ID'] as $id) { CBPDocument::killWorkflow($id); } } $selectFields = array('ID', 'MODIFIED', 'OWNER_ID', 'OWNED_UNTIL', 'WS_MODULE_ID' => $this->getFieldName('WS_MODULE_ID'), 'WS_ENTITY' => $this->getFieldName('WS_ENTITY'), 'WS_DOCUMENT_ID' => $this->getFieldName('WS_DOCUMENT_ID')); $gridColumns = $this->getGridOptions()->getVisibleColumns(); $this->arResult['HEADERS'] = $this->getGridHeaders(); $showDocumentName = false; foreach ($this->arResult['HEADERS'] as $h) { if ((count($gridColumns) <= 0 || in_array($h['id'], $gridColumns)) && !in_array($h['id'], $selectFields)) { if ($this->getFieldName($h['id'])) { $selectFields[$h['id']] = $this->getFieldName($h['id']); } elseif ($h['id'] == 'IS_LOCKED' && !in_array('OWNED_UNTIL', $selectFields)) { $selectFields['OWNED_UNTIL'] = $this->getFieldName('OWNED_UNTIL'); } elseif ($h['id'] == 'WS_DOCUMENT_NAME') { $showDocumentName = true; } } } if (isset($selectFields['WS_STARTED_BY'])) { $selectFields['WS_STARTED_USER_NAME'] = $this->getFieldName('WS_STARTED_USER_NAME'); $selectFields['WS_STARTED_USER_LAST_NAME'] = $this->getFieldName('WS_STARTED_USER_LAST_NAME'); $selectFields['WS_STARTED_USER_LOGIN'] = $this->getFieldName('WS_STARTED_USER_LOGIN'); } $filter = array(); $templatesFilter = array(); $this->arResult['DOCUMENT_TYPES'] = $this->getDocumentTypes(); if (!empty($_REQUEST['type']) && isset($this->arResult['DOCUMENT_TYPES'][$_REQUEST['type']])) { $this->arResult['DOCUMENT_TYPES'][$_REQUEST['type']]['ACTIVE'] = true; if (!empty($this->arResult['DOCUMENT_TYPES'][$_REQUEST['type']]['MODULE_ID'])) { $filter = array('=' . $this->getFieldName('WS_MODULE_ID') => $this->arResult['DOCUMENT_TYPES'][$_REQUEST['type']]['MODULE_ID']); $templatesFilter = array('MODULE_ID' => $filter[$this->getFieldName('WS_MODULE_ID')]); if (!empty($this->arResult['DOCUMENT_TYPES'][$_REQUEST['type']]['ENTITY'])) { $filter['=' . $this->getFieldName('WS_ENTITY')] = $this->arResult['DOCUMENT_TYPES'][$_REQUEST['type']]['ENTITY']; $templatesFilter['ENTITY'] = $this->arResult['DOCUMENT_TYPES'][$_REQUEST['type']]['ENTITY']; } } elseif ($_REQUEST['type'] == 'is_locked') { global $DB; $filter['<OWNED_UNTIL'] = date($DB->DateFormatToPHP(FORMAT_DATETIME), $this->getLockedTime()); } } else { $this->arResult['DOCUMENT_TYPES']['*']['ACTIVE'] = true; } $templatesList = array('' => Loc::getMessage('BPWI_WORKFLOW_ID_ANY')); $dbResTmp = \CBPWorkflowTemplateLoader::GetList(array('NAME' => 'ASC'), $templatesFilter, false, false, array('ID', 'NAME')); while ($arResTmp = $dbResTmp->GetNext()) { $templatesList[$arResTmp['ID']] = $arResTmp['NAME']; } $this->arResult['FILTER'] = $this->getFilter(); $this->arResult['FILTER'][] = array('id' => 'WS_WORKFLOW_TEMPLATE_ID', 'name' => Loc::getMessage('BPWI_WS_WORKFLOW_TEMPLATE_ID'), 'type' => 'list', 'items' => $templatesList); $gridFilter = $this->getGridOptions()->getFilter($this->arResult['FILTER']); $filter = $this->mergeFilters($filter, $gridFilter); if (!$this->isAdmin()) { global $USER; $filter['=' . $this->getFieldName('WS_STARTED_BY')] = $USER->getId(); } list($currentPage, $pageSize, $offset) = $this->getPaginationInfo(); $this->arResult['SORT'] = $this->getSorting(); $this->arResult['CURRENT_PAGE'] = $currentPage; $this->arResult['SHOW_NEXT_PAGE'] = false; $this->arResult['RECORDS'] = array(); $iterator = WorkflowInstanceTable::getList(array('order' => $this->arResult['SORT'], 'select' => $selectFields, 'filter' => $filter, 'limit' => $pageSize + 1, 'offset' => $offset)); $rowsCount = 0; while ($row = $iterator->fetch()) { $rowsCount++; if ($rowsCount > $pageSize) { $this->arResult['SHOW_NEXT_PAGE'] = true; break; } $row['WS_WORKFLOW_TEMPLATE_ID'] = $row['WS_WORKFLOW_TEMPLATE_ID'] ? $templatesList[$row['WS_WORKFLOW_TEMPLATE_ID']] : null; $row['IS_LOCKED'] = $row['OWNED_UNTIL'] && $row['OWNED_UNTIL']->getTimestamp() < $this->getLockedTime(); if (!empty($row['WS_STARTED_BY'])) { $row['WS_STARTED_BY'] = CUser::FormatName($this->arParams["NAME_TEMPLATE"], array('LOGIN' => $row['WS_STARTED_USER_LOGIN'], 'NAME' => $row['WS_STARTED_USER_NAME'], 'LAST_NAME' => $row['WS_STARTED_USER_LAST_NAME']), true) . " [" . $row['WS_STARTED_BY'] . "]"; } $row['DOCUMENT_URL'] = $row['WS_DOCUMENT_NAME'] = ''; if (!empty($row['WS_MODULE_ID'])) { $row['DOCUMENT_URL'] = CBPDocument::GetDocumentAdminPage(array($row['WS_MODULE_ID'], $row['WS_ENTITY'], $row['WS_DOCUMENT_ID'])); if ($showDocumentName) { $row['WS_DOCUMENT_NAME'] = CBPDocument::getDocumentName(array($row['WS_MODULE_ID'], $row['WS_ENTITY'], $row['WS_DOCUMENT_ID'])); } } $rowActions = array(array("ICONCLASS" => "edit", "DEFAULT" => true, "TEXT" => Loc::getMessage("BPWI_OPEN_DOCUMENT"), "ONCLICK" => $row['DOCUMENT_URL'] ? "window.open('" . $row["DOCUMENT_URL"] . "');" : 'alert(\'' . Loc::getMessage('BPWI_NO_DOCUMENT') . '\')')); if ($this->isAdmin()) { $rowActions[] = array("ICONCLASS" => "delete", "TEXT" => Loc::getMessage("BPWI_DELETE_LABEL"), "ONCLICK" => "bxGrid_" . static::GRID_ID . ".DeleteItem('" . $row['ID'] . "', '" . Loc::getMessage("BPWI_DELETE_CONFIRM") . "')"); } $this->arResult['RECORDS'][] = array('data' => $row, 'editable' => $this->isAdmin(), 'actions' => $rowActions); } $this->arResult['ROWS_COUNT'] = sizeof($this->arResult['RECORDS']); $this->arResult['GRID_ID'] = static::GRID_ID; $this->arResult['FILTER_PRESETS'] = $this->getFilterPresets(); $this->arResult['EDITABLE'] = $this->isAdmin(); $this->includeComponentTemplate(); }
} else { $_REQUEST["WF_STATUS_ID"] = $iEditStatus; } } } elseif ($ob->workflow == "bizproc") { $docID = null; if (!empty($arParams['ELEMENT_ID'])) { $docID = $arParams['DOCUMENT_TYPE']; $docID[2] = intval($arParams['ELEMENT_ID']); } $arDocumentStates = CBPDocument::GetDocumentStates($arParams["DOCUMENT_TYPE"], $docID); $arResult['DOCUMENT_STATES'] = $arDocumentStates; $canWrite = CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::WriteDocument, $GLOBALS["USER"]->GetID(), $arParams["DOCUMENT_TYPE"], array("SectionId" => $arParams["SECTION_ID"], "AllUserGroups" => $arResult["CurrentUserGroups"], "DocumentStates" => $arDocumentStates)); if (!$canWrite) { $arFilter = array("DOCUMENT_TYPE" => $ob->wfParams['DOCUMENT_TYPE'], "ACTIVE" => "Y"); $dbWFTemplates = CBPWorkflowTemplateLoader::GetList(array(), $arFilter, false, false, array("ID")); if ($dbWFTemplates && ($arWFTemplates = $dbWFTemplates->Fetch())) { if (empty($arDocumentStates) && $arParams['PERMISSION'] === 'U') { $sErrMsg = GetMessage("WD_NO_BP_AUTORUN"); } elseif (!empty($arDocumentStates) && $arParams['PERMISSION'] === 'U') { $sErrMsg = GetMessage("WD_BP_ACTIVE_STATES"); } else { $sErrMsg = GetMessage("WD_ACCESS_DENIED"); } } else { $sErrMsg = GetMessage("WD_NO_BP_TEMPLATES"); } if (!$ob->e_rights && $arParams["PERMISSION"] >= "X") { $sErrMsg .= GetMessage("WD_NO_BP_TEMPLATES_ADMIN", array("#LINK#" => $arParams["WEBDAV_BIZPROC_WORKFLOW_ADMIN_URL"])); } __WDShowError($sErrMsg);
$arResult["CurrentUserGroups"] = $ob->USER["GROUPS"]; if ($arResult["ELEMENT"]["CREATED_BY"] == $GLOBALS["USER"]->GetID()) { $arResult["CurrentUserGroups"][] = "author"; } $arParams["WORKFLOW"] = $arWorkFlow = array("LAST_ID" => $arParams["ELEMENT_ID"], "STATUS_ID" => 0, "STATUS_TITLE" => "", "STATUS_PERMISSION" => ""); /******************************************************************** /Default params ********************************************************************/ if (isset($_REQUEST["result"]) && $_REQUEST["result"] == "uploaded") { $arResult["NOTIFY_MESSAGE"] = GetMessage("WD_UPLOAD_DONE"); } if ($ob->workflow == "bizproc") { $arParams["BIZPROC_START"] = false; $arTemplates = array(); if ($arParams["PERMISSION"] >= "U") { $db_res = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => $arParams["DOCUMENT_TYPE"]), false, false, array("ID", "AUTO_EXECUTE", "NAME", "DESCRIPTION", "MODIFIED", "USER_ID", "PARAMETERS", "TEMPLATE")); while ($arWorkflowTemplate = $db_res->GetNext()) { $arTemplates[$arWorkflowTemplate["ID"]] = $arWorkflowTemplate; } } $arParams["TEMPLATES"] = $arTemplates; } /******************************************************************** Data ********************************************************************/ /************** Element ********************************************/ $arResult["ELEMENT"]["FULL_NAME"] = $arResult["ELEMENT"]["NAME"]; $arResult["ELEMENT"]["EXTENTION"] = $arResult["ELEMENT"]["FILE_EXTENTION"]; $arResult["ELEMENT"]["ORIGINAL"] = $arResult["ELEMENT_ORIGINAL"]; /************** File ***********************************************/ if (!empty($arResult["ELEMENT"]["ORIGINAL"])) {
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule("bizproc")) { return false; } if (!$GLOBALS["USER"]->IsAuthorized()) { $GLOBALS["APPLICATION"]->AuthForm(GetMessage("ACCESS_DENIED")); die; } $arParams["ID"] = intval($arParams["ID"]); $arTemplate = null; $canWrite = false; if ($arParams["ID"] > 0) { $dbTemplatesList = CBPWorkflowTemplateLoader::GetList(array(), array("ID" => $arParams["ID"]), false, false, array("ID", "DOCUMENT_TYPE", "NAME", "VARIABLES")); if ($arTemplate = $dbTemplatesList->Fetch()) { $canWrite = CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::CreateWorkflow, $GLOBALS["USER"]->GetID(), $arTemplate["DOCUMENT_TYPE"]); $arResult["DOCUMENT_TYPE"] = $arTemplate["DOCUMENT_TYPE"]; $arResult["NAME"] = $arTemplate["NAME"]; $arResult["VARIABLES"] = $arTemplate["VARIABLES"]; $arResult["ID"] = $arTemplate["ID"]; } } if (!is_array($arTemplate) || !$canWrite) { $GLOBALS["APPLICATION"]->AuthForm(GetMessage("ACCESS_DENIED")); die; } $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y"; $arParams["SET_NAV_CHAIN"] = $arParams["SET_NAV_CHAIN"] == "N" ? "N" : "Y"; $arResult['LIST_PAGE_URL'] = $arParams['LIST_PAGE_URL'];
CIBlock::Delete($ar["ID"]); } } } if (strlen($arResult["FatalErrorMessage"]) <= 0) { $arResult["Blocks"] = array(); $dbBlockList = CIBlock::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array("ACTIVE" => "Y", "SITE_ID" => SITE_ID, "TYPE" => $arParams["IBLOCK_TYPE"])); while ($arBlock = $dbBlockList->GetNext()) { $arBlock["LIST_URL"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_LIST"], array("block_id" => $arBlock["ID"])); if (intval($arBlock["PICTURE"]) <= 0) { $arBlock["PICTURE"] = "/bitrix/images/bizproc/vd_bp.jpg"; } $arMessagesTmp = CIBlock::GetMessages($arBlock["ID"]); $arBlock["CreateTitle"] = htmlspecialcharsbx(is_array($arMessagesTmp) && array_key_exists("ELEMENT_ADD", $arMessagesTmp) ? $arMessagesTmp["ELEMENT_ADD"] : ""); $workflowTemplateId = 0; $db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("bizproc", "CBPVirtualDocument", "type_" . $arBlock["ID"])), false, false, array("ID")); if ($ar = $db->Fetch()) { $workflowTemplateId = intval($ar["ID"]); } if ($workflowTemplateId > 0) { $arWorkflowTemplate = CBPWorkflowTemplateLoader::GetTemplateState($workflowTemplateId); if (!is_array($arWorkflowTemplate["STATE_PERMISSIONS"]) || count($arWorkflowTemplate["STATE_PERMISSIONS"]) <= 0) { $arWorkflowTemplate["STATE_PERMISSIONS"]["create"] = array("author"); } $arAllowableOperations = CBPDocument::GetAllowableOperations($GLOBALS["USER"]->GetID(), $GLOBALS["USER"]->GetUserGroupArray(), array($arWorkflowTemplate)); $arBlock["START_URL"] = ""; if ($arResult["AdminAccess"] || (is_array($arAllowableOperations) && in_array("create", $arAllowableOperations) || is_array($arWorkflowTemplate["STATE_PERMISSIONS"]["create"]) && in_array("author", $arWorkflowTemplate["STATE_PERMISSIONS"]["create"]))) { $arBlock["START_URL"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_START"], array("block_id" => $arBlock["ID"])); } } $arBlock["DELETE_URL"] = "";
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $arResult["VARIABLES"]["block_id"] = intval($arResult["VARIABLES"]["block_id"]); if ($arResult["VARIABLES"]["block_id"] <= 0) { ShowError(GetMessage("BPWC_WCT_EMPTY_BLOCK")); return; } if (!$USER->IsAdmin()) { if (!is_array($arParams["ADMIN_ACCESS"]) || count(array_intersect($USER->GetUserGroupArray(), $arParams["ADMIN_ACCESS"])) <= 0) { $GLOBALS["APPLICATION"]->AuthForm(""); die; } } $workflowTemplateId = 0; $db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("bizproc", "CBPVirtualDocument", "type_" . $arResult["VARIABLES"]["block_id"])), false, false, array("ID")); if ($ar = $db->Fetch()) { $workflowTemplateId = intval($ar["ID"]); } if (strLen($arResult["ALIASES"]["page"]) <= 0) { $arResult["ALIASES"]["page"] = "page"; } if (strLen($arResult["ALIASES"]["block_id"]) <= 0) { $arResult["ALIASES"]["block_id"] = "block_id"; } $pathToBP = trim($arResult["PATH_TO_BP"]); if (strlen($pathToBP) <= 0) { $pathToBP = $APPLICATION->GetCurPage() . "?" . $arResult["ALIASES"]["page"] . "=bp&" . $arResult["ALIASES"]["block_id"] . "=#block_id#"; } $pathToBP = $pathToBP . (strpos($pathToBP, "?") === false ? "?" : "&") . bitrix_sessid_get(); $pathToList = trim($arResult["PATH_TO_LIST"]);