diff --git a/module/bug/model.php b/module/bug/model.php index 15e538126d..e5fcdaf318 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -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); } /** diff --git a/module/bug/tao.php b/module/bug/tao.php new file mode 100644 index 0000000000..8c736d3795 --- /dev/null +++ b/module/bug/tao.php @@ -0,0 +1,107 @@ +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 + */ + public 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 + */ + public 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 + */ + public 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 object + */ + public 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 + */ + public 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; + } +} diff --git a/module/bug/test/model/getbyid.php b/module/bug/test/model/getbyid.php index b27998be0d..185b0f33e0 100755 --- a/module/bug/test/model/getbyid.php +++ b/module/bug/test/model/getbyid.php @@ -1,59 +1,43 @@ #!/usr/bin/env php 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 \ No newline at end of file