Merge branch ztflow-wangyuting-dev/task-144213#wangyuting of zentao/zentaopms (#8952)

This commit is contained in:
刘刚
2025-05-28 11:49:17 +08:00
committed by Gitfox
14 changed files with 205 additions and 20 deletions
+1 -1
View File
@@ -1411,7 +1411,7 @@ class docModel extends model
}
if($type == 'project')
{
$projects = $this->loadModel('project')->getListByCurrentUser();
$projects = $this->loadModel('project')->getListByCurrentUser('*', false);
$involvedProjects = $this->project->getInvolvedListByCurrentUser();
$spaceID = $this->project->checkAccess($spaceID, $projects);
+1
View File
@@ -1507,6 +1507,7 @@ class myModel extends model
->beginIF($type == 'undone')->andWhere('t1.status')->eq('normal')->fi()
->beginIF($type == 'ownbyme')->andWhere('t1.PO')->eq($this->app->user->account)->fi()
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi()
->setAutoTpl(false)
->orderBy('t1.order_asc')
->fetchAll('id');
+47
View File
@@ -0,0 +1,47 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
include dirname(__FILE__, 5) . '/test/lib/init.php';
zenData('product')->gen(10);
zenData('release')->gen(10);
zenData('story')->gen(0);
zenData('project')->gen(10);
zenData('productplan')->gen(10);
zenData('projectproduct')->gen(10);
su('admin');
/**
title=测试 myModel->getproducts();
timeout=0
cid=1
- 获取所有产品的数量属性allCount @10
- 获取所有未关闭的产品数量属性unclosedCount @10
- 获取产品中序号为0的产品属性
- 第0条的id属性 @1
- 第0条的name属性 @正常产品1
- 第0条的releases属性 @5
- 获取产品中序号为1的产品属性
- 第1条的id属性 @2
- 第1条的name属性 @正常产品2
- 第1条的releases属性 @2
- 获取产品中序号为2的产品属性
- 第2条的id属性 @3
- 第2条的name属性 @正常产品3
- 第2条的releases属性 @0
*/
global $tester;
$tester->loadModel('my');
$products = $tester->my->getProducts();
r($products) && p('allCount') && e(10); // 获取所有产品的数量
r($products) && p('unclosedCount') && e(10); // 获取所有未关闭的产品数量
$products = $products->products;
r($products) && p('0:id,name,releases') && e('1,正常产品1,5'); // 获取产品中序号为0的产品属性
r($products) && p('1:id,name,releases') && e('2,正常产品2,2'); // 获取产品中序号为1的产品属性
r($products) && p('2:id,name,releases') && e('3,正常产品3,0'); // 获取产品中序号为2的产品属性
+1
View File
@@ -79,6 +79,7 @@ class pivotTao extends pivotModel
->beginIF($productID)->andWhere('t1.id')->eq($productID)->fi()
->beginIF($productStatus)->andWhere('t1.status')->eq($productStatus)->fi()
->beginIF($productType)->andWhere('t1.type')->eq($productType)->fi()
->setAutoTpl(false)
->orderBy('t2.order_asc, t1.line_desc, t1.order_asc')
->fetchAll('id');
}
+18 -4
View File
@@ -6,10 +6,24 @@ title=测试 pivotTao->getProductList();
cid=1
pid=1
查询所有的已关闭产品 >> 1,正常产品1;9,正常产品9
查询所有的未关闭产品 >> 1,正常产品1;10,正常产品10
查询所有的已关闭产品,并且id在1,2,3,5中 >> 1,5
查询所有的未关闭产品,并且id在5,7,8,9中 >> 5,7,9
- 查询所有的已关闭产品
- 第1条的id属性 @1
- 第1条的name属性 @正常产品1
- 第9条的id属性 @9
- 第9条的name属性 @正常产品9
- 查询所有的未关闭产品
- 第1条的id属性 @1
- 第1条的name属性 @正常产品1
- 第10条的id属性 @10
- 第10条的name属性 @正常产品10
- 查询所有的已关闭产品,并且id在1,2,3,5中
- 第1条的id属性 @1
- 第5条的id属性 @5
- 查询所有的未关闭产品,并且id在5,7,8,9中
- 第5条的id属性 @5
- 第7条的id属性 @7
- 第9条的id属性 @9
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
+3 -2
View File
@@ -52,7 +52,7 @@ class productModel extends model
*/
public function getByIdList(array $productIdList): array
{
return $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in($productIdList)->fetchAll('id', false);
return $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in($productIdList)->setAutoTpl(false)->fetchAll('id', false);
}
/**
@@ -65,7 +65,7 @@ class productModel extends model
*/
public function getListByAcl(string $acl): array
{
return $this->dao->select('id, program, PO, QD, RD, feedback, ticket, acl, whitelist, reviewer, PMT, createdBy')->from(TABLE_PRODUCT)->where('acl')->in($acl)->fetchAll('id');
return $this->dao->select('id, program, PO, QD, RD, feedback, ticket, acl, whitelist, reviewer, PMT, createdBy')->from(TABLE_PRODUCT)->where('acl')->in($acl)->setAutoTpl(false)->fetchAll('id');
}
/**
@@ -90,6 +90,7 @@ class productModel extends model
->andWhere('t1.shadow')->eq(0)
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi()
->beginIF($this->config->vision != 'or')->andWhere("FIND_IN_SET('{$this->config->vision}', t1.vision)")->fi()
->setAutoTpl(false)
->orderBy('t1.order_asc')
->fetchAll('id');
}
+2
View File
@@ -65,6 +65,7 @@ class productTao extends productModel
->beginIF(!$this->app->user->admin && $this->config->vision != 'lite' && $this->app->rawModule != 'repo')->andWhere('t1.id')->in($this->app->user->view->products)->fi()
->markRight(1)
->beginIF($append)->orWhere('(t1.id')->in($append)->markRight(1)->fi()
->setAutoTpl(false)
->orderBy("isClosed,t2.order_asc,t1.line_desc,t1.order_asc")
->fetchPairs('id', 'name');
}
@@ -150,6 +151,7 @@ class productTao extends productModel
return $this->dao->select('t1.*')->from(TABLE_PRODUCT)->alias('t1')
->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id')
->where('t1.id')->in($productIDs)
->setAutoTpl(false)
->orderBy('t2.order_asc, t1.line_desc, t1.order_asc')
->page($pager)
->fetchAll('id');
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
include dirname(__FILE__, 5) . '/test/lib/init.php';
zenData('product')->gen(100);
su('admin');
/**
title=测试 productModel->getlistbyacl();
timeout=0
cid=1
- 获取权限为公开ID为1的产品属性。
- 第1条的id属性 @1
- 第1条的program属性 @0
- 第1条的PO属性 @po1
- 第1条的QD属性 @test1
- 第1条的RD属性 @dev1
- 获取权限为公开ID为2的产品属性。
- 第2条的id属性 @2
- 第2条的program属性 @1
- 第2条的PO属性 @po2
- 第2条的QD属性 @test2
- 第2条的RD属性 @dev2
- 获取权限为私有ID为100的产品属性。
- 第100条的id属性 @100
- 第100条的program属性 @0
- 第100条的PO属性 @po10
- 第100条的QD属性 @test100
- 第100条的RD属性 @dev100
- 获取权限为私有ID为80的产品属性。
- 第80条的id属性 @80
- 第80条的program属性 @2
- 第80条的PO属性 @po10
- 第80条的QD属性 @test80
- 第80条的RD属性 @dev80
- 获取权限为私有ID为60的产品属性。
- 第60条的id属性 @60
- 第60条的program属性 @4
- 第60条的PO属性 @po10
- 第60条的QD属性 @test60
- 第60条的RD属性 @dev60
*/
global $tester;
$tester->loadModel('product');
r($tester->product->getlistbyacl('open')) && p('1:id,program,PO,QD,RD') && e('1,0,po1,test1,dev1'); // 获取权限为公开ID为1的产品属性。
r($tester->product->getlistbyacl('open')) && p('2:id,program,PO,QD,RD') && e('2,1,po2,test2,dev2'); // 获取权限为公开ID为2的产品属性。
r($tester->product->getlistbyacl('private')) && p('100:id,program,PO,QD,RD') && e('100,0,po10,test100,dev100'); // 获取权限为私有ID为100的产品属性。
r($tester->product->getlistbyacl('private')) && p('80:id,program,PO,QD,RD') && e('80,2,po10,test80,dev80'); // 获取权限为私有ID为80的产品属性。
r($tester->product->getlistbyacl('private')) && p('60:id,program,PO,QD,RD') && e('60,4,po10,test60,dev60'); // 获取权限为私有ID为60的产品属性。
@@ -1,13 +1,14 @@
#!/usr/bin/env php
<?php
/**
title=测试productModel->getListBySearch();
cid=0
- 测试通过空的搜索条件筛选产品数据第1条的name属性 @产品1
- 测试通过空的搜索条件筛选产品数据第2条的name属性 @产品2
- 测试通过搜索条件筛选产品数据第1条的name属性 @产品1
- 测试通过搜索条件筛选产品数据第2条的name属性 @产品2
- 测试通过不存在的搜索条件筛选产品数据第1条的name属性 @产品1
*/
@@ -27,5 +28,7 @@ $queryIdList = array(0, 1, 2);
global $tester;
$tester->loadModel('product');
r($tester->product->getListBySearch($queryIdList[0])) && p('1:name') && e('产品1'); // 测试通过空的搜索条件筛选产品数据
r($tester->product->getListBySearch($queryIdList[0])) && p('2:name') && e('产品2'); // 测试通过空的搜索条件筛选产品数据
r($tester->product->getListBySearch($queryIdList[1])) && p('1:name') && e('产品1'); // 测试通过搜索条件筛选产品数据
r($tester->product->getListBySearch($queryIdList[1])) && p('2:name') && e('产品2'); // 测试通过搜索条件筛选产品数据
r($tester->product->getListBySearch($queryIdList[2])) && p('1:name') && e('产品1'); // 测试通过不存在的搜索条件筛选产品数据
+1
View File
@@ -110,6 +110,7 @@ class programModel extends model
->beginIF($mode == 'assign')->andWhere('t1.program')->eq($programID)->fi()
->beginIF(strpos($status, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi()
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($views)->fi()
->setAutoTpl(false)
->orderBy('t2.order_asc,t1.line_desc,t1.order_asc');
if(!$withProgram) return $dao->fetchPairs('id', 'name');
@@ -31,10 +31,11 @@ title=测试 programModel::getProductPairs();
cid=1
pid=1
获取项目集1下的所有产品数量 >> 10
根据项目集ID获取关联产品名字 >> 产品2
获取项目集1下的未关闭的产品数量 >> 5
根据项目或项目集ID获取关联产品详情 >> 产品3
- 获取项目集1下的所有产品数量 @10
- 根据项目集ID获取关联产品名字属性2 @产品2
- 获取项目集1下的未关闭的产品数量 @5
- 根据项目或项目集ID获取关联产品详情属性3 @产品3
- 根据项目或项目集ID获取关联产品详情属性4 @~~
*/
@@ -47,3 +48,4 @@ r(count($products1)) && p() && e('10'); // 获取项目集1下的所有产
r($products1) && p('2') && e('产品2'); // 根据项目集ID获取关联产品名字
r(count($products2)) && p() && e('5'); // 获取项目集1下的未关闭的产品数量
r($products2) && p('3') && e('产品3'); // 根据项目或项目集ID获取关联产品详情
r($products2) && p('4') && e('~~'); // 根据项目或项目集ID获取关联产品详情
+6 -5
View File
@@ -47,6 +47,7 @@ class projectModel extends model
return $this->dao->select('id, project, type, parent, path, openedBy, PO, PM, QD, RD, acl')->from(TABLE_PROJECT)
->where('acl')->in($acl)
->beginIF($type)->andWhere('type')->in($type)->fi()
->setAutoTpl(false)
->fetchAll('id');
}
@@ -67,19 +68,19 @@ class projectModel extends model
* 获取当前登录用户有权限查看的项目列表.
* Get project list by current user.
*
* @param string $fields
* @param string $fields
* @param bool $autoTpl
* @access public
* @return array
*/
public function getListByCurrentUser(string $fields = '*') :array
public function getListByCurrentUser(string $fields = '*', bool $autoTpl = true) :array
{
return $this->dao->select($fields)->from(TABLE_PROJECT)
->where('type')->eq('project')
->beginIF($this->config->vision)->andWhere('vision')->eq($this->config->vision)->fi()
->andWhere('(deleted')->eq(0)
->andWhere('deleted')->eq(0)
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
->orWhere('isTpl')->eq('1')
->markRight(1)
->setAutoTpl($autoTpl)
->orderBy('order_asc,id_desc')
->fetchAll('id');
}
+45
View File
@@ -0,0 +1,45 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
include dirname(__FILE__, 5) . '/test/lib/init.php';
zenData('project')->gen(100);
su('admin');
/**
title=测试 projectModel->getlistbyaclandtype();
timeout=0
cid=1
- 获取权限为公开类型为项目ID为100的项目属性。
- 第100条的id属性 @100
- 第100条的project属性 @10
- 第100条的type属性 @project
- 获取权限为公开类型为项目集ID为10的项目集属性。
- 第10条的id属性 @10
- 第10条的project属性 @0
- 第10条的type属性 @program
- 获取权限为私有类型为项目ID为98的项目属性。
- 第98条的id属性 @98
- 第98条的project属性 @8
- 第98条的type属性 @project
- 获取权限为私有类型为项目ID为11的项目属性。
- 第11条的id属性 @11
- 第11条的project属性 @1
- 第11条的type属性 @project
- 获取权限为私有类型为项目集ID为8的项目集属性。
- 第8条的id属性 @8
- 第8条的project属性 @0
- 第8条的type属性 @program
*/
global $tester;
$tester->loadModel('project');
r($tester->project->getListByAclAndType('open', 'project')) && p('100:id,project,type') && e('100,10,project'); // 获取权限为公开类型为项目ID为100的项目属性。
r($tester->project->getListByAclAndType('open', 'program')) && p('10:id,project,type') && e('10,0,program'); // 获取权限为公开类型为项目集ID为10的项目集属性。
r($tester->project->getListByAclAndType('private', 'project')) && p('98:id,project,type') && e('98,8,project'); // 获取权限为私有类型为项目ID为98的项目属性。
r($tester->project->getListByAclAndType('private', 'project')) && p('11:id,project,type') && e('11,1,project'); // 获取权限为私有类型为项目ID为11的项目属性。
r($tester->project->getListByAclAndType('private', 'program')) && p('8:id,project,type') && e('8,0,program'); // 获取权限为私有类型为项目集ID为8的项目集属性。
@@ -11,7 +11,17 @@ title=测试 projectModel->getListByCurrentUser();
timeout=0
cid=1
- 执行projectModel模块的getListByCurrentUser方法 @0
- 执行projectModel模块的getListByCurrentUser方法 @1
- 执行projectModel模块的getListByCurrentUser方法
- 第1条的id属性 @1
- 第1条的name属性 @项目1
- 执行projectModel模块的getListByCurrentUser方法
- 第1条的budget属性 @900000
- 第1条的budgetUnit属性 @CNY
- 执行projectModel模块的getListByCurrentUser方法
- 第1条的auth属性 @extend
- 第1条的code属性 @program1
*/
@@ -24,5 +34,7 @@ $tester->app->config->vision = 'lite';
r(count($projectModel->getListByCurrentUser())) && p() && e('0');
$tester->app->config->vision = 'rnd';
r(count($projectModel->getListByCurrentUser())) && p() && e('1');
r($projectModel->getListByCurrentUser()) && p('1:id,name') && e('1,项目1');
r(count($projectModel->getListByCurrentUser())) && p() && e('1');
r($projectModel->getListByCurrentUser()) && p('1:id,name') && e('1,项目1');
r($projectModel->getListByCurrentUser()) && p('1:budget,budgetUnit') && e('900000,CNY');
r($projectModel->getListByCurrentUser()) && p('1:auth,code') && e('extend,program1');