diff --git a/config/zentaopms.php b/config/zentaopms.php index 8ce5a9a7cb..a66441e4e2 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -236,38 +236,40 @@ if(!defined('TABLE_PROJECTSPEC')) define('TABLE_PROJECTSPEC', '`' . $conf if(!defined('TABLE_SEARCHINDEX')) define('TABLE_SEARCHINDEX', $config->db->prefix . 'searchindex'); if(!defined('TABLE_SEARCHDICT')) define('TABLE_SEARCHDICT', $config->db->prefix . 'searchdict'); -$config->objectTables['product'] = TABLE_PRODUCT; -$config->objectTables['productplan'] = TABLE_PRODUCTPLAN; -$config->objectTables['story'] = TABLE_STORY; -$config->objectTables['requirement'] = TABLE_STORY; -$config->objectTables['release'] = TABLE_RELEASE; -$config->objectTables['program'] = TABLE_PROJECT; -$config->objectTables['project'] = TABLE_PROJECT; -$config->objectTables['execution'] = TABLE_PROJECT; -$config->objectTables['task'] = TABLE_TASK; -$config->objectTables['build'] = TABLE_BUILD; -$config->objectTables['bug'] = TABLE_BUG; -$config->objectTables['case'] = TABLE_CASE; -$config->objectTables['testcase'] = TABLE_CASE; -$config->objectTables['testtask'] = TABLE_TESTTASK; -$config->objectTables['testsuite'] = TABLE_TESTSUITE; -$config->objectTables['testreport'] = TABLE_TESTREPORT; -$config->objectTables['user'] = TABLE_USER; -$config->objectTables['api'] = TABLE_API; -$config->objectTables['doc'] = TABLE_DOC; -$config->objectTables['doclib'] = TABLE_DOCLIB; -$config->objectTables['todo'] = TABLE_TODO; -$config->objectTables['custom'] = TABLE_LANG; -$config->objectTables['branch'] = TABLE_BRANCH; -$config->objectTables['module'] = TABLE_MODULE; -$config->objectTables['caselib'] = TABLE_TESTSUITE; -$config->objectTables['entry'] = TABLE_ENTRY; -$config->objectTables['webhook'] = TABLE_WEBHOOK; -$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER; -$config->objectTables['job'] = TABLE_JOB; -$config->objectTables['team'] = TABLE_TEAM; -$config->objectTables['pipeline'] = TABLE_PIPELINE; -$config->objectTables['mr'] = TABLE_MR; +$config->objectTables['product'] = TABLE_PRODUCT; +$config->objectTables['productplan'] = TABLE_PRODUCTPLAN; +$config->objectTables['story'] = TABLE_STORY; +$config->objectTables['requirement'] = TABLE_STORY; +$config->objectTables['release'] = TABLE_RELEASE; +$config->objectTables['program'] = TABLE_PROJECT; +$config->objectTables['project'] = TABLE_PROJECT; +$config->objectTables['execution'] = TABLE_PROJECT; +$config->objectTables['task'] = TABLE_TASK; +$config->objectTables['build'] = TABLE_BUILD; +$config->objectTables['bug'] = TABLE_BUG; +$config->objectTables['case'] = TABLE_CASE; +$config->objectTables['testcase'] = TABLE_CASE; +$config->objectTables['testtask'] = TABLE_TESTTASK; +$config->objectTables['testsuite'] = TABLE_TESTSUITE; +$config->objectTables['testreport'] = TABLE_TESTREPORT; +$config->objectTables['user'] = TABLE_USER; +$config->objectTables['api'] = TABLE_API; +$config->objectTables['doc'] = TABLE_DOC; +$config->objectTables['doclib'] = TABLE_DOCLIB; +$config->objectTables['todo'] = TABLE_TODO; +$config->objectTables['custom'] = TABLE_LANG; +$config->objectTables['branch'] = TABLE_BRANCH; +$config->objectTables['module'] = TABLE_MODULE; +$config->objectTables['caselib'] = TABLE_TESTSUITE; +$config->objectTables['entry'] = TABLE_ENTRY; +$config->objectTables['webhook'] = TABLE_WEBHOOK; +$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER; +$config->objectTables['job'] = TABLE_JOB; +$config->objectTables['team'] = TABLE_TEAM; +$config->objectTables['pipeline'] = TABLE_PIPELINE; +$config->objectTables['mr'] = TABLE_MR; +$config->objectTables['kanbancolumn'] = TABLE_KANBANCOLUMN; +$config->objectTables['kanbanlane'] = TABLE_KANBANLANE; $config->newFeatures = array('introduction', 'tutorial', 'youngBlueTheme'); diff --git a/module/action/config.php b/module/action/config.php index 58d0f4a69c..7334555684 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -1,37 +1,39 @@ action->objectNameFields['product'] = 'name'; -$config->action->objectNameFields['story'] = 'title'; -$config->action->objectNameFields['productplan'] = 'title'; -$config->action->objectNameFields['release'] = 'name'; -$config->action->objectNameFields['program'] = 'name'; -$config->action->objectNameFields['project'] = 'name'; -$config->action->objectNameFields['execution'] = 'name'; -$config->action->objectNameFields['task'] = 'name'; -$config->action->objectNameFields['build'] = 'name'; -$config->action->objectNameFields['bug'] = 'title'; -$config->action->objectNameFields['testcase'] = 'title'; -$config->action->objectNameFields['case'] = 'title'; -$config->action->objectNameFields['testtask'] = 'name'; -$config->action->objectNameFields['user'] = 'account'; -$config->action->objectNameFields['api'] = 'title'; -$config->action->objectNameFields['doc'] = 'title'; -$config->action->objectNameFields['doclib'] = 'name'; -$config->action->objectNameFields['todo'] = 'name'; -$config->action->objectNameFields['branch'] = 'name'; -$config->action->objectNameFields['module'] = 'name'; -$config->action->objectNameFields['testsuite'] = 'name'; -$config->action->objectNameFields['caselib'] = 'name'; -$config->action->objectNameFields['testreport'] = 'title'; -$config->action->objectNameFields['entry'] = 'name'; -$config->action->objectNameFields['webhook'] = 'name'; -$config->action->objectNameFields['risk'] = 'name'; -$config->action->objectNameFields['issue'] = 'title'; -$config->action->objectNameFields['design'] = 'name'; -$config->action->objectNameFields['stakeholder'] = 'user'; -$config->action->objectNameFields['budget'] = 'name'; -$config->action->objectNameFields['job'] = 'name'; -$config->action->objectNameFields['team'] = 'name'; -$config->action->objectNameFields['pipeline'] = 'name'; +$config->action->objectNameFields['product'] = 'name'; +$config->action->objectNameFields['story'] = 'title'; +$config->action->objectNameFields['productplan'] = 'title'; +$config->action->objectNameFields['release'] = 'name'; +$config->action->objectNameFields['program'] = 'name'; +$config->action->objectNameFields['project'] = 'name'; +$config->action->objectNameFields['execution'] = 'name'; +$config->action->objectNameFields['task'] = 'name'; +$config->action->objectNameFields['build'] = 'name'; +$config->action->objectNameFields['bug'] = 'title'; +$config->action->objectNameFields['testcase'] = 'title'; +$config->action->objectNameFields['case'] = 'title'; +$config->action->objectNameFields['testtask'] = 'name'; +$config->action->objectNameFields['user'] = 'account'; +$config->action->objectNameFields['api'] = 'title'; +$config->action->objectNameFields['doc'] = 'title'; +$config->action->objectNameFields['doclib'] = 'name'; +$config->action->objectNameFields['todo'] = 'name'; +$config->action->objectNameFields['branch'] = 'name'; +$config->action->objectNameFields['module'] = 'name'; +$config->action->objectNameFields['testsuite'] = 'name'; +$config->action->objectNameFields['caselib'] = 'name'; +$config->action->objectNameFields['testreport'] = 'title'; +$config->action->objectNameFields['entry'] = 'name'; +$config->action->objectNameFields['webhook'] = 'name'; +$config->action->objectNameFields['risk'] = 'name'; +$config->action->objectNameFields['issue'] = 'title'; +$config->action->objectNameFields['design'] = 'name'; +$config->action->objectNameFields['stakeholder'] = 'user'; +$config->action->objectNameFields['budget'] = 'name'; +$config->action->objectNameFields['job'] = 'name'; +$config->action->objectNameFields['team'] = 'name'; +$config->action->objectNameFields['pipeline'] = 'name'; +$config->action->objectNameFields['kanbancolumn'] = 'name'; +$config->action->objectNameFields['kanbanlane'] = 'name'; $config->action->commonImgSize = 870; diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 65c117cd60..530730b3c8 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -355,6 +355,9 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->execu $lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon; $lang->action->dynamicAction->execution['moved'] = 'Improt Task'; +$lang->action->dynamicAction->kanbancolumn['edited'] = 'Column Settings'; +$lang->action->dynamicAction->kanbanlane['edited'] = 'Lane Settings'; + $lang->action->dynamicAction->team['managedTeam'] = 'Manage Team'; $lang->action->dynamicAction->task['opened'] = 'Create Task'; @@ -486,26 +489,28 @@ else { $lang->action->label->execution = "$lang->executionCommon|execution|task|executionID=%s"; } -$lang->action->label->task = 'Task|task|view|taskID=%s'; -$lang->action->label->build = 'Build|build|view|buildID=%s'; -$lang->action->label->bug = 'Bug|bug|view|bugID=%s'; -$lang->action->label->case = 'Case|testcase|view|caseID=%s'; -$lang->action->label->testtask = 'Request|testtask|view|caseID=%s'; -$lang->action->label->testsuite = 'Test Suite|testsuite|view|suiteID=%s'; -$lang->action->label->caselib = 'Case Library|caselib|view|libID=%s'; -$lang->action->label->todo = 'Todo|todo|view|todoID=%s'; -$lang->action->label->doclib = 'Doc Library|doc|objectLibs|type=%s&objectID=%s&libID=%s&docID=&version=&appendLib=%s'; -$lang->action->label->doc = 'Doc|doc|view|docID=%s'; -$lang->action->label->user = 'User|user|view|account=%s'; -$lang->action->label->testreport = 'Report|testreport|view|report=%s'; -$lang->action->label->entry = 'Application|entry|browse|'; -$lang->action->label->webhook = 'Webhook|webhook|browse|'; -$lang->action->label->space = ' '; -$lang->action->label->risk = 'Risk|risk|view|riskID=%s'; -$lang->action->label->issue = 'Issue|issue|view|issueID=%s'; -$lang->action->label->design = 'Design|design|view|designID=%s'; -$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; -$lang->action->label->api = 'Interface|api|index|libID=%s&moduleID=%s&apiID=%s'; +$lang->action->label->task = 'Task|task|view|taskID=%s'; +$lang->action->label->build = 'Build|build|view|buildID=%s'; +$lang->action->label->bug = 'Bug|bug|view|bugID=%s'; +$lang->action->label->case = 'Case|testcase|view|caseID=%s'; +$lang->action->label->testtask = 'Request|testtask|view|caseID=%s'; +$lang->action->label->testsuite = 'Test Suite|testsuite|view|suiteID=%s'; +$lang->action->label->caselib = 'Case Library|caselib|view|libID=%s'; +$lang->action->label->todo = 'Todo|todo|view|todoID=%s'; +$lang->action->label->doclib = 'Doc Library|doc|objectLibs|type=%s&objectID=%s&libID=%s&docID=&version=&appendLib=%s'; +$lang->action->label->doc = 'Doc|doc|view|docID=%s'; +$lang->action->label->user = 'User|user|view|account=%s'; +$lang->action->label->testreport = 'Report|testreport|view|report=%s'; +$lang->action->label->entry = 'Application|entry|browse|'; +$lang->action->label->webhook = 'Webhook|webhook|browse|'; +$lang->action->label->space = ' '; +$lang->action->label->risk = 'Risk|risk|view|riskID=%s'; +$lang->action->label->issue = 'Issue|issue|view|issueID=%s'; +$lang->action->label->design = 'Design|design|view|designID=%s'; +$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s'; +$lang->action->label->api = 'Interface|api|index|libID=%s&moduleID=%s&apiID=%s'; +$lang->action->label->kanbancolumn = 'Column|execution|kanban|execution=%s'; +$lang->action->label->kanbanlane = 'Lane|execution|kanban|execution=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index b957726aae..e71375c601 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -355,6 +355,9 @@ $lang->action->dynamicAction->execution['undeleted'] = '还原' . $lang->executi $lang->action->dynamicAction->execution['hidden'] = '隐藏' . $lang->executionCommon; $lang->action->dynamicAction->execution['moved'] = '导入任务'; +$lang->action->dynamicAction->kanbancolumn['edited'] = '设置看板列'; +$lang->action->dynamicAction->kanbanlane['edited'] = '设置泳道'; + $lang->action->dynamicAction->team['managedTeam'] = '维护团队'; $lang->action->dynamicAction->task['opened'] = '创建任务'; @@ -486,26 +489,28 @@ else { $lang->action->label->execution = "$lang->executionCommon|execution|task|executionID=%s"; } -$lang->action->label->task = '任务|task|view|taskID=%s'; -$lang->action->label->build = '版本|build|view|buildID=%s'; -$lang->action->label->bug = 'Bug|bug|view|bugID=%s'; -$lang->action->label->case = '用例|testcase|view|caseID=%s'; -$lang->action->label->testtask = '测试单|testtask|view|caseID=%s'; -$lang->action->label->testsuite = '测试套件|testsuite|view|suiteID=%s'; -$lang->action->label->caselib = '用例库|caselib|view|libID=%s'; -$lang->action->label->todo = '待办|todo|view|todoID=%s'; -$lang->action->label->doclib = '文档库|doc|tablecontents|type=%s&objectID=%s&libID=%s'; -$lang->action->label->doc = '文档|doc|view|docID=%s'; -$lang->action->label->user = '用户|user|view|account=%s'; -$lang->action->label->testreport = '报告|testreport|view|report=%s'; -$lang->action->label->entry = '应用|entry|browse|'; -$lang->action->label->webhook = 'Webhook|webhook|browse|'; -$lang->action->label->space = ' '; -$lang->action->label->risk = '风险|risk|view|riskID=%s'; -$lang->action->label->issue = '问题|issue|view|issueID=%s'; -$lang->action->label->design = '设计|design|view|designID=%s'; -$lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s'; -$lang->action->label->api = '接口|api|index|libID=%s&moduleID=%s&apiID=%s'; +$lang->action->label->task = '任务|task|view|taskID=%s'; +$lang->action->label->build = '版本|build|view|buildID=%s'; +$lang->action->label->bug = 'Bug|bug|view|bugID=%s'; +$lang->action->label->case = '用例|testcase|view|caseID=%s'; +$lang->action->label->testtask = '测试单|testtask|view|caseID=%s'; +$lang->action->label->testsuite = '测试套件|testsuite|view|suiteID=%s'; +$lang->action->label->caselib = '用例库|caselib|view|libID=%s'; +$lang->action->label->todo = '待办|todo|view|todoID=%s'; +$lang->action->label->doclib = '文档库|doc|tablecontents|type=%s&objectID=%s&libID=%s'; +$lang->action->label->doc = '文档|doc|view|docID=%s'; +$lang->action->label->user = '用户|user|view|account=%s'; +$lang->action->label->testreport = '报告|testreport|view|report=%s'; +$lang->action->label->entry = '应用|entry|browse|'; +$lang->action->label->webhook = 'Webhook|webhook|browse|'; +$lang->action->label->space = ' '; +$lang->action->label->risk = '风险|risk|view|riskID=%s'; +$lang->action->label->issue = '问题|issue|view|issueID=%s'; +$lang->action->label->design = '设计|design|view|designID=%s'; +$lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s'; +$lang->action->label->api = '接口|api|index|libID=%s&moduleID=%s&apiID=%s'; +$lang->action->label->kanbancolumn = '看板列|execution|kanban|execution=%s'; +$lang->action->label->kanbanlane = '看板泳道|execution|kanban|execution=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/model.php b/module/action/model.php index 7a18b7d1db..7c7e43b69f 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -1177,6 +1177,10 @@ class actionModel extends model $api = $this->dao->select('id,lib,module')->from(TABLE_API)->where('id')->eq($action->objectID)->fetch(); $params = sprintf($vars, $api->lib, $api->module, $api->id); } + elseif($action->objectType == 'kanbancoloumn' or $action->objectType == 'kanbanlane') + { + $params = sprintf($vars, $action->extra); + } else { $params = sprintf($vars, $action->objectID); diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 6de34b95df..61fbac1fa3 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -521,10 +521,12 @@ $lang->navGroup->build = 'project'; $lang->navGroup->measrecord = 'project'; $lang->navGroup->milestone = 'project'; -$lang->navGroup->execution = 'execution'; -$lang->navGroup->task = 'execution'; -$lang->navGroup->build = 'execution'; -$lang->navGroup->team = 'execution'; +$lang->navGroup->execution = 'execution'; +$lang->navGroup->task = 'execution'; +$lang->navGroup->build = 'execution'; +$lang->navGroup->team = 'execution'; +$lang->navGroup->kanbancolumn = 'execution'; +$lang->navGroup->kanbanlane = 'execution'; $lang->navGroup->doc = 'doc'; $lang->navGroup->doclib = 'doc'; diff --git a/module/kanban/control.php b/module/kanban/control.php index 42894954c6..5ba2a33f41 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -26,7 +26,7 @@ class kanban extends control $this->kanban->setWIP($columnID); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - $this->loadModel('action')->create('wip', $columnID, 'Edited'); + $this->loadModel('action')->create('kanbancolumn', $columnID, 'Edited', '', $executionID); return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent')); } @@ -59,7 +59,7 @@ class kanban extends control $this->kanban->setLane($laneID); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - $this->loadModel('action')->create('lane', $laneID, 'Edited'); + $this->loadModel('action')->create('kanbanlane', $laneID, 'Edited', '', $executionID); return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent')); } diff --git a/module/kanban/model.php b/module/kanban/model.php index 98e67ca832..aa90ba2d1a 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -371,7 +371,7 @@ class kanbanModel extends model $this->dao->update(TABLE_KANBANCOLUMN)->data($data) ->autoCheck() - ->check('limit', 'gt', 0) + ->checkIF($data->limit != -1, 'limit', 'gt', 0) ->batchcheck($this->config->kanban->setwip->requiredFields, 'notempty') ->where('id')->eq($columnID) ->exec(); diff --git a/module/kanban/view/setwip.html.php b/module/kanban/view/setwip.html.php index df3c066d53..5119734cec 100644 --- a/module/kanban/view/setwip.html.php +++ b/module/kanban/view/setwip.html.php @@ -19,7 +19,7 @@ " . $title . '';?> -
+ type, $config->kanban->parentColumn[$column->laneType])):?> @@ -42,12 +42,12 @@
kanban->WIPCount;?> - limit, "class='form-control'");?>
limit == -1 ? 'disabled' : '';?> limit != -1 ? $column->limit : '', "class='form-control' $attr");?>
+ limit, "class='form-control'");?>
limit == -1 ? 'checked' : '';?>/>