* adjust for product getpairs.
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
$config->product = new stdclass();
|
||||
$config->product->orderBy = 'isClosed,program_asc,order_asc';
|
||||
$config->product->showAllProjects = 0;
|
||||
|
||||
$config->product->customBatchEditFields = 'PO,QD,RD,status,type,acl';
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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下的未关闭产品的数量
|
||||
r($product->getNoclosedPairsCount($t_peoduct10['programID'])) && p() && e('6'); // 返回项目集10下的未关闭产品的数量
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . "/test/lib/init.php";
|
||||
|
||||
/**
|
||||
|
||||
title=productTao->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');
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user