7 public function SetState($workflowId, $arState, $arStatePermissions =
array())
11 $workflowId = trim($workflowId);
12 if (strlen($workflowId) <= 0)
13 throw new Exception(
"workflowId");
15 $state = trim($arState[
"STATE"]);
16 $stateTitle = trim($arState[
"TITLE"]);
17 $stateParameters =
"";
18 if (
count($arState[
"PARAMETERS"]) > 0)
19 $stateParameters = serialize($arState[
"PARAMETERS"]);
22 "UPDATE b_bp_workflow_state SET ".
23 " STATE = ".(strlen($state) > 0 ?
"'".
$DB->ForSql($state).
"'" :
"NULL").
", ".
24 " STATE_TITLE = ".(strlen($stateTitle) > 0 ?
"'".$DB->ForSql($stateTitle).
"'" :
"NULL").
", ".
25 " STATE_PARAMETERS = ".(strlen($stateParameters) > 0 ?
"'".$DB->ForSql($stateParameters).
"'" :
"NULL").
", ".
26 " MODIFIED = ".$DB->CurrentTimeFunction().
" ".
27 "WHERE ID = '".$DB->ForSql($workflowId).
"' "
30 if ($arStatePermissions !==
false)
32 $arState = self::GetWorkflowState($workflowId);
36 $documentService =
$runtime->GetService(
"DocumentService");
37 $documentService->SetPermissions($arState[
"DOCUMENT_ID"], $workflowId, $arStatePermissions,
true);
38 $documentType = $documentService->GetDocumentType($arState[
"DOCUMENT_ID"]);
40 $arStatePermissions = $documentService->toInternalOperations($documentType, $arStatePermissions);
43 "DELETE FROM b_bp_workflow_permissions ".
44 "WHERE WORKFLOW_ID = '".
$DB->ForSql($workflowId).
"' "
47 foreach ($arStatePermissions as $permission => $arObjects)
49 foreach ($arObjects as $object)
52 "INSERT INTO b_bp_workflow_permissions (WORKFLOW_ID, OBJECT_ID, PERMISSION) ".
53 "VALUES ('".
$DB->ForSql($workflowId).
"', '".
$DB->ForSql($object).
"', '".
$DB->ForSql($permission).
"')"
64 $workflowId = trim($workflowId);
65 if (strlen($workflowId) <= 0)
66 throw new Exception(
"workflowId");
68 $stateParameters =
"";
69 if (
count($arStateParameters) > 0)
70 $stateParameters = serialize($arStateParameters);
73 "UPDATE b_bp_workflow_state SET ".
74 " STATE_PARAMETERS = ".(strlen($stateParameters) > 0 ?
"'".
$DB->ForSql($stateParameters).
"'" :
"NULL").
", ".
75 " MODIFIED = ".$DB->CurrentTimeFunction().
" ".
76 "WHERE ID = '".$DB->ForSql($workflowId).
"' "
84 $workflowId = trim($workflowId);
85 if (strlen($workflowId) <= 0)
86 throw new Exception(
"workflowId");
89 "SELECT STATE_PARAMETERS ".
90 "FROM b_bp_workflow_state ".
91 "WHERE ID = '".
$DB->ForSql($workflowId).
"' "
96 $stateParameters =
array();
97 if (strlen(
$arResult[
"STATE_PARAMETERS"]) > 0)
98 $stateParameters = unserialize(
$arResult[
"STATE_PARAMETERS"]);
100 $stateParameters[] = $arStateParameter;
102 $stateParameters = serialize($stateParameters);
105 "UPDATE b_bp_workflow_state SET ".
106 " STATE_PARAMETERS = ".(strlen($stateParameters) > 0 ?
"'".
$DB->ForSql($stateParameters).
"'" :
"NULL").
", ".
107 " MODIFIED = ".$DB->CurrentTimeFunction().
" ".
108 "WHERE ID = '".$DB->ForSql($workflowId).
"' "
117 $workflowId = trim($workflowId);
118 if (strlen($workflowId) <= 0)
119 throw new Exception(
"workflowId");
122 "SELECT STATE_PARAMETERS ".
123 "FROM b_bp_workflow_state ".
124 "WHERE ID = '".
$DB->ForSql($workflowId).
"' "
129 $stateParameters =
array();
130 if (strlen(
$arResult[
"STATE_PARAMETERS"]) > 0)
131 $stateParameters = unserialize(
$arResult[
"STATE_PARAMETERS"]);
134 foreach ($stateParameters as $v)
136 if ($v[
"NAME"] !=
$name)
140 $stateParameters =
"";
142 $stateParameters = serialize(
$ar);
145 "UPDATE b_bp_workflow_state SET ".
146 " STATE_PARAMETERS = ".(strlen($stateParameters) > 0 ?
"'".
$DB->ForSql($stateParameters).
"'" :
"NULL").
", ".
147 " MODIFIED = ".$DB->CurrentTimeFunction().
" ".
148 "WHERE ID = '".$DB->ForSql($workflowId).
"' "
158 "INSERT INTO b_bp_workflow_state (ID, MODULE_ID, ENTITY, DOCUMENT_ID, DOCUMENT_ID_INT, WORKFLOW_TEMPLATE_ID, MODIFIED, STATE, STATE_TITLE, STATE_PARAMETERS) ".
159 "VALUES ('".
$DB->ForSql($id).
"', '".
$DB->ForSql(
$moduleId).
"', '".
$DB->ForSql(
$entity).
"', '".
$DB->ForSql($documentId).
"', ".intval($documentId).
", ".intval(
$templateId).
", ".
$DB->CurrentTimeFunction().
", '".
$DB->ForSql($state).
"', '".
$DB->ForSql($stateTitle).
"', ".(strlen($stateParameters) > 0 ?
"'".
$DB->ForSql($stateParameters).
"'" :
"NULL").
")"
162 foreach ($arStatePermissions as $permission => $arObjects)
164 foreach ($arObjects as $object)
167 "INSERT INTO b_bp_workflow_permissions (WORKFLOW_ID, OBJECT_ID, PERMISSION) ".
168 "VALUES ('".
$DB->ForSql($id).
"', '".
$DB->ForSql($object).
"', '".
$DB->ForSql($permission).
"')"
static __InsertStateHack($id, $moduleId, $entity, $documentId, $templateId, $state, $stateTitle, $stateParameters, $arStatePermissions)