From 906252bb00dbdc1e2ec4bd54cacce1373dc22f70 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 28 Apr 2023 13:28:16 +0800 Subject: [PATCH] * adjust for product getpairs. --- module/product/config.php | 1 - module/product/model.php | 16 +++++----- module/product/tao.php | 21 +++++++++++++ module/product/test/model/getlinepairs.php | 2 +- module/product/test/model/getpairs.php | 18 ++--------- module/product/test/product.class.php | 9 ++++-- module/product/test/tao/formatappendparam.php | 30 +++++++++++++++++++ 7 files changed, 68 insertions(+), 29 deletions(-) create mode 100644 module/product/test/tao/formatappendparam.php diff --git a/module/product/config.php b/module/product/config.php index e17f9ba719..5d397e6828 100644 --- a/module/product/config.php +++ b/module/product/config.php @@ -1,6 +1,5 @@ product = new stdclass(); -$config->product->orderBy = 'isClosed,program_asc,order_asc'; $config->product->showAllProjects = 0; $config->product->customBatchEditFields = 'PO,QD,RD,status,type,acl'; diff --git a/module/product/model.php b/module/product/model.php index 06f169323d..8c91effab8 100755 --- a/module/product/model.php +++ b/module/product/model.php @@ -319,8 +319,8 @@ class productModel extends model /** * Get product pairs. * - * @param string $mode nocode - * @param string $programID + * @param string $mode all|noclosed + * @param int $programID * @param string|array $append * @param string|int $shadow all | 0 | 1 * @return array @@ -329,21 +329,19 @@ class productModel extends model { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProductPairs(); - if(!empty($append) and is_array($append)) $append = implode(',', $append); + /* Add other products in has priv product id list. */ + $append = $this->productTao->formatAppendParam($append); + $views = $this->app->user->view->products . (empty($append) ? '' : ",{$append}"); - $views = empty($append) ? $this->app->user->view->products : $this->app->user->view->products . ",$append"; - $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; - /* Order by program. */ return $this->dao->select("t1.*, IF(INSTR(' closed', t1.status) < 2, 0, 1) AS isClosed")->from(TABLE_PRODUCT)->alias('t1') ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') - ->where('1 = 1') + ->where('t1.vision')->eq($this->config->vision) ->beginIF(strpos($mode, 'all') === false)->andWhere('t1.deleted')->eq(0)->fi() ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() ->beginIF(!$this->app->user->admin and $this->config->vision == 'rnd')->andWhere('t1.id')->in($views)->fi() ->beginIF($shadow !== 'all')->andWhere('t1.shadow')->eq((int)$shadow)->fi() - ->andWhere('t1.vision')->eq($this->config->vision) - ->orderBy("$orderBy, t2.order_asc, t1.line_desc, t1.order_asc") + ->orderBy("isClosed,t1.program_asc,t2.order_asc,t1.line_desc,t1.order_asc") ->fetchPairs('id', 'name'); } diff --git a/module/product/tao.php b/module/product/tao.php index 2e827f765e..961341046a 100644 --- a/module/product/tao.php +++ b/module/product/tao.php @@ -235,4 +235,25 @@ class productTao extends productModel return $closedBugs; } + + /** + * 格式化append参数,保证输出用逗号间隔的id列表。 + * Format append param. + * + * @param string|array append + * @access protected + * @return string + */ + protected function formatAppendParam(string|array $append = ''): string + { + if(empty($append)) return ''; + + if(is_string($append)) $append = explode(',', $append); + + $append = array_map(function($item){return (int)$item;}, $append); + $append = array_unique(array_filter($append)); + sort($append); + + return implode(',', $append); + } } diff --git a/module/product/test/model/getlinepairs.php b/module/product/test/model/getlinepairs.php index 77ed64c2c1..8f0c844e7f 100755 --- a/module/product/test/model/getlinepairs.php +++ b/module/product/test/model/getlinepairs.php @@ -10,7 +10,7 @@ function initData() $module->root->range('1-5'); //产品线所属项目集 $module->name->prefix("产品线")->range('1-1000'); $module->type->range("line"); - $module->parent->range("0"); + $module->parent->range('`0`'); $module->gen(10); } diff --git a/module/product/test/model/getpairs.php b/module/product/test/model/getpairs.php index a0fc49e55b..0d68e4706b 100755 --- a/module/product/test/model/getpairs.php +++ b/module/product/test/model/getpairs.php @@ -3,30 +3,18 @@ include dirname(__FILE__, 5) . "/test/lib/init.php"; include dirname(__FILE__, 2) . '/product.class.php'; +zdTable('product')->gen(50); + /** title=测试productModel->getPairs(); cid=1 pid=1 -测试项目集10下的11号产品 >> 正常产品11 -测试项目集10下的55号产品 >> 多分支产品55 -测试项目集10下的99号产品 >> 多平台产品99 -测试不存在的项目集 >> 没有数据 -返回所有产品的数量 >> 120 -返回项目集10下的所有产品 >> 10 -测试项目集10下的未关闭产品5 >> 正常产品6 -返回项目集10下的未关闭产品的数量 >> 6 - */ $product = new productTest('admin'); -$t_peoduct10 = array('programID'=>'10'); -$t_noproduct = array('programID'=>'11'); -$t_alproduct = array('programID'=>'0'); -$t_notclose5 = array('programID'=>'5'); - r($product->getProductPairs($t_peoduct10['programID'])) && p('11') && e('正常产品11'); // 测试项目集10下的11号产品 r($product->getProductPairs($t_peoduct10['programID'])) && p('55') && e('多分支产品55'); // 测试项目集10下的55号产品 r($product->getProductPairs($t_peoduct10['programID'])) && p('99') && e('多平台产品99'); // 测试项目集10下的99号产品 @@ -34,4 +22,4 @@ r($product->getProductPairs($t_noproduct['programID'])) && p() && e(' r($product->getProductPairsCount($t_alproduct['programID'])) && p() && e('120'); // 返回所有产品的数量 r($product->getProductPairsCount($t_peoduct10['programID'])) && p() && e('10'); // 返回项目集10下的所有产品 r($product->getNoclosedPairs($t_notclose5['programID'])) && p('6') && e('正常产品6'); // 测试项目集10下的未关闭产品5 -r($product->getNoclosedPairsCount($t_peoduct10['programID'])) && p() && e('6'); // 返回项目集10下的未关闭产品的数量 \ No newline at end of file +r($product->getNoclosedPairsCount($t_peoduct10['programID'])) && p() && e('6'); // 返回项目集10下的未关闭产品的数量 diff --git a/module/product/test/product.class.php b/module/product/test/product.class.php index f59f7fe486..be624389a4 100644 --- a/module/product/test/product.class.php +++ b/module/product/test/product.class.php @@ -223,13 +223,16 @@ class productTest /** * Test get product pairs. * - * @param int $programID + * @param string $mode + * @param int $programID + * @param string|array $append + * @param string|int $shadow * @access public * @return array */ - public function getProductPairs($programID) + public function getProductPairs(string $mode = '', int $programID = 0, string|array $append = '', string|int $shadow = 0): array|string { - $pairs = $this->objectModel->getPairs('', $programID); + $pairs = $this->objectModel->getPairs($mode, $programID, $append, $shadow); if($pairs == array()) return '没有数据'; return $pairs; } diff --git a/module/product/test/tao/formatappendparam.php b/module/product/test/tao/formatappendparam.php new file mode 100644 index 0000000000..99938ad56a --- /dev/null +++ b/module/product/test/tao/formatappendparam.php @@ -0,0 +1,30 @@ +#!/usr/bin/env php +formatAppendParam(); +cid=1 +pid=1 + + +*/ + +global $tester; +$productTao = $tester->loadModel('product'); + +r($productTao->formatAppendParam('')) && p() && e('0'); +r($productTao->formatAppendParam(array())) && p() && e('0'); +r($productTao->formatAppendParam('1')) && p() && e('1'); +r($productTao->formatAppendParam('1,')) && p() && e('1'); +r($productTao->formatAppendParam('1,1')) && p() && e('1'); +r($productTao->formatAppendParam('1,2')) && p() && e('1,2'); +r($productTao->formatAppendParam('1,a')) && p() && e('1'); +r($productTao->formatAppendParam(array('1'))) && p() && e('1'); +r($productTao->formatAppendParam(array('1', '1'))) && p() && e('1'); +r($productTao->formatAppendParam(array('1', '2'))) && p() && e('1,2'); +r($productTao->formatAppendParam(array('1', 'a'))) && p() && e('1'); + + +