Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms
This commit is contained in:
+24
-15
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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: ""
|
||||
@@ -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: ""
|
||||
@@ -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
@@ -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'));
|
||||
|
||||
Reference in New Issue
Block a user