diff --git a/module/build/model.php b/module/build/model.php index 1e9f333b90..38152234fd 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -181,6 +181,38 @@ class buildModel extends model return $this->getExecutionBuilds($executionID, 'bysearch', $buildQuery); } + /** + * Get link stories or bugs builds. + * + * @param array $buildIdList + * @access public + * @return array + */ + public function getNotEmptyBuilds($buildIdList) + { + $notEmptyBuilds = array(); + $buildList = $this->getByList($buildIdList); + foreach($buildList as $build) + { + if(!$build->execution && !empty($build->builds)) + { + $childBuilds = $this->getByList($build->builds); + foreach($childBuilds as $childBuild) + { + $childBuild->stories = trim($childBuild->stories, ','); + $childBuild->bugs = trim($childBuild->bugs, ','); + + if($childBuild->stories) $build->stories .= ',' . $childBuild->stories; + if($childBuild->bugs) $build->bugs .= ',' . $childBuild->bugs; + } + } + + if(!empty($build->stories) or !empty($build->bugs)) $notEmptyBuilds[$build->id] = $build->id; + } + + return $notEmptyBuilds; + } + /** * Get story builds. * diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index 671d20c340..18a016922d 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -133,14 +133,14 @@ class projectrelease extends control $builds = $this->build->getBuildPairs($this->view->product->id, $this->view->branch, 'notrunk,withbranch|hasproject', $projectID, 'project'); $releasedBuilds = $this->projectrelease->getReleasedBuilds($projectID); foreach($releasedBuilds as $build) unset($builds[$build]); - unset($builds['trunk']); - $this->view->title = $this->view->project->name . $this->lang->colon . $this->lang->release->create; - $this->view->projectID = $projectID; - $this->view->builds = $builds; - $this->view->lastRelease = $this->projectrelease->getLast($projectID); - $this->view->users = $this->loadModel('user')->getPairs('noclosed'); - $this->view->confirmLink = $this->lang->release->confirmLink; + $this->view->title = $this->view->project->name . $this->lang->colon . $this->lang->release->create; + $this->view->projectID = $projectID; + $this->view->builds = $builds; + $this->view->lastRelease = $this->projectrelease->getLast($projectID); + $this->view->users = $this->loadModel('user')->getPairs('noclosed'); + $this->view->confirmLink = $this->lang->release->confirmLink; + $this->view->notEmptyBuilds = $this->build->getNotEmptyBuilds(array_keys($builds)); $this->display(); } @@ -811,8 +811,10 @@ class projectrelease extends control $builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'notrunk,withbranch,hasproject', $projectID, 'project', '', false); $releasedBuilds = $this->projectrelease->getReleasedBuilds($projectID); foreach($releasedBuilds as $build) unset($builds[$build]); - unset($builds['trunk']); - return print(html::select('build[]', $builds, '', "class='form-control chosen' multiple")); + /* Get the builds of the linked stories or bugs. */ + $notEmptyBuilds = $this->build->getNotEmptyBuilds(array_keys($builds)); + + return print(html::select('build[]', $builds, '', "class='form-control chosen' multiple data-notemptybuilds='" . join(',', $notEmptyBuilds) . "'")); } } diff --git a/module/projectrelease/js/create.js b/module/projectrelease/js/create.js index 8b848d6351..43c1298bac 100644 --- a/module/projectrelease/js/create.js +++ b/module/projectrelease/js/create.js @@ -1,18 +1,27 @@ $('#submit').click(function() { - var dateFormat = new RegExp(/^\d{4}\-\d{2}\-\d{2}$/); - var name = $('#name').val(); - var date = $('#date').val(); - var build = $('#build').val(); - if(name && build && dateFormat.test(date)) + var dateFormat = new RegExp(/^\d{4}\-\d{2}\-\d{2}$/); + var name = $('#name').val(); + var date = $('#date').val(); + var build = $('#build').val(); + var notEmptyBuild = false; + + $.each(build, function(index, value) + { + if(typeof(notEmptyBuilds[value]) != 'undefined') + { + notEmptyBuild = true; + return false; + } + }) + + if(name && build && notEmptyBuild && dateFormat.test(date)) { var result = confirm(confirmLink) ? true : false; $('#sync').val(result); } }); -$('[data-toggle="popover"]').popover(); - /** * Ajax load unlinked builds with project and product. * @@ -26,6 +35,10 @@ function loadBuilds() $('#buildBox').load(createLink('projectrelease', 'ajaxLoadBuilds', "projectID=" + projectID + "&productID=" + productID + "&branch=" + branch), function() { $('#build').attr('data-placeholder', multipleSelect).chosen(); + $.each($('#build').attr('data-notemptybuilds').split(','), function(index, value) + { + notEmptyBuilds[value] = value; + }); }); } diff --git a/module/projectrelease/view/create.html.php b/module/projectrelease/view/create.html.php index ab669607a3..fa3671ae44 100644 --- a/module/projectrelease/view/create.html.php +++ b/module/projectrelease/view/create.html.php @@ -13,6 +13,7 @@ +