From af6a2f26bc1c944c2406066ea9e41256d16fad7d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 29 May 2020 13:45:41 +0800 Subject: [PATCH] * code for batchcreate and batchedit with flow. --- framework/control.class.php | 5 +-- framework/model.class.php | 49 +++++++++++++++++++++++ module/bug/model.php | 22 ++++++++++ module/bug/view/batchcreate.html.php | 7 ++++ module/bug/view/batchedit.html.php | 5 +++ module/story/model.php | 26 ++++++++++-- module/story/view/batchcreate.html.php | 5 +++ module/story/view/batchedit.html.php | 5 +++ module/task/model.php | 28 +++++++++++-- module/task/view/batchcreate.html.php | 6 +++ module/task/view/batchedit.html.php | 5 +++ module/testcase/model.php | 23 ++++++++++- module/testcase/view/batchcreate.html.php | 6 +++ module/testcase/view/batchedit.html.php | 5 +++ 14 files changed, 187 insertions(+), 10 deletions(-) diff --git a/framework/control.class.php b/framework/control.class.php index c9330217ac..94b60bd982 100644 --- a/framework/control.class.php +++ b/framework/control.class.php @@ -235,9 +235,8 @@ class control extends baseControl { if(!isset($this->config->bizVersion)) return false; - $flow = $this->loadModel('workflow')->getByModule($this->moduleName); - $action = $this->loadModel('workflowaction')->getByModuleAndAction($this->moduleName, $this->methodName); - if($flow && $action) $this->loadModel('workflowhook')->execute($flow, $action, $objectID); + $moduleName = $this->moduleName; + return $this->$moduleName->executeHooks($objectID); } /** diff --git a/framework/model.class.php b/framework/model.class.php index 5132163f4c..050296b78b 100644 --- a/framework/model.class.php +++ b/framework/model.class.php @@ -65,4 +65,53 @@ class model extends baseModel return $this->loadModel('workflowfield')->processSubStatus($module, $record); } + + /** + * Get flow extend fields. + * + * @access public + * @return array + */ + public function getFlowExtendFields() + { + if(!isset($this->config->bizVersion)) return array(); + + return $this->loadModel('flow')->getExtendFields($this->app->getModuleName(), $this->app->getMethodName()); + } + + /** + * Check flow rule. + * + * @param object $field + * @param string $value + * @access public + * @return bool|string + */ + public function checkFlowRule($field, $value) + { + if(!isset($this->config->bizVersion)) return false; + + return $this->loadModel('flow')->checkRule($field, $value); + } + + /** + * Execute Hooks + * + * @param int $objectID + * @access public + * @return void + */ + public function executeHooks($objectID) + { + if(!isset($this->config->bizVersion)) return false; + + $moduleName = $this->app->getModuleName(); + $methodName = $this->app->getMethodName(); + + $action = $this->loadModel('workflowaction')->getByModuleAndAction($moduleName, $methodName); + if($action and $action->extensionType == 'none') return false; + + $flow = $this->loadModel('workflow')->getByModule($moduleName); + if($flow && $action) $this->loadModel('workflowhook')->execute($flow, $action, $objectID); + } } diff --git a/module/bug/model.php b/module/bug/model.php index 036926f5b4..4a48b6a936 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -221,6 +221,7 @@ class bugModel extends model } if(isset($data->uploadImage)) $this->loadModel('file'); + $extendFields = $this->getFlowExtendFields(); $bugs = array(); foreach($data->title as $i => $title) { @@ -251,6 +252,13 @@ class bugModel extends model $bug->assignedDate = $now; } + foreach($extendFields as $extendField) + { + $bug->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $bug->{$extendField->field}); + if($message) die(js::alert($message)); + } + foreach(explode(',', $this->config->bug->create->requiredFields) as $field) { $field = trim($field); @@ -294,6 +302,9 @@ class bugModel extends model if(dao::isError()) die(js::error(dao::getError())); $bugID = $this->dao->lastInsertID(); + + $this->executeHooks($bugID); + $this->loadModel('score')->create('bug', 'create', $bugID); if(!empty($data->uploadImage[$i]) and !empty($file)) { @@ -719,6 +730,7 @@ class bugModel extends model } /* Initialize bugs from the post data.*/ + $extendFields = $this->getFlowExtendFields(); $oldBugs = $bugIDList ? $this->getByList($bugIDList) : array(); foreach($bugIDList as $bugID) { @@ -758,6 +770,13 @@ class bugModel extends model $bug->assignedDate = $now; } + foreach($extendFields as $extendField) + { + $bug->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $bug->{$extendField->field}); + if($message) die(js::alert($message)); + } + $bugs[$bugID] = $bug; unset($bug); } @@ -778,6 +797,9 @@ class bugModel extends model if(!dao::isError()) { if(!empty($bug->resolvedBy)) $this->loadModel('score')->create('bug', 'resolve', $bugID); + + $this->executeHooks($bugID); + $allChanges[$bugID] = common::createChanges($oldBug, $bug); } else diff --git a/module/bug/view/batchcreate.html.php b/module/bug/view/batchcreate.html.php index dad99c7c28..1f3cb383e7 100644 --- a/module/bug/view/batchcreate.html.php +++ b/module/bug/view/batchcreate.html.php @@ -60,6 +60,10 @@ '>bug->os;?> '>bug->browser;?> '>bug->keywords;?> + bug->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -110,6 +114,7 @@ ' style='overflow:visible'> bug->osList, $os, "class='form-control chosen'");?> ' style='overflow:visible'> bug->browserList, $browser, "class='form-control chosen'");?> '> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . "[$i]") . "";?> @@ -152,6 +157,7 @@ ' style='overflow:visible'> bug->osList, $os, "class='form-control chosen'");?> ' style='overflow:visible'> bug->browserList, $browser, "class='form-control chosen'");?> '> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . "[$i]") . "";?> @@ -197,6 +203,7 @@ ' style='overflow:visible'> bug->osList, $os, "class='form-control chosen'");?> ' style='overflow:visible'> bug->browserList, $browser, "class='form-control chosen'");?> '> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . "[%s]") . "";?> diff --git a/module/bug/view/batchedit.html.php b/module/bug/view/batchedit.html.php index 2597baf598..8395417e8f 100644 --- a/module/bug/view/batchedit.html.php +++ b/module/bug/view/batchedit.html.php @@ -64,6 +64,10 @@ '>bug->keywords;?> '>bug->resolvedByAB;?> '>bug->resolutionAB;?> + bug->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -128,6 +132,7 @@ + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, $bug, $extendField->field . "[{$bugID}]") . "";?> diff --git a/module/story/model.php b/module/story/model.php index faca71febf..26692d7d76 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -301,8 +301,9 @@ class storyModel extends model if(isset($stories->uploadImage)) $this->loadModel('file'); - $forceReview = $this->checkForceReview(); - $data = array(); + $extendFields = $this->getFlowExtendFields(); + $forceReview = $this->checkForceReview(); + $data = array(); foreach($stories->title as $i => $title) { if(empty($title)) continue; @@ -323,6 +324,13 @@ class storyModel extends model $story->openedDate = $now; $story->version = 1; + foreach($extendFields as $extendField) + { + $story->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $story->{$extendField->field}); + if($message) die(js::alert($message)); + } + foreach(explode(',', $this->config->story->create->requiredFields) as $field) { $field = trim($field); @@ -364,7 +372,7 @@ class storyModel extends model unset($file['realpath']); if(!is_dir($this->file->savePath)) mkdir($this->file->savePath, 0777, true); - if(rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname']))) + if($realPath and rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname']))) { $file['addedBy'] = $this->app->user->account; $file['addedDate'] = $now; @@ -387,6 +395,8 @@ class storyModel extends model $this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec(); + $this->executeHooks($storyID); + $actionID = $this->action->create('story', $storyID, 'Opened', ''); if(!dao::isError()) $this->loadModel('score')->create('story', 'create',$storyID); $mails[$i] = new stdclass(); @@ -796,6 +806,7 @@ class storyModel extends model if(isset($data->closedReasons[$storyID])) $prev['closedReason'] = $data->closedReasons[$storyID]; } + $extendFields = $this->getFlowExtendFields(); foreach($storyIdList as $storyID) { $oldStory = $oldStories[$storyID]; @@ -830,6 +841,13 @@ class storyModel extends model if($story->closedBy != false or $story->closedReason != false) $story->status = 'closed'; if($story->closedReason != false and $story->closedBy == false) $story->closedBy = $this->app->user->account; + foreach($extendFields as $extendField) + { + $story->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $story->{$extendField->field}); + if($message) die(js::alert($message)); + } + $stories[$storyID] = $story; } @@ -857,6 +875,8 @@ class storyModel extends model if(!dao::isError()) { + $this->executeHooks($storyID); + $this->setStage($storyID); if($story->closedReason == 'done') $this->loadModel('score')->create('story', 'close'); $allChanges[$storyID] = common::createChanges($oldStory, $story); diff --git a/module/story/view/batchcreate.html.php b/module/story/view/batchcreate.html.php index 7b16d7bd21..8d16660518 100644 --- a/module/story/view/batchcreate.html.php +++ b/module/story/view/batchcreate.html.php @@ -56,6 +56,10 @@ '>story->estimate;?> '>story->needReview;?> '>story->keywords;?> + story->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -88,6 +92,7 @@ '> '>story->reviewList, $needReview, "class='form-control'");?> '> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . '[$id]') . "";?> diff --git a/module/story/view/batchedit.html.php b/module/story/view/batchedit.html.php index 909e59b349..d70c46cbf1 100644 --- a/module/story/view/batchedit.html.php +++ b/module/story/view/batchedit.html.php @@ -53,6 +53,10 @@ foreach(explode(',', $showFields) as $field) '>story->closedBy;?> '> story->closedReason;?> '>story->keywords;?> + story->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -143,6 +147,7 @@ foreach(explode(',', $showFields) as $field) >closedReason, 'class="form-control" disabled="disabled"');?> >keywords, 'class="form-control"');?> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, $story, $extendField->field . "[{$storyID}]") . "";?> diff --git a/module/task/model.php b/module/task/model.php index 0b5db09bf3..616078dd71 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -246,7 +246,8 @@ class taskModel extends model $assignedTo = ''; /* Get task data. */ - $data = array(); + $extendFields = $this->getFlowExtendFields(); + $data = array(); foreach($tasks->name as $i => $name) { $story = !isset($tasks->story[$i]) || $tasks->story[$i] == 'ditto' ? $story : $tasks->story[$i]; @@ -278,6 +279,17 @@ class taskModel extends model if($assignedTo) $data[$i]->assignedDate = $now; if(strpos($this->config->task->create->requiredFields, 'estStarted') !== false and empty($tasks->estStarted[$i])) $data[$i]->estStarted = ''; if(strpos($this->config->task->create->requiredFields, 'deadline') !== false and empty($tasks->deadline[$i])) $data[$i]->deadline = ''; + + foreach($extendFields as $extendField) + { + $data[$i]->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $data[$i]->{$extendField->field}); + if($message) + { + dao::$errors['message'][] = sprintf($message); + return false; + } + } } /* Fix bug #1525*/ @@ -289,7 +301,6 @@ class taskModel extends model /* check data. */ foreach($data as $i => $task) { - if($task->deadline != '0000-00-00' and $task->deadline < $task->estStarted) { dao::$errors['message'][] = $this->lang->task->error->deadlineSmall; @@ -327,6 +338,9 @@ class taskModel extends model $taskID = $this->dao->lastInsertID(); $childTasks .= $taskID . ','; if($story) $this->story->setStage($task->story); + + $this->executeHooks($taskID); + $actionID = $this->action->create('task', $taskID, 'Opened', ''); if(!dao::isError()) $this->loadModel('score')->create('task', 'create', $taskID); @@ -905,7 +919,8 @@ class taskModel extends model } /* Initialize tasks from the post data.*/ - $oldTasks = $taskIDList ? $this->getByList($taskIDList) : array(); + $extendFields = $this->getFlowExtendFields(); + $oldTasks = $taskIDList ? $this->getByList($taskIDList) : array(); foreach($taskIDList as $taskID) { $oldTask = $oldTasks[$taskID]; @@ -934,6 +949,13 @@ class taskModel extends model $task->lastEditedDate = $now; $task->consumed = $oldTask->consumed; + foreach($extendFields as $extendField) + { + $task->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $task->{$extendField->field}); + if($message) die(js::alert($message)); + } + if($data->consumeds[$taskID]) { if($data->consumeds[$taskID] < 0) diff --git a/module/task/view/batchcreate.html.php b/module/task/view/batchcreate.html.php index ee225a0991..d00d30eecd 100644 --- a/module/task/view/batchcreate.html.php +++ b/module/task/view/batchcreate.html.php @@ -70,6 +70,10 @@ '>task->deadline;?> '>task->desc;?> '>task->pri;?> + task->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -132,6 +136,7 @@ > > >task->priList, $pri, 'class=form-control');?> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . "[$i]") . "";?> @@ -184,6 +189,7 @@ > > >task->priList, $pri, 'class=form-control');?> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . "[%s]") . "";?> diff --git a/module/task/view/batchedit.html.php b/module/task/view/batchedit.html.php index 87cfa0f69a..bcbbfb7e5e 100755 --- a/module/task/view/batchedit.html.php +++ b/module/task/view/batchedit.html.php @@ -66,6 +66,10 @@ '>task->canceledBy;?> '>task->closedBy;?> '>task->closedReason;?> + task->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -111,6 +115,7 @@ ' style='overflow:visible'>canceledBy, "class='form-control chosen'");?> ' style='overflow:visible'>closedBy, "class='form-control chosen'");?> >task->reasonList, $tasks[$taskID]->closedReason, 'class=form-control');?> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, $tasks[$taskID], $extendField->field . "[{$taskID}]") . "";?> diff --git a/module/testcase/model.php b/module/testcase/model.php index c884791ac3..24d3f89657 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -272,6 +272,7 @@ class testcaseModel extends model } $this->loadModel('story'); + $extendFields = $this->getFlowExtendFields(); $storyVersions = array(); $forceNotReview = $this->forceNotReview(); $data = array(); @@ -304,6 +305,13 @@ class testcaseModel extends model $storyVersions[$caseStory] = $data[$i]->storyVersion; } + foreach($extendFields as $extendField) + { + $data[$i]->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $data[$i]->{$extendField->field}); + if($message) die(js::alert($message)); + } + foreach(explode(',', $this->config->testcase->create->requiredFields) as $field) { $field = trim($field); @@ -324,7 +332,10 @@ class testcaseModel extends model die(js::reload('parent')); } - $caseID = $this->dao->lastInsertID(); + $caseID = $this->dao->lastInsertID(); + + $this->executeHooks($caseID); + $this->loadModel('score')->create('testcase', 'create', $caseID); $actionID = $this->loadModel('action')->create('case', $caseID, 'Opened'); } @@ -840,6 +851,7 @@ class testcaseModel extends model } /* Initialize cases from the post data.*/ + $extendFields = $this->getFlowExtendFields(); foreach($caseIDList as $caseID) { $case = new stdclass(); @@ -857,6 +869,13 @@ class testcaseModel extends model $case->type = $data->types[$caseID]; $case->stage = empty($data->stages[$caseID]) ? '' : implode(',', $data->stages[$caseID]); + foreach($extendFields as $extendField) + { + $case->{$extendField->field} = htmlspecialchars($this->post->{$extendField->field}[$i]); + $message = $this->checkFlowRule($extendField, $case->{$extendField->field}); + if($message) die(js::alert($message)); + } + $cases[$caseID] = $case; unset($case); } @@ -873,6 +892,8 @@ class testcaseModel extends model if(!dao::isError()) { + $this->executeHooks($caseID); + unset($oldCase->steps); $allChanges[$caseID] = common::createChanges($oldCase, $case); } diff --git a/module/testcase/view/batchcreate.html.php b/module/testcase/view/batchcreate.html.php index 357ead4016..05f0f85b68 100644 --- a/module/testcase/view/batchcreate.html.php +++ b/module/testcase/view/batchcreate.html.php @@ -64,6 +64,10 @@ '>testcase->keywords;?> '>testcase->stage;?> '>testcase->review;?> + testcase->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -99,6 +103,7 @@ '> ' style='overflow:visible'>testcase->stageList, '', "class='form-control chosen' multiple");?> '>testcase->reviewList, $needReview, "class='form-control'");?> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . "[$i]") . "";?> @@ -139,6 +144,7 @@ '> ' style='overflow:visible'>testcase->stageList, '', "class='form-control chosen' multiple");?> '>testcase->reviewList, $needReview, "class='form-control chosen'");?> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, '', $extendField->field . "[%s]") . "";?> diff --git a/module/testcase/view/batchedit.html.php b/module/testcase/view/batchedit.html.php index b75af1ea52..2a5deb3d9e 100644 --- a/module/testcase/view/batchedit.html.php +++ b/module/testcase/view/batchedit.html.php @@ -57,6 +57,10 @@ '>testcase->precondition;?> '>testcase->keywords;?> '>testcase->stage;?> + testcase->getFlowExtendFields(); + foreach($extendFields as $extendField) echo "{$extendField->name}"; + ?> @@ -109,6 +113,7 @@ '>precondition, "rows='1' class='form-control autosize'")?> '> keywords, "class='form-control'");?> ' style='overflow:visible'>testcase->stageList, $cases[$caseID]->stage, "class='form-control chosen' multiple data-placeholder='{$lang->testcase->stage}'");?> + control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->loadModel('flow')->getFieldControl($extendField, $cases[$caseID], $extendField->field . "[{$caseID}]") . "";?>