Merge branch dev/bug-65004-65021-65022-65055 of zentao/zentaopms (#11235)

This commit is contained in:
李阳
2025-09-03 14:26:24 +08:00
committed by Gitfox
6 changed files with 156 additions and 29 deletions
+1 -1
View File
@@ -108,7 +108,7 @@ class release extends control
$this->view->showBranch = $showBranch;
$this->view->branchPairs = $this->loadModel('branch')->getPairs($productID);
$this->view->appList = $this->loadModel('system')->getPairs();
$this->view->childReleases = $this->release->getListByCondition(explode(',', $children), 0, true);
$this->view->childReleases = $childReleases;
$this->view->from = $from;
$this->view->blockID = $blockID;
$this->view->idList = '';
@@ -71,6 +71,8 @@ window.deleteItem = function(obj)
if(trLen <= appLength) $('#systemForm tbody tr .actions-list .add-item').removeClass('hidden');
setTimeout(window.initAppPicker, 100);
itemIndex --;
};
$(function()
+47 -28
View File
@@ -121,7 +121,8 @@ class releaseModel extends model
foreach(explode(',', $release->build) as $buildID)
{
if(!$buildID || !isset($builds[$buildID])) continue;
$releaseBuilds[] = $builds[$buildID];
$builds[$buildID]->projectName = zget($projectPairs, $builds[$buildID]->project, '');
$releaseBuilds[$buildID] = $builds[$buildID];
}
$release->builds = $releaseBuilds;
@@ -1386,7 +1387,7 @@ class releaseModel extends model
*
* @param array $releaseList
* @param array $childReleases
* @param int $addActionsAndBuildLink
* @param bool $addActionsAndBuildLink
* @access public
* @return array
*/
@@ -1403,30 +1404,7 @@ class releaseModel extends model
$release->rowspan = $buildCount;
if($addActionsAndBuildLink) $release->actions = $this->buildActionList($release);
if(!empty($release->builds))
{
foreach($release->builds as $build)
{
$releaseInfo = clone $release;
if($addActionsAndBuildLink)
{
$moduleName = $build->execution ? 'build' : 'projectbuild';
$canClickable = false;
if($moduleName == 'projectbuild' && $this->project->checkPriv((int)$build->project)) $canClickable = true;
if($moduleName == 'build' && $this->execution->checkPriv((int)$build->execution)) $canClickable = true;
$build->link = $canClickable ? helper::createLink($moduleName, 'view', "buildID={$build->id}") : '';
}
$releaseInfo->build = $build;
$releases[] = $releaseInfo;
}
}
else
{
$releases[] = $release;
}
$releases = array_merge($releases, $this->processReleaseBuilds($release, $addActionsAndBuildLink));
if(empty($release->releases)) continue;
@@ -1436,14 +1414,55 @@ class releaseModel extends model
{
$child = clone $childReleases[$childID];
$child = current($this->processReleaseListData(array($child)));
$child->rowID = "{$release->id}-{$childID}";
$child->parent = $release->id;
$releases[$child->rowID] = $child;
$releases = array_merge($releases, $this->processReleaseBuilds($child, $addActionsAndBuildLink));
}
}
}
return $releases;
}
/**
* 处理发布构建信息。
* Process release builds.
*
* @param object $release
* @param bool $addActionsAndBuildLink
* @access public
* @return array
*/
public function processReleaseBuilds(object $release, bool $addActionsAndBuildLink): array
{
$releases = array();
if(!empty($release->builds))
{
foreach($release->builds as $build)
{
$releaseInfo = clone $release;
if($addActionsAndBuildLink)
{
$moduleName = $build->execution ? 'build' : 'projectbuild';
$canClickable = false;
if($moduleName == 'projectbuild' && $this->project->checkPriv((int)$build->project)) $canClickable = true;
if($moduleName == 'build' && $this->execution->checkPriv((int)$build->execution)) $canClickable = true;
$build->link = $canClickable ? helper::createLink($moduleName, 'view', "buildID={$build->id}") : '';
}
$releaseInfo->build = $build;
$releaseInfo->projectName = $build->projectName;
$releases[] = $releaseInfo;
}
}
else
{
$releases[] = $release;
}
return $releases;
}
}
@@ -347,4 +347,36 @@ class releaseTest
return $this->objectModel->dao->select('*')->from(TABLE_STORY)->where('id')->eq($storyID)->fetch();
}
/**
* 处理发布列表数据测试。
* Process release list data test.
*
* @param int $productID
* @param string $type
* @param array $childReleases
* @param bool $addActionsAndBuildLink
* @access public
* @return void
*/
public function processReleaseListDataTest(int $productID, string $type = 'all', array $childReleases = array(), bool $addActionsAndBuildLink = true)
{
$releases = $this->objectModel->getList($productID, 0, $type);
return $this->objectModel->processReleaseListData($releases, $childReleases, $addActionsAndBuildLink);
}
/**
* 处理发布版本数据测试。
* Process release build data test.
*
* @param int $releaseID
* @param bool $addActionsAndBuildLink
* @access public
* @return array
*/
public function processReleaseBuildsTest(int $releaseID, bool $addActionsAndBuildLink = true): array
{
$release = $this->objectModel->getByID($releaseID);
return $this->objectModel->processReleaseBuilds($release, $addActionsAndBuildLink);
}
}
@@ -0,0 +1,38 @@
#!/usr/bin/env php
<?php
/**
title=测试 releaseModel->processReleaseForCreate();
timeout=0
cid=1
- 测试同步版本数据并处理空的数据
- 第0条的name属性 @发布1
- 第0条的project属性 @131
- 测试同步版本数据并处理空的数据
- 第0条的name属性 @发布2
- 第0条的project属性 @131
- 测试同步版本数据并处理空的数据
- 第0条的name属性 @发布3
- 第0条的project属性 @131
- 测试同步版本数据并处理空的数据第0条的build属性 @~~
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/release.unittest.class.php';
$build = zenData('build')->loadYaml('build');
$build->project->range('1{2},0{3}');
$build->execution->range('0,101,0{3}');
$build->gen(5);
zenData('release')->loadYaml('release')->gen(5);
zenData('product')->gen(5);
su('admin');
$releaseTester = new releaseTest();
r($releaseTester->processReleaseBuildsTest(1)) && p('0:name,project') && e('发布1,131'); // 测试同步版本数据并处理空的数据
r($releaseTester->processReleaseBuildsTest(2)) && p('0:name,project') && e('发布2,131'); // 测试同步版本数据并处理空的数据
r($releaseTester->processReleaseBuildsTest(3)) && p('0:name,project') && e('发布3,131'); // 测试同步版本数据并处理空的数据
r($releaseTester->processReleaseBuildsTest(2, false)) && p('0:build') && e('~~'); // 测试同步版本数据并处理空的数据
@@ -0,0 +1,36 @@
#!/usr/bin/env php
<?php
/**
title=测试 releaseModel->processReleaseForCreate();
timeout=0
cid=1
- 测试同步版本数据并处理空的数据
- 第0条的name属性 @发布3
- 第0条的project属性 @131
- 测试同步版本数据并处理空的数据
- 第1条的name属性 @发布4
- 第1条的project属性 @131
- 测试同步版本数据并处理空的数据 @0
- 测试同步版本数据并处理空的数据第0条的build属性 @~~
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/release.unittest.class.php';
$build = zenData('build')->loadYaml('build');
$build->project->range('1{2},0{3}');
$build->execution->range('0,101,0{3}');
$build->gen(5);
zenData('release')->loadYaml('release')->gen(5);
zenData('product')->gen(5);
su('admin');
$releaseTester = new releaseTest();
r($releaseTester->processReleaseListDataTest(1)) && p('0:name,project') && e('发布3,131'); // 测试同步版本数据并处理空的数据
r($releaseTester->processReleaseListDataTest(2)) && p('1:name,project') && e('发布4,131'); // 测试同步版本数据并处理空的数据
r($releaseTester->processReleaseListDataTest(3)) && p() && e('0'); // 测试同步版本数据并处理空的数据
r($releaseTester->processReleaseListDataTest(2, 'all', array(), false)) && p('0:build') && e('~~'); // 测试同步版本数据并处理空的数据