This commit is contained in:
wangyidong
2022-09-13 13:58:54 +08:00
6 changed files with 434 additions and 46 deletions
+24 -15
View File
@@ -2000,11 +2000,10 @@ EOD;
$oldStatus = zget($old, 'status', '');
$newStatus = zget($new, 'status', '');
$newSubStatus = zget($new, 'subStatus', '');
if(empty($moduleName)) $moduleName = $app->getModuleName();
if($oldID and $oldStatus and $newStatus and !$newSubStatus and $oldStatus != $newStatus)
{
if(empty($moduleName)) $moduleName = $app->getModuleName();
$field = $app->dbh->query('SELECT options FROM ' . TABLE_WORKFLOWFIELD . " WHERE `module` = '$moduleName' AND `field` = 'subStatus'")->fetch();
if(!empty($field->options)) $field->options = json_decode($field->options, true);
@@ -2018,6 +2017,11 @@ EOD;
$new->subStatus = $default;
}
}
$dateFields = array();
$sql = "SELECT `field` FROM " . TABLE_WORKFLOWFIELD . " WHERE `module` = '{$moduleName}' and `control` in ('date', 'datetime')";
$stmt = $app->dbh->query($sql);
while($row = $stmt->fetch()) $dateFields[$row->field] = $row->field;
}
$changes = array();
@@ -2030,24 +2034,29 @@ EOD;
if(strtolower($key) == 'editedby') continue;
if(strtolower($key) == 'editeddate') continue;
if(strtolower($key) == 'uid') continue;
if(strtolower($key) == 'finisheddate' and $value == '') continue;
if(strtolower($key) == 'canceleddate' and $value == '') continue;
if(strtolower($key) == 'hangupeddate' and $value == '') continue;
if(strtolower($key) == 'lastcheckeddate' and $value == '') continue;
if(strtolower($key) == 'activateddate' and $value == '') continue;
if(strtolower($key) == 'closeddate' and $value == '') continue;
if(strtolower($key) == 'finisheddate' and $value == '') continue;
if(strtolower($key) == 'canceleddate' and $value == '') continue;
if(strtolower($key) == 'hangupeddate' and $value == '') continue;
if(strtolower($key) == 'lastcheckeddate' and $value == '') continue;
if(strtolower($key) == 'activateddate' and $value == '') continue;
if(strtolower($key) == 'closeddate' and $value == '') continue;
if(strtolower($key) == 'actualcloseddate' and $value == '') continue;
if(isset($old->$key) and $value != stripslashes($old->$key))
if(isset($old->$key))
{
$diff = '';
if(substr_count($value, "\n") > 1 or
substr_count($old->$key, "\n") > 1 or
strpos('name,title,desc,spec,steps,content,digest,verify,report,definition,analysis,summary,prevention,resolution,outline,schedule,minutes', strtolower($key)) !== false)
if($config->edition != 'open' && isset($dateFields[$key])) $old->$key = formatTime($old->$key);
if($value != stripslashes($old->$key))
{
$diff = commonModel::diff($old->$key, $value);
$diff = '';
if(substr_count($value, "\n") > 1 or
substr_count($old->$key, "\n") > 1 or
strpos('name,title,desc,spec,steps,content,digest,verify,report,definition,analysis,summary,prevention,resolution,outline,schedule,minutes', strtolower($key)) !== false)
{
$diff = commonModel::diff($old->$key, $value);
}
$changes[] = array('field' => $key, 'old' => $old->$key, 'new' => $value, 'diff' => $diff);
}
$changes[] = array('field' => $key, 'old' => $old->$key, 'new' => $value, 'diff' => $diff);
}
}
return $changes;
+3 -4
View File
@@ -111,8 +111,7 @@ class productModel extends model
}
$this->session->set('currentProductType', $currentProduct->type);
$executionID = ($isQaModule and $this->app->tab == 'execution') ? $extra : 0;
$output = '';
$output = '';
if(!empty($products))
{
$dropMenuLink = helper::createLink($isQaModule ? 'bug' : 'product', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra");
@@ -127,8 +126,8 @@ class productModel extends model
$this->lang->product->branch = sprintf($this->lang->product->branch, $this->lang->product->branchName[$currentProduct->type]);
$this->lang->product->menu->settings['subMenu']->branch = str_replace('@branch@', $this->lang->product->branch, $this->lang->product->menu->settings['subMenu']->branch);
$branches = $this->loadModel('branch')->getPairs($productID, 'all', $executionID);
$branchName = isset($branches[$branch]) ? $branches[$branch] : $branches[0];
$branches = $this->loadModel('branch')->getPairs($productID, 'all');
$branchName = $branches[$branch];
if(!$isMobile)
{
$dropMenuLink = helper::createLink('branch', 'ajaxGetDropMenu', "objectID=$productID&branch=$branch&module=$currentModule&method=$currentMethod&extra=$extra");
+219
View File
@@ -0,0 +1,219 @@
title: table zt_feedback
desc: "模块"
author: zongjun.lan
version: "1.0"
fields:
- field: id
note: "ID"
range: 1-1000
prefix: ""
postfix: ""
loop: 0
format: ""
- field: product
note: "所属产品"
range: 1-100{4}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: module
note: "所属模块"
range: 4521-4820{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: title
note: "标题"
range: 1-10000
prefix: "反馈标题"
postfix: ""
loop: 0
format: ""
- field: type
note: "反馈类型"
range: story,task,bug,todo,advice,issue,risk,opportunity
prefix: ""
postfix: ""
loop: 0
format: ""
- field: solution
note: "处理方案"
range: tobug,tostory,touserstory,totask,totodo
prefix: ""
postfix: ""
loop: 0
format: ""
- field: desc
note: "描述"
range: 1-10000
prefix: "这是反馈描述"
postfix: ""
loop: 0
format: ""
- field: status
note: "状态"
range: noreview,clarify,wait,commenting,replied,asked,closed
prefix: ""
postfix: ""
loop: 0
format: ""
- field: subStatus
note: "子状态"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: public
note: "公开"
range: 0,1
prefix: ""
postfix: ""
loop: 0
format: ""
- field: notify
note: "通知"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
- field: notifyEmail
note: "通知邮箱"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: likes
note: "点赞人"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: result
note: "转化结果"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: faq
note: "FAQ"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: openedBy
note: "反馈创建人"
range: admin
prefix: ""
postfix: ""
loop: 0
format: ""
- field: openedDate
range: "(-1M)-(+1w):-1D"
type: timestamp
format: "YYYY-MM-DD hh:mm:ss"
- field: reviewedBy
note: "由谁评审"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: reviewedDate
note: "评审时间"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: processedBy
note: "由谁处理"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: processedDate
note: "处理时间"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: closedBy
note: "由谁关闭"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: closedDate
note: "关闭时间"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: closedReason
note: "关闭原因"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: editedBy
note: "最后处理人"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: editedDate
note: "最后修改时间"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: assignedTo
note: "指派给"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: assignedDate
note: "指派时间"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: feedbackBy
note: "反馈者"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: mailto
note: "抄送给"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: deleted
note: "是否删除"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
+79
View File
@@ -0,0 +1,79 @@
title: table zt_module
desc: "模块"
author: zongjun.lan
version: "1.0"
fields:
- field: id
note: "ID"
range: 4521-4620
prefix: ""
postfix: ""
loop: 0
format: ""
- field: root
note: "根目录"
range: 1-100
prefix: ""
postfix: ""
loop: 0
format: ""
- field: branch
note: "分支"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
- field: name
note: "模块名称"
range: 1-10000
prefix: "feedback模块"
postfix: ""
loop: 0
format: ""
- field: parent
note: "父ID"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
- field: path
note: "ID路径"
fields:
- field: path1
range: 4521-4620
prefix: ","
postfix: ","
- field: path2
range: []
postfix: ""
format: ""
- field: grade
note: "等级"
range: 1
prefix: ""
postfix: ""
loop: 0
format: ""
- field: order
note: "排序"
range: 10-100:10
prefix: ""
postfix: ""
loop: 0
format: ""
- field: type
note: "对象类型"
range: feedback
prefix: ""
postfix: ""
loop: 0
format: ""
- field: deleted
note: "是否删除"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
+79
View File
@@ -0,0 +1,79 @@
title: table zt_module
desc: "模块"
author: zongjun.lan
version: "1.0"
fields:
- field: id
note: "ID"
range: 4621-4820
prefix: ""
postfix: ""
loop: 0
format: ""
- field: root
note: "根目录"
range: 1-100{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: branch
note: "分支"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
- field: name
note: "模块名称"
range: 1-10000
prefix: "feedback子模块"
postfix: ""
loop: 0
format: ""
- field: parent
note: "父ID"
range: 4521-4620{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: path
note: "ID路径"
fields:
- field: path1
range: 4521-4620{2}
prefix: ","
postfix: ","
- field: path2
range: 4621-4820
postfix: ","
format: ""
- field: grade
note: "等级"
range: 2
prefix: ""
postfix: ""
loop: 0
format: ""
- field: order
note: "排序"
range: 10-100:10
prefix: ""
postfix: ""
loop: 0
format: ""
- field: type
note: "对象类型"
range: feedback
prefix: ""
postfix: ""
loop: 0
format: ""
- field: deleted
note: "是否删除"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
+30 -27
View File
@@ -21,33 +21,36 @@ $builder->project = array('rows' => 90, 'extends' => array('project', 'proj
$builder->sprint = array('rows' => 600, 'extends' => array('project', 'execution'));
$builder->projectalone = array('rows' => 20, 'extends' => array('project', 'projectalone'));
$builder->story = array('rows' => 400, 'extends' => array('story'));
$builder->childstory = array('rows' => 50, 'extends' => array('story','childstory'));
$builder->storyreview = array('rows' => 100, 'extends' => array('storyreview'));
$builder->storymodule = array('rows' => 800, 'extends' => array('module','storymodule'));
$builder->storymoduleson = array('rows' => 400, 'extends' => array('module','storymoduleson'));
$builder->storyplan = array('rows' => 400, 'extends' => array('planstory'));
$builder->storystage = array('rows' => 450, 'extends' => array('storystage'));
$builder->storyspec = array('rows' => 570, 'extends' => array('storyspec'));
$builder->storyestimate = array('rows' => 6, 'extends' => array('storyestimate'));
$builder->relation = array('rows' => 12, 'extends' => array('relation'));
$builder->task = array('rows' => 600, 'extends' => array('task','task'));
$builder->taskmore = array('rows' => 300, 'extends' => array('task','moretask'));
$builder->taskspec = array('rows' => 600, 'extends' => array('taskspec'));
$builder->taskmodule = array('rows' => 1800, 'extends' => array('module','taskmodule'));
$builder->taskmoduleson = array('rows' => 600, 'extends' => array('module','taskmoduleson'));
$builder->taskestimate = array('rows' => 600, 'extends' => array('taskestimate'));
$builder->taskson = array('rows' => 10, 'extends' => array('task', 'taskson'));
$builder->case = array('rows' => 400, 'extends' => array('case'));
$builder->libcase = array('rows' => 10, 'extends' => array('case','libcase'));
$builder->unitcase = array('rows' => 150, 'extends' => array('case','unitcase'));
$builder->casestep = array('rows' => 400, 'extends' => array('casestep'));
$builder->casemodule = array('rows' => 100, 'extends' => array('module', 'casemodule'));
$builder->casemoduleson = array('rows' => 200, 'extends' => array('module', 'casemoduleson'));
$builder->bug = array('rows' => 300, 'extends' => array('bug'));
$builder->morebug = array('rows' => 15, 'extends' => array('bug','morebug'));
$builder->bugmodule = array('rows' => 100, 'extends' => array('module','bugmodule'));
$builder->bugmoduleson = array('rows' => 200, 'extends' => array('module','bugmoduleson'));
$builder->story = array('rows' => 400, 'extends' => array('story'));
$builder->childstory = array('rows' => 50, 'extends' => array('story','childstory'));
$builder->storyreview = array('rows' => 100, 'extends' => array('storyreview'));
$builder->storymodule = array('rows' => 800, 'extends' => array('module','storymodule'));
$builder->storymoduleson = array('rows' => 400, 'extends' => array('module','storymoduleson'));
$builder->storyplan = array('rows' => 400, 'extends' => array('planstory'));
$builder->storystage = array('rows' => 450, 'extends' => array('storystage'));
$builder->storyspec = array('rows' => 570, 'extends' => array('storyspec'));
$builder->storyestimate = array('rows' => 6, 'extends' => array('storyestimate'));
$builder->relation = array('rows' => 12, 'extends' => array('relation'));
$builder->task = array('rows' => 600, 'extends' => array('task','task'));
$builder->taskmore = array('rows' => 300, 'extends' => array('task','moretask'));
$builder->taskspec = array('rows' => 600, 'extends' => array('taskspec'));
$builder->taskmodule = array('rows' => 1800, 'extends' => array('module','taskmodule'));
$builder->taskmoduleson = array('rows' => 600, 'extends' => array('module','taskmoduleson'));
$builder->taskestimate = array('rows' => 600, 'extends' => array('taskestimate'));
$builder->taskson = array('rows' => 10, 'extends' => array('task', 'taskson'));
$builder->case = array('rows' => 400, 'extends' => array('case'));
$builder->libcase = array('rows' => 10, 'extends' => array('case','libcase'));
$builder->unitcase = array('rows' => 150, 'extends' => array('case','unitcase'));
$builder->casestep = array('rows' => 400, 'extends' => array('casestep'));
$builder->casemodule = array('rows' => 100, 'extends' => array('module', 'casemodule'));
$builder->casemoduleson = array('rows' => 200, 'extends' => array('module', 'casemoduleson'));
$builder->bug = array('rows' => 300, 'extends' => array('bug'));
$builder->morebug = array('rows' => 15, 'extends' => array('bug','morebug'));
$builder->bugmodule = array('rows' => 100, 'extends' => array('module','bugmodule'));
$builder->bugmoduleson = array('rows' => 200, 'extends' => array('module','bugmoduleson'));
$builder->feedback = array('rows' => 100, 'extends' => array('feedback'));
$builder->feedbackmodule = array('rows' => 100, 'extends' => array('module','feedbackmodule'));
$builder->feedbackmoduleson = array('rows' => 200, 'extends' => array('module','feedbackmoduleson'));
$builder->testtask = array('rows' => 100, 'extends' => array('testtask'));
$builder->testresult = array('rows' => 70, 'extends' => array('testresult'));