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 12 $sectionName = "Administration";
13 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 19 class KTWorkflowDispatcher extends KTStandardDispatcher {
16 20 var $bAutomaticTransaction = true;
17 21  
... ... @@ -57,6 +61,9 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
57 61 // {{{ do_saveWorkflow
58 62 function do_saveWorkflow() {
59 63 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
  64 + $aOptions = array(
  65 + 'redirect_to' => array('editWorkflow', 'fWorkflowId=' . $oWorkflow->getId()),
  66 + );
60 67 $oWorkflow->setName($_REQUEST['fName']);
61 68 $oWorkflow->setHumanName($_REQUEST['fName']);
62 69 if (!empty($_REQUEST['fStartStateId'])) {
... ... @@ -151,14 +158,20 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
151 158 'query' => 'action=editState&fWorkflowId=' . $oWorkflow->getId() . '&fStateId=' . $oState->getId(),
152 159 'name' => 'State ' . $oState->getName(),
153 160 );
  161 + $aInformed = KTWorkflowUtil::getInformedForState($oState);
154 162 $oTemplate->setData(array(
155 163 'oWorkflow' => $oWorkflow,
156 164 'oState' => $oState,
  165 + 'oNotifyRole' => $oRole,
157 166 'aTransitionsTo' => $aTransitionsTo,
158 167 'aTransitions' => $aTransitions,
159 168 'aTransitionsSelected' => $aTransitionsSelected,
160 169 'aActions' => KTDocumentActionUtil::getDocumentActionsByNames(KTWorkflowUtil::getControlledActionsForWorkflow($oWorkflow)),
161 170 'aActionsSelected' => KTWorkflowUtil::getEnabledActionsForState($oState),
  171 + 'aGroups' => Group::getList(),
  172 + 'aRoles' => Role::getList(),
  173 + 'aUsers' => User::getList(),
  174 + 'aInformed' => $aInformed,
162 175 ));
163 176 return $oTemplate;
164 177 }
... ... @@ -207,6 +220,44 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
207 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 263 // {{{ TRANSITION HANDLING
... ... @@ -215,13 +266,26 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
215 266 function do_newTransition() {
216 267 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
217 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 281 $res = KTWorkflowTransition::createFromArray(array(
220 282 'workflowid' => $oWorkflow->getId(),
221 283 'name' => $_REQUEST['fName'],
222 284 'humanname' => $_REQUEST['fName'],
223 285 'targetstateid' => $oState->getId(),
224   - 'guardpermissionid' => $oPermission->getId(),
  286 + 'guardpermissionid' => $iPermissionId,
  287 + 'guardgroupid' => $iGroupId,
  288 + 'guardroleid' => $iRoleId,
225 289 ));
226 290 $this->oValidator->notError($res, array(
227 291 'redirect_to' => array('editWorkflow', 'fWorkflowId=' . $oWorkflow->getId()),
... ... @@ -252,6 +316,8 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
252 316 'oTransition' => $oTransition,
253 317 'aStates' => KTWorkflowState::getByWorkflow($oWorkflow),
254 318 'aPermissions' => KTPermission::getList(),
  319 + 'aGroups' => Group::getList(),
  320 + 'aRoles' => Role::getList(),
255 321 ));
256 322 return $oTemplate;
257 323 }
... ... @@ -259,16 +325,33 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
259 325  
260 326 // {{{ do_saveTransition
261 327 function do_saveTransition() {
  328 + $aRequest = $this->oValidator->validateDict($_REQUEST, array(
  329 + 'fWorkflowId' => array('type' => 'workflow'),
  330 + 'fTransitionId' => array('type' => 'workflowtransition'),
  331 + ));
262 332 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
263 333 $oTransition =& $this->oValidator->validateWorkflowTransition($_REQUEST['fTransitionId']);
264 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 347 $oTransition->updateFromArray(array(
267 348 'workflowid' => $oWorkflow->getId(),
268 349 'name' => $_REQUEST['fName'],
269 350 'humanname' => $_REQUEST['fName'],
270 351 'targetstateid' => $oState->getId(),
271   - 'guardpermissionid' => $oPermission->getId(),
  352 + 'guardpermissionid' => $iPermissionId,
  353 + 'guardgroupid' => $iGroupId,
  354 + 'guardroleid' => $iRoleId,
272 355 ));
273 356 $res = $oTransition->update();
274 357 $this->oValidator->notErrorFalse($res, array(
... ...