From 1178cec4cfa2c0eacef1d4482fc85ae3ff58cbed Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 09:16:02 +0800 Subject: [PATCH 1/8] * [bug#66256,done,0.1h] fix export project data is empty. --- module/project/tao.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/project/tao.php b/module/project/tao.php index f3d25af4b7..5b08da5749 100755 --- a/module/project/tao.php +++ b/module/project/tao.php @@ -802,7 +802,7 @@ class projectTao extends projectModel protected function fetchProjectList(string $status, string $orderBy, bool $involved, object|null $pager): array { $query = ''; - if($status == 'bysearch' && $this->this->session->projectQuery !== false) $query = $this->session->projectQuery; + if($status == 'bysearch' && $this->session->projectQuery !== false) $query = $this->session->projectQuery; $query = str_replace('`id`','t1.id', $query); return $this->dao->select('DISTINCT t1.*')->from(TABLE_PROJECT)->alias('t1') @@ -811,7 +811,7 @@ class projectTao extends projectModel ->where('t1.deleted')->eq('0') ->andWhere('t1.vision')->eq($this->config->vision) ->andWhere('t1.type')->eq('project') - ->beginIF(!in_array($status, array('all', 'undone', 'review', 'unclosed', 'delayed'), true))->andWhere('t1.status')->eq($status)->fi() + ->beginIF(!in_array($status, array('all', 'undone', 'review', 'unclosed', 'delayed', 'bysearch'), true))->andWhere('t1.status')->eq($status)->fi() ->beginIF(in_array($status, array('undone', 'unclosed')))->andWhere('t1.status')->in('wait,doing')->fi() ->beginIF($status == 'delayed')->andWhere('t1.status')->notIn('done,closed,suspend')->andWhere('t1.end')->lt(helper::today())->fi() ->beginIF($status == 'review') From d07f1766e0220e65f4cbe9d9522980a929812458 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 09:27:42 +0800 Subject: [PATCH 2/8] * [refac] optimize code. --- module/project/tao.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/tao.php b/module/project/tao.php index 5b08da5749..4f11429b48 100755 --- a/module/project/tao.php +++ b/module/project/tao.php @@ -811,7 +811,7 @@ class projectTao extends projectModel ->where('t1.deleted')->eq('0') ->andWhere('t1.vision')->eq($this->config->vision) ->andWhere('t1.type')->eq('project') - ->beginIF(!in_array($status, array('all', 'undone', 'review', 'unclosed', 'delayed', 'bysearch'), true))->andWhere('t1.status')->eq($status)->fi() + ->beginIF(in_array($status, array('wait', 'doing', 'suspended', 'closed'), true))->andWhere('t1.status')->eq($status)->fi() ->beginIF(in_array($status, array('undone', 'unclosed')))->andWhere('t1.status')->in('wait,doing')->fi() ->beginIF($status == 'delayed')->andWhere('t1.status')->notIn('done,closed,suspend')->andWhere('t1.end')->lt(helper::today())->fi() ->beginIF($status == 'review') From c21e231ce0745beae8f61356b2737cc6e0108795 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 13:15:11 +0800 Subject: [PATCH 3/8] * [unittest] fix fetchprojectlist error. --- module/project/test/tao/fetchprojectlist.php | 83 +++++++++----------- 1 file changed, 39 insertions(+), 44 deletions(-) diff --git a/module/project/test/tao/fetchprojectlist.php b/module/project/test/tao/fetchprojectlist.php index a75da1dc7c..06ff8c3a67 100755 --- a/module/project/test/tao/fetchprojectlist.php +++ b/module/project/test/tao/fetchprojectlist.php @@ -1,64 +1,59 @@ #!/usr/bin/env php id->range('11-19'); - $project->project->range('11-19'); - $project->name->prefix("项目")->range('11-19'); - $project->code->prefix("project")->range('11-19'); - $project->model->range("scrum"); - $project->auth->range("[]"); - $project->path->range("[]"); - $project->type->range("project"); - $project->grade->range("1"); - $project->days->range("1"); - $project->status->range("wait,doing,suspended,closed"); - $project->desc->range("[]"); - $project->budget->range("100000,200000"); - $project->budgetUnit->range("CNY"); - $project->percent->range("0-0"); - $project->openedDate->range("`2023-05-01 10:00:10`"); - $project->gen(9); - - zenData('team')->gen(10); - - $stakeholder = zenData('stakeholder'); - $stakeholder->id->range('1-9'); - $stakeholder->objectID->range('11-19'); - $stakeholder->objectType->range('program,project'); - $stakeholder->user->range("admin"); - $stakeholder->type->range("inside"); - $stakeholder->from->range("[]"); - $stakeholder->createdBy->range("admin"); - $stakeholder->createdDate->range("`2023-05-01 10:00:10`"); - $stakeholder->gen(9); -} - /** title=测试 projectModel::fetchProjectList(); timeout=0 cid=1 -- 查询状态为空的项目 @0 +- 查询状态为空的项目第11条的name属性 @项目11 - 获取所有项目数量 @9 - 查询未完成的第一个项目的code第11条的code属性 @project11 - 获取我参与的一个项目的项目名第12条的name属性 @项目12 -- 获取错误类型的项目 @0 +- 获取错误类型的项目第13条的name属性 @项目13 */ +include dirname(__FILE__, 5) . "/test/lib/init.php"; +include dirname(__FILE__, 2) . '/lib/project.unittest.class.php'; + +$project = zenData('project'); +$project->id->range('11-19'); +$project->project->range('11-19'); +$project->name->prefix("项目")->range('11-19'); +$project->code->prefix("project")->range('11-19'); +$project->model->range("scrum"); +$project->auth->range("[]"); +$project->path->range("[]"); +$project->type->range("project"); +$project->grade->range("1"); +$project->days->range("1"); +$project->status->range("wait,doing,suspended,closed"); +$project->desc->range("[]"); +$project->budget->range("100000,200000"); +$project->budgetUnit->range("CNY"); +$project->percent->range("0-0"); +$project->openedDate->range("`2023-05-01 10:00:10`"); +$project->gen(9); + +zenData('team')->gen(10); + +$stakeholder = zenData('stakeholder'); +$stakeholder->id->range('1-9'); +$stakeholder->objectID->range('11-19'); +$stakeholder->objectType->range('program,project'); +$stakeholder->user->range("admin"); +$stakeholder->type->range("inside"); +$stakeholder->from->range("[]"); +$stakeholder->createdBy->range("admin"); +$stakeholder->createdDate->range("`2023-05-01 10:00:10`"); +$stakeholder->gen(9); +su('admin'); -initData(); $statusList = array('', 'all', 'undone', 'unclosed', 'error'); $projectTester = new projectTest(); -r($projectTester->fetchProjectListTest($statusList[0])) && p() && e('0'); // 查询状态为空的项目 +r($projectTester->fetchProjectListTest($statusList[0])) && p('11:name') && e('项目11'); // 查询状态为空的项目 r(count($projectTester->fetchProjectListTest($statusList[1]))) && p() && e('9'); // 获取所有项目数量 r($projectTester->fetchProjectListTest($statusList[2])) && p('11:code') && e('project11'); // 查询未完成的第一个项目的code r($projectTester->fetchProjectListTest($statusList[3], true)) && p('12:name') && e('项目12'); // 获取我参与的一个项目的项目名 -r($projectTester->fetchProjectListTest($statusList[4])) && p() && e('0'); // 获取错误类型的项目 +r($projectTester->fetchProjectListTest($statusList[4])) && p('13:name') && e('项目13'); // 获取错误类型的项目 From 1b133de5a707265c04f3bad5c854cd9072f08a7f Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 13:17:43 +0800 Subject: [PATCH 4/8] * [bug#66256,done,0.1h] fix export project data is empty. --- module/project/tao.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/project/tao.php b/module/project/tao.php index 4f11429b48..5b08da5749 100755 --- a/module/project/tao.php +++ b/module/project/tao.php @@ -811,7 +811,7 @@ class projectTao extends projectModel ->where('t1.deleted')->eq('0') ->andWhere('t1.vision')->eq($this->config->vision) ->andWhere('t1.type')->eq('project') - ->beginIF(in_array($status, array('wait', 'doing', 'suspended', 'closed'), true))->andWhere('t1.status')->eq($status)->fi() + ->beginIF(!in_array($status, array('all', 'undone', 'review', 'unclosed', 'delayed', 'bysearch'), true))->andWhere('t1.status')->eq($status)->fi() ->beginIF(in_array($status, array('undone', 'unclosed')))->andWhere('t1.status')->in('wait,doing')->fi() ->beginIF($status == 'delayed')->andWhere('t1.status')->notIn('done,closed,suspend')->andWhere('t1.end')->lt(helper::today())->fi() ->beginIF($status == 'review') From 935a58d9565ed2735b0185c71ac193507abedf3c Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 13:19:18 +0800 Subject: [PATCH 5/8] * [unittest] fix error. --- module/project/test/tao/fetchprojectlist.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/project/test/tao/fetchprojectlist.php b/module/project/test/tao/fetchprojectlist.php index 06ff8c3a67..057bd1eb77 100755 --- a/module/project/test/tao/fetchprojectlist.php +++ b/module/project/test/tao/fetchprojectlist.php @@ -6,11 +6,11 @@ title=测试 projectModel::fetchProjectList(); timeout=0 cid=1 -- 查询状态为空的项目第11条的name属性 @项目11 +- 查询状态为空的项目 @0 - 获取所有项目数量 @9 - 查询未完成的第一个项目的code第11条的code属性 @project11 - 获取我参与的一个项目的项目名第12条的name属性 @项目12 -- 获取错误类型的项目第13条的name属性 @项目13 +- 获取错误类型的项目 @0 */ include dirname(__FILE__, 5) . "/test/lib/init.php"; @@ -52,8 +52,8 @@ su('admin'); $statusList = array('', 'all', 'undone', 'unclosed', 'error'); $projectTester = new projectTest(); -r($projectTester->fetchProjectListTest($statusList[0])) && p('11:name') && e('项目11'); // 查询状态为空的项目 +r($projectTester->fetchProjectListTest($statusList[0])) && p() && e('0'); // 查询状态为空的项目 r(count($projectTester->fetchProjectListTest($statusList[1]))) && p() && e('9'); // 获取所有项目数量 r($projectTester->fetchProjectListTest($statusList[2])) && p('11:code') && e('project11'); // 查询未完成的第一个项目的code r($projectTester->fetchProjectListTest($statusList[3], true)) && p('12:name') && e('项目12'); // 获取我参与的一个项目的项目名 -r($projectTester->fetchProjectListTest($statusList[4])) && p('13:name') && e('项目13'); // 获取错误类型的项目 +r($projectTester->fetchProjectListTest($statusList[4])) && p() && e('0'); // 获取错误类型的项目 From 758d0506e428ebc350aa66e94cc2b83b3352bee1 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 13:31:23 +0800 Subject: [PATCH 6/8] * [bug#66263,done,0.1h] fix search story error. --- module/my/model.php | 1 + 1 file changed, 1 insertion(+) diff --git a/module/my/model.php b/module/my/model.php index 33ebc027cd..ed785dbece 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -748,6 +748,7 @@ class myModel extends model $myStoryQuery = $this->session->{$queryName}; $myStoryQuery = preg_replace('/`(\w+)`/', 't1.`$1`', $myStoryQuery); + if(strpos($myStoryQuery, 'result') !== false) $myStoryQuery = str_replace('t1.`result`', 't5.`result`', $myStoryQuery); return $this->myTao->fetchStoriesBySearch($myStoryQuery, $type, $orderBy, $pager, $type == 'contribute' ? $this->getAssignedByMe($this->app->user->account, null, $orderBy, 'story') : array()); } From f882a770d876ff733bab9c5e6ce7580646925ef4 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 13:40:45 +0800 Subject: [PATCH 7/8] * [unittest] fix getstoriesbysearch error. --- module/my/test/model/getstoriesbysearch.php | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/module/my/test/model/getstoriesbysearch.php b/module/my/test/model/getstoriesbysearch.php index 34fee2a451..77cc80324c 100755 --- a/module/my/test/model/getstoriesbysearch.php +++ b/module/my/test/model/getstoriesbysearch.php @@ -8,13 +8,13 @@ title=测试 myModel->getStoriesBySearch(); timeout=0 cid=1 -- 测试获取 queryID 0 类型 contribute 排序 id_desc 的需求。 @17,13,8,7,6,3,2,1 +- 测试获取 queryID 0 类型 contribute 排序 id_desc 的需求。 @17,13,1 -- 测试获取 queryID 0 类型 contribute 排序 id_asc 的需求。 @1,2,3,6,7,8,13,17 +- 测试获取 queryID 0 类型 contribute 排序 id_asc 的需求。 @1,13,17 -- 测试获取 queryID 0 类型 other 排序 id_desc 的需求。 @16,13,8,7,1 +- 测试获取 queryID 0 类型 other 排序 id_desc 的需求。 @16,13,7,1 -- 测试获取 queryID 0 类型 other 排序 id_asc 的需求。 @1,7,8,13,16 +- 测试获取 queryID 0 类型 other 排序 id_asc 的需求。 @1,7,13,16 - 测试获取 queryID 1 类型 contribute 排序 id_desc 的需求。 @17,13,1 @@ -43,11 +43,11 @@ $queryID = array(0, 2); $typeList = array('contribute', 'other'); $orderBy = array('id_desc', 'id_asc'); -r($my->getStoriesBySearchTest($queryID[0], $typeList[0], $orderBy[0])) && p() && e('17,13,8,7,6,3,2,1'); // 测试获取 queryID 0 类型 contribute 排序 id_desc 的需求。 -r($my->getStoriesBySearchTest($queryID[0], $typeList[0], $orderBy[1])) && p() && e('1,2,3,6,7,8,13,17'); // 测试获取 queryID 0 类型 contribute 排序 id_asc 的需求。 -r($my->getStoriesBySearchTest($queryID[0], $typeList[1], $orderBy[0])) && p() && e('16,13,8,7,1'); // 测试获取 queryID 0 类型 other 排序 id_desc 的需求。 -r($my->getStoriesBySearchTest($queryID[0], $typeList[1], $orderBy[1])) && p() && e('1,7,8,13,16'); // 测试获取 queryID 0 类型 other 排序 id_asc 的需求。 -r($my->getStoriesBySearchTest($queryID[1], $typeList[0], $orderBy[0])) && p() && e('17,13,1'); // 测试获取 queryID 1 类型 contribute 排序 id_desc 的需求。 -r($my->getStoriesBySearchTest($queryID[1], $typeList[0], $orderBy[1])) && p() && e('1,13,17'); // 测试获取 queryID 1 类型 contribute 排序 id_asc 的需求。 -r($my->getStoriesBySearchTest($queryID[1], $typeList[1], $orderBy[0])) && p() && e('16,13,1'); // 测试获取 queryID 1 类型 other 排序 id_desc 的需求。 -r($my->getStoriesBySearchTest($queryID[1], $typeList[1], $orderBy[1])) && p() && e('1,13,16'); // 测试获取 queryID 1 类型 other 排序 id_asc 的需求。 \ No newline at end of file +r($my->getStoriesBySearchTest($queryID[0], $typeList[0], $orderBy[0])) && p() && e('17,13,1'); // 测试获取 queryID 0 类型 contribute 排序 id_desc 的需求。 +r($my->getStoriesBySearchTest($queryID[0], $typeList[0], $orderBy[1])) && p() && e('1,13,17'); // 测试获取 queryID 0 类型 contribute 排序 id_asc 的需求。 +r($my->getStoriesBySearchTest($queryID[0], $typeList[1], $orderBy[0])) && p() && e('16,13,7,1'); // 测试获取 queryID 0 类型 other 排序 id_desc 的需求。 +r($my->getStoriesBySearchTest($queryID[0], $typeList[1], $orderBy[1])) && p() && e('1,7,13,16'); // 测试获取 queryID 0 类型 other 排序 id_asc 的需求。 +r($my->getStoriesBySearchTest($queryID[1], $typeList[0], $orderBy[0])) && p() && e('17,13,1'); // 测试获取 queryID 1 类型 contribute 排序 id_desc 的需求。 +r($my->getStoriesBySearchTest($queryID[1], $typeList[0], $orderBy[1])) && p() && e('1,13,17'); // 测试获取 queryID 1 类型 contribute 排序 id_asc 的需求。 +r($my->getStoriesBySearchTest($queryID[1], $typeList[1], $orderBy[0])) && p() && e('16,13,1'); // 测试获取 queryID 1 类型 other 排序 id_desc 的需求。 +r($my->getStoriesBySearchTest($queryID[1], $typeList[1], $orderBy[1])) && p() && e('1,13,16'); // 测试获取 queryID 1 类型 other 排序 id_asc 的需求。 From 94eeb9dfbe098b29304e363c5efb19388beab35f Mon Sep 17 00:00:00 2001 From: tianshujie Date: Mon, 20 Oct 2025 13:50:02 +0800 Subject: [PATCH 8/8] * [bug#66263,done,0.1h] fix search requirement and epic error. --- module/my/model.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/my/model.php b/module/my/model.php index ed785dbece..f732eb5848 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -899,6 +899,7 @@ class myModel extends model $myEpicQuery = $this->session->{$queryName}; $myEpicQuery = preg_replace('/`(\w+)`/', 't1.`$1`', $myEpicQuery); + if(strpos($myEpicQuery, 'result') !== false) $myEpicQuery = str_replace('t1.`result`', 't3.`result`', $myEpicQuery); $epicsAssignedByMe = $type == 'contribute' ? $this->getAssignedByMe($this->app->user->account, null, 'id_desc', 'epic') : array(); $epicIdList = array_keys($epicsAssignedByMe); @@ -941,6 +942,7 @@ class myModel extends model $myRequirementQuery = $this->session->{$queryName}; $myRequirementQuery = preg_replace('/`(\w+)`/', 't1.`$1`', $myRequirementQuery); + if(strpos($myRequirementQuery, 'result') !== false) $myRequirementQuery = str_replace('t1.`result`', 't3.`result`', $myRequirementQuery); $requirementsAssignedByMe = $type == 'contribute' ? $this->getAssignedByMe($this->app->user->account, null, 'id_desc', 'requirement') : array(); $requirementIdList = array_keys($requirementsAssignedByMe);