Merge branch 'master' into 'fixbug'
# Conflicts: # db/update16.5.sql
This commit is contained in:
+18
-10
@@ -90,7 +90,7 @@ DELETE FROM `zt_config` WHERE `section` = 'customMenu';
|
||||
|
||||
UPDATE `zt_story` SET `plan` = '' WHERE `plan` = 0;
|
||||
|
||||
UPDATE `zt_workflowfield` set `control` = 'datetime' WHERE `module` = 'testcase' and `field` IN ('openedDate','reviewedDate','lastEditedDate','lastRunDate');
|
||||
UPDATE `zt_workflowfield` set `type` = 'datetime', `control` = 'datetime' WHERE `module` = 'testcase' and `field` IN ('openedDate','reviewedDate','lastEditedDate','lastRunDate');
|
||||
|
||||
UPDATE `zt_workflowfield` set `control` = 'date' WHERE `module` = 'testtask' and `field` IN ('begin','end');
|
||||
UPDATE `zt_workflowfield` set `control` = 'richtext' WHERE `module` = 'testtask' and `field` = 'desc';
|
||||
@@ -112,7 +112,7 @@ UPDATE `zt_workflowfield` SET `control` = 'radio' WHERE `module` = 'release' and
|
||||
UPDATE `zt_workflowfield` SET `control` = 'datetime' WHERE `module` = 'story' and `field` = 'openedDate';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'datetime' WHERE `module` = 'story' and `field` = 'assignedDate';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'datetime' WHERE `module` = 'story' and `field` = 'lastEditedDate';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'date' WHERE `module` = 'story' and `field` = 'reviewedDate';
|
||||
UPDATE `zt_workflowfield` SET `type` = 'datetime', `control` = 'datetime' WHERE `module` = 'story' and `field` = 'reviewedDate';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'datetime' WHERE `module` = 'story' and `field` = 'closedDate';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'radio' WHERE `module` = 'story' and `field` = 'deleted';
|
||||
|
||||
@@ -146,6 +146,11 @@ REPLACE INTO `zt_workflowdatasource` (`type`, `name`, `code`, `buildin`, `dataso
|
||||
('lang', '反馈处理方案', 'feedbackSolution', '1', 'feedbackSolution', '', '', ''),
|
||||
('lang', '反馈关闭原因', 'feedbackclosedReason', '1', 'feedbackclosedReason', '', '', '');
|
||||
|
||||
INSERT INTO `zt_workflowdatasource` (`type`, `name`, `code`, `buildin`, `vision`, `datasource`, `view`, `keyField`, `valueField`) VALUES
|
||||
('lang', '反馈类型', 'litefeedbackType', '1', 'lite', 'feedbackType', '', '', ''),
|
||||
('lang', '反馈处理方案', 'litefeedbackSolution', '1', 'lite', 'feedbackSolution', '', '', ''),
|
||||
('lang', '反馈关闭原因', 'litefeedbackclosedReason', '1', 'lite', 'feedbackclosedReason', '', '', '');
|
||||
|
||||
REPLACE INTO `zt_workflowfield` (`module`, `field`, `type`, `length`, `name`, `control`, `expression`, `options`, `default`, `rules`, `placeholder`, `order`, `searchOrder`, `exportOrder`, `canExport`, `canSearch`, `isValue`, `readonly`, `buildin`, `desc`, `createdBy`, `createdDate`, `editedBy`, `editedDate`) VALUES
|
||||
('execution', 'type', 'char', '30', '迭代类型', 'select', '', '16', 'sprint', '', '', 3, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('execution', 'begin', 'date', '', '计划开始', 'date', '', '', '', '', '', 14, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
@@ -205,16 +210,17 @@ REPLACE INTO `zt_workflowfield` (`module`, `field`, `type`, `length`, `name`, `c
|
||||
('bug', 'lastEditedDate', 'datetime', '30', '修改日期', 'datetime', '', '', '', '', '', 58, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('bug', 'deleted', 'enum', '', '已删除', 'radio', '', '[\"\\u672a\\u5220\\u9664\",\"\\u5df2\\u5220\\u9664\"]', '0', '', '', 59, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'project', 'mediumint', '8', '所属项目', 'select', '', '2', '0', '', '', 2, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'parent', 'mediumint', '8', '父任务', 'select', '', '9', '0', '', '', 3, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'storyVersion', 'smallint', '6', '研发需求版本', 'integer', '', '', '1', '', '', 7, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'estimate', 'float', '', '最初预计', 'decimal', '', '', '', '', '', 13, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'consumed', 'float', '', '总计消耗', 'decimal', '', '', '', '', '', 14, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'left', 'float', '', '预计剩余', 'decimal', '', '', '', '', '', 15, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'estimate', 'float', '', '最初预计', 'input', '', '', '', '', '', 13, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'consumed', 'float', '', '总计消耗', 'input', '', '', '', '', '', 14, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'left', 'float', '', '预计剩余', 'input', '', '', '', '', '', 15, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'deadline', 'date', '', '截止日期', 'date', '', '', '', '', '', 16, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'desc', 'text', '', '任务描述', 'richtext', '', '', '', '', '', 20, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'openedDate', 'datetime', '', '创建日期', 'datetime', '', '', '', '', '', 23, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'assignedDate', 'datetime', '30', '指派日期', 'datetime', '', '', '', '', '', 25, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'estStarted', 'date', '', '预计开始', 'date', '', '', '', '', '', 26, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'realStarted', 'date', '', '实际开始', 'date', '', '', '', '', '', 27, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'realStarted', 'datetime', '', '实际开始', 'datetime', '', '', '', '', '', 27, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'finishedDate', 'datetime', '', '实际完成', 'datetime', '', '', '', '', '', 29, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'canceledDate', 'datetime', '', '取消时间', 'datetime', '', '', '', '', '', 32, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
('task', 'closedDate', 'datetime', '', '关闭时间', 'datetime', '', '', '', '', '', 34, 0, 0, '0', '0', '0', '1', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00'),
|
||||
@@ -350,7 +356,7 @@ UPDATE `zt_workflowaction` SET `type`='single', `position`='browseandview', `sho
|
||||
UPDATE `zt_workflowaction` SET `type`='single', `position`='browseandview', `show`='direct', `open`='normal', `layout`='normal' WHERE `module`='execution' AND `action`='all';
|
||||
UPDATE `zt_workflowaction` SET `type`='single', `position`='browseandview', `show`='direct', `open`='normal', `layout`='normal' WHERE `module`='task' AND `action`='browse';
|
||||
UPDATE `zt_workflowaction` SET `type`='single', `position`='browseandview', `show`='direct', `open`='normal', `layout`='normal' WHERE `module`='task' AND `action`='create';
|
||||
UPDATE `zt_workflowaction` SET `type`='batch', `position`='browseandview', `show`='direct', `open`='normal', `layout`='normal' WHERE `module`='task' AND `action`='batchcreate';
|
||||
UPDATE `zt_workflowaction` SET `type`='batch', `position`='browse', `show`='direct', `open`='normal', `layout`='normal' WHERE `module`='task' AND `action`='batchcreate';
|
||||
UPDATE `zt_workflowaction` SET `type`='batch', `position`='browse', `show`='direct', `open`='normal', `layout`='normal' WHERE `module`='task' AND `action`='batchedit';
|
||||
UPDATE `zt_workflowaction` SET `type`='single', `position`='browse', `show`='direct', `open`='modal', `layout`='normal' WHERE `module`='task' AND `action`='exporttemplate';
|
||||
UPDATE `zt_workflowaction` SET `type`='single', `position`='browse', `show`='direct', `open`='modal', `layout`='normal' WHERE `module`='task' AND `action`='import';
|
||||
@@ -422,7 +428,7 @@ UPDATE `zt_workflowaction` SET `type`='batch' WHERE `module`IN ('feedback','case
|
||||
UPDATE `zt_workflowaction` SET `position`='browse' WHERE `module`IN ('feedback','caselib','testsuite','testtask','testcase') AND `action` IN ('batchedit','batchcreate','import','showimport');
|
||||
|
||||
UPDATE `zt_workflowfield` SET `control` = 'radio' WHERE `module` = 'program' and `field` = 'deleted';
|
||||
UPDATE `zt_workflowfield` SET `type` = 'char', `length` => '30', `control` = 'radio' WHERE `module` = 'program' and `field` = 'type';
|
||||
UPDATE `zt_workflowfield` SET `type` = 'char', `length` = '30', `control` = 'radio' WHERE `module` = 'program' and `field` = 'type';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'date' WHERE `module` = 'program' and `field` = 'begin';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'date' WHERE `module` = 'program' and `field` = 'end';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'integer' WHERE `module` = 'program' and `field` = 'days';
|
||||
@@ -431,7 +437,7 @@ UPDATE `zt_workflowfield` SET `control` = 'richtext' WHERE `module` = 'program'
|
||||
UPDATE `zt_workflowfield` SET `control` = 'datetime' WHERE `module` = 'program' and `field` = 'openedDate';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'datetime' WHERE `module` = 'program' and `field` = 'closedDate';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'datetime' WHERE `module` = 'program' and `field` = 'canceledDate';
|
||||
UPDATE `zt_workflowfield` SET `type` => 'char', `length` => '30' WHERE `module` = 'program' and `field` = 'acl';
|
||||
UPDATE `zt_workflowfield` SET `type` = 'char', `length` = '30' WHERE `module` = 'program' and `field` = 'acl';
|
||||
UPDATE `zt_workflowfield` SET `control` = 'multi-select', `options` = 'user' WHERE `module` = 'program' and `field` = 'whitelist';
|
||||
|
||||
REPLACE INTO `zt_workflowfield` (`module`, `field`, `type`, `length`, `name`, `control`, `expression`, `options`, `default`, `rules`, `placeholder`, `order`, `searchOrder`, `exportOrder`, `canExport`, `canSearch`, `isValue`, `readonly`, `buildin`, `desc`, `createdBy`, `createdDate`, `editedBy`, `editedDate`) VALUES
|
||||
@@ -459,10 +465,12 @@ UPDATE `zt_workflowaction` SET `position`='browse' WHERE `action`='create' AND `
|
||||
|
||||
UPDATE `zt_workflowaction` SET `method`=`action` WHERE `method`='';
|
||||
UPDATE `zt_workflowaction` SET `method`='browse' WHERE `action`='admin';
|
||||
UPDATE `zt_workflowaction` SET `method`='operate' WHERE `action` IN ('review','assignTo','comment','close','activate','start','block', 'suspend', 'putoff', 'confirmBug', 'resolve', 'cancel', 'confirmStoryChange', 'finish', 'pause', 'restart');
|
||||
UPDATE `zt_workflowaction` SET `method`='operate' WHERE `action` IN ('review','assignTo','comment','close','activate','start','block', 'suspend', 'putoff', 'confirmBug', 'resolve', 'cancel', 'confirmStoryChange', 'finish', 'pause', 'restart', 'change');
|
||||
UPDATE `zt_workflowaction` SET `method`='batchoperate' WHERE `action` IN('batchedit', 'batchconfirm', 'batchresolve');
|
||||
UPDATE `zt_workflowaction` SET `method`='view' WHERE `action`='adminview';
|
||||
UPDATE `zt_workflowaction` SET `method`='browse' WHERE module='execution' and `action` IN('all', 'task');
|
||||
UPDATE `zt_workflowaction` SET `method`='browse' WHERE module='product' and `action` = 'all';
|
||||
|
||||
UPDATE `zt_workflowaction` SET `show`='direct' WHERE `buildin`=1;
|
||||
REPLACE INTO `zt_workflowaction` (`module`, `action`, `method`, `name`, `type`, `batchMode`, `extensionType`, `open`, `position`, `layout`, `show`, `order`, `buildin`, `virtual`, `conditions`, `verifications`, `hooks`, `linkages`, `js`, `css`, `toList`, `blocks`, `desc`, `status`, `vision`, `createdBy`, `createdDate`, `editedBy`, `editedDate`) VALUES
|
||||
('story', 'exporttemplate', 'exporttemplate', '下载模板', 'single', 'different', 'extend', 'modal', 'browse', 'normal', 'dropdownlist', 0, 1, 0, '', '', '', '', '', '', '', '', '', 'enable', 'rnd', '', '2022-05-13 09:34:30', '', '0000-00-00 00:00:00'),
|
||||
|
||||
+21
-14
@@ -8763,22 +8763,29 @@ INSERT INTO `zt_workflowdatasource` (`type`, `name`, `code`, `buildin`, `datasou
|
||||
('sql', '用例', 'cases', '1', 'select id,title from zt_case where deleted=\"0\"', 'view_datasource_41', 'id', 'title'),
|
||||
('system', '反馈分支', 'feedbackModules', '1', '{\"app\":\"system\",\"module\":\"tree\",\"method\":\"getOptionMenu\",\"methodDesc\":\"Create an option menu in html.\",\"params\":[{\"name\":\"rootID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"type\",\"type\":\"string\",\"desc\":\"\",\"value\":\"feedback\"},{\"name\":\"startModule\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"branch\",\"type\":\"\",\"desc\":\"\",\"value\":\"0\"}]}', '', '', ''),
|
||||
('lang', '需求类型', 'storyType', '1', 'storyType', '', '', ''),
|
||||
('system', '执行', 'executions', '1', '{\"app\":\"system\",\"module\":\"execution\",\"method\":\"getPairs\",\"methodDesc\":\"Get execution pairs.\",\"params\":[{\"name\":\"projectID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"type\",\"type\":\"string\",\"desc\":\"all|sprint|stage|kanban\",\"value\":\"all\"},{\"name\":\"mode\",\"type\":\"string\",\"desc\":\"all|noclosed|stagefilter or empty\",\"value\":\"\"}]}', '', '', '');
|
||||
('system', '执行', 'executions', '1', '{\"app\":\"system\",\"module\":\"execution\",\"method\":\"getPairs\",\"methodDesc\":\"Get execution pairs.\",\"params\":[{\"name\":\"projectID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"type\",\"type\":\"string\",\"desc\":\"all|sprint|stage|kanban\",\"value\":\"all\"},{\"name\":\"mode\",\"type\":\"string\",\"desc\":\"all|noclosed|stagefilter or empty\",\"value\":\"\"}]}', '', '', ''),
|
||||
('lang', '项目模型', 'projectModel', '1', 'projectModel', '', '', ''),
|
||||
('lang', '反馈类型', 'feedbackType', '1', 'feedbackType', '', '', ''),
|
||||
('lang', '反馈处理方案', 'feedbackSolution', '1', 'feedbackSolution', '', '', ''),
|
||||
('lang', '反馈关闭原因', 'feedbackclosedReason', '1', 'feedbackclosedReason', '', '', '');
|
||||
|
||||
INSERT INTO `zt_workflowdatasource` (`type`, `name`, `code`, `buildin`, `vision`, `datasource`, `view`, `keyField`, `valueField`) VALUES
|
||||
('system', '项目', 'liteprojects', '1', 'lite', '{\"app\":\"system\",\"module\":\"project\",\"method\":\"getPairsByModel\",\"methodDesc\":\"Get project pairs by model and project.\",\"params\":[{\"name\":\"model\",\"type\":\"string\",\"desc\":\"all|scrum|waterfall\",\"value\":\"all\"},{\"name\":\"programID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"param\",\"type\":\"\",\"desc\":\"\",\"value\":\"\"}]}', '', '', ''),
|
||||
('sql', '任务', 'litetasks', '1', 'lite', 'select id,name from zt_task where deleted=\"0\" and vision=\"lite\"', 'view_datasource_46', 'id', 'name'),
|
||||
('system', '权限分组', 'litegroups', '1', 'lite', '{\"app\":\"system\",\"module\":\"group\",\"method\":\"getPairs\",\"methodDesc\":\"\",\"params\":[]}', '', '', ''),
|
||||
('system', '用户', 'liteusers', '1', 'lite', '{\"app\":\"system\",\"module\":\"user\",\"method\":\"getPairs\",\"methodDesc\":\"\",\"params\":[{\"name\":\"params\",\"type\":\"\",\"desc\":\"\",\"value\":\"noclosed|noletter\"},{\"name\":\"usersToAppended\",\"type\":\"\",\"desc\":\"\",\"value\":\"\"}]}', '', '', ''),
|
||||
('sql', '模块', 'litemodules', '1', 'lite', 'select id,name from zt_module where deleted=\"0\"', 'view_datasource_11', 'id', 'name'),
|
||||
('lang', '项目类型', 'liteprojectType', '1', 'lite', 'projectType', '', '', ''),
|
||||
('lang', '项目状态', 'liteprojectStatus', '1', 'lite', 'projectStatus', '', '', ''),
|
||||
('lang', '项目访问控制', 'liteprojectAcl', '1', 'lite', 'projectAcl', '', '', ''),
|
||||
('lang', '任务类型', 'litetaskType', '1', 'lite', 'taskType', '', '', ''),
|
||||
('lang', '任务优先级', 'litetaskPri', '1', 'lite', 'taskPri', '', '', ''),
|
||||
('lang', '任务状态', 'litetaskStatus', '1', 'lite', 'taskStatus', '', '', ''),
|
||||
('lang', '反馈状态', 'litefeedbackStatus', '1', 'lite', 'feedbackStatus', '', '', ''),
|
||||
('system', '反馈分支', 'litefeedbackModules', '1', 'lite', '{\"app\":\"system\",\"module\":\"tree\",\"method\":\"getOptionMenu\",\"methodDesc\":\"Create an option menu in html.\",\"params\":[{\"name\":\"rootID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"type\",\"type\":\"string\",\"desc\":\"\",\"value\":\"feedback\"},{\"name\":\"startModule\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"branch\",\"type\":\"\",\"desc\":\"\",\"value\":\"0\"}]}', '', '', '');
|
||||
('system', '项目', 'liteprojects', '1', 'lite', '{\"app\":\"system\",\"module\":\"project\",\"method\":\"getPairsByModel\",\"methodDesc\":\"Get project pairs by model and project.\",\"params\":[{\"name\":\"model\",\"type\":\"string\",\"desc\":\"all|scrum|waterfall\",\"value\":\"all\"},{\"name\":\"programID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"param\",\"type\":\"\",\"desc\":\"\",\"value\":\"\"}]}', '', '', ''),
|
||||
('sql', '任务', 'litetasks', '1', 'lite', 'select id,name from zt_task where deleted=\"0\" and vision=\"lite\"', 'view_datasource_46', 'id', 'name'),
|
||||
('system', '权限分组', 'litegroups', '1', 'lite', '{\"app\":\"system\",\"module\":\"group\",\"method\":\"getPairs\",\"methodDesc\":\"\",\"params\":[]}', '', '', ''),
|
||||
('system', '用户', 'liteusers', '1', 'lite', '{\"app\":\"system\",\"module\":\"user\",\"method\":\"getPairs\",\"methodDesc\":\"\",\"params\":[{\"name\":\"params\",\"type\":\"\",\"desc\":\"\",\"value\":\"noclosed|noletter\"},{\"name\":\"usersToAppended\",\"type\":\"\",\"desc\":\"\",\"value\":\"\"}]}', '', '', ''),
|
||||
('sql', '模块', 'litemodules', '1', 'lite', 'select id,name from zt_module where deleted=\"0\"', 'view_datasource_11', 'id', 'name'),
|
||||
('lang', '项目类型', 'liteprojectType', '1', 'lite', 'projectType', '', '', ''),
|
||||
('lang', '项目状态', 'liteprojectStatus', '1', 'lite', 'projectStatus', '', '', ''),
|
||||
('lang', '项目访问控制', 'liteprojectAcl', '1', 'lite', 'projectAcl', '', '', ''),
|
||||
('lang', '任务类型', 'litetaskType', '1', 'lite', 'taskType', '', '', ''),
|
||||
('lang', '任务优先级', 'litetaskPri', '1', 'lite', 'taskPri', '', '', ''),
|
||||
('lang', '任务状态', 'litetaskStatus', '1', 'lite', 'taskStatus', '', '', ''),
|
||||
('lang', '反馈状态', 'litefeedbackStatus', '1', 'lite', 'feedbackStatus', '', '', ''),
|
||||
('system', '反馈分支', 'litefeedbackModules', '1', 'lite', '{\"app\":\"system\",\"module\":\"tree\",\"method\":\"getOptionMenu\",\"methodDesc\":\"Create an option menu in html.\",\"params\":[{\"name\":\"rootID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"type\",\"type\":\"string\",\"desc\":\"\",\"value\":\"feedback\"},{\"name\":\"startModule\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"branch\",\"type\":\"\",\"desc\":\"\",\"value\":\"0\"}]}', '', '', ''),
|
||||
('lang', '反馈类型', 'litefeedbackType', '1', 'lite', 'feedbackType', '', '', ''),
|
||||
('lang', '反馈处理方案', 'litefeedbackSolution', '1', 'lite', 'feedbackSolution', '', '', ''),
|
||||
('lang', '反馈关闭原因', 'litefeedbackclosedReason', '1', 'lite', 'feedbackclosedReason', '', '', '');
|
||||
|
||||
DROP VIEW IF EXISTS `view_datasource_4`;
|
||||
DROP VIEW IF EXISTS `view_datasource_5`;
|
||||
|
||||
@@ -138,6 +138,7 @@ $lang->action->objectTypes['kanbancolumn'] = 'Kanban Column';
|
||||
$lang->action->objectTypes['kanbancard'] = 'Kanban Card';
|
||||
$lang->action->objectTypes['sonarqube'] = 'SonarQube Server';
|
||||
$lang->action->objectTypes['sonarqubeproject'] = 'SonarQube Project';
|
||||
$lang->action->objectTypes['stage'] = 'Stage';
|
||||
|
||||
/* Used to describe operation history. */
|
||||
$lang->action->desc = new stdclass();
|
||||
|
||||
@@ -138,6 +138,7 @@ $lang->action->objectTypes['kanbancolumn'] = '看板列';
|
||||
$lang->action->objectTypes['kanbancard'] = '看板卡片';
|
||||
$lang->action->objectTypes['sonarqube'] = 'SonarQube服务器';
|
||||
$lang->action->objectTypes['sonarqubeproject'] = 'SonarQube项目';
|
||||
$lang->action->objectTypes['stage'] = '阶段';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
|
||||
@@ -1149,7 +1149,7 @@ class execution extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function burn($executionID = 0, $type = 'noweekend,nodelay', $interval = 0, $burnBy = 'left')
|
||||
public function burn($executionID = 0, $type = 'noweekend', $interval = 0, $burnBy = 'left')
|
||||
{
|
||||
$this->loadModel('report');
|
||||
$execution = $this->commonAction($executionID);
|
||||
@@ -1162,11 +1162,16 @@ class execution extends control
|
||||
$position[] = $this->lang->execution->burn;
|
||||
|
||||
/* Get date list. */
|
||||
$executionInfo = $this->execution->getByID($executionID);
|
||||
$deadline = $execution->status == 'closed' ? substr($execution->closedDate, 0, 10) : $execution->suspendedDate;
|
||||
$deadline = strpos('closed,suspended', $execution->status) === false ? helper::today() : $deadline;
|
||||
$endDate = strpos($type, 'withdelay') !== false ? $deadline : $executionInfo->end;
|
||||
list($dateList, $interval) = $this->execution->getDateList($executionInfo->begin, $endDate, $type, $interval, 'Y-m-d');
|
||||
if(((strpos('closed,suspended', $execution->status) === false and helper::today() > $execution->end)
|
||||
or ($execution->status == 'closed' and substr($execution->closedDate, 0, 10) > $execution->end)
|
||||
or ($execution->status == 'suspended' and $execution->suspendedDate > $execution->end))
|
||||
and strpos($type, 'delay') === false)
|
||||
$type .= ',withdelay';
|
||||
|
||||
$deadline = $execution->status == 'closed' ? substr($execution->closedDate, 0, 10) : $execution->suspendedDate;
|
||||
$deadline = strpos('closed,suspended', $execution->status) === false ? helper::today() : $deadline;
|
||||
$endDate = strpos($type, 'withdelay') !== false ? $deadline : $execution->end;
|
||||
list($dateList, $interval) = $this->execution->getDateList($execution->begin, $endDate, $type, $interval, 'Y-m-d', $execution->end);
|
||||
$chartData = $this->execution->buildBurnData($executionID, $dateList, $type, $burnBy);
|
||||
|
||||
$dayList = array_fill(1, floor((int)$execution->days / $this->config->execution->maxBurnDay) + 5, '');
|
||||
|
||||
+14
-13
@@ -2997,12 +2997,11 @@ class executionModel extends model
|
||||
public function getBurnDataFlot($executionID = 0, $burnBy = '', $showDelay = false, $dateList = array())
|
||||
{
|
||||
/* Get execution and burn counts. */
|
||||
$execution = $this->getById($executionID);
|
||||
$execution = $this->getById($executionID);
|
||||
|
||||
/* If the burnCounts > $itemCounts, get the latest $itemCounts records. */
|
||||
$sets = $this->dao->select("date AS name, `$burnBy` AS value, `$burnBy`")->from(TABLE_BURN)->where('execution')->eq((int)$executionID)->andWhere('task')->eq(0)->orderBy('date DESC')->fetchAll('name');
|
||||
|
||||
$count = 0;
|
||||
$burnData = array();
|
||||
foreach($sets as $date => $set)
|
||||
{
|
||||
@@ -3011,25 +3010,25 @@ class executionModel extends model
|
||||
if($showDelay and $date < $execution->end) $set->value = 'null';
|
||||
|
||||
$burnData[$date] = $set;
|
||||
$count++;
|
||||
}
|
||||
|
||||
if($showDelay)
|
||||
foreach($dateList as $date)
|
||||
{
|
||||
foreach($dateList as $date)
|
||||
if(!isset($burnData[$date]))
|
||||
{
|
||||
if(!isset($burnData[$date]))
|
||||
if(($showDelay and $date < $execution->end) or (!$showDelay and $date > $execution->end))
|
||||
{
|
||||
$set = new stdClass();
|
||||
$set->name = $date;
|
||||
$set->left = 0;
|
||||
$set->value = 'null';
|
||||
$set->name = $date;
|
||||
$set->value = 'null';
|
||||
$set->$burnBy = 0;
|
||||
|
||||
$burnData[$date] = $set;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
krsort($burnData);
|
||||
$burnData = array_reverse($burnData);
|
||||
|
||||
return $burnData;
|
||||
@@ -3257,10 +3256,11 @@ class executionModel extends model
|
||||
* @param string $type
|
||||
* @param string|int $interval
|
||||
* @param string $format
|
||||
* @param string $executionDeadline
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDateList($begin, $end, $type, $interval = '', $format = 'm/d/Y')
|
||||
public function getDateList($begin, $end, $type, $interval = '', $format = 'm/d/Y', $executionDeadline = '')
|
||||
{
|
||||
$this->app->loadClass('date', true);
|
||||
$dateList = date::getDateList($begin, $end, $format, $type, $this->config->execution->weekend);
|
||||
@@ -3276,6 +3276,7 @@ class executionModel extends model
|
||||
foreach($dateList as $i => $date)
|
||||
{
|
||||
$counter ++;
|
||||
if($date == $executionDeadline) continue;
|
||||
if($counter <= $spaces)
|
||||
{
|
||||
unset($dateList[$i]);
|
||||
@@ -3698,9 +3699,9 @@ class executionModel extends model
|
||||
$this->loadModel('report');
|
||||
$burnBy = $burnBy ? $burnBy : 'left';
|
||||
|
||||
$sets = $this->getBurnDataFlot($executionID, $burnBy);
|
||||
$limitJSON = '[]';
|
||||
$baselineJSON = '[]';
|
||||
$sets = $this->getBurnDataFlot($executionID, $burnBy, false, $dateList);
|
||||
$limitJSON = '[]';
|
||||
$baselineJSON = '[]';
|
||||
|
||||
$firstBurn = empty($sets) ? 0 : reset($sets);
|
||||
$firstTime = !empty($firstBurn->$burnBy) ? $firstBurn->$burnBy : (!empty($firstBurn->value) ? $firstBurn->value : 0);
|
||||
|
||||
@@ -31,10 +31,7 @@
|
||||
$weekend = strpos($type, 'noweekend') !== false ? 'withweekend' : 'noweekend';
|
||||
$delay = strpos($type, 'withdelay') !== false ? 'nodelay' : 'withdelay';
|
||||
echo html::a('#', $lang->execution->$weekend, '', "class='btn btn-link' id='weekend'");
|
||||
if((strpos('closed,suspended', $execution->status) === false and helper::today() > $execution->end)
|
||||
or ($execution->status == 'closed' and substr($execution->closedDate, 0, 10) > $execution->end)
|
||||
or ($execution->status == 'suspended' and $execution->suspendedDate > $execution->end))
|
||||
echo html::a('#', $lang->execution->$delay, '', "class='btn btn-link' id='delay'");
|
||||
if(strpos($type, 'delay') !== false) echo html::a('#', $lang->execution->$delay, '', "class='btn btn-link' id='delay'");
|
||||
|
||||
if(common::canModify('execution', $execution)) common::printLink('execution', 'fixFirst', "execution=$execution->id", $lang->execution->fixFirst, '', "class='btn btn-link iframe' data-width='700'");
|
||||
echo $lang->execution->howToUpdateBurn;
|
||||
|
||||
@@ -47,14 +47,21 @@ class program extends control
|
||||
if(strtolower($status) == 'bysearch')
|
||||
{
|
||||
$queryID = (int)$param;
|
||||
$programs = $this->program->getListBySearch($orderBy, $pager, $queryID);
|
||||
$programs = $this->program->getListBySearch($orderBy, $queryID);
|
||||
}
|
||||
else
|
||||
{
|
||||
$topPrograms = $this->program->getList($status, $orderBy, $pager, 'top');
|
||||
$programIds = array();
|
||||
foreach($topPrograms as $programID => $program) $programIds[] = $programID;
|
||||
$programs = $this->program->getList($status, $orderBy, null, 'child', $programIds);
|
||||
$programs = $this->program->getList($status, $orderBy, null, 'child', $topPrograms);
|
||||
|
||||
/* Get summary. */
|
||||
$topCount = $indCount = 0;
|
||||
foreach($programs as $program)
|
||||
{
|
||||
if($program->type == 'program' and $program->parent == 0) $topCount ++;
|
||||
if($program->type == 'project' and $program->parent == 0) $indCount ++;
|
||||
}
|
||||
$summary = sprintf($this->lang->program->summary, $topCount, $indCount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,6 +85,7 @@ class program extends control
|
||||
$this->view->programs = $programs;
|
||||
$this->view->status = $status;
|
||||
$this->view->orderBy = $orderBy;
|
||||
$this->view->summary = isset($summary) ? $summary : '';
|
||||
$this->view->pager = $pager;
|
||||
$this->view->users = $this->user->getPairs('noletter');
|
||||
$this->view->userIdPairs = $this->user->getPairs('noletter|showid');
|
||||
|
||||
@@ -43,13 +43,6 @@ $(function()
|
||||
$('#programForm').removeClass('has-row-checked');
|
||||
}
|
||||
});
|
||||
|
||||
var myPager = $('.pager').data('zui.pager');
|
||||
if(status != 'bySearch' && myPager)
|
||||
{
|
||||
myPager.lang.pageSize = pageSize;
|
||||
myPager.set();
|
||||
}
|
||||
});
|
||||
|
||||
function showEditCheckbox(show)
|
||||
@@ -76,13 +69,15 @@ function showEditCheckbox(show)
|
||||
});
|
||||
if(show)
|
||||
{
|
||||
var tableFooter = "<div class='table-footer'><div class='checkbox-primary check-all'><input type='checkbox' id='checkAll' /><label>" + selectAll + "</label></div><div class='table-actions btn-toolbar'><button type='submit' class='btn'>" + edit + "</button></div></div>";
|
||||
$('#programForm').attr('action', createLink('project', 'batchEdit', 'from=program')).append(tableFooter);
|
||||
var tableFooter = "<div class='editCheckbox'><div class='checkbox-primary check-all'><input type='checkbox' id='checkAll' /><label>" + selectAll + "</label></div><div class='table-actions btn-toolbar'><button type='submit' class='btn'>" + edit + "</button></div></div>";
|
||||
$('#programForm').attr('action', createLink('project', 'batchEdit', 'from=program'));
|
||||
$('.table-footer').prepend(tableFooter).show();
|
||||
$('body').scroll();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#programForm').find('.table-footer').remove();
|
||||
$('#programForm').find('.editCheckbox').remove();
|
||||
if($('#programForm .pager').length == 0) $('.table-footer').hide();
|
||||
$('#programForm').removeAttr('action');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ $lang->program->moreProgram = 'More program';
|
||||
$lang->program->stakeholderType = 'Stakeholder type';
|
||||
$lang->program->parentBudget = 'Parent program surplus budget:';
|
||||
$lang->program->isStakeholderKey = 'Key stakeholder';
|
||||
$lang->program->pageSize = '<strong>{recPerPage}</strong> Top Programs per page';
|
||||
$lang->program->summary = 'This page contains %d top programs and %d independent projects.';
|
||||
|
||||
$lang->program->stakeholderTypeList['inside'] = 'Inside';
|
||||
$lang->program->stakeholderTypeList['outside'] = 'Outside';
|
||||
|
||||
@@ -88,7 +88,7 @@ $lang->program->moreProgram = '更多项目集';
|
||||
$lang->program->stakeholderType = '干系人类型';
|
||||
$lang->program->parentBudget = '所属项目集剩余预算:';
|
||||
$lang->program->isStakeholderKey = '关键干系人';
|
||||
$lang->program->pageSize = '每页 <strong>{recPerPage}</strong> 项顶级项目集';
|
||||
$lang->program->summary = '本页共 %d 个顶级项目集,%d 个独立项目。';
|
||||
|
||||
$lang->program->stakeholderTypeList['inside'] = '内部';
|
||||
$lang->program->stakeholderTypeList['outside'] = '外部';
|
||||
|
||||
@@ -140,9 +140,9 @@ class programModel extends model
|
||||
$projectIdList = array();
|
||||
if($type === 'child')
|
||||
{
|
||||
foreach($idList as $topID)
|
||||
foreach($idList as $topID => $topProgram)
|
||||
{
|
||||
$projectIdList += $this->dao->select('id')->from(TABLE_PROGRAM)->Where('path')->like(",$topID,%")->fetchPairs('id');
|
||||
$projectIdList += $topProgram->type == 'project' ? array($topID => $topID) : $this->dao->select('id')->from(TABLE_PROGRAM)->Where('path')->like(",$topID,%")->fetchPairs('id');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,12 +168,11 @@ class programModel extends model
|
||||
* Get program list by search.
|
||||
*
|
||||
* @param string $orderBy
|
||||
* @param object $pager
|
||||
* @param int $queryID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getListBySearch($orderBy = 'id_asc', $pager = NULL, $queryID = 0)
|
||||
public function getListBySearch($orderBy = 'id_asc', $queryID = 0)
|
||||
{
|
||||
if($queryID)
|
||||
{
|
||||
@@ -194,7 +193,7 @@ class programModel extends model
|
||||
}
|
||||
$query = $this->session->programQuery;
|
||||
|
||||
return $this->dao->select('*')->from(TABLE_PROGRAM)
|
||||
$programs = $this->dao->select('*')->from(TABLE_PROGRAM)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('vision')->eq($this->config->vision)
|
||||
->andWhere('((type')->eq('program')
|
||||
@@ -206,8 +205,14 @@ class programModel extends model
|
||||
->beginIF(!$this->cookie->showClosed)->andWhere('status')->ne('closed')->fi()
|
||||
->beginIF($query)->andWhere($query)->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
->fetchAll('id');
|
||||
|
||||
/* Do not display project separately. */
|
||||
foreach($programs as $id => $program)
|
||||
{
|
||||
if($program->type == 'project' and !isset($programs[$program->parent])) unset($programs[$id]);
|
||||
}
|
||||
return $programs;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
<?php js::set('orderBy', $orderBy);?>
|
||||
<?php js::set('edit', $lang->edit);?>
|
||||
<?php js::set('selectAll', $lang->selectAll);?>
|
||||
<?php js::set('pageSize', $lang->program->pageSize);?>
|
||||
<?php if($programType == 'bygrid'):?>
|
||||
<style> #mainMenu{padding-left: 10px; padding-right: 10px;} </style>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -138,7 +138,10 @@
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'><?php $pager->show('right', 'pagerjs');?></div>
|
||||
<div class='table-footer <?php if($status == 'bySearch') echo 'hide';?>'>
|
||||
<div class="table-statistic"><?php echo $summary;?></div>
|
||||
<?php if($status != 'bySearch') $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<style>
|
||||
#programTableList.sortable-sorting > tr {opacity: 0.7}
|
||||
|
||||
@@ -545,14 +545,7 @@ class projectModel extends model
|
||||
}
|
||||
elseif($module == 'repo')
|
||||
{
|
||||
if($method == 'create')
|
||||
{
|
||||
$link = helper::createLink($module, $method, "objectID=%s#app=project");
|
||||
}
|
||||
else
|
||||
{
|
||||
$link = helper::createLink($module, 'browse', "repoID=&branchID=&objectID=%s#app=project");
|
||||
}
|
||||
$link = helper::createLink($module, 'browse', "repoID=&branchID=&objectID=%s#app=project");
|
||||
}
|
||||
elseif($module == 'doc')
|
||||
{
|
||||
|
||||
+106
-15
@@ -103,13 +103,19 @@ class blockTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get data of welcome block.
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getWelcomeBlockDataTest()
|
||||
{
|
||||
$objects = $this->objectModel->getWelcomeBlockData();
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode($objects);
|
||||
}
|
||||
|
||||
public function initBlockTest($module, $type = '')
|
||||
@@ -149,22 +155,36 @@ class blockTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get todo param.
|
||||
*
|
||||
* @param string $module
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getTodoParamsTest($module = '')
|
||||
{
|
||||
$objects = $this->objectModel->getTodoParams($module = '');
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode(json_decode($objects), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get task params.
|
||||
*
|
||||
* @param string $module
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getTaskParamsTest($module = '')
|
||||
{
|
||||
$objects = $this->objectModel->getTaskParams($module = '');
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode(json_decode($objects), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -197,22 +217,36 @@ class blockTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get testtask params.
|
||||
*
|
||||
* @param string $module
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getTesttaskParamsTest($module = '')
|
||||
{
|
||||
$objects = $this->objectModel->getTesttaskParams($module = '');
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode(json_decode($objects), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get story params.
|
||||
*
|
||||
* @param string $module
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getStoryParamsTest($module = '')
|
||||
{
|
||||
$objects = $this->objectModel->getStoryParams($module = '');
|
||||
$objects = $this->objectModel->getStoryParams($module);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode(json_decode($objects), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -319,13 +353,19 @@ class blockTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get project statistic params.
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getProjectStatisticParamsTest()
|
||||
{
|
||||
$objects = $this->objectModel->getProjectStatisticParams();
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode(json_decode($objects), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -361,22 +401,36 @@ class blockTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get waterfall issue param.
|
||||
*
|
||||
* @param string $module
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getWaterfallIssueParamsTest($module = '')
|
||||
{
|
||||
$objects = $this->objectModel->getWaterfallIssueParams($module = '');
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode(json_decode($objects), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get waterfall risk param.
|
||||
*
|
||||
* @param string $module
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getWaterfallRiskParamsTest($module = '')
|
||||
{
|
||||
$objects = $this->objectModel->getWaterfallRiskParams($module = '');
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return json_encode(json_decode($objects), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -431,22 +485,52 @@ class blockTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test append count params.
|
||||
*
|
||||
* @param string|object $params
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function appendCountParamsTest($params = '')
|
||||
{
|
||||
$objects = $this->objectModel->appendCountParams($params = '');
|
||||
$objects = $this->objectModel->appendCountParams($params);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$string = '';
|
||||
foreach($objects as $key => $param)
|
||||
{
|
||||
if(is_array($param))
|
||||
{
|
||||
$string .= "$key:{";
|
||||
foreach($param as $key => $value) $string .= "$key:$value,";
|
||||
$string = trim($string, ',');
|
||||
$string .= '}';
|
||||
}
|
||||
else
|
||||
{
|
||||
$string .= "$key:$param";
|
||||
}
|
||||
$string .= ';';
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test check whether long block.
|
||||
*
|
||||
* @param object $block
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function isLongBlockTest($block)
|
||||
{
|
||||
$objects = $this->objectModel->isLongBlock($block);
|
||||
$bool = $this->objectModel->isLongBlock($block);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return $bool ? 1 : 2;
|
||||
}
|
||||
|
||||
public function checkAPITest($hash)
|
||||
@@ -521,12 +605,19 @@ class blockTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get the total estimated man hours required.
|
||||
*
|
||||
* @param int $storyID
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getStorysEstimateHoursTest($storyID)
|
||||
{
|
||||
$objects = $this->objectModel->getStorysEstimateHours($storyID);
|
||||
$object = $this->objectModel->getStorysEstimateHours($storyID);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return $object;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,10 +10,28 @@ title=测试 blockModel->appendCountParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
测试新增count param >> count:{name:数量,default:20,control:input};
|
||||
测试新增count param 和 param test >> test:test;count:{name:数量,default:20,control:input};
|
||||
测试新增count param 和 param par >> par:par;count:{name:数量,default:20,control:input};
|
||||
测试新增count param 和 param append >> append:append;count:{name:数量,default:20,control:input};
|
||||
测试新增count param 和 param 空 >> count:{name:数量,default:20,control:input};
|
||||
|
||||
*/
|
||||
$param1 = new stdclass();
|
||||
$param1->test = 'test';
|
||||
|
||||
$param2 = new stdclass();
|
||||
$param2->par = 'par';
|
||||
|
||||
$param3 = new stdclass();
|
||||
$param3->append = 'append';
|
||||
|
||||
$param4 = new stdclass();
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->appendCountParamsTest()) && p() && e();
|
||||
r($block->appendCountParamsTest()) && p() && e('count:{name:数量,default:20,control:input};'); // 测试新增count param
|
||||
r($block->appendCountParamsTest($param1)) && p() && e('test:test;count:{name:数量,default:20,control:input};'); // 测试新增count param 和 param test
|
||||
r($block->appendCountParamsTest($param2)) && p() && e('par:par;count:{name:数量,default:20,control:input};'); // 测试新增count param 和 param par
|
||||
r($block->appendCountParamsTest($param3)) && p() && e('append:append;count:{name:数量,default:20,control:input};'); // 测试新增count param 和 param append
|
||||
r($block->appendCountParamsTest($param4)) && p() && e('count:{name:数量,default:20,control:input};'); // 测试新增count param 和 param 空
|
||||
@@ -23,4 +23,4 @@ $data[2] = $block->getListParamsTest('project');
|
||||
|
||||
r($data[0]) && p('count:name') && e('数量'); //测试通过模块获取区块的参数
|
||||
r($data[1]) && p('count:name') && e('数量'); //测试通过模块获取区块的参数
|
||||
r($data[2]) && p('count:name;type:name;orderBy:name') && e('数量;类型;排序'); //测试通过模块获取区块的参数
|
||||
r($data[2]) && p('count:name;type:name;orderBy:name') && e('数量;类型;排序'); //测试通过模块获取区块的参数
|
||||
@@ -16,4 +16,4 @@ pid=1
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getPlanParamsTest()) && p() && e('{"count":{"name":"\u6570\u91cf","default":20,"control":"input"}}'); // 获取计划参数
|
||||
r($block->getPlanParamsTest()) && p() && e('{"count":{"name":"\u6570\u91cf","default":20,"control":"input"}}'); // 获取计划参数
|
||||
@@ -10,10 +10,10 @@ title=测试 blockModel->getProjectStatisticParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取project静态param >> {"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"undone":"未完成","doing":"进行中","all":"全部","involved":"我参与的"},"control":"select"}}
|
||||
|
||||
*/
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getProjectStatisticParamsTest()) && p() && e();
|
||||
r($block->getProjectStatisticParamsTest()) && p() && e('{"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"undone":"未完成","doing":"进行中","all":"全部","involved":"我参与的"},"control":"select"}}'); // 获取project静态param
|
||||
@@ -16,4 +16,4 @@ pid=1
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getProjectTeamParamsTest()) && p() && e('type:{name:类型,all=>所有,doing=>进行中,wait=>未开始,suspended=>已挂起,closed=>已关闭,control:select};orderBy:{name:排序,id_asc=>ID 递增,id_desc=>ID 递减,status_asc=>状态正序,status_desc=>状态倒序,control:select};count:{name:数量,default:20,control:input};'); // 测试获取项目团队
|
||||
r($block->getProjectTeamParamsTest()) && p() && e('type:{name:类型,all=>所有,doing=>进行中,wait=>未开始,suspended=>已挂起,closed=>已关闭,control:select};orderBy:{name:排序,id_asc=>ID 递增,id_desc=>ID 递减,status_asc=>状态正序,status_desc=>状态倒序,control:select};count:{name:数量,default:20,control:input};'); // 测试获取项目团队
|
||||
@@ -10,10 +10,10 @@ title=测试 blockModel->getStoryParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取需求的参数 >> {"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"assignedTo":"指派给我","openedBy":"由我创建","reviewedBy":"由我评审","closedBy":"由我关闭"},"control":"select"},"orderBy":{"name":"排序","default":"id_desc","options":{"id_asc":"ID 递增","id_desc":"ID 递减","pri_asc":"优先级递增","pri_desc":"优先级递减","status_asc":"状态正序","status_desc":"状态倒序","stage_asc":"阶段正序","stage_desc":"阶段倒序"},"control":"select"}}
|
||||
|
||||
*/
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getStoryParamsTest()) && p() && e();
|
||||
r($block->getStoryParamsTest()) && p() && e('{"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"assignedTo":"指派给我","openedBy":"由我创建","reviewedBy":"由我评审","closedBy":"由我关闭"},"control":"select"},"orderBy":{"name":"排序","default":"id_desc","options":{"id_asc":"ID 递增","id_desc":"ID 递减","pri_asc":"优先级递增","pri_desc":"优先级递减","status_asc":"状态正序","status_desc":"状态倒序","stage_asc":"阶段正序","stage_desc":"阶段倒序"},"control":"select"}}'); // 获取需求的参数
|
||||
@@ -10,10 +10,20 @@ title=测试 blockModel->getStorysEstimateHours();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取需求 1 的预计工时 >> 1
|
||||
获取需求 2 的预计工时 >> 1
|
||||
获取需求 3 的预计工时 >> 1
|
||||
获取需求 4 的预计工时 >> 1
|
||||
获取需求 5 的预计工时 >> 1
|
||||
|
||||
*/
|
||||
|
||||
$storyID = array(1, 2, 3, 4, 5);
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getStorysEstimateHoursTest()) && p() && e();
|
||||
r($block->getStorysEstimateHoursTest($storyID[0])) && p('estimate') && e('1'); // 获取需求 1 的预计工时
|
||||
r($block->getStorysEstimateHoursTest($storyID[1])) && p('estimate') && e('1'); // 获取需求 2 的预计工时
|
||||
r($block->getStorysEstimateHoursTest($storyID[2])) && p('estimate') && e('1'); // 获取需求 3 的预计工时
|
||||
r($block->getStorysEstimateHoursTest($storyID[3])) && p('estimate') && e('1'); // 获取需求 4 的预计工时
|
||||
r($block->getStorysEstimateHoursTest($storyID[4])) && p('estimate') && e('1'); // 获取需求 5 的预计工时
|
||||
@@ -10,10 +10,10 @@ title=测试 blockModel->getTaskParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取task的参数 >> {"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"assignedTo":"指派给我","openedBy":"由我创建","finishedBy":"由我完成","closedBy":"由我关闭","canceledBy":"由我取消"},"control":"select"},"orderBy":{"name":"排序","default":"id_desc","options":{"id_asc":"ID 递增","id_desc":"ID 递减","pri_asc":"优先级递增","pri_desc":"优先级递减","estimate_asc":"预计时间递增","estimate_desc":"预计时间递减","status_asc":"状态正序","status_desc":"状态倒序","deadline_asc":"截止日期递增","deadline_desc":"截止日期递减"},"control":"select"}}
|
||||
|
||||
*/
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getTaskParamsTest()) && p() && e();
|
||||
r($block->getTaskParamsTest()) && p() && e('{"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"assignedTo":"指派给我","openedBy":"由我创建","finishedBy":"由我完成","closedBy":"由我关闭","canceledBy":"由我取消"},"control":"select"},"orderBy":{"name":"排序","default":"id_desc","options":{"id_asc":"ID 递增","id_desc":"ID 递减","pri_asc":"优先级递增","pri_desc":"优先级递减","estimate_asc":"预计时间递增","estimate_desc":"预计时间递减","status_asc":"状态正序","status_desc":"状态倒序","deadline_asc":"截止日期递增","deadline_desc":"截止日期递减"},"control":"select"}}'); // 获取task的参数
|
||||
@@ -10,10 +10,10 @@ title=测试 blockModel->getTesttaskParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取testtask参数 >> {"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"wait":"待测版本","doing":"测试中版本","blocked":"阻塞版本","done":"已测版本","all":"全部"},"control":"select"}}
|
||||
|
||||
*/
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getTesttaskParamsTest()) && p() && e();
|
||||
r($block->getTesttaskParamsTest()) && p() && e('{"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":{"wait":"待测版本","doing":"测试中版本","blocked":"阻塞版本","done":"已测版本","all":"全部"},"control":"select"}}'); // 获取testtask参数
|
||||
@@ -10,10 +10,10 @@ title=测试 blockModel->getTodoParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取todo参数 >> {"count":{"name":"数量","default":20,"control":"input"}}
|
||||
|
||||
*/
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getTodoParamsTest()) && p() && e();
|
||||
r($block->getTodoParamsTest()) && p() && e('{"count":{"name":"数量","default":20,"control":"input"}}'); // 获取todo参数
|
||||
@@ -10,10 +10,10 @@ title=测试 blockModel->getWaterfallIssueParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取waterfall issue的参数 >> {"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":null,"control":"select"},"orderBy":{"name":"排序","options":{"id_asc":"ID 递增","id_desc":"ID 递减","status_asc":"状态正序","status_desc":"状态倒序"},"control":"select"}}
|
||||
|
||||
*/
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getWaterfallIssueParamsTest()) && p() && e();
|
||||
r($block->getWaterfallIssueParamsTest()) && p() && e('{"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":null,"control":"select"},"orderBy":{"name":"排序","options":{"id_asc":"ID 递增","id_desc":"ID 递减","status_asc":"状态正序","status_desc":"状态倒序"},"control":"select"}}'); // 获取waterfall issue的参数
|
||||
@@ -10,10 +10,10 @@ title=测试 blockModel->getWaterfallRiskParams();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
获取waterfall risk 参数 >> {"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":null,"control":"select"},"orderBy":{"name":"排序","options":{"id_asc":"ID 递增","id_desc":"ID 递减","status_asc":"状态正序","status_desc":"状态倒序"},"control":"select"}}
|
||||
|
||||
*/
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->getWaterfallRiskParamsTest()) && p() && e();
|
||||
r($block->getWaterfallRiskParamsTest()) && p() && e('{"count":{"name":"数量","default":20,"control":"input"},"type":{"name":"类型","options":null,"control":"select"},"orderBy":{"name":"排序","options":{"id_asc":"ID 递增","id_desc":"ID 递减","status_asc":"状态正序","status_desc":"状态倒序"},"control":"select"}}'); // 获取waterfall risk 参数
|
||||
@@ -10,10 +10,27 @@ title=测试 blockModel->isLongBlock();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
|
||||
测试 空 对象 检查是否为长区块 >> 2
|
||||
测试 对象grid为 5 的时候 检查是否为长区块 >> 2
|
||||
测试 对象grid为 6 的时候 检查是否为长区块 >> 1
|
||||
测试 对象grid为 7 的时候 检查是否为长区块 >> 1
|
||||
|
||||
*/
|
||||
|
||||
$block1 = new stdclass();
|
||||
|
||||
$block2 = new stdclass();
|
||||
$block2->grid = 5;
|
||||
|
||||
$block3 = new stdclass();
|
||||
$block3->grid = 6;
|
||||
|
||||
$block4 = new stdclass();
|
||||
$block4->grid = 7;
|
||||
|
||||
$block = new blockTest();
|
||||
|
||||
r($block->isLongBlockTest()) && p() && e();
|
||||
r($block->isLongBlockTest($block1)) && p() && e('2'); // 测试 空 对象 检查是否为长区块
|
||||
r($block->isLongBlockTest($block2)) && p() && e('2'); // 测试 对象grid为 5 的时候 检查是否为长区块
|
||||
r($block->isLongBlockTest($block3)) && p() && e('1'); // 测试 对象grid为 6 的时候 检查是否为长区块
|
||||
r($block->isLongBlockTest($block4)) && p() && e('1'); // 测试 对象grid为 7 的时候 检查是否为长区块
|
||||
Reference in New Issue
Block a user