* Finish task #75237.
This commit is contained in:
@@ -37,3 +37,5 @@ REPLACE INTO `zt_report` (`code`, `name`, `module`, `sql`, `vars`, `langs`, `par
|
||||
('projectbug-type', '{\"zh-cn\":\"\\u9879\\u76eeBug\\u7c7b\\u578b\\u7edf\\u8ba1\\u8868\",\"zh-tw\":\"\\u9805\\u76eeBug\\u985e\\u578b\\u7d71\\u8a08\\u8868\",\"en\":\"Project Bug Type\",\"de\":\"Project Bug Type\",\"fr\":\"Project Bug Type\",\"vi\":\"Project Bug Type\",\"ja\":\"Project Bug Type\"}', ',project,test', 'select t1.id,t3.name as project,t3.id,IF(t3.multiple="1",t1.name,"") as execution,t2.id as bugID,t2.type from TABLE_EXECUTION as t1 \r\nleft join TABLE_BUG as t2 on t1.id=t2.execution\r\nleft join TABLE_PROJECT as t3 on t3.id=t1.project\r\nwhere t1.deleted=\'0\' and t2.deleted=\'0\' and if($project=\'\',1,t3.id=$project) and if($execution=\'\',1,t1.id=$execution)', '{\"varName\":[\"project\",\"execution\"],\"showName\":[\"\\u9879\\u76ee\\u5217\\u8868\",\"\\u6267\\u884c\\u5217\\u8868\"],\"requestType\":[\"select\",\"select\"],\"selectList\":[\"project\",\"execution\"],\"default\":[\"\",\"\"]}', '{\"stories\":{\"zh-cn\":\"\\u9700\\u6c42\\u6570\",\"zh-tw\":\"\\u9700\\u6c42\\u6570\",\"en\":\"Stories\"},\"tasks\":{\"zh-cn\":\"\\u4efb\\u52a1\\u6570\",\"zh-tw\":\"\\u4efb\\u52a1\\u6570\",\"en\":\"Tasks\"},\"undoneStory\":{\"zh-cn\":\"\\u5269\\u4f59\\u9700\\u6c42\\u6570\",\"zh-tw\":\"\\u5269\\u4f59\\u9700\\u6c42\\u6570\",\"en\":\"Undone Story\"},\"undoneTask\":{\"zh-cn\":\"\\u5269\\u4f59\\u4efb\\u52a1\\u6570\",\"zh-tw\":\"\\u5269\\u4f59\\u4efb\\u52a1\\u6570\",\"en\":\"Undone Task\"},\"consumed\":{\"zh-cn\":\"\\u5df2\\u6d88\\u8017\\u5de5\\u65f6\",\"zh-tw\":\"\\u5df2\\u6d88\\u8017\\u5de5\\u65f6\",\"en\":\"Cost(h)\"},\"left\":{\"zh-cn\":\"\\u5269\\u4f59\\u5de5\\u65f6\",\"zh-tw\":\"\\u5269\\u4f59\\u5de5\\u65f6\",\"en\":\"Left(h)\"},\"consumedPercent\":{\"zh-cn\":\"\\u8fdb\\u5ea6\",\"zh-tw\":\"\\u8fdb\\u5ea6\",\"en\":\"Process\"},\"execution\":{\"zh-cn\":\"\\u6267\\u884c\\u540d\\u79f0\"}}', '{\"group1\":\"project\",\"group2\":\"execution\",\"reportField\":[\"type\"],\"reportType\":[\"count\"],\"sumAppend\":[\"\"]}', 2, '{\"zh-cn\":\"\\u6309\\u7167\\u9879\\u76ee\\u7edf\\u8ba1Bug\\u7684\\u7c7b\\u578b\\u5206\\u5e03\\u60c5\\u51b5\\u3002\",\"zh-tw\":\"\\u6309\\u7167\\u9805\\u76ee\\u7d71\\u8a08Bug\\u7684\\u985e\\u578b\\u5206\\u5e03\\u60c5\\u6cc1\\u3002\",\"en\":\"\",\"de\":\"\",\"fr\":\"\",\"vi\":\"\",\"ja\":\"\"}', 'admin', '2015-08-04 13:54:22');
|
||||
|
||||
ALTER TABLE `zt_project` ADD `division` enum('0','1') COLLATE 'utf8_general_ci' NOT NULL DEFAULT '1';
|
||||
|
||||
ALTER TABLE `zt_build` ADD `builds` varchar(255) NOT NULL AFTER `execution`;
|
||||
|
||||
@@ -323,6 +323,7 @@ CREATE TABLE IF NOT EXISTS `zt_build` (
|
||||
`product` mediumint(8) unsigned NOT NULL default '0',
|
||||
`branch` mediumint(8) unsigned NOT NULL default '0',
|
||||
`execution` mediumint(8) unsigned NOT NULL default '0',
|
||||
`builds` varchar(255) NOT NULL,
|
||||
`name` char(150) NOT NULL,
|
||||
`scmPath` char(255) NOT NULL,
|
||||
`filePath` char(255) NOT NULL,
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
$config->build = new stdclass();
|
||||
$config->build->create = new stdclass();
|
||||
$config->build->edit = new stdclass();
|
||||
$config->build->create->requiredFields = 'product,execution,name,builder,date';
|
||||
$config->build->edit->requiredFields = 'product,execution,name,builder,date';
|
||||
$config->build->create->requiredFields = 'product,name,builder,date';
|
||||
$config->build->edit->requiredFields = 'product,name,builder,date';
|
||||
|
||||
$config->build->editor = new stdclass();
|
||||
$config->build->editor->create = array('id' => 'desc', 'tools' => 'simpleTools');
|
||||
|
||||
+75
-73
@@ -49,13 +49,12 @@ class build extends control
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$executionID = empty($executionID) ? $this->post->execution : $executionID;
|
||||
if(empty($executionID)) dao::$errors['execution'] = $this->lang->build->emptyExecution;
|
||||
if(empty($executionID) && $this->app->tab == 'execution') dao::$errors['execution'] = $this->lang->build->emptyExecution;
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
if(defined('TUTORIAL')) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true)); // Fix bug #21095.
|
||||
|
||||
$buildID = $this->build->create($executionID);
|
||||
$buildID = $this->build->create($executionID, $projectID);
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
$this->loadModel('action')->create('build', $buildID, 'opened');
|
||||
|
||||
@@ -67,40 +66,36 @@ class build extends control
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('build', 'view', "buildID=$buildID") . "#app={$this->app->tab}"));
|
||||
}
|
||||
|
||||
$this->loadModel('product');
|
||||
$this->loadModel('project');
|
||||
/* Set menu. */
|
||||
$executions = array();
|
||||
if($this->app->tab == 'project')
|
||||
{
|
||||
$this->loadModel('project')->setMenu($projectID);
|
||||
$executions = $this->execution->getPairs($projectID, 'all', 'stagefilter');
|
||||
$executionID = empty($executionID) ? key($executions) : $executionID;
|
||||
$this->project->setMenu($projectID);
|
||||
$productGroups = $this->product->getProducts($projectID);
|
||||
$branchGroups = $this->project->getBranchesByProject($projectID);
|
||||
$this->session->set('project', $projectID);
|
||||
}
|
||||
elseif($this->app->tab == 'execution')
|
||||
{
|
||||
$execution = $this->execution->getByID($executionID);
|
||||
$executions = $this->execution->getPairs($execution->project);
|
||||
$projectID = $execution->project;
|
||||
$execution = $this->execution->getByID($executionID);
|
||||
$projectID = $execution->project;
|
||||
$productGroups = $this->product->getProducts($executionID);
|
||||
$branchGroups = $this->project->getBranchesByProject($executionID);
|
||||
$this->execution->setMenu($executionID);
|
||||
$this->session->set('project', $execution->project);
|
||||
}
|
||||
elseif($this->app->tab == 'qa')
|
||||
{
|
||||
$execution = $this->execution->getByID($executionID);
|
||||
$projectID = $execution ? $execution->project : 0;
|
||||
$executions = $this->execution->getPairs($projectID);
|
||||
$execution = $this->execution->getByID($executionID);
|
||||
$projectID = $execution ? $execution->project : 0;
|
||||
$productGroups = $this->product->getProducts($executionID);
|
||||
$branchGroups = $this->project->getBranchesByProject($executionID);
|
||||
}
|
||||
|
||||
$this->commonActions($projectID);
|
||||
$executionList = empty($executions) ? array() : $this->execution->getByIdList(array_keys($executions));
|
||||
foreach($executionList as $execution)
|
||||
{
|
||||
if($execution->lifetime == 'ops') unset($executions[$execution->id]);
|
||||
}
|
||||
|
||||
$productGroups = $this->loadModel('product')->getProducts($executionID);
|
||||
$productID = $productID ? $productID : key($productGroups);
|
||||
$branchGroups = $this->loadModel('project')->getBranchesByProject($executionID);
|
||||
$branchPairs = $this->loadModel('branch')->getPairs($productID, 'active');
|
||||
$branches = array();
|
||||
$products = array();
|
||||
@@ -124,7 +119,6 @@ class build extends control
|
||||
$this->view->executionID = $executionID;
|
||||
$this->view->products = $products;
|
||||
$this->view->projectID = $projectID;
|
||||
$this->view->executions = $executions;
|
||||
$this->view->lastBuild = $this->build->getLast($executionID);
|
||||
$this->view->productGroups = $productGroups;
|
||||
$this->view->users = $this->user->getPairs('nodeleted|noclosed');
|
||||
@@ -157,7 +151,7 @@ class build extends control
|
||||
$message = $this->executeHooks($buildID);
|
||||
if($message) $this->lang->saveSuccess = $message;
|
||||
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('view', "buildID=$buildID")));
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('build', 'view', "buildID=$buildID") . "#app={$this->app->tab}"));
|
||||
}
|
||||
|
||||
$this->loadModel('execution');
|
||||
@@ -165,30 +159,24 @@ class build extends control
|
||||
$build = $this->build->getById((int)$buildID);
|
||||
|
||||
/* Set menu. */
|
||||
if($this->app->tab == 'project')
|
||||
{
|
||||
$this->loadModel('project')->setMenu($build->project);
|
||||
}
|
||||
elseif($this->app->tab == 'execution')
|
||||
{
|
||||
$this->execution->setMenu($build->execution);
|
||||
}
|
||||
if($this->app->tab == 'project') $this->loadModel('project')->setMenu($build->project);
|
||||
if($this->app->tab == 'execution') $this->execution->setMenu($build->execution);
|
||||
|
||||
/* Get stories and bugs. */
|
||||
$orderBy = 'status_asc, stage_asc, id_desc';
|
||||
|
||||
/* Assign. */
|
||||
$execution = $this->execution->getByID($build->execution);
|
||||
if(empty($execution))
|
||||
if($build->execution)
|
||||
{
|
||||
$execution = new stdclass();
|
||||
$execution->name = '';
|
||||
$productGroups = $this->product->getProducts($build->execution);
|
||||
$branches = $this->loadModel('branch')->getList($build->product, $build->execution, 'all');
|
||||
}
|
||||
else
|
||||
{
|
||||
$productGroups = $this->product->getProducts($build->project);
|
||||
$branches = $this->loadModel('branch')->getList($build->product, $build->project, 'all');
|
||||
}
|
||||
|
||||
$executions = $this->product->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project, 'stagefilter');
|
||||
if(!isset($executions[$build->execution])) $executions[$build->execution] = $execution->name;
|
||||
|
||||
$productGroups = $this->product->getProducts($build->execution);
|
||||
/* Get stories and bugs. */
|
||||
$orderBy = 'status_asc, stage_asc, id_desc';
|
||||
|
||||
if(!isset($productGroups[$build->product]))
|
||||
{
|
||||
@@ -198,7 +186,6 @@ class build extends control
|
||||
}
|
||||
|
||||
/* Display status of branch. */
|
||||
$branches = $this->loadModel('branch')->getList($build->product, $build->execution, 'all');
|
||||
$branchTagOption = array();
|
||||
foreach($branches as $branchInfo)
|
||||
{
|
||||
@@ -210,19 +197,17 @@ class build extends control
|
||||
|
||||
$this->commonActions($build->project);
|
||||
|
||||
$this->view->title = $execution->name . $this->lang->colon . $this->lang->build->edit;
|
||||
$this->view->position[] = html::a($this->createLink('execution', 'task', "executionID=$build->execution"), $execution->name);
|
||||
$this->view->title = $build->name . $this->lang->colon . $this->lang->build->edit;
|
||||
$this->view->position[] = $this->lang->build->edit;
|
||||
$this->view->product = isset($productGroups[$build->product]) ? $productGroups[$build->product] : '';
|
||||
$this->view->branchTagOption = $branchTagOption;
|
||||
$this->view->executions = $executions;
|
||||
$this->view->orderBy = $orderBy;
|
||||
|
||||
$this->view->productGroups = $productGroups;
|
||||
$this->view->products = $products;
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter', $build->builder);
|
||||
$this->view->build = $build;
|
||||
$this->view->testtaskID = $this->dao->select('id')->from(TABLE_TESTTASK)->where('build')->eq($build->id)->andWhere('deleted')->eq(0)->fetch('id');
|
||||
$this->view->executions = $executions;
|
||||
$this->view->productGroups = $productGroups;
|
||||
$this->view->products = $products;
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter', $build->builder);
|
||||
$this->view->build = $build;
|
||||
$this->view->testtaskID = $this->dao->select('id')->from(TABLE_TESTTASK)->where('build')->eq($build->id)->andWhere('deleted')->eq(0)->fetch('id');
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -310,23 +295,24 @@ class build extends control
|
||||
|
||||
$this->executeHooks($buildID);
|
||||
|
||||
$objectType = 'execution';
|
||||
$objectID = $build->execution;
|
||||
if($build->project and $this->app->tab == 'project')
|
||||
if($this->app->tab == 'execution')
|
||||
{
|
||||
$project = $this->project->getByID($build->project);
|
||||
if(!$project->multiple)
|
||||
{
|
||||
$objectType = 'project';
|
||||
$objectID = $build->project;
|
||||
}
|
||||
$objectType = 'execution';
|
||||
$objectID = $build->execution;
|
||||
}
|
||||
else
|
||||
{
|
||||
$objectType = 'project';
|
||||
$objectID = $build->project;
|
||||
}
|
||||
|
||||
|
||||
/* Assign. */
|
||||
$this->view->canBeChanged = common::canBeChanged('build', $build); // Determines whether an object is editable.
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
||||
$this->view->build = $build;
|
||||
$this->view->buildPairs = $this->build->getBuildPairs(0, 'all', 'noempty,notrunk', $objectID, $objectType);
|
||||
$this->view->builds = $this->build->getByList(array_keys($this->view->buildPairs));
|
||||
$this->view->actions = $this->loadModel('action')->getList('build', $buildID);
|
||||
$this->view->link = $link;
|
||||
$this->view->param = $param;
|
||||
@@ -399,10 +385,11 @@ class build extends control
|
||||
* @param string|int $branch
|
||||
* @param int $index the index of batch create bug.
|
||||
* @param string $type get all builds or some builds belong to normal releases and executions are not done.
|
||||
* @param string $extra
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function ajaxGetProductBuilds($productID, $varName, $build = '', $branch = 'all', $index = 0, $type = 'normal')
|
||||
public function ajaxGetProductBuilds($productID, $varName, $build = '', $branch = 'all', $index = 0, $type = 'normal', $extra = '')
|
||||
{
|
||||
$isJsonView = $this->app->getViewType() == 'json';
|
||||
if($varName == 'openedBuild' )
|
||||
@@ -425,6 +412,11 @@ class build extends control
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName, $builds, $build, "class='form-control'"));
|
||||
}
|
||||
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $type);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
if(strpos($extra, 'multiple') !== false) $varName .= '[]';
|
||||
return print(html::select($varName, $builds, $build, "class='form-control chosen' $extra"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -563,14 +555,11 @@ class build extends control
|
||||
$build = $this->build->getById($buildID);
|
||||
$product = $this->loadModel('product')->getById($build->product);
|
||||
|
||||
$this->loadModel('execution')->setMenu($build->execution);
|
||||
if($build->execution) $this->loadModel('execution')->setMenu($build->execution);
|
||||
$this->loadModel('story');
|
||||
$this->loadModel('tree');
|
||||
$this->loadModel('product');
|
||||
|
||||
$execution = $this->execution->getByID($build->execution);
|
||||
if(empty($execution->hasProduct) and empty($execution->multiple)) unset($this->config->product->search['fields']['plan']);
|
||||
|
||||
/* Load pager. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = new pager($recTotal, $recPerPage, $pageID);
|
||||
@@ -589,7 +578,14 @@ class build extends control
|
||||
if($build->project)
|
||||
{
|
||||
$project = $this->loadModel('project')->getByID($build->project);
|
||||
if(!$project->hasProduct and $project->model != 'scrum') unset($this->config->product->search['fields']['plan']);
|
||||
if(!$project->hasProduct and $project->model != 'scrum')
|
||||
{
|
||||
unset($this->config->product->search['fields']['plan']);
|
||||
}
|
||||
else if(!$project->hasProduct and !$project->multiple)
|
||||
{
|
||||
unset($this->config->product->search['fields']['plan']);
|
||||
}
|
||||
}
|
||||
|
||||
if($product->type == 'normal')
|
||||
@@ -608,13 +604,14 @@ class build extends control
|
||||
}
|
||||
$this->loadModel('search')->setSearchParams($this->config->product->search);
|
||||
|
||||
$executionID = $build->execution ? $build->execution : $build->project;
|
||||
if($browseType == 'bySearch')
|
||||
{
|
||||
$allStories = $this->story->getBySearch($build->product, $build->branch, $queryID, 'id', $build->execution, 'story', $build->stories, $pager);
|
||||
$allStories = $this->story->getBySearch($build->product, $build->branch, $queryID, 'id', $executionID, 'story', $build->stories, $pager);
|
||||
}
|
||||
else
|
||||
{
|
||||
$allStories = $this->story->getExecutionStories($build->execution, $build->product, 0, 't1.`order`_desc', 'byBranch', $build->branch, 'story', $build->stories, $pager);
|
||||
$allStories = $this->story->getExecutionStories($executionID, $build->product, 0, 't1.`order`_desc', 'byBranch', $build->branch, 'story', $build->stories, $pager);
|
||||
}
|
||||
|
||||
$this->view->allStories = $allStories;
|
||||
@@ -679,7 +676,7 @@ class build extends control
|
||||
/* Set menu. */
|
||||
$build = $this->build->getByID($buildID);
|
||||
$product = $this->loadModel('product')->getByID($build->product);
|
||||
$this->loadModel('execution')->setMenu($build->execution);
|
||||
if($build->execution) $this->loadModel('execution')->setMenu($build->execution);
|
||||
|
||||
/* Load pager. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
@@ -698,9 +695,6 @@ class build extends control
|
||||
$this->config->bug->search['params']['openedBuild']['values'] = $this->build->getBuildPairs($build->product, $branch = 'all', $params = '');
|
||||
$this->config->bug->search['params']['resolvedBuild']['values'] = $this->config->bug->search['params']['openedBuild']['values'];
|
||||
|
||||
$execution = $this->execution->getByID($build->execution);
|
||||
if(!$execution->hasProduct and !$execution->multiple) unset($this->config->bug->search['fields']['plan']);
|
||||
|
||||
unset($this->config->bug->search['fields']['product']);
|
||||
unset($this->config->bug->search['params']['product']);
|
||||
unset($this->config->bug->search['fields']['project']);
|
||||
@@ -709,7 +703,14 @@ class build extends control
|
||||
if($build->project)
|
||||
{
|
||||
$project = $this->loadModel('project')->getByID($build->project);
|
||||
if(!$project->hasProduct and $project->model != 'scrum') unset($this->config->bug->search['fields']['plan']);
|
||||
if(!$project->hasProduct and $project->model != 'scrum')
|
||||
{
|
||||
unset($this->config->bug->search['fields']['plan']);
|
||||
}
|
||||
else if(!$project->hasProduct and !$project->multiple)
|
||||
{
|
||||
unset($this->config->bug->search['fields']['plan']);
|
||||
}
|
||||
}
|
||||
|
||||
if($product->type == 'normal')
|
||||
@@ -727,13 +728,14 @@ class build extends control
|
||||
}
|
||||
$this->loadModel('search')->setSearchParams($this->config->bug->search);
|
||||
|
||||
$executionID = $build->execution ? $build->execution : $build->project;
|
||||
if($browseType == 'bySearch')
|
||||
{
|
||||
$allBugs = $this->bug->getBySearch($build->product, $build->branch, $queryID, 'id_desc', $build->bugs, $pager, $build->project);
|
||||
}
|
||||
else
|
||||
{
|
||||
$allBugs = $this->bug->getExecutionBugs($build->execution, 0, 'all', $buildID, 'noclosed', 0, 'status_desc,id_desc', $build->bugs, $pager);
|
||||
$allBugs = $this->bug->getExecutionBugs($executionID, 0, 'all', $buildID, 'noclosed', 0, 'status_desc,id_desc', $build->bugs, $pager);
|
||||
}
|
||||
|
||||
$this->view->allBugs = $allBugs;
|
||||
|
||||
@@ -15,8 +15,8 @@ function loadBranches(productID)
|
||||
oldBranch = productGroups[productID]['branches'];
|
||||
}
|
||||
|
||||
executionID = currentTab == 'execution' ? executionID : $('#execution').val();
|
||||
$.get(createLink('branch', 'ajaxGetBranches', 'productID=' + productID + '&oldBranch=0¶m=active&projectID=' + executionID), function(data)
|
||||
projectID = currentTab == 'execution' ? executionID : projectID;
|
||||
$.get(createLink('branch', 'ajaxGetBranches', 'productID=' + productID + '&oldBranch=0¶m=active&projectID=' + projectID), function(data)
|
||||
{
|
||||
if(data)
|
||||
{
|
||||
@@ -25,3 +25,5 @@ function loadBranches(productID)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function loadBranch() {return false;}
|
||||
|
||||
@@ -5,37 +5,15 @@ $().ready(function()
|
||||
$('#name').val($(this).text()).focus();
|
||||
});
|
||||
|
||||
});
|
||||
/**
|
||||
* Load products.
|
||||
*
|
||||
* @param int $executionID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function loadProducts(executionID)
|
||||
{
|
||||
$('#product').remove();
|
||||
$('#product_chosen').remove();
|
||||
$('#branch').remove();
|
||||
$('#branch_chosen').remove();
|
||||
$('#noProduct').remove();
|
||||
$.get(createLink('product', 'ajaxGetProducts', 'executionID=' + executionID), function(data)
|
||||
$(document).on('change', '#product, #branch', function()
|
||||
{
|
||||
if(data)
|
||||
var productID = $('#product').val();
|
||||
var branch = $('#branch').val();
|
||||
$.get(createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=builds&build=&branch=' + branch + '&index=&type=noempty,notrunk,separate,noproject&extra=multiple'), function(data)
|
||||
{
|
||||
if(data.indexOf("required") != -1)
|
||||
{
|
||||
$('#productBox').addClass('required');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#productBox').removeClass('required');
|
||||
}
|
||||
|
||||
$('#productBox').append(data);
|
||||
$('#product').chosen();
|
||||
loadBranches($("#product").val());
|
||||
}
|
||||
if(data) $('#buildBox').html(data);
|
||||
$('#builds').chosen();
|
||||
});
|
||||
});
|
||||
}
|
||||
$('#product').change();
|
||||
});
|
||||
|
||||
+26
-10
@@ -1,16 +1,32 @@
|
||||
var oldExecutionID = $('#execution').val();
|
||||
|
||||
function loadExecutions()
|
||||
$().ready(function()
|
||||
{
|
||||
var productID = $('#product').val();
|
||||
var branchID = $('#branch').length > 0 ? $('#branch').val() : 0;
|
||||
var oldExecutionID = $('#execution').val();
|
||||
$(document).on('change', '#product, #branch', function()
|
||||
{
|
||||
if(executionID)
|
||||
{
|
||||
loadExecutions(oldExecutionID);
|
||||
}
|
||||
else
|
||||
{
|
||||
var productID = $('#product').val();
|
||||
var branch = $('#branch').val();
|
||||
$.get(createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=builds&build=' + builds + '&branch=' + branch + '&index=&type=noempty,notrunk,separate,noproject&extra=multiple'), function(data)
|
||||
{
|
||||
if(data) $('#buildBox').html(data);
|
||||
$('#builds').chosen();
|
||||
});
|
||||
}
|
||||
});
|
||||
if(!executionID) $('#product').change();
|
||||
});
|
||||
|
||||
function loadExecutions(oldExecutionID)
|
||||
{
|
||||
var productID = $('#product').val();
|
||||
var branchID = $('#branch').length > 0 ? $('#branch').val() : 0;
|
||||
$('#executionsBox').load(createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=0&branch=' + branchID + '&number=&executionID=' + oldExecutionID), function()
|
||||
{
|
||||
$('#executionsBox #execution').chosen().removeAttr('onchange');
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('change', '#product,#branch', function()
|
||||
{
|
||||
loadExecutions();
|
||||
})
|
||||
|
||||
@@ -2,7 +2,7 @@ function showLink(buildID, type, param)
|
||||
{
|
||||
var method = type == 'story' ? 'linkStory' : 'linkBug';
|
||||
if(typeof(param) == 'undefined') param = '&browseType=' + type + '¶m=0';
|
||||
loadURL(createLink('build', method, 'buildID=' + buildID + param), type);
|
||||
loadURL(createLink(currentModule, method, 'buildID=' + buildID + param), type);
|
||||
|
||||
$('.actions').find("a[href*='" + type + "']").addClass('hidden');
|
||||
}
|
||||
|
||||
+21
-15
@@ -225,6 +225,7 @@ class buildModel extends model
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
$branchs = strpos($params, 'separate') === false ? "0,$branch" : $branch;
|
||||
$allBuilds = $this->dao->select('t1.id, t1.name, t1.deleted, t2.status as objectStatus, t3.id as releaseID, t3.status as releaseStatus, t4.name as branchName, t5.type as productType')->from(TABLE_BUILD)->alias('t1')
|
||||
->beginIF($objectType === 'execution')->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')->fi()
|
||||
->beginIF($objectType === 'project')->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')->fi()
|
||||
@@ -233,10 +234,11 @@ class buildModel extends model
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t5')->on('t1.product = t5.id')
|
||||
->where(1)->eq(1)
|
||||
->beginIF(strpos($params, 'hasDeleted') === false)->andWhere('t1.deleted')->eq(0)->fi()
|
||||
->beginIF(strpos($params, 'noproject') !== false)->andWhere('t1.execution')->ne(0)->fi()
|
||||
->beginIF($products)->andWhere('t1.product')->in($products)->fi()
|
||||
->beginIF($objectType === 'execution' and $objectID)->andWhere('t1.execution')->eq($objectID)->fi()
|
||||
->beginIF($objectType === 'project' and $objectID)->andWhere('t1.project')->eq($objectID)->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('t1.branch')->in("0,$branch")->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('t1.branch')->in("$branchs")->fi()
|
||||
->orderBy('t1.date desc, t1.id desc')->fetchAll('id');
|
||||
|
||||
/* Set builds and filter done executions and terminate releases. */
|
||||
@@ -262,7 +264,7 @@ class buildModel extends model
|
||||
$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("0,$branch")->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in("$branchs")->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchPairs();
|
||||
foreach($releases as $buildID => $releaseName)
|
||||
@@ -299,26 +301,27 @@ class buildModel extends model
|
||||
* Create a build
|
||||
*
|
||||
* @param int $executionID
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function create($executionID)
|
||||
public function create($executionID = 0, $projectID = 0)
|
||||
{
|
||||
$build = new stdclass();
|
||||
$build->stories = '';
|
||||
$build->bugs = '';
|
||||
|
||||
$execution = $this->loadModel('execution')->getByID($executionID);
|
||||
|
||||
$build = fixer::input('post')
|
||||
->setDefault('project', $execution->project)
|
||||
->setDefault('project', $projectID)
|
||||
->setDefault('product', 0)
|
||||
->setDefault('branch', 0)
|
||||
->setDefault('builds', '')
|
||||
->cleanInt('product,branch')
|
||||
->add('execution', (int)$executionID)
|
||||
->add('execution', $executionID)
|
||||
->add('createdBy', $this->app->user->account)
|
||||
->add('createdDate', helper::now())
|
||||
->stripTags($this->config->build->editor->create['id'], $this->config->allowedTags)
|
||||
->join('builds', ',')
|
||||
->remove('resolvedBy,allchecker,files,labels,uid')
|
||||
->get();
|
||||
|
||||
@@ -355,7 +358,9 @@ class buildModel extends model
|
||||
->add('id', $buildID)
|
||||
->setIF(!isset($_POST['branch']), 'branch', $oldBuild->branch)
|
||||
->setDefault('product', $oldBuild->product)
|
||||
->setDefault('builds', '')
|
||||
->cleanInt('product,branch,execution')
|
||||
->join('builds', ',')
|
||||
->remove('allchecker,resolvedBy,files,labels,uid')
|
||||
->get();
|
||||
|
||||
@@ -565,21 +570,22 @@ class buildModel extends model
|
||||
global $app;
|
||||
$tab = $app->tab;
|
||||
|
||||
$module = $build->execution ? 'build' : 'projectbuild';
|
||||
if($type == 'browse')
|
||||
{
|
||||
$executionID = $tab == 'execution' ? $extraParams['executionID'] : $build->execution;
|
||||
$execution = $this->loadModel('execution')->getByID($executionID);
|
||||
$testtaskApp = (!empty($execution->type) and $execution->type == 'kanban') ? 'data-app="qa"' : "data-app='{$tab}'";
|
||||
|
||||
if(common::hasPriv('build', 'linkstory') and common::canBeChanged('build', $build)) $menu .= $this->buildMenu('build', 'view', "{$params}&type=story&link=true", $build, $type, 'link', '', '', '', "data-app={$tab}", $this->lang->build->linkStory);
|
||||
if(common::hasPriv($module, 'linkstory') and common::canBeChanged('build', $build)) $menu .= $this->buildMenu($module, 'view', "{$params}&type=story&link=true", $build, $type, 'link', '', '', '', "data-app={$tab}", $this->lang->build->linkStory);
|
||||
|
||||
$menu .= $this->buildMenu('testtask', 'create', "product=$build->product&execution={$executionID}&build=$build->id&projectID=$build->project", $build, $type, 'bullhorn', '', '', '', $testtaskApp);
|
||||
|
||||
if($tab == 'execution' and !empty($execution->type) and $execution->type != 'kanban') $menu .= $this->buildMenu('execution', 'bug', "execution={$extraParams['executionID']}&productID={$extraParams['productID']}&branchID=all&orderBy=status&build=$build->id", $build, $type, '', '', '', '', $this->lang->execution->viewBug);
|
||||
if($tab == 'project' or empty($execution->type) or $execution->type == 'kanban') $menu .= $this->buildMenu('build', 'view', "{$params}&type=generatedBug", $build, $type, 'bug', '', '', '', "data-app='$tab'", $this->lang->project->bug);
|
||||
if($tab == 'project' or empty($execution->type) or $execution->type == 'kanban') $menu .= $this->buildMenu($module, 'view', "{$params}&type=generatedBug", $build, $type, 'bug', '', '', '', "data-app='$tab'", $this->lang->project->bug);
|
||||
|
||||
$menu .= $this->buildMenu('build', 'edit', $params, $build, $type);
|
||||
$menu .= $this->buildMenu('build', 'delete', $params, $build, $type, 'trash', 'hiddenwin');
|
||||
$menu .= $this->buildMenu($module, 'edit', $params, $build, $type);
|
||||
$menu .= $this->buildMenu($module, 'delete', $params, $build, $type, 'trash', 'hiddenwin');
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -588,10 +594,10 @@ class buildModel extends model
|
||||
|
||||
$menu .= $this->buildFlowMenu('build', $build, 'view', 'direct');
|
||||
|
||||
$editClickable = $this->buildMenu('build', 'edit', $params, $build, $type, '', '', '', '', '', '', false);
|
||||
$deleteClickable = $this->buildMenu('build', 'delete', $params, $build, $type, '', '', '', '', '', '', false);
|
||||
if(common::hasPriv('build', 'edit') and $editClickable) $menu .= html::a(helper::createLink('build', 'edit', $params), "<i class='icon-common-edit icon-edit'></i> " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->build->edit}' data-app='{$app->tab}'");
|
||||
if(common::hasPriv('build', 'delete') and $deleteClickable) $menu .= html::a(helper::createLink('build', 'delete', $params), "<i class='icon-common-delete icon-trash'></i> " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->build->delete}' target='hiddenwin' data-app='{$app->tab}'");
|
||||
$editClickable = $this->buildMenu($module, 'edit', $params, $build, $type, '', '', '', '', '', '', false);
|
||||
$deleteClickable = $this->buildMenu($module, 'delete', $params, $build, $type, '', '', '', '', '', '', false);
|
||||
if(common::hasPriv($module, 'edit') and $editClickable) $menu .= html::a(helper::createLink($module, 'edit', $params), "<i class='icon-common-edit icon-edit'></i> " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->build->edit}' data-app='{$app->tab}'");
|
||||
if(common::hasPriv($module, 'delete') and $deleteClickable) $menu .= html::a(helper::createLink($module, 'delete', $params), "<i class='icon-common-delete icon-trash'></i> " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->build->delete}' target='hiddenwin' data-app='{$app->tab}'");
|
||||
}
|
||||
|
||||
return $menu;
|
||||
|
||||
@@ -19,12 +19,6 @@
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' id='dataform' method='post' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<?php if($app->tab == 'project'):?>
|
||||
<tr class="<?php echo empty($multipleProject) ? 'hidden' : '';?>">
|
||||
<th><?php echo $lang->executionCommon;?></th>
|
||||
<td><?php echo html::select('execution', $executions, $executionID, "onchange='loadProducts(this.value);' class='form-control chosen' required");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr class="<?php echo $hidden;?>">
|
||||
<th><?php echo $lang->build->product;?></th>
|
||||
<?php if(!empty($products)):?>
|
||||
@@ -48,6 +42,12 @@
|
||||
<?php endif;?>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php if($app->tab == 'project' && !empty($multipleProject)):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->common;?></th>
|
||||
<td id='buildBox'><?php echo html::select('builds', array(), '', "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->name;?></th>
|
||||
<td><?php echo html::input('name', '', "class='form-control' required");?></td>
|
||||
@@ -93,6 +93,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<?php js::set('productGroups', $productGroups);?>
|
||||
<?php js::set('projectID', $projectID);?>
|
||||
<?php js::set('executionID', $executionID);?>
|
||||
<?php js::set('currentTab', $this->app->tab);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' method='post' id='dataform' enctype='multipart/form-data'>
|
||||
<table class='table table-form'>
|
||||
<tr class="<?php echo $hidden;?>">
|
||||
<tr class="<?php echo $hidden;?>">
|
||||
<th><?php echo $lang->build->product;?></th>
|
||||
<td>
|
||||
<?php
|
||||
@@ -42,13 +42,16 @@
|
||||
</td>
|
||||
<td><?php if($disabled) echo $lang->build->notice->changeProduct;?></td>
|
||||
</tr>
|
||||
<?php if(!empty($multipleProject)):?>
|
||||
<?php if(!$build->execution):?>
|
||||
<tr>
|
||||
<?php $disabled = $testtaskID ? 'disabled' : '';?>
|
||||
<th><?php echo $lang->build->execution;?></th>
|
||||
<td id='executionsBox'><?php echo html::select('execution', $executions, $build->execution, "class='form-control chosen' required $disabled");?></td>
|
||||
<td><?php if($disabled) echo $lang->build->notice->changeExecution;?></td>
|
||||
<th><?php echo $lang->build->common;?></th>
|
||||
<td id='buildBox'><?php echo html::select('builds', array(), '', "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
<?php elseif(!empty($multipleProject)):?>
|
||||
<?php $disabled = $testtaskID ? 'disabled' : '';?>
|
||||
<th><?php echo $lang->build->execution;?></th>
|
||||
<td id='executionsBox'><?php echo html::select('execution', $executions, $build->execution, "class='form-control chosen' required $disabled");?></td>
|
||||
<td><?php if($disabled) echo $lang->build->notice->changeExecution;?></td>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->build->name;?></th>
|
||||
@@ -91,6 +94,7 @@
|
||||
</div>
|
||||
<?php js::set('productGroups', $productGroups)?>
|
||||
<?php js::set('projectID', $build->project)?>
|
||||
<?php js::set('builds', $build->builds)?>
|
||||
<?php js::set('executionID', $build->execution)?>
|
||||
<?php js::set('currentTab', $this->app->tab);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -35,8 +35,9 @@ tbody tr td:first-child input {display: none;}
|
||||
echo "<ul class='dropdown-menu'>";
|
||||
foreach($buildPairs as $id => $name)
|
||||
{
|
||||
$buildInfo = zget($builds, $id);
|
||||
echo '<li' . ($id == $build->id ? " class='active'" : '') . '>';
|
||||
echo html::a($this->createLink('build', 'view', "buildID=$id"), $name);
|
||||
echo html::a($this->createLink($buildInfo->execution ? 'build' : 'projectbuild', 'view', "buildID=$id") . "#app={$app->tab}", $name);
|
||||
echo '</li>';
|
||||
}
|
||||
echo '</ul>';
|
||||
@@ -53,6 +54,7 @@ tbody tr td:first-child input {display: none;}
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php $module = $build->execution ? 'build' : 'projectbuild';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='tabs' id='tabsNav'>
|
||||
<?php $countStories = count($stories); $countBugs = count($bugs); $countGeneratedBugs = count($generatedBugs);?>
|
||||
@@ -64,13 +66,13 @@ tbody tr td:first-child input {display: none;}
|
||||
</ul>
|
||||
<div class='tab-content'>
|
||||
<div class='tab-pane <?php if($type == 'story') echo 'active'?>' id='stories'>
|
||||
<?php if($canBeChanged and common::hasPriv('build', 'linkStory') and !isonlybody()):?>
|
||||
<?php if($canBeChanged and common::hasPriv($module, 'linkStory') and !isonlybody()):?>
|
||||
<div class='actions'><?php echo html::a("javascript:showLink($build->id, \"story\")", '<i class="icon-link"></i> ' . $lang->build->linkStory, '', "class='btn btn-primary'");?></div>
|
||||
<div class='linkBox cell hidden'></div>
|
||||
<?php endif;?>
|
||||
<form class='main-table table-story' data-ride='table' method='post' target='hiddenwin' action='<?php echo inlink('batchUnlinkStory', "buildID={$build->id}")?>' id='linkedStoriesForm'>
|
||||
<form class='main-table table-story' data-ride='table' method='post' target='hiddenwin' action='<?php echo $this->createLink($module, 'batchUnlinkStory', "buildID={$build->id}")?>' id='linkedStoriesForm'>
|
||||
<table class='table has-sort-head' id='storyList'>
|
||||
<?php $canBatchUnlink = ($canBeChanged and common::hasPriv('build', 'batchUnlinkStory'));?>
|
||||
<?php $canBatchUnlink = ($canBeChanged and common::hasPriv($module, 'batchUnlinkStory'));?>
|
||||
<?php $vars = "buildID={$build->id}&type=story&link=$link¶m=$param&orderBy=%s";?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
@@ -133,9 +135,9 @@ tbody tr td:first-child input {display: none;}
|
||||
<td><?php echo $lang->story->stageList[$story->stage];?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if($canBeChanged and common::hasPriv('build', 'unlinkStory'))
|
||||
if($canBeChanged and common::hasPriv($module, 'unlinkStory'))
|
||||
{
|
||||
$unlinkURL = inlink('unlinkStory', "buildID=$build->id&story=$story->id");
|
||||
$unlinkURL = $this->createLink($module, 'unlinkStory', "buildID=$build->id&story=$story->id");
|
||||
echo html::a($unlinkURL, '<i class="icon-unlink"></i>', 'hiddenwin', "class='btn' title='{$lang->build->unlinkStory}'");
|
||||
}
|
||||
?>
|
||||
@@ -163,13 +165,13 @@ tbody tr td:first-child input {display: none;}
|
||||
</form>
|
||||
</div>
|
||||
<div class='tab-pane <?php if($type == 'bug') echo 'active'?>' id='bugs'>
|
||||
<?php if($canBeChanged and common::hasPriv('build', 'linkBug') and !isonlybody()):?>
|
||||
<?php if($canBeChanged and common::hasPriv($module, 'linkBug') and !isonlybody()):?>
|
||||
<div class='actions'><?php echo html::a("javascript:showLink($build->id, \"bug\")", '<i class="icon-bug"></i> ' . $lang->build->linkBug, '', "class='btn btn-primary'");?></div>
|
||||
<div class='linkBox cell hidden'></div>
|
||||
<?php endif;?>
|
||||
<form class='main-table table-bug' data-ride='table' method='post' target='hiddenwin' action="<?php echo inLink('batchUnlinkBug', "build=$build->id");?>" id='linkedBugsForm'>
|
||||
<form class='main-table table-bug' data-ride='table' method='post' target='hiddenwin' action="<?php echo $this->createLink($module, 'batchUnlinkBug', "build=$build->id");?>" id='linkedBugsForm'>
|
||||
<table class='table has-sort-head' id='bugList'>
|
||||
<?php $canBatchUnlink = $canBeChanged and common::hasPriv('build', 'batchUnlinkBug');?>
|
||||
<?php $canBatchUnlink = $canBeChanged and common::hasPriv($module, 'batchUnlinkBug');?>
|
||||
<?php $vars = "buildID={$build->id}&type=bug&link=$link¶m=$param&orderBy=%s";?>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
@@ -214,9 +216,9 @@ tbody tr td:first-child input {display: none;}
|
||||
<td><?php echo helper::isZeroDate($bug->resolvedDate) ? '' : substr($bug->resolvedDate, 5, 11);?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if($canBeChanged and common::hasPriv('build', 'unlinkBug'))
|
||||
if($canBeChanged and common::hasPriv($module, 'unlinkBug'))
|
||||
{
|
||||
$unlinkURL = inlink('unlinkBug', "buildID=$build->id&bug=$bug->id");
|
||||
$unlinkURL = $this->createLink($module, 'unlinkBug', "buildID=$build->id&bug=$bug->id");
|
||||
echo html::a("###", '<i class="icon-unlink"></i>', '', "onclick='ajaxDelete(\"$unlinkURL\", \"bugList\", confirmUnlinkBug)' class='btn' title='{$lang->build->unlinkBug}'");
|
||||
}
|
||||
?>
|
||||
@@ -369,6 +371,7 @@ tbody tr td:first-child input {display: none;}
|
||||
</div>
|
||||
<?php js::set('param', helper::safe64Decode($param))?>
|
||||
<?php js::set('link', $link)?>
|
||||
<?php js::set('currentModule', $module)?>
|
||||
<?php js::set('buildID', $build->id)?>
|
||||
<?php js::set('type', $type)?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -212,7 +212,7 @@ $lang->scrum->menu->projectplan = array('link' => "{$lang->productplan->shortCom
|
||||
$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=project&objectID=%s", 'subModule' => 'doc');
|
||||
$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit');
|
||||
$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo');
|
||||
$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s");
|
||||
$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s", 'subModule' => 'projectbuild');
|
||||
$lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease');
|
||||
$lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s");
|
||||
$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'tree,stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team,managerepo');
|
||||
|
||||
@@ -237,6 +237,9 @@ $lang->project->methodOrder[190] = 'manageRepo';
|
||||
|
||||
$lang->resource->projectbuild = new stdclass();
|
||||
$lang->resource->projectbuild->browse = 'browse';
|
||||
$lang->resource->projectbuild->create = 'create';
|
||||
$lang->resource->projectbuild->edit = 'edit';
|
||||
$lang->resource->projectbuild->delete = 'delete';
|
||||
|
||||
$lang->projectbuild->methodOrder[5] = 'browse';
|
||||
|
||||
@@ -953,15 +956,17 @@ $lang->resource->build->unlinkBug = 'unlinkBug';
|
||||
$lang->resource->build->batchUnlinkBug = 'batchUnlinkBug';
|
||||
|
||||
$lang->build->methodOrder[5] = 'create';
|
||||
$lang->build->methodOrder[10] = 'edit';
|
||||
$lang->build->methodOrder[15] = 'delete';
|
||||
$lang->build->methodOrder[20] = 'view';
|
||||
$lang->build->methodOrder[25] = 'linkStory';
|
||||
$lang->build->methodOrder[30] = 'unlinkStory';
|
||||
$lang->build->methodOrder[35] = 'batchUnlinkStory';
|
||||
$lang->build->methodOrder[40] = 'linkBug';
|
||||
$lang->build->methodOrder[45] = 'unlinkBug';
|
||||
$lang->build->methodOrder[50] = 'batchUnlinkBug';
|
||||
$lang->build->methodOrder[10] = 'createProjectBuild';
|
||||
$lang->build->methodOrder[15] = 'edit';
|
||||
$lang->build->methodOrder[20] = 'editProjectBuild';
|
||||
$lang->build->methodOrder[25] = 'delete';
|
||||
$lang->build->methodOrder[30] = 'view';
|
||||
$lang->build->methodOrder[35] = 'linkStory';
|
||||
$lang->build->methodOrder[40] = 'unlinkStory';
|
||||
$lang->build->methodOrder[45] = 'batchUnlinkStory';
|
||||
$lang->build->methodOrder[50] = 'linkBug';
|
||||
$lang->build->methodOrder[55] = 'unlinkBug';
|
||||
$lang->build->methodOrder[60] = 'batchUnlinkBug';
|
||||
|
||||
/* QA. */
|
||||
$lang->resource->qa = new stdclass();
|
||||
|
||||
@@ -882,27 +882,6 @@ class product extends control
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajax get products.
|
||||
*
|
||||
* @param int $executionID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxGetProducts($executionID)
|
||||
{
|
||||
$this->loadModel('build');
|
||||
$products = $this->product->getProductPairsByProject($executionID);
|
||||
if(empty($products))
|
||||
{
|
||||
return printf($this->lang->build->noProduct, $this->createLink('execution', 'manageproducts', "executionID=$executionID&from=buildCreate", '', 'true'), 'project');
|
||||
}
|
||||
else
|
||||
{
|
||||
return print(html::select('product', $products, empty($product) ? '' : $product->id, "onchange='loadBranches(this.value);' class='form-control chosen' required data-toggle='modal' data-type='iframe'"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX: get projects of a product in html select.
|
||||
*
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> <?php echo $lang->execution->byQuery;?></a>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if(common::canModify('project', $project)) common::printLink('build', 'create', "executionID=&productID=&projectID=$projectID", "<i class='icon icon-plus'></i> " . $lang->build->create, '', "class='btn btn-primary' id='createBuild'");?>
|
||||
<?php if(common::canModify('project', $project)) common::printLink('projectbuild', 'create', "projectID=$projectID", "<i class='icon icon-plus'></i> " . $lang->build->create, '', "class='btn btn-primary' id='createBuild'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
@@ -67,11 +67,12 @@
|
||||
<tbody>
|
||||
<?php foreach($projectBuilds as $productID => $builds):?>
|
||||
<?php foreach($builds as $index => $build):?>
|
||||
<?php $module = $build->execution ? 'build' : 'projectbuild';?>
|
||||
<tr data-id="<?php echo $productID;?>">
|
||||
<td class="c-id-sm text-muted"><?php echo html::a(helper::createLink('build', 'view', "buildID=$build->id"), sprintf('%03d', $build->id), '', "data-app='project'");?></td>
|
||||
<td class="c-id-sm text-muted"><?php echo html::a(helper::createLink($module, 'view', "buildID=$build->id"), sprintf('%03d', $build->id), '', "data-app='project'");?></td>
|
||||
<td class="c-name" title='<?php echo $build->name;?>'>
|
||||
<?php if($build->branchName) echo "<span class='label label-outline label-badge'>{$build->branchName}</span>"?>
|
||||
<?php echo html::a($this->createLink('build', 'view', "build=$build->id"), $build->name, '', "data-app='project'");?>
|
||||
<?php echo html::a($this->createLink($module, 'view', "buildID=$build->id"), $build->name, '', "data-app='project'");?>
|
||||
</td>
|
||||
<?php if($project->hasProduct):?>
|
||||
<td class="c-name text-left" title='<?php echo $build->productName;?>'><?php echo $build->productName;?></td>
|
||||
|
||||
@@ -76,4 +76,144 @@ class projectBuild extends control
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a build for project.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function create($projectID = 0)
|
||||
{
|
||||
echo $this->fetch('build', 'create', "executionID=0&productID=0&projectID=$projectID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit a build for project.
|
||||
*
|
||||
* @param int $buildID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function edit($buildID)
|
||||
{
|
||||
echo $this->fetch('build', 'edit', "buildID=$buildID");
|
||||
}
|
||||
|
||||
/**
|
||||
* View a build for project.
|
||||
*
|
||||
* @param int $buildID
|
||||
* @param string $type
|
||||
* @param string $link
|
||||
* @param string $param
|
||||
* @param string $orderBy
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function view($buildID, $type = 'story', $link = 'false', $param = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 100, $pageID = 1)
|
||||
{
|
||||
echo $this->fetch('build', 'view', "buildID=$buildID&type=$type&link=$link¶m=$param&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a build for project.
|
||||
*
|
||||
* @param int $buildID
|
||||
* @param string $confirm yes|noe
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function delete($buildID, $confirm = 'no')
|
||||
{
|
||||
echo $this->fetch('build', 'delete', "buildID=$buildID&confirm=$confirm");
|
||||
}
|
||||
|
||||
/**
|
||||
* Link stories.
|
||||
*
|
||||
* @param int $buildID
|
||||
* @param string $browseType
|
||||
* @param int $param
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function linkStory($buildID = 0, $browseType = '', $param = 0, $recTotal = 0, $recPerPage = 100, $pageID = 1)
|
||||
{
|
||||
echo $this->fetch('build', 'linkStory', "buildID=$buildID&browseType=$browseType¶m=$param&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlink story
|
||||
*
|
||||
* @param int $storyID
|
||||
* @param string $confirm yes|no
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function unlinkStory($buildID, $storyID)
|
||||
{
|
||||
echo $this->fetch('build', 'unlinkStory', "buildID=$buildID&storyID=$storyID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch unlink story.
|
||||
*
|
||||
* @param string $confirm
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function batchUnlinkStory($buildID)
|
||||
{
|
||||
echo $this->fetch('build', 'batchUnlinkStory', "buildID=$buildID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Link bugs.
|
||||
*
|
||||
* @param int $buildID
|
||||
* @param string $browseType
|
||||
* @param int $param
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function linkBug($buildID = 0, $browseType = '', $param = 0, $recTotal = 0, $recPerPage = 100, $pageID = 1)
|
||||
{
|
||||
echo $this->fetch('build', 'linkBug', "buildID=$buildID&browseType=$browseType¶m=$param&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlink story
|
||||
*
|
||||
* @param int $buildID
|
||||
* @param int $bugID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function unlinkBug($buildID, $bugID)
|
||||
{
|
||||
echo $this->fetch('build', 'unlinkBug', "buildID=$buildID&bugID=$bugID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch unlink story.
|
||||
*
|
||||
* @param int $buildID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function batchUnlinkBug($buildID)
|
||||
{
|
||||
echo $this->fetch('build', 'batchUnlinkBug', "buildID=$buildID");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,5 +9,16 @@
|
||||
* @version $Id: zh-cn.php 4129 2020-11-27 01:58:14Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->create = "Create Build";
|
||||
$lang->projectbuild->edit = "Edit Build";
|
||||
$lang->projectbuild->delete = "Delete Build";
|
||||
$lang->projectbuild->view = "Build Detail";
|
||||
$lang->projectbuild->linkStory = "Link {$lang->SRCommon}";
|
||||
$lang->projectbuild->linkBug = "Link Bug";
|
||||
$lang->projectbuild->unlinkStory = "Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->unlinkBug = "Unlink Bug";
|
||||
$lang->projectbuild->batchUnlink = 'Batch Unlink';
|
||||
$lang->projectbuild->batchUnlinkStory = "Batch Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->batchUnlinkBug = 'Batch Unlink Bug';
|
||||
|
||||
@@ -9,5 +9,16 @@
|
||||
* @version $Id: zh-cn.php 4129 2020-11-27 01:58:14Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->create = "Create Build";
|
||||
$lang->projectbuild->edit = "Edit Build";
|
||||
$lang->projectbuild->delete = "Delete Build";
|
||||
$lang->projectbuild->view = "Build Detail";
|
||||
$lang->projectbuild->linkStory = "Link {$lang->SRCommon}";
|
||||
$lang->projectbuild->linkBug = "Link Bug";
|
||||
$lang->projectbuild->unlinkStory = "Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->unlinkBug = "Unlink Bug";
|
||||
$lang->projectbuild->batchUnlink = 'Batch Unlink';
|
||||
$lang->projectbuild->batchUnlinkStory = "Batch Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->batchUnlinkBug = 'Batch Unlink Bug';
|
||||
|
||||
@@ -9,5 +9,16 @@
|
||||
* @version $Id: zh-cn.php 4129 2020-11-27 01:58:14Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->create = "Create Build";
|
||||
$lang->projectbuild->edit = "Edit Build";
|
||||
$lang->projectbuild->delete = "Delete Build";
|
||||
$lang->projectbuild->view = "Build Detail";
|
||||
$lang->projectbuild->linkStory = "Link {$lang->SRCommon}";
|
||||
$lang->projectbuild->linkBug = "Link Bug";
|
||||
$lang->projectbuild->unlinkStory = "Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->unlinkBug = "Unlink Bug";
|
||||
$lang->projectbuild->batchUnlink = 'Batch Unlink';
|
||||
$lang->projectbuild->batchUnlinkStory = "Batch Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->batchUnlinkBug = 'Batch Unlink Bug';
|
||||
|
||||
@@ -9,5 +9,16 @@
|
||||
* @version $Id: zh-cn.php 4129 2020-11-27 01:58:14Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->common = 'Project Build';
|
||||
$lang->projectbuild->browse = 'Build List';
|
||||
$lang->projectbuild->create = "Create Build";
|
||||
$lang->projectbuild->edit = "Edit Build";
|
||||
$lang->projectbuild->delete = "Delete Build";
|
||||
$lang->projectbuild->view = "Build Detail";
|
||||
$lang->projectbuild->linkStory = "Link {$lang->SRCommon}";
|
||||
$lang->projectbuild->linkBug = "Link Bug";
|
||||
$lang->projectbuild->unlinkStory = "Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->unlinkBug = "Unlink Bug";
|
||||
$lang->projectbuild->batchUnlink = 'Batch Unlink';
|
||||
$lang->projectbuild->batchUnlinkStory = "Batch Unlink {$lang->SRCommon}";
|
||||
$lang->projectbuild->batchUnlinkBug = 'Batch Unlink Bug';
|
||||
|
||||
@@ -9,5 +9,16 @@
|
||||
* @version $Id: zh-cn.php 4129 2020-11-27 01:58:14Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->projectbuild->common = '项目版本';
|
||||
$lang->projectbuild->browse = '版本列表';
|
||||
$lang->projectbuild->common = '项目版本';
|
||||
$lang->projectbuild->browse = '版本列表';
|
||||
$lang->projectbuild->create = "创建项目版本";
|
||||
$lang->projectbuild->edit = "编辑项目版本";
|
||||
$lang->projectbuild->delete = "删除版本";
|
||||
$lang->projectbuild->view = "版本详情";
|
||||
$lang->projectbuild->linkStory = "关联{$lang->SRCommon}";
|
||||
$lang->projectbuild->linkBug = "关联Bug";
|
||||
$lang->projectbuild->unlinkStory = "移除{$lang->SRCommon}";
|
||||
$lang->projectbuild->unlinkBug = "移除Bug";
|
||||
$lang->projectbuild->batchUnlink = '批量移除';
|
||||
$lang->projectbuild->batchUnlinkStory = "批量移除{$lang->SRCommon}";
|
||||
$lang->projectbuild->batchUnlinkBug = '批量移除Bug';
|
||||
|
||||
Reference in New Issue
Block a user