Merge pull request '* Modify bug getbyid.' (#18) from sprint/scx_bug_getbyid into master
Reviewed-on: https://git.zcorp.cc/easycorp/zentaopms/pulls/18
This commit is contained in:
+16
-66
@@ -424,48 +424,7 @@ class bugModel extends model
|
||||
elseif($browseType == 'assignedbyme') $bugs = $this->getByAssignedbyme($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID);
|
||||
elseif($browseType == 'review') $bugs = $this->getReviewBugs($productIDList, $branch, $modules, $executions, $sort, $pager, $projectID);
|
||||
|
||||
return $this->checkDelayedBugs($bugs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check delay bugs.
|
||||
*
|
||||
* @param array $bugs
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function checkDelayedBugs($bugs)
|
||||
{
|
||||
foreach ($bugs as $bug) $bug = $this->checkDelayBug($bug);
|
||||
|
||||
return $bugs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check delay bug.
|
||||
*
|
||||
* @param array $bug
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function checkDelayBug($bug)
|
||||
{
|
||||
/* Delayed or not? */
|
||||
if(!helper::isZeroDate($bug->deadline))
|
||||
{
|
||||
if($bug->resolvedDate and !helper::isZeroDate($bug->resolvedDate))
|
||||
{
|
||||
$delay = helper::diffDate(substr($bug->resolvedDate, 0, 10), $bug->deadline);
|
||||
}
|
||||
elseif($bug->status == 'active')
|
||||
{
|
||||
$delay = helper::diffDate(helper::today(), $bug->deadline);
|
||||
}
|
||||
|
||||
if(isset($delay) and $delay > 0) $bug->delay = $delay;
|
||||
}
|
||||
|
||||
return $bug;
|
||||
return $this->bugTao->checkDelayedBugs($bugs);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -547,37 +506,28 @@ class bugModel extends model
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function getById($bugID, $setImgSize = false)
|
||||
public function getById(int $bugID, bool $setImgSize = false): object|false
|
||||
{
|
||||
$bug = $this->dao->select('t1.*, t2.name AS executionName, t3.title AS storyTitle, t3.status AS storyStatus, t3.version AS latestStoryVersion, t4.name AS taskName, t5.title AS planName')
|
||||
->from(TABLE_BUG)->alias('t1')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')
|
||||
->leftJoin(TABLE_STORY)->alias('t3')->on('t1.story = t3.id')
|
||||
->leftJoin(TABLE_TASK)->alias('t4')->on('t1.task = t4.id')
|
||||
->leftJoin(TABLE_PRODUCTPLAN)->alias('t5')->on('t1.plan = t5.id')
|
||||
->where('t1.id')->eq((int)$bugID)->fetch();
|
||||
$bug = $this->bugTao->fetchBugInfo($bugID);
|
||||
if(!$bug) return false;
|
||||
|
||||
if(!empty($bug->project)) $bug->projectName = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($bug->project)->fetch('name');
|
||||
$this->loadModel('file');
|
||||
$this->loadModel('mr');
|
||||
|
||||
$bug = $this->loadModel('file')->replaceImgURL($bug, 'steps');
|
||||
$bug = $this->file->replaceImgURL($bug, 'steps');
|
||||
if($setImgSize) $bug->steps = $this->file->setImgSize($bug->steps);
|
||||
foreach($bug as $key => $value) if(strpos($key, 'Date') !== false and !(int)substr($value, 0, 4)) $bug->$key = '';
|
||||
|
||||
if($bug->duplicateBug) $bug->duplicateBugTitle = $this->dao->findById($bug->duplicateBug)->from(TABLE_BUG)->fields('title')->fetch('title');
|
||||
if($bug->case) $bug->caseTitle = $this->dao->findById($bug->case)->from(TABLE_CASE)->fields('title')->fetch('title');
|
||||
if($bug->linkBug) $bug->linkBugTitles = $this->dao->select('id,title')->from(TABLE_BUG)->where('id')->in($bug->linkBug)->fetchPairs();
|
||||
if($bug->toStory > 0) $bug->toStoryTitle = $this->dao->findById($bug->toStory)->from(TABLE_STORY)->fields('title')->fetch('title');
|
||||
if($bug->toTask > 0) $bug->toTaskTitle = $this->dao->findById($bug->toTask)->from(TABLE_TASK)->fields('name')->fetch('name');
|
||||
$bug->linkMRTitles = $this->loadModel('mr')->getLinkedMRPairs($bugID, 'bug');
|
||||
if($bug->project) $bug->projectName = $this->bugTao->getNameFromTable($bug->project, TABLE_PROJECT, 'name');
|
||||
if($bug->duplicateBug) $bug->duplicateBugTitle = $this->bugTao->getNameFromTable($bug->duplicateBug, TABLE_BUG, 'title');
|
||||
if($bug->case) $bug->caseTitle = $this->bugTao->getNameFromTable($bug->case, TABLE_CASE, 'title');
|
||||
if($bug->linkBug) $bug->linkBugTitles = $this->bugTao->getBugPairsByList($bug->linkBug);
|
||||
if($bug->toStory) $bug->toStoryTitle = $this->bugTao->getNameFormTable($bug->toStory, TABLE_STORY, 'title');
|
||||
if($bug->toTask) $bug->toTaskTitle = $this->bugTao->getNameFormTable($bug->toTask, TABLE_TASK, 'name');
|
||||
|
||||
$bug->toCases = array();
|
||||
$toCases = $this->dao->select('id, title')->from(TABLE_CASE)->where('`fromBug`')->eq($bugID)->fetchAll();
|
||||
foreach($toCases as $toCase) $bug->toCases[$toCase->id] = $toCase->title;
|
||||
|
||||
$bug->files = $this->loadModel('file')->getByObject('bug', $bugID);
|
||||
|
||||
return $this->checkDelayBug($bug);
|
||||
$bug->linkMRTitles = $this->mr->getLinkedMRPairs($bugID, 'bug');
|
||||
$bug->toCases = $this->bugTao->getCasesFromBug($bugID);
|
||||
$bug->files = $this->file->getByObject('bug', $bugID);
|
||||
return $this->bugTao->checkDelayBug($bug);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
class bugTao extends bugModel
|
||||
{
|
||||
/**
|
||||
* Get bug details, including all contents of the TABLE_BUG, execution name, associated story name, associated story status, associated story version, associated task name, and associated plan name.
|
||||
* 获取bug的详情,包含bug表的所有内容、所属执行名称、关联需求名称、关联需求状态、关联需求版本、关联任务名称、关联计划名称
|
||||
*
|
||||
* @param int $bugID
|
||||
* @access public
|
||||
* @return object|false
|
||||
*/
|
||||
protected function fetchBugInfo(int $bugID): object|false
|
||||
{
|
||||
return $this->dao->select('t1.*, t2.name AS executionName, t3.title AS storyTitle, t3.status AS storyStatus, t3.version AS latestStoryVersion, t4.name AS taskName, t5.title AS planName')
|
||||
->from(TABLE_BUG)->alias('t1')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')
|
||||
->leftJoin(TABLE_STORY)->alias('t3')->on('t1.story = t3.id')
|
||||
->leftJoin(TABLE_TASK)->alias('t4')->on('t1.task = t4.id')
|
||||
->leftJoin(TABLE_PRODUCTPLAN)->alias('t5')->on('t1.plan = t5.id')
|
||||
->where('t1.id')->eq((int)$bugID)->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cases created by bug.
|
||||
* 获取bug建的用例.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
protected function getCasesFromBug(int $bugID): array
|
||||
{
|
||||
return $this->dao->select('id, title')->from(TABLE_CASE)->where('`fromBug`')->eq($bugID)->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of id and title pairs by buglist.
|
||||
* 传入一个buglist,获得bug的id和title键值对数组.
|
||||
*
|
||||
* @param int $bugList
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
protected function getBugPairsByList(string|array $bugList): array
|
||||
{
|
||||
return $this->dao->select('id,title')->from(TABLE_BUG)->where('id')->in($bugList)->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get object title/name base on the params.
|
||||
* 根据传入的参数,获取对象名称.
|
||||
*
|
||||
* @param int $objectID
|
||||
* @param string $table
|
||||
* @param string $field
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
protected function getNameFromTable(int $objectID, string $table, string $field): string
|
||||
{
|
||||
return $this->dao->findById($objectID)->from($table)->fields($field)->fetch($field);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call checkDelayBug in foreach to check if the bug is delay.
|
||||
* 循环调用checkDelayBug,检查bug是否延期
|
||||
*
|
||||
* @param array $bugs
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
protected function checkDelayedBugs(array $bugs): array
|
||||
{
|
||||
foreach ($bugs as $bug) $bug = $this->checkDelayBug($bug);
|
||||
|
||||
return $bugs;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the bug is delayed, add the bug->delay field to show the delay time (day).
|
||||
* 如果bug延期,添加bug->delay字段,内容为延期的时长(天)
|
||||
*
|
||||
* @param object $bug
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
protected function checkDelayBug(object $bug): object
|
||||
{
|
||||
/* Delayed or not? */
|
||||
if(!helper::isZeroDate($bug->deadline))
|
||||
{
|
||||
if($bug->resolvedDate and !helper::isZeroDate($bug->resolvedDate))
|
||||
{
|
||||
$delay = helper::diffDate(substr($bug->resolvedDate, 0, 10), $bug->deadline);
|
||||
}
|
||||
elseif($bug->status == 'active')
|
||||
{
|
||||
$delay = helper::diffDate(helper::today(), $bug->deadline);
|
||||
}
|
||||
|
||||
if(isset($delay) and $delay > 0) $bug->delay = $delay;
|
||||
}
|
||||
|
||||
return $bug;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +1,43 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . "/test/lib/init.php";
|
||||
include dirname(__FILE__, 2) . '/bug.class.php';
|
||||
su('admin');
|
||||
|
||||
function initData()
|
||||
{
|
||||
$project = zdTable('bug');
|
||||
$project->id->range('2-5');
|
||||
$project->project->range('2-5');
|
||||
$project->title->prefix("bug")->range('2-5');
|
||||
$project->type->range("codeerror");
|
||||
$project->severity->range("3");
|
||||
$project->pri->range("1");
|
||||
$project->status->range("active");
|
||||
$project->openedBuild->range("trunk");
|
||||
|
||||
$project->gen(4);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
title=bugModel->getById();
|
||||
title=测试 bugModel::getByID;
|
||||
timeout=0
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
查询id为1的bug的title >> BUG1
|
||||
查询id为1的bug的status >> active
|
||||
查询id为1的bug的plan >> 1
|
||||
查询id为1的bug的module >> 1821
|
||||
查询id为1的bug的story >> 2
|
||||
查询id为4的bug的title >> BUG4
|
||||
查询id为4的bug的status >> active
|
||||
查询id为4的bug的plan >> 4
|
||||
查询id为4的bug的module >> 1825
|
||||
查询id为4的bug的story >> 14
|
||||
查询id为7的bug的title >> 缺陷!@()(){}|+=%^&*$#测试bug名称到底可以有多长!@#¥%&*":.<>。?/();7
|
||||
查询id为7的bug的status >> active
|
||||
查询id为7的bug的plan >> 7
|
||||
查询id为7的bug的module >> 1831
|
||||
查询id为7的bug的story >> 26
|
||||
查询id为不存在的1000001的bug的title >> 0
|
||||
查询id为不存在的1000001的bug的status >> 0
|
||||
查询id为不存在的1000001的bug的plan >> 0
|
||||
查询id为不存在的1000001的bug的module >> 0
|
||||
查询id为不存在的1000001的bug的story >> 0
|
||||
- 执行bug模块的getByID方法,参数是2
|
||||
- 属性pri @1
|
||||
- 属性type @codeerror
|
||||
|
||||
- 执行bug模块的getByID方法,参数是1,属性title @0
|
||||
|
||||
|
||||
*/
|
||||
|
||||
$bugIDList = array('1', '4', '7', '1000001');
|
||||
global $tester;
|
||||
$tester->loadModel('bug');
|
||||
|
||||
$bug=new bugTest();
|
||||
initData();
|
||||
|
||||
r($tester->bug->getByID(2)) && p('pri,type') && e('1,codeerror'); //获取ID等于2的bug
|
||||
r($tester->bug->getByID(1)) && p('title') && e('0'); //获取不存在的bug
|
||||
|
||||
r($bug->getByIdTest($bugIDList[0])) && p('title') && e('BUG1'); // 查询id为1的bug的title
|
||||
r($bug->getByIdTest($bugIDList[0])) && p('status') && e('active'); // 查询id为1的bug的status
|
||||
r($bug->getByIdTest($bugIDList[0])) && p('plan') && e('1'); // 查询id为1的bug的plan
|
||||
r($bug->getByIdTest($bugIDList[0])) && p('module') && e('1821'); // 查询id为1的bug的module
|
||||
r($bug->getByIdTest($bugIDList[0])) && p('story') && e('2'); // 查询id为1的bug的story
|
||||
r($bug->getByIdTest($bugIDList[1])) && p('title') && e('BUG4'); // 查询id为4的bug的title
|
||||
r($bug->getByIdTest($bugIDList[1])) && p('status') && e('active'); // 查询id为4的bug的status
|
||||
r($bug->getByIdTest($bugIDList[1])) && p('plan') && e('4'); // 查询id为4的bug的plan
|
||||
r($bug->getByIdTest($bugIDList[1])) && p('module') && e('1825'); // 查询id为4的bug的module
|
||||
r($bug->getByIdTest($bugIDList[1])) && p('story') && e('14'); // 查询id为4的bug的story
|
||||
r($bug->getByIdTest($bugIDList[2])) && p('title') && e('缺陷!@()(){}|+=%^&*$#测试bug名称到底可以有多长!@#¥%&*":.<>。?/();7'); // 查询id为7的bug的title
|
||||
r($bug->getByIdTest($bugIDList[2])) && p('status') && e('active'); // 查询id为7的bug的status
|
||||
r($bug->getByIdTest($bugIDList[2])) && p('plan') && e('7'); // 查询id为7的bug的plan
|
||||
r($bug->getByIdTest($bugIDList[2])) && p('module') && e('1831'); // 查询id为7的bug的module
|
||||
r($bug->getByIdTest($bugIDList[2])) && p('story') && e('26'); // 查询id为7的bug的story
|
||||
r($bug->getByIdTest($bugIDList[3])) && p('title') && e('0'); // 查询id为不存在的1000001的bug的title
|
||||
r($bug->getByIdTest($bugIDList[3])) && p('status') && e('0'); // 查询id为不存在的1000001的bug的status
|
||||
r($bug->getByIdTest($bugIDList[3])) && p('plan') && e('0'); // 查询id为不存在的1000001的bug的plan
|
||||
r($bug->getByIdTest($bugIDList[3])) && p('module') && e('0'); // 查询id为不存在的1000001的bug的module
|
||||
r($bug->getByIdTest($bugIDList[3])) && p('story') && e('0'); // 查询id为不存在的1000001的bug的story
|
||||
Reference in New Issue
Block a user