Commit c5ec703b674403fa67c2f9cd63affbbac14281e1

Authored by nbm
1 parent dcf92b7a

Implement informed users saving and guard roles/groups.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3884 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/administration/workflow/workflows.php
@@ -12,6 +12,10 @@ require_once(KT_LIB_DIR . '/workflow/workflowtransition.inc.php'); @@ -12,6 +12,10 @@ require_once(KT_LIB_DIR . '/workflow/workflowtransition.inc.php');
12 $sectionName = "Administration"; 12 $sectionName = "Administration";
13 require_once(KT_DIR . "/presentation/webpageTemplate.inc"); 13 require_once(KT_DIR . "/presentation/webpageTemplate.inc");
14 14
  15 +require_once(KT_LIB_DIR . '/permissions/permission.inc.php');
  16 +require_once(KT_LIB_DIR . '/groups/Group.inc');
  17 +require_once(KT_LIB_DIR . '/roles/Role.inc');
  18 +
15 class KTWorkflowDispatcher extends KTStandardDispatcher { 19 class KTWorkflowDispatcher extends KTStandardDispatcher {
16 var $bAutomaticTransaction = true; 20 var $bAutomaticTransaction = true;
17 21
@@ -57,6 +61,9 @@ class KTWorkflowDispatcher extends KTStandardDispatcher { @@ -57,6 +61,9 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
57 // {{{ do_saveWorkflow 61 // {{{ do_saveWorkflow
58 function do_saveWorkflow() { 62 function do_saveWorkflow() {
59 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']); 63 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
  64 + $aOptions = array(
  65 + 'redirect_to' => array('editWorkflow', 'fWorkflowId=' . $oWorkflow->getId()),
  66 + );
60 $oWorkflow->setName($_REQUEST['fName']); 67 $oWorkflow->setName($_REQUEST['fName']);
61 $oWorkflow->setHumanName($_REQUEST['fName']); 68 $oWorkflow->setHumanName($_REQUEST['fName']);
62 if (!empty($_REQUEST['fStartStateId'])) { 69 if (!empty($_REQUEST['fStartStateId'])) {
@@ -151,14 +158,20 @@ class KTWorkflowDispatcher extends KTStandardDispatcher { @@ -151,14 +158,20 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
151 'query' => 'action=editState&fWorkflowId=' . $oWorkflow->getId() . '&fStateId=' . $oState->getId(), 158 'query' => 'action=editState&fWorkflowId=' . $oWorkflow->getId() . '&fStateId=' . $oState->getId(),
152 'name' => 'State ' . $oState->getName(), 159 'name' => 'State ' . $oState->getName(),
153 ); 160 );
  161 + $aInformed = KTWorkflowUtil::getInformedForState($oState);
154 $oTemplate->setData(array( 162 $oTemplate->setData(array(
155 'oWorkflow' => $oWorkflow, 163 'oWorkflow' => $oWorkflow,
156 'oState' => $oState, 164 'oState' => $oState,
  165 + 'oNotifyRole' => $oRole,
157 'aTransitionsTo' => $aTransitionsTo, 166 'aTransitionsTo' => $aTransitionsTo,
158 'aTransitions' => $aTransitions, 167 'aTransitions' => $aTransitions,
159 'aTransitionsSelected' => $aTransitionsSelected, 168 'aTransitionsSelected' => $aTransitionsSelected,
160 'aActions' => KTDocumentActionUtil::getDocumentActionsByNames(KTWorkflowUtil::getControlledActionsForWorkflow($oWorkflow)), 169 'aActions' => KTDocumentActionUtil::getDocumentActionsByNames(KTWorkflowUtil::getControlledActionsForWorkflow($oWorkflow)),
161 'aActionsSelected' => KTWorkflowUtil::getEnabledActionsForState($oState), 170 'aActionsSelected' => KTWorkflowUtil::getEnabledActionsForState($oState),
  171 + 'aGroups' => Group::getList(),
  172 + 'aRoles' => Role::getList(),
  173 + 'aUsers' => User::getList(),
  174 + 'aInformed' => $aInformed,
162 )); 175 ));
163 return $oTemplate; 176 return $oTemplate;
164 } 177 }
@@ -207,6 +220,44 @@ class KTWorkflowDispatcher extends KTStandardDispatcher { @@ -207,6 +220,44 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
207 exit(0); 220 exit(0);
208 } 221 }
209 // }}} 222 // }}}
  223 +
  224 + // {{{ do_saveInform
  225 + function do_saveInform() {
  226 + $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
  227 + $oState =& $this->oValidator->validateWorkflowState($_REQUEST['fStateId']);
  228 + $sTargetAction = 'editState';
  229 + $sTargetParams = 'fWorkflowId=' . $oWorkflow->getId() . '&fStateId=' . $oState->getId();
  230 + $aRoleIds = KTUtil::arrayGet($_REQUEST, 'fRoleIds');
  231 + if (empty($aRoleIds)) {
  232 + $aRoleIds = array();
  233 + }
  234 + if (!is_array($aRoleIds)) {
  235 + $this->errorRedirectTo($sTargetAction, 'Invalid roles specified', $sTargetParams);
  236 + }
  237 + $aGroupIds = KTUtil::arrayGet($_REQUEST, 'fGroupIds');
  238 + if (empty($aGroupIds)) {
  239 + $aGroupIds = array();
  240 + }
  241 + if (!is_array($aGroupIds)) {
  242 + $this->errorRedirectTo($sTargetAction, 'Invalid groups specified', $sTargetParams);
  243 + }
  244 + $aUserIds = KTUtil::arrayGet($_REQUEST, 'fUserIds');
  245 + if (empty($aUserIds)) {
  246 + $aUserIds = array();
  247 + }
  248 + if (!is_array($aUserIds)) {
  249 + $this->errorRedirectTo($sTargetAction, 'Invalid users specified', $sTargetParams);
  250 + }
  251 + $aAllowed = array(
  252 + 'role' => $aRoleIds,
  253 + 'group' => $aGroupIds,
  254 + 'user' => $aUserIds,
  255 + );
  256 + KTWorkflowUtil::setInformedForState($oState, $aAllowed);
  257 + $this->successRedirectTo($sTargetAction, 'Changes made', $sTargetParams);
  258 + }
  259 + // }}}
  260 +
210 // }}} 261 // }}}
211 262
212 // {{{ TRANSITION HANDLING 263 // {{{ TRANSITION HANDLING
@@ -215,13 +266,26 @@ class KTWorkflowDispatcher extends KTStandardDispatcher { @@ -215,13 +266,26 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
215 function do_newTransition() { 266 function do_newTransition() {
216 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']); 267 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
217 $oState =& $this->oValidator->validateWorkflowState($_REQUEST['fTargetStateId']); 268 $oState =& $this->oValidator->validateWorkflowState($_REQUEST['fTargetStateId']);
218 - $oPermission =& $this->oValidator->validatePermission($_REQUEST['fPermissionId']); 269 + $iPermissionId = KTUtil::arrayGet($_REQUEST, 'fPermissionId');
  270 + $iGroupId = KTUtil::arrayGet($_REQUEST, 'fGroupId');
  271 + $iRoleId = KTUtil::arrayGet($_REQUEST, 'fRoleId');
  272 + if ($iPermissionId) {
  273 + $this->oValidator->validatePermission($_REQUEST['fPermissionId']);
  274 + }
  275 + if ($iGroupId) {
  276 + $this->oValidator->validateGroup($_REQUEST['fGroupId']);
  277 + }
  278 + if ($iRoleId) {
  279 + $this->oValidator->validateRole($_REQUEST['fRoleId']);
  280 + }
219 $res = KTWorkflowTransition::createFromArray(array( 281 $res = KTWorkflowTransition::createFromArray(array(
220 'workflowid' => $oWorkflow->getId(), 282 'workflowid' => $oWorkflow->getId(),
221 'name' => $_REQUEST['fName'], 283 'name' => $_REQUEST['fName'],
222 'humanname' => $_REQUEST['fName'], 284 'humanname' => $_REQUEST['fName'],
223 'targetstateid' => $oState->getId(), 285 'targetstateid' => $oState->getId(),
224 - 'guardpermissionid' => $oPermission->getId(), 286 + 'guardpermissionid' => $iPermissionId,
  287 + 'guardgroupid' => $iGroupId,
  288 + 'guardroleid' => $iRoleId,
225 )); 289 ));
226 $this->oValidator->notError($res, array( 290 $this->oValidator->notError($res, array(
227 'redirect_to' => array('editWorkflow', 'fWorkflowId=' . $oWorkflow->getId()), 291 'redirect_to' => array('editWorkflow', 'fWorkflowId=' . $oWorkflow->getId()),
@@ -252,6 +316,8 @@ class KTWorkflowDispatcher extends KTStandardDispatcher { @@ -252,6 +316,8 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
252 'oTransition' => $oTransition, 316 'oTransition' => $oTransition,
253 'aStates' => KTWorkflowState::getByWorkflow($oWorkflow), 317 'aStates' => KTWorkflowState::getByWorkflow($oWorkflow),
254 'aPermissions' => KTPermission::getList(), 318 'aPermissions' => KTPermission::getList(),
  319 + 'aGroups' => Group::getList(),
  320 + 'aRoles' => Role::getList(),
255 )); 321 ));
256 return $oTemplate; 322 return $oTemplate;
257 } 323 }
@@ -259,16 +325,33 @@ class KTWorkflowDispatcher extends KTStandardDispatcher { @@ -259,16 +325,33 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
259 325
260 // {{{ do_saveTransition 326 // {{{ do_saveTransition
261 function do_saveTransition() { 327 function do_saveTransition() {
  328 + $aRequest = $this->oValidator->validateDict($_REQUEST, array(
  329 + 'fWorkflowId' => array('type' => 'workflow'),
  330 + 'fTransitionId' => array('type' => 'workflowtransition'),
  331 + ));
262 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']); 332 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
263 $oTransition =& $this->oValidator->validateWorkflowTransition($_REQUEST['fTransitionId']); 333 $oTransition =& $this->oValidator->validateWorkflowTransition($_REQUEST['fTransitionId']);
264 $oState =& $this->oValidator->validateWorkflowState($_REQUEST['fTargetStateId']); 334 $oState =& $this->oValidator->validateWorkflowState($_REQUEST['fTargetStateId']);
265 - $oPermission =& $this->oValidator->validatePermission($_REQUEST['fPermissionId']); 335 + $iPermissionId = KTUtil::arrayGet($_REQUEST, 'fPermissionId', null);
  336 + $iGroupId = KTUtil::arrayGet($_REQUEST, 'fGroupId', null);
  337 + $iRoleId = KTUtil::arrayGet($_REQUEST, 'fRoleId', null);
  338 + if ($iPermissionId) {
  339 + $this->oValidator->validatePermission($_REQUEST['fPermissionId']);
  340 + }
  341 + if ($iGroupId) {
  342 + $this->oValidator->validateGroup($_REQUEST['fGroupId']);
  343 + }
  344 + if ($iRoleId) {
  345 + $this->oValidator->validateRole($_REQUEST['fRoleId']);
  346 + }
266 $oTransition->updateFromArray(array( 347 $oTransition->updateFromArray(array(
267 'workflowid' => $oWorkflow->getId(), 348 'workflowid' => $oWorkflow->getId(),
268 'name' => $_REQUEST['fName'], 349 'name' => $_REQUEST['fName'],
269 'humanname' => $_REQUEST['fName'], 350 'humanname' => $_REQUEST['fName'],
270 'targetstateid' => $oState->getId(), 351 'targetstateid' => $oState->getId(),
271 - 'guardpermissionid' => $oPermission->getId(), 352 + 'guardpermissionid' => $iPermissionId,
  353 + 'guardgroupid' => $iGroupId,
  354 + 'guardroleid' => $iRoleId,
272 )); 355 ));
273 $res = $oTransition->update(); 356 $res = $oTransition->update();
274 $this->oValidator->notErrorFalse($res, array( 357 $this->oValidator->notErrorFalse($res, array(