workflowadminutil.inc.php
3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
// a very simple utility class to help keep the admin code clean, tidy
// and re-usable, without having to do the same thing in 5 or 6 different
// places.
//
// this also helps ease code-creep in workflowutil
class KTWorkflowAdminUtil {
// transition origins.
function saveTransitionsFrom($oState, $aTransitionIds) {
$sTable = KTUtil::getTableName('workflow_state_transitions');
$aQuery = array(
"DELETE FROM $sTable WHERE state_id = ?",
array($oState->getId()),
);
$res = DBUtil::runQuery($aQuery);
if (PEAR::isError($res)) {
return $res;
}
$aOptions = array('noid' => true);
if (empty($aTransitionIds)) {
return; // don't fail if there are no transitions.
}
foreach ($aTransitionIds as $iTransitionId) {
$res = DBUtil::autoInsert($sTable, array(
'state_id' => $oState->getId(),
'transition_id' => $iTransitionId,
), $aOptions);
if (PEAR::isError($res)) {
return $res;
}
}
return;
}
function saveTransitionSources($oTransition, $aStateIds) {
$sTable = KTUtil::getTableName('workflow_state_transitions');
$aQuery = array(
"DELETE FROM $sTable WHERE transition_id = ?",
array($oTransition->getId()),
);
$res = DBUtil::runQuery($aQuery);
if (PEAR::isError($res)) {
return $res;
}
$aOptions = array('noid' => true);
if (empty($aStateIds)) {
return; // don't fail if there are no transitions.
}
foreach ($aStateIds as $iStateId) {
$res = DBUtil::autoInsert($sTable, array(
'state_id' => $iStateId,
'transition_id' => $oTransition->getId(),
), $aOptions);
if (PEAR::isError($res)) {
return $res;
}
}
return;
}
// {{{ getTransitionsFrom
/**
* Gets which workflow transitions are available to be chosen from
* this workflow state.
*
* Workflow transitions have only destination workflow states, and
* it is up to the workflow state to decide which workflow
* transitions it wants to allow to leave its state.
*
* This function optionally will return the database id numbers of
* the workflow transitions using the 'ids' option.
*/
function getTransitionsFrom($oState, $aOptions = null) {
$bIds = KTUtil::arrayGet($aOptions, 'ids');
$sTable = KTUtil::getTableName('workflow_state_transitions');
$aQuery = array(
"SELECT transition_id FROM $sTable WHERE state_id = ?",
array($oState->getId()),
);
$aTransitionIds = DBUtil::getResultArrayKey($aQuery, 'transition_id');
if (PEAR::isError($aTransitionIds)) {
return $aTransitionIds;
}
if ($bIds) {
return $aTransitionIds;
}
$aRet = array();
foreach ($aTransitionIds as $iId) {
$aRet[] =& KTWorkflowTransition::get($iId);
}
return $aRet;
}
// }}}
function getSourceStates($oTransition, $aOptions = null) {
$bIds = KTUtil::arrayGet($aOptions, 'ids');
$sTable = KTUtil::getTableName('workflow_state_transitions');
$aQuery = array(
"SELECT state_id FROM $sTable WHERE transition_id = ?",
array($oTransition->getId()),
);
$aStateIds = DBUtil::getResultArrayKey($aQuery, 'state_id');
if (PEAR::isError($aStateIds)) {
return $aStateIds;
}
if ($bIds) {
return $aStateIds;
}
$aRet = array();
foreach ($aStateIds as $iId) {
$aRet[] =& KTWorkflowState::get($iId);
}
return $aRet;
}
}