diff --git a/db/update17.8.sql b/db/update17.8.sql
index 2a034e97e3..e1887d15ce 100644
--- a/db/update17.8.sql
+++ b/db/update17.8.sql
@@ -5,6 +5,7 @@ ALTER TABLE `zt_repo` ADD `projects` varchar(255) NOT NULL AFTER `product`;
ALTER TABLE `zt_release` CHANGE `project` `project` varchar(255) NOT NULL;
ALTER TABLE `zt_release` CHANGE `branch` `branch` varchar(255) NOT NULL;
ALTER TABLE `zt_release` CHANGE `build` `build` varchar(255) NOT NULL;
+ALTER TABLE `zt_release` ADD `shadow` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `branch`;
CREATE OR REPLACE VIEW `ztv_normalproduct` AS SELECT * FROM `zt_product` WHERE `shadow` = 0;
diff --git a/db/zentao.sql b/db/zentao.sql
index 557a6663ad..5ff8e2ae96 100755
--- a/db/zentao.sql
+++ b/db/zentao.sql
@@ -1285,6 +1285,7 @@ CREATE TABLE IF NOT EXISTS `zt_release` (
`project` varchar(255) NOT NULL,
`product` mediumint(8) unsigned NOT NULL default '0',
`branch` varchar(255) NOT NULL default '0',
+ `shadow` mediumint(8) unsigned NOT NULL default '0',
`build` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL default '',
`marker` enum('0','1') NOT NULL default '0',
diff --git a/module/build/model.php b/module/build/model.php
index 695656a2f1..2f4cb16f88 100644
--- a/module/build/model.php
+++ b/module/build/model.php
@@ -261,18 +261,24 @@ class buildModel extends model
/* if the build has been released and replace is true, replace build name with release name. */
if($replace)
{
- $releases = $this->dao->select('build, name')->from(TABLE_RELEASE)
- ->where('build')->in(array_keys($builds))
- ->andWhere('product')->in($products)
- ->beginIF($branch !== 'all')->andWhere('branch')->in("$branchs")->fi()
- ->andWhere('deleted')->eq(0)
- ->fetchPairs();
- foreach($releases as $buildID => $releaseName)
+ $releases = $this->dao->select('t1.id,t1.shadow,t1.build,t1.name')->from(TABLE_RELEASE)->alias('t1')
+ ->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)')
+ ->where('t2.id')->in(array_keys($builds))
+ ->andWhere('t1.product')->in($products)
+ ->beginIF($branch !== 'all')->andWhere('t3.id')->in($branchs)->fi()
+ ->andWhere('t1.deleted')->eq(0)
+ ->fetchAll('id');
+ foreach($releases as $release)
{
- $branchName = $allBuilds[$buildID]->branchName ? $allBuilds[$buildID]->branchName : $this->lang->branch->main;
- if($allBuilds[$buildID]->productType != 'normal')
+ $releaseName = $release->name;
+ foreach(explode(',', trim($release->build, ',')) as $buildID)
{
- $builds[$buildID] = (strpos($params, 'withbranch') !== false ? $branchName . '/' : '') . $releaseName;
+ $branchName = $allBuilds[$buildID]->branchName ? $allBuilds[$buildID]->branchName : $this->lang->branch->main;
+ $buildName = $releaseName;
+ if($allBuilds[$buildID]->productType != 'normal') $buildName = (strpos($params, 'withbranch') !== false ? $branchName . '/' : '') . $releaseName;
+ if($release->shadow and !isset($builds[$release->shadow])) $builds[$release->shadow] = $buildName;
+ if(isset($builds[$buildID])) unset($builds[$buildID]);
}
}
}
diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php
index 6f9c856621..36992ea307 100644
--- a/module/projectrelease/control.php
+++ b/module/projectrelease/control.php
@@ -157,12 +157,12 @@ class projectrelease extends control
$this->loadModel('story');
$this->loadModel('bug');
$this->loadModel('build');
- $this->app->loadConfig('release');
+ $this->loadModel('release');
$this->config->projectrelease->create = $this->config->release->create;
if(!empty($_POST))
{
- $changes = $this->projectrelease->update($releaseID);
+ $changes = $this->release->update($releaseID);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$files = $this->loadModel('file')->saveUpload('release', $releaseID);
if($changes or $files)
diff --git a/module/projectrelease/model.php b/module/projectrelease/model.php
index 17bd84efef..476d3a353c 100644
--- a/module/projectrelease/model.php
+++ b/module/projectrelease/model.php
@@ -77,6 +77,7 @@ class projectreleaseModel extends model
$builds = $this->dao->select("id,project,product,execution,name,scmPath,filePath")->from(TABLE_BUILD)->where('id')->in(array_unique($buildIdList))->fetchAll('id');
foreach($releases as $release)
{
+ $release->buildInfos = array();
foreach(explode(',', $release->build) as $buildID)
{
if(empty($buildID)) continue;
@@ -123,45 +124,6 @@ class projectreleaseModel extends model
return $buildIdList;
}
- /**
- * Update a release.
- *
- * @param int $releaseID
- * @access public
- * @return void
- */
- public function update($releaseID)
- {
- /* Init vars. */
- $releaseID = (int)$releaseID;
- $oldRelease = $this->dao->select('*')->from(TABLE_RELEASE)->where('id')->eq($releaseID)->fetch();
-
- /* Check build if build is required. */
- if(strpos($this->config->release->edit->requiredFields, 'build') !== false and $this->post->build == false) return dao::$errors['build'] = sprintf($this->lang->error->notempty, $this->lang->release->build);
-
- $release = fixer::input('post')->stripTags($this->config->release->editor->edit['id'], $this->config->allowedTags)
- ->setDefault('mailto', '')
- ->join('build', ',')
- ->join('mailto', ',')
- ->setIF(!$this->post->marker, 'marker', 0)
- ->cleanInt('product')
- ->remove('files,labels,allchecker,uid')
- ->get();
-
- $release = $this->loadModel('file')->processImgURL($release, $this->config->release->editor->edit['id'], $this->post->uid);
- $this->dao->update(TABLE_RELEASE)->data($release)
- ->autoCheck()
- ->batchCheck($this->config->release->edit->requiredFields, 'notempty')
- ->check('name', 'unique', "id != '$releaseID' AND product = '{$oldRelease->product}' AND branch = '{$oldRelease->branch}' AND deleted = '0'")
- ->where('id')->eq((int)$releaseID)
- ->exec();
- if(!dao::isError())
- {
- $this->file->updateObjectID($this->post->uid, $releaseID, 'release');
- return common::createChanges($oldRelease, $release);
- }
- }
-
/**
* Link stories
*
diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php
index 7686b8a08e..af383d90df 100644
--- a/module/projectrelease/view/browse.html.php
+++ b/module/projectrelease/view/browse.html.php
@@ -67,11 +67,12 @@
buildInfos);
+ $rowspan = $buildCount > 1 ? "rowspan='$buildCount'" : '';
+ if($buildCount == 0) $release->buildInfos = array('');
foreach($release->buildInfos as $buildID => $build):
?>
-
- 1 ? "rowspan='$buildCount'" : '';?>
+
| >id"), sprintf('%03d', $release->id));?> |
>
hasProduct):?>
| title='productName?>'>productName?> |
- createLink($build->execution ? 'build' : 'projectbuild', 'view', "buildID=$buildID"), $build->name, '', "data-app='project'");?> |
+
+ createLink($build->execution ? 'build' : 'projectbuild', 'view', "buildID=$buildID"), $build->name, '', "data-app='project' title='name;?>'");?> |
+
processStatus('release', $release);?>
class='c-status text-center' title=''>
@@ -90,12 +93,8 @@
| class='text-center'>date;?> |
" . $this->loadModel('flow')->getFieldValue($extendField, $release) . "";?>
class='c-actions'>projectrelease->buildOperateMenu($release, 'browse');?> |
+
-
-
- | createLink($build->execution ? 'build' : 'projectbuild', 'view', "buildID=$buildID"), $build->name, '', "data-app='project'");?> |
-
-
diff --git a/module/projectrelease/view/create.html.php b/module/projectrelease/view/create.html.php
index d3c905fec9..d9fdff98dd 100644
--- a/module/projectrelease/view/create.html.php
+++ b/module/projectrelease/view/create.html.php
@@ -52,9 +52,7 @@
| release->build;?> |
|
-
-
- |
+ |
| release->date;?> |
diff --git a/module/projectrelease/view/edit.html.php b/module/projectrelease/view/edit.html.php
index 2d287d373a..2164c01dfb 100644
--- a/module/projectrelease/view/edit.html.php
+++ b/module/projectrelease/view/edit.html.php
@@ -37,7 +37,7 @@
| release->build;?> |
- build, "class='form-control chosen' multiple required"); ?> | |
+ build, "class='form-control chosen' multiple"); ?> | |
| release->date;?> |
diff --git a/module/release/config.php b/module/release/config.php
index e49f950c9e..7e52377cd7 100644
--- a/module/release/config.php
+++ b/module/release/config.php
@@ -3,7 +3,7 @@ $config->release = new stdclass();
$config->release->create = new stdclass();
$config->release->edit = new stdclass();
$config->release->create->requiredFields = 'name,date';
-$config->release->edit->requiredFields = 'name,build,date';
+$config->release->edit->requiredFields = 'name,date';
$config->release->editor = new stdclass();
$config->release->editor->create = array('id' => 'desc', 'tools' => 'simpleTools');
diff --git a/module/release/lang/de.php b/module/release/lang/de.php
index 2b5d9dd9c0..81723c68b5 100644
--- a/module/release/lang/de.php
+++ b/module/release/lang/de.php
@@ -30,7 +30,6 @@ $lang->release->confirmUnlinkBug = "Möchten Sie diesen Bug löschen?";
$lang->release->existBuild = '『Build』『%s』 existiert bereits. Sie können den 『name』 ändern oder ein anderes 『build』 wählen.';
$lang->release->noRelease = 'Keine Releases. ';
$lang->release->errorDate = 'The release date should not be greater than today.';
-$lang->release->tips = 'If no build is selected for a release, a build with the same name as the release is created by default.';
$lang->release->basicInfo = 'Basis Info';
diff --git a/module/release/lang/en.php b/module/release/lang/en.php
index c480cbd021..8afd780c5e 100644
--- a/module/release/lang/en.php
+++ b/module/release/lang/en.php
@@ -30,7 +30,6 @@ $lang->release->confirmUnlinkBug = "Do you want to remove this bug?";
$lang->release->existBuild = '『Build』『%s』existed. You could change『name』or choose a『build』.';
$lang->release->noRelease = 'No releases yet.';
$lang->release->errorDate = 'The release date should not be greater than today.';
-$lang->release->tips = 'If no build is selected for a release, a build with the same name as the release is created by default.';
$lang->release->basicInfo = 'Basic Info';
diff --git a/module/release/lang/fr.php b/module/release/lang/fr.php
index ca2d60eb54..c27bfe6121 100644
--- a/module/release/lang/fr.php
+++ b/module/release/lang/fr.php
@@ -30,7 +30,6 @@ $lang->release->confirmUnlinkBug = "Voulez-vous retirer ce bug de la release ?
$lang->release->existBuild = '『Build』『%s』existant. Vous pouvez changer『name』ou choisir un『build』.';
$lang->release->noRelease = 'Pas de release à ce jour.';
$lang->release->errorDate = "La date de release ne doit pas être supérieure à aujourd'hui.";
-$lang->release->tips = 'If no build is selected for a release, a build with the same name as the release is created by default.';
$lang->release->basicInfo = 'Infos de Base';
diff --git a/module/release/lang/zh-cn.php b/module/release/lang/zh-cn.php
index 57af6338f2..1d1db7edca 100644
--- a/module/release/lang/zh-cn.php
+++ b/module/release/lang/zh-cn.php
@@ -30,7 +30,6 @@ $lang->release->confirmUnlinkBug = "您确认移除该Bug吗?";
$lang->release->existBuild = '『版本』已经有『%s』这条记录了。您可以更改『发布名称』或者选择一个『版本』。';
$lang->release->noRelease = '暂时没有发布。';
$lang->release->errorDate = '发布日期不能大于今天。';
-$lang->release->tips = '如果发布未选择任何版本,系统会默认创建一个和该发布同名的版本。';
$lang->release->basicInfo = '基本信息';
diff --git a/module/release/model.php b/module/release/model.php
index 90f4b12acc..786703b0ac 100644
--- a/module/release/model.php
+++ b/module/release/model.php
@@ -182,45 +182,19 @@ class releaseModel extends model
->remove('allchecker,files,labels,uid,sync')
->get();
- /* Auto create build when release is not link build. */
- if(empty($release->build) and $release->name)
+ /* Auto create shadow build. */
+ if($release->name)
{
- $build = $this->dao->select('*')->from(TABLE_BUILD)
- ->where('deleted')->eq('0')
- ->andWhere('name')->eq($release->name)
- ->andWhere('product')->eq($productID)
- ->andWhere('branch')->eq($branch)
- ->fetch();
- if($build)
- {
- return dao::$errors['build'] = sprintf($this->lang->release->existBuild, $release->name);
- }
- else
- {
- $build = new stdclass();
- $build->project = $projectID;
- $build->product = (int)$productID;
- $build->branch = (int)$branch;
- $build->name = $release->name;
- $build->date = $release->date;
- $build->builder = $this->app->user->account;
- $build->desc = $release->desc;
- $build->execution = 0;
- $build->createdBy = $this->app->user->account;
- $build->createdDate = helper::now();
+ $shadowBuild = new stdclass();
+ $shadowBuild->product = $release->product;
+ $shadowBuild->builds = $release->build;
+ $shadowBuild->name = $release->name;
+ $shadowBuild->createdBy = $this->app->user->account;
+ $shadowBuild->createdDate = helper::now();
+ $this->dao->insert(TABLE_BUILD)->data($shadowBuild)->exec();
- $build = $this->loadModel('file')->processImgURL($build, $this->config->release->editor->create['id']);
- $this->app->loadLang('build');
- $this->dao->insert(TABLE_BUILD)->data($build)
- ->autoCheck()
- ->check('name', 'unique', "product = {$productID} AND branch = {$branch} AND deleted = '0'")
- ->batchCheck($this->config->release->create->requiredFields, 'notempty')
- ->exec();
- if(dao::isError()) return false;
-
- $buildID = $this->dao->lastInsertID();
- $release->build = $buildID;
- }
+ if(dao::isError()) return false;
+ $release->shadow = $this->dao->lastInsertID();
}
if($release->build)
@@ -249,6 +223,7 @@ class releaseModel extends model
$release->branch = ',' . trim(implode(',', $branches), ',') . ',';
$release->project = ',' . trim(implode(',', $projects), ',') . ',';
}
+
$release = $this->loadModel('file')->processImgURL($release, $this->config->release->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_RELEASE)->data($release)
->autoCheck()
@@ -258,7 +233,7 @@ class releaseModel extends model
if(dao::isError())
{
- if(!empty($buildID)) $this->dao->delete()->from(TABLE_BUILD)->where('id')->eq($buildID)->exec();
+ if(!empty($release->shadow)) $this->dao->delete()->from(TABLE_BUILD)->where('id')->eq($release->shadow)->exec();
return false;
}
@@ -266,7 +241,7 @@ class releaseModel extends model
if(dao::isError())
{
- if(!empty($buildID)) $this->dao->delete()->from(TABLE_BUILD)->where('id')->eq($buildID)->exec();
+ if(!empty($release->shadow)) $this->dao->delete()->from(TABLE_BUILD)->where('id')->eq($release->shadow)->exec();
}
else
{
@@ -310,7 +285,6 @@ class releaseModel extends model
$oldRelease = $this->getById($releaseID);
$release = fixer::input('post')->stripTags($this->config->release->editor->edit['id'], $this->config->allowedTags)
- ->add('id', $releaseID)
->setDefault('build', '')
->setDefault('mailto', '')
->setDefault('deleteFiles', array())
@@ -346,6 +320,7 @@ class releaseModel extends model
->exec();
if(!dao::isError())
{
+ if($release->build != $oldRelease->build) $this->dao->update(TABLE_BUILD)->set('builds')->eq($release->build)->where('id')->eq($oldRelease->shadow)->exec();
$this->file->processFile4Object('release', $oldRelease, $release);
return common::createChanges($oldRelease, $release);
}
diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php
index 86a23ef7bd..0168a431e5 100644
--- a/module/release/view/browse.html.php
+++ b/module/release/view/browse.html.php
@@ -69,13 +69,15 @@
?>
- builds);?>
+ builds);?>
+ 1 ? "rowspan='{$buildCount}'" : '';?>
+ builds = array('');?>
builds as $build):?>
- | id"), sprintf('%03d', $release->id));?> |
-
+ | >id"), sprintf('%03d', $release->id));?> |
+ >
marker ? " " : '';
echo html::a(inlink('view', "release=$release->id"), $release->name, '', "title='$release->name'") . $flagIcon;
@@ -83,6 +85,7 @@
|
+
type != 'normal'):?>
branchName;?>
@@ -93,16 +96,17 @@
if($moduleName == 'build' and $this->execution->checkPriv($build->execution)) $canClickable = true;
echo $canClickable ? html::a($this->createLink($moduleName, 'view', "buildID=$build->id"), $build->name, '', "data-app='project'") : $build->name;
?>
+
|
- projectName;?> |
+ projectName;?> |
processStatus('release', $release);?>
-
+ | >
|
- date;?> |
- " . $this->loadModel('flow')->getFieldValue($extendField, $release) . "";?>
- release->buildOperateMenu($release, 'browse');?> |
+ >date;?> |
+ " . $this->loadModel('flow')->getFieldValue($extendField, $release) . "";?>
+ >release->buildOperateMenu($release, 'browse');?> |
diff --git a/module/release/view/create.html.php b/module/release/view/create.html.php
index 3b1a30c5e3..b9ef2b61dd 100644
--- a/module/release/view/create.html.php
+++ b/module/release/view/create.html.php
@@ -36,9 +36,7 @@
| release->build;?> |
|
-
-
- |
+ |
| release->date;?> |
diff --git a/module/release/view/edit.html.php b/module/release/view/edit.html.php
index d203e03e18..d973f33ef3 100644
--- a/module/release/view/edit.html.php
+++ b/module/release/view/edit.html.php
@@ -37,7 +37,7 @@
| release->build;?> |
- build, "class='form-control chosen' required multiple"); ?> |
+ build, "class='form-control chosen' multiple"); ?> |
| release->date;?> |