• Модуль: 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)."')"
				);
			}
		}
	}
}