diff --git a/module/bug/zen.php b/module/bug/zen.php index c1f02c6458..210b8cc404 100644 --- a/module/bug/zen.php +++ b/module/bug/zen.php @@ -995,7 +995,7 @@ class bugZen extends bug { $builds = $this->build->getBuildPairs(array($productID), $branch, 'noempty,noterminate,nodone,withbranch,noreleased'); } - $builds = $this->addReleaseLabelForBuilds($productID, $builds); + $builds = $this->build->addReleaseLabelForBuilds($productID, $builds); return $this->updateBug($bug, array('builds' => $builds)); } @@ -1194,6 +1194,7 @@ class bugZen extends bug $assignedToList = array_filter($assignedToList); if(empty($assignedToList)) $assignedToList = $this->user->getPairs('devfirst|noclosed'); } + $openedBuilds = $this->build->addReleaseLabelForBuilds($bug->product, $openedBuilds); if(!isset($openedBuilds[$bug->openedBuild])) { $build = $this->build->getByID((int)$bug->openedBuild); @@ -1215,7 +1216,7 @@ class bugZen extends bug } $resolvedBuilds = $this->build->getBuildPairs(array($bug->product), $bug->branch, 'noempty'); - $resolvedBuilds = $this->addReleaseLabelForBuilds($bug->product, $resolvedBuilds); + $resolvedBuilds = $this->build->addReleaseLabelForBuilds($bug->product, $resolvedBuilds); $this->config->moreLinks['case'] = inlink('ajaxGetProductCases', "bugID={$bug->id}"); @@ -2408,27 +2409,4 @@ class bugZen extends bug return $chartOption; } - - /** - * 给版本中的发布增加标识。 - * Add label for the release in the builds. - * - * @param int $productID - * @param array $builds - * @access protected - * @return array - */ - protected function addReleaseLabelForBuilds(int $productID, array $builds): array - { - $releases = $this->loadModel('build')->getRelatedReleases(array($productID)); - - $buildItems = array(); - foreach($builds as $buildID => $buildName) $buildItems[$buildID] = array('value' => $buildID, 'text' => $buildName); - foreach($releases as $release) - { - if(isset($buildItems[$release->shadow])) $buildItems[$release->shadow]['content'] = array('html' => "
{$buildItems[$release->shadow]['text']}
", 'class' => 'w-full flex nowrap'); - } - - return array_values($buildItems); - } } diff --git a/module/build/control.php b/module/build/control.php index 35514661d3..62d07c28e2 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -234,20 +234,18 @@ class build extends control $isJsonView = $this->app->getViewType() == 'json'; if($varName == 'openedBuild' ) { - $params = $type == 'all' ? 'noempty,withbranch,noreleased' : 'noempty,noterminate,nodone,withbranch,noreleased'; + $params = $type == 'all' ? 'withbranch,noreleased' : 'noterminate,nodone,withbranch,noreleased'; $builds = $this->build->getBuildPairs(array($productID), $branch, $params, 0, 'project', $build); if($isJsonView) return print(json_encode($builds)); - $items = array(); - foreach($builds as $buildID => $buildName) $items[] = array('text' => $buildName, 'value' => $buildID, 'keys' => $buildName); - return print(json_encode($items)); + $builds = $this->build->addReleaseLabelForBuilds($productID, $builds); + return print(json_encode($builds)); } if($varName == 'openedBuilds' ) { - $builds = $this->build->getBuildPairs(array($productID), $branch, 'noempty,noreleased', 0, 'project', $build); - $buildList = array(); - foreach($builds as $buildID => $buildName) $buildList[] = array('value' => $buildID, 'text' => $buildName); - return $this->send($buildList); + $builds = $this->build->getBuildPairs(array($productID), $branch, 'noempty,noreleased', 0, 'project', $build); + $builds = $this->build->addReleaseLabelForBuilds($productID, $builds); + return $this->send($builds); } if($varName == 'resolvedBuild') { @@ -255,17 +253,15 @@ class build extends control $builds = $this->build->getBuildPairs(array($productID), $branch, $params, 0, 'project', $build); if($isJsonView) return print(json_encode($builds)); - $items = array(); - foreach($builds as $buildID => $buildName) $items[] = array('text' => $buildName, 'value' => $buildID, 'keys' => $buildName); - return print(json_encode($items)); + $builds = $this->build->addReleaseLabelForBuilds($productID, $builds); + return print(json_encode($builds)); } $builds = $this->build->getBuildPairs(array($productID), $branch, $type, 0, 'project', $build, false); if($isJsonView) return print(json_encode($builds)); - $items = array(); - foreach($builds as $buildID => $buildName) $items[] = array('text' => $buildName, 'value' => $buildID); - return print(json_encode($items)); + $builds = $this->build->addReleaseLabelForBuilds($productID, $builds); + return print(json_encode($builds)); } /** diff --git a/module/build/model.php b/module/build/model.php index 0e7692c8da..456c012709 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -405,11 +405,12 @@ class buildModel extends model ->leftJoin(TABLE_BUILD)->alias('t2')->on('FIND_IN_SET(t2.id, t1.build)') ->leftJoin(TABLE_BRANCH)->alias('t3')->on('FIND_IN_SET(t3.id, t1.branch)') ->leftJoin(TABLE_PRODUCT)->alias('t4')->on('t1.product=t4.id') - ->where('t1.product')->in($productIdList) - ->beginIF(!empty($buildIdList))->andWhere('t2.id')->in($buildIdList)->fi() + ->where('(t1.product')->in($productIdList) ->beginIF($objectType === 'project' && $objectID)->andWhere("(FIND_IN_SET('$objectID', t1.project)")->orWhere('t1.project')->eq('0')->markRight(1)->fi() ->andWhere('t1.deleted')->eq(0) ->andWhere('t1.shadow')->ne(0) + ->markRight(true) + ->beginIF(!empty($buildIdList))->orWhere('t2.id')->in($buildIdList)->fi() ->fetchAll('id'); if($shadows === false) $shadows = $this->dao->select('shadow')->from(TABLE_RELEASE)->where('product')->in($productIdList)->fetchPairs('shadow', 'shadow'); // Get the buildID under the shadow product. @@ -900,4 +901,27 @@ class buildModel extends model return $stories; } + + /** + * 给版本中的发布增加标识。 + * Add label for the release in the builds. + * + * @param int $productID + * @param array $builds + * @access protected + * @return array + */ + public function addReleaseLabelForBuilds(int $productID, array $builds): array + { + $releases = $this->getRelatedReleases(array($productID)); + + $buildItems = array(); + foreach($builds as $buildID => $buildName) $buildItems[$buildID] = array('value' => $buildID, 'text' => $buildName); + foreach($releases as $release) + { + if(isset($buildItems[$release->shadow])) $buildItems[$release->shadow]['content'] = array('html' => "
{$buildItems[$release->shadow]['text']}
", 'class' => 'w-full flex nowrap'); + } + + return array_values($buildItems); + } }