- Модуль: bizproc
- Путь к файлу: ~/bitrix/modules/bizproc/classes/general/stateservice.php
- Класс: CBPStateService
- Вызов: CBPStateService::setState
public function setState($workflowId, $arState, $arStatePermissions = array())
{
global $DB;
$workflowId = trim($workflowId);
if ($workflowId == '')
throw new Exception("workflowId");
$state = trim($arState["STATE"]);
$stateTitle = trim($arState["TITLE"]);
$stateParameters = "";
if (count($arState["PARAMETERS"]) > 0)
$stateParameters = serialize($arState["PARAMETERS"]);
$DB->Query(
"UPDATE b_bp_workflow_state SET ".
" STATE = ".($state <> '' ? "'".$DB->ForSql($state)."'" : "NULL").", ".
" STATE_TITLE = ".($stateTitle <> '' ? "'".$DB->ForSql($stateTitle)."'" : "NULL").", ".
" STATE_PARAMETERS = ".($stateParameters <> '' ? "'".$DB->ForSql($stateParameters)."'" : "NULL").", ".
" MODIFIED = ".$DB->CurrentTimeFunction()." ".
"WHERE ID = '".$DB->ForSql($workflowId)."' "
);
if ($arStatePermissions !== false)
{
$arState = self::GetWorkflowState($workflowId);
$runtime = $this->runtime;
if (!isset($runtime) || !is_object($runtime))
$runtime = CBPRuntime::GetRuntime();
$documentService = $runtime->GetService("DocumentService");
$permissionRewrite = true;
if (isset($arStatePermissions['__mode']) || isset($arStatePermissions['__scope']))
{
$permissionRewrite = [
'setMode' => $arStatePermissions['__mode'] ?? CBPSetPermissionsMode::Clear,
'setScope' => $arStatePermissions['__scope'] ?? CBPSetPermissionsMode::ScopeWorkflow,
];
unset($arStatePermissions['__mode'], $arStatePermissions['__scope']);
}
$documentService->SetPermissions($arState["DOCUMENT_ID"], $workflowId, $arStatePermissions, $permissionRewrite);
$documentType = $documentService->GetDocumentType($arState["DOCUMENT_ID"]);
if ($documentType)
{
$arStatePermissions = $documentService->toInternalOperations($documentType, $arStatePermissions);
}
$DB->Query(
"DELETE FROM b_bp_workflow_permissions ".
"WHERE WORKFLOW_ID = '".$DB->ForSql($workflowId)."' "
);
foreach ($arStatePermissions as $permission => $arObjects)
{
foreach ($arObjects as $object)
{
$DB->Query(
"INSERT INTO b_bp_workflow_permissions (WORKFLOW_ID, OBJECT_ID, PERMISSION) ".
"VALUES ('".$DB->ForSql($workflowId)."', '".$DB->ForSql($object)."', '".$DB->ForSql($permission)."')"
);
}
}
}
}