From 1842ec83a242d00203b60b1c5597388389cb58de Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 28 Mar 2022 10:36:24 +0800 Subject: [PATCH 1/4] * Fix bug #18310. --- module/projectrelease/control.php | 4 ++-- module/projectrelease/js/create.js | 3 ++- module/projectrelease/view/browse.html.php | 4 ++-- module/release/js/create.js | 3 ++- module/release/lang/zh-cn.php | 2 +- module/release/model.php | 13 ++++++++----- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index e336f93b7e..fa94ad2832 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -95,7 +95,7 @@ class projectrelease extends control * @access public * @return void */ - public function create($projectID) + public function create($productID = 0, $branch = 0, $projectID = 0) { /* Load module and config. */ $this->loadModel('build'); @@ -105,7 +105,7 @@ class projectrelease extends control if(!empty($_POST)) { - $releaseID = $this->projectrelease->create($projectID); + $releaseID = $this->release->create(0, 0, $projectID); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->loadModel('action')->create('release', $releaseID, 'opened'); diff --git a/module/projectrelease/js/create.js b/module/projectrelease/js/create.js index 39aeec4871..9779e17639 100644 --- a/module/projectrelease/js/create.js +++ b/module/projectrelease/js/create.js @@ -3,7 +3,8 @@ $('#submit').click(function() var dateFormat = new RegExp(/^\d{4}\-\d{2}\-\d{2}$/); var name = $('#name').val(); var date = $('#date').val(); - if(name && dateFormat.test(date)) + var build = $('#build').val(); + if(name && build && dateFormat.test(date)) { var result = confirm(confirmLink) ? true : false; $('#sync').val(result); diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php index c6c01a9eb3..3614649735 100644 --- a/module/projectrelease/view/browse.html.php +++ b/module/projectrelease/view/browse.html.php @@ -22,7 +22,7 @@ ?>
- {$lang->release->create}", '', "class='btn btn-primary'");?> + {$lang->release->create}", '', "class='btn btn-primary'");?>
@@ -31,7 +31,7 @@

release->noRelease;?> - createLink('projectrelease', 'create', "projectID=$projectID"), " " . $lang->release->create, '', "class='btn btn-info'");?> + createLink('projectrelease', 'create', "productID=0&branch=0&projectID=$projectID"), " " . $lang->release->create, '', "class='btn btn-info'");?>

diff --git a/module/release/js/create.js b/module/release/js/create.js index 39aeec4871..9779e17639 100644 --- a/module/release/js/create.js +++ b/module/release/js/create.js @@ -3,7 +3,8 @@ $('#submit').click(function() var dateFormat = new RegExp(/^\d{4}\-\d{2}\-\d{2}$/); var name = $('#name').val(); var date = $('#date').val(); - if(name && dateFormat.test(date)) + var build = $('#build').val(); + if(name && build && dateFormat.test(date)) { var result = confirm(confirmLink) ? true : false; $('#sync').val(result); diff --git a/module/release/lang/zh-cn.php b/module/release/lang/zh-cn.php index aa724f53c2..d0f59ad659 100644 --- a/module/release/lang/zh-cn.php +++ b/module/release/lang/zh-cn.php @@ -24,7 +24,7 @@ $lang->release->batchUnlinkStory = "批量移除{$lang->SRCommon}"; $lang->release->batchUnlinkBug = "批量移除Bug"; $lang->release->confirmDelete = "您确认删除该发布吗?"; -$lang->release->confirmLink = "是否将版本中完成的{$lang->SRCommon}和已解决的bug关联到发布下?"; +$lang->release->confirmLink = "是否将版本中完成的{$lang->SRCommon}和已解决的Bug关联到发布下?"; $lang->release->confirmUnlinkStory = "您确认移除该{$lang->SRCommon}吗?"; $lang->release->confirmUnlinkBug = "您确认移除该Bug吗?"; $lang->release->existBuild = '『版本』已经有『%s』这条记录了。您可以更改『发布名称』或者选择一个『版本』。'; diff --git a/module/release/model.php b/module/release/model.php index bc8bac51a0..3b79fb521e 100644 --- a/module/release/model.php +++ b/module/release/model.php @@ -108,15 +108,16 @@ class releaseModel extends model * * @param int $productID * @param int $branch + * @param int $projectID * @access public * @return int */ - public function create($productID, $branch = 0) + public function create($productID = 0, $branch = 0, $projectID = 0) { /* Init vars. */ - $productID = (int)$productID; - $branch = (int)$branch; - $buildID = 0; + $productID = $this->post->product ? $this->post->product : (int)$productID; + $branch = $this->post->product ? $this->post->product : (int)$branch; + $buildID = $this->post->build ? $this->post->build : 0; /* Check build if build is required. */ if(strpos($this->config->release->create->requiredFields, 'build') !== false and $this->post->build == false) return dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->release->build); @@ -127,11 +128,12 @@ class releaseModel extends model $release = fixer::input('post') ->add('product', (int)$productID) ->add('branch', (int)$branch) + ->setIF($projectID, 'project', $projectID) + ->setIF($buildID, 'build', $buildID) ->setDefault('stories', '') ->join('stories', ',') ->join('bugs', ',') ->join('mailto', ',') - ->setIF($this->post->build == false, 'build', $buildID) ->stripTags($this->config->release->editor->create['id'], $this->config->allowedTags) ->remove('allchecker,files,labels,uid,sync') ->get(); @@ -152,6 +154,7 @@ class releaseModel extends model else { $build = new stdclass(); + $build->project = $projectID; $build->product = (int)$productID; $build->branch = (int)$branch; $build->name = $release->name; From 4ec9ec4869e4419f6e67dc49a5c84822bb3ad804 Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 28 Mar 2022 10:38:25 +0800 Subject: [PATCH 2/4] * Optimize code. --- module/projectrelease/model.php | 137 -------------------------------- 1 file changed, 137 deletions(-) diff --git a/module/projectrelease/model.php b/module/projectrelease/model.php index be3883e374..c775fe6994 100644 --- a/module/projectrelease/model.php +++ b/module/projectrelease/model.php @@ -95,143 +95,6 @@ class projectreleaseModel extends model return array_keys($releases); } - /** - * Create a release. - * - * @access public - * @return int - */ - public function create($projectID = 0) - { - /* Init vars. */ - $productID = $this->post->product; - $branch = $this->post->branch; - $buildID = 0; - $projectID = $projectID ? $projectID : $this->session->project; - - /* Check build if build is required. */ - if(strpos($this->config->release->create->requiredFields, 'build') !== false and $this->post->build == false) return dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->release->build); - - /* Check date must be not more than today. */ - if($this->post->date > date('Y-m-d')) return dao::$errors[] = $this->lang->release->errorDate; - - if($this->post->build) - { - $build = $this->loadModel('build')->getByID($this->post->build); - $productID = $build->product; - $branch = $build->branch; - } - - $release = fixer::input('post') - ->add('project', $projectID) - ->add('product', (int)$productID) - ->add('branch', (int)$branch) - ->setDefault('stories', '') - ->join('stories', ',') - ->join('bugs', ',') - ->join('mailto', ',') - ->setIF($this->post->build == false, 'build', $buildID) - ->setIF($productID, 'product', $productID) - ->setIF($branch, 'branch', $branch) - ->stripTags($this->config->release->editor->create['id'], $this->config->allowedTags) - ->remove('allchecker,files,labels,uid,sync') - ->get(); - - /* Auto create build when release is not link build. */ - if(empty($release->build) and $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 = $this->loadModel('file')->processImgURL($build, $this->config->release->editor->create['id']); - $this->dao->insert(TABLE_BUILD)->data($build) - ->autoCheck() - ->check('name', 'unique', "product = '{$productID}' AND branch = '{$branch}' AND deleted = '0'") - ->batchCheck('name', 'notempty') - ->exec(); - if(dao::isError()) return false; - - $buildID = $this->dao->lastInsertID(); - $release->build = $buildID; - } - } - - if($release->build) - { - $buildInfo = $this->dao->select('branch, stories, bugs')->from(TABLE_BUILD)->where('id')->eq($release->build)->fetch(); - $release->branch = $buildInfo->branch; - if($this->post->sync == 'true') - { - $release->stories = $buildInfo->stories; - $release->bugs = $buildInfo->bugs; - } - } - - $release = $this->loadModel('file')->processImgURL($release, $this->config->release->editor->create['id'], $this->post->uid); - $this->dao->insert(TABLE_RELEASE)->data($release) - ->autoCheck() - ->batchCheck($this->config->release->create->requiredFields, 'notempty') - ->check('name', 'unique', "product = {$release->product} AND branch = {$release->branch} AND deleted = '0'"); - - if(dao::isError()) - { - if(!empty($buildID)) $this->dao->delete()->from(TABLE_BUILD)->where('id')->eq($buildID)->exec(); - return false; - } - - $this->dao->exec(); - - if(dao::isError()) - { - if(!empty($buildID)) $this->dao->delete()->from(TABLE_BUILD)->where('id')->eq($buildID)->exec(); - } - else - { - $releaseID = $this->dao->lastInsertID(); - $this->file->updateObjectID($this->post->uid, $releaseID, 'release'); - $this->file->saveUpload('release', $releaseID); - $this->loadModel('score')->create('release', 'create', $releaseID); - - /* Set stage to released. */ - if($release->stories) - { - $this->loadModel('story'); - $this->loadModel('action'); - - $storyIDList = array_filter(explode(',', $release->stories)); - foreach($storyIDList as $storyID) - { - $this->story->setStage($storyID); - - $this->action->create('story', $storyID, 'linked2release', '', $releaseID); - } - } - - return $releaseID; - } - - return false; - } - /** * Update a release. * From 779f02c9ec2a0591b238d57b21c17ae336cfa61a Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 28 Mar 2022 11:14:39 +0800 Subject: [PATCH 3/4] * Optimize code. --- module/projectrelease/control.php | 2 +- module/projectrelease/view/browse.html.php | 4 ++-- module/release/model.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index fa94ad2832..52a46c7be9 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -95,7 +95,7 @@ class projectrelease extends control * @access public * @return void */ - public function create($productID = 0, $branch = 0, $projectID = 0) + public function create($projectID) { /* Load module and config. */ $this->loadModel('build'); diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php index 3614649735..c6c01a9eb3 100644 --- a/module/projectrelease/view/browse.html.php +++ b/module/projectrelease/view/browse.html.php @@ -22,7 +22,7 @@ ?>
- {$lang->release->create}", '', "class='btn btn-primary'");?> + {$lang->release->create}", '', "class='btn btn-primary'");?>
@@ -31,7 +31,7 @@

release->noRelease;?> - createLink('projectrelease', 'create', "productID=0&branch=0&projectID=$projectID"), " " . $lang->release->create, '', "class='btn btn-info'");?> + createLink('projectrelease', 'create', "projectID=$projectID"), " " . $lang->release->create, '', "class='btn btn-info'");?>

diff --git a/module/release/model.php b/module/release/model.php index 3b79fb521e..9b22782ea1 100644 --- a/module/release/model.php +++ b/module/release/model.php @@ -116,7 +116,7 @@ class releaseModel extends model { /* Init vars. */ $productID = $this->post->product ? $this->post->product : (int)$productID; - $branch = $this->post->product ? $this->post->product : (int)$branch; + $branch = $this->post->branch ? $this->post->branch : (int)$branch; $buildID = $this->post->build ? $this->post->build : 0; /* Check build if build is required. */ From 1a7d18a3773a1151c3528aedeb3c4dbefa323f67 Mon Sep 17 00:00:00 2001 From: mayue Date: Mon, 28 Mar 2022 16:38:59 +0800 Subject: [PATCH 4/4] * Optimize code. --- module/release/model.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/release/model.php b/module/release/model.php index 9b22782ea1..a1360ff42a 100644 --- a/module/release/model.php +++ b/module/release/model.php @@ -117,7 +117,6 @@ class releaseModel extends model /* Init vars. */ $productID = $this->post->product ? $this->post->product : (int)$productID; $branch = $this->post->branch ? $this->post->branch : (int)$branch; - $buildID = $this->post->build ? $this->post->build : 0; /* Check build if build is required. */ if(strpos($this->config->release->create->requiredFields, 'build') !== false and $this->post->build == false) return dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->release->build); @@ -129,7 +128,7 @@ class releaseModel extends model ->add('product', (int)$productID) ->add('branch', (int)$branch) ->setIF($projectID, 'project', $projectID) - ->setIF($buildID, 'build', $buildID) + ->setIF($this->post->build == false, 'build', 0) ->setDefault('stories', '') ->join('stories', ',') ->join('bugs', ',')