diff --git a/module/bug/js/batchcreate.js b/module/bug/js/batchcreate.js index 04251266ea..d4c72d14d2 100644 --- a/module/bug/js/batchcreate.js +++ b/module/bug/js/batchcreate.js @@ -25,11 +25,56 @@ function loadProjectBuilds(productID, projectID, index) $.get(link, function(builds) { - $('#buildBox' + index).html(builds); - $('#openedBuilds' + index + '_chosen').remove(); - $('#buildBox' + index + ' select').removeClass('select-3'); - $('#buildBox' + index + ' select').addClass('select-1'); - $('#buildBox' + index + ' select').attr('id', 'openedBuilds[' + index + '][]'); - $('#buildBox' + index + ' select').chosen(defaultChosenOptions); + var row = $('#buildBox' + index).parents('tbody').find('tr').size() + do + { + var selected = $('#buildBox' + index).find('select').val(); + $('#buildBox' + index).html(builds); + $('#buildBox' + index).find('select').val(selected); + $('#openedBuilds' + index + '_chosen').remove(); + $('#buildBox' + index + ' select').removeClass('select-3'); + $('#buildBox' + index + ' select').addClass('select-1'); + $('#buildBox' + index + ' select').attr('name','openedBuilds[' + index + '][]'); + $('#buildBox' + index + ' select').attr('id','openedBuilds' + index); + $('#buildBox' + index + ' select').chosen(defaultChosenOptions); + + index++; + if($('#projects' + index).val() != 'ditto') break; + }while(index < row) }); } + +$(document).on('click', '.chosen-with-drop', function() +{ + var select = $(this).prev('select'); + if($(select).val() == 'ditto') + { + var index = $(select).parents('td').index(); + var row = $(select).parents('tr').index(); + var table = $(select).parents('tr').parent(); + var value = ''; + for(i = row - 1; i >= 0; i--) + { + value = $(table).find('tr').eq(i).find('td').eq(index).find('select').val(); + if(value != 'ditto') break; + } + $(select).val(value); + $(select).trigger("chosen:updated"); + } +}) +$(document).on('mousedown', 'select', function() +{ + if($(this).val() == 'ditto') + { + var index = $(this).parents('td').index(); + var row = $(this).parents('tr').index(); + var table = $(this).parents('tr').parent(); + var value = ''; + for(i = row - 1; i >= 0; i--) + { + value = $(table).find('tr').eq(i).find('td').eq(index).find('select').val(); + if(value != 'ditto') break; + } + $(this).val(value); + } +}) diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index 73da873840..6844c4185e 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -113,6 +113,7 @@ $lang->bug->moduleBugs = 'ByModule'; $lang->bug->byQuery = 'Search'; $lang->bug->needConfirm = 'StoryChanged'; $lang->bug->allProduct = 'All products'; +$lang->bug->ditto = 'Ditto'; /* Labels. */ $lang->bug->lblProductAndModule = 'Product&Module'; diff --git a/module/bug/lang/zh-cn.php b/module/bug/lang/zh-cn.php index c1388dc27b..5de2b18a54 100644 --- a/module/bug/lang/zh-cn.php +++ b/module/bug/lang/zh-cn.php @@ -113,6 +113,7 @@ $lang->bug->moduleBugs = '按模块'; $lang->bug->byQuery = '搜索'; $lang->bug->needConfirm = '需求变动'; $lang->bug->allProduct = '所有产品'; +$lang->bug->ditto = '同上'; /* 页面标签。*/ $lang->bug->lblProductAndModule = '产品模块'; diff --git a/module/bug/model.php b/module/bug/model.php index 0921887a41..0d4c974499 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -77,7 +77,7 @@ class bugModel extends model $now = helper::now(); $actions = array(); $data = fixer::input('post')->get(); - $batchNum = count(current($data)); + $batchNum = count(reset($data)); for($i = 0; $i < $batchNum; $i++) { @@ -88,22 +88,35 @@ class bugModel extends model $stmt = $this->dbh->query($this->loadModel('tree')->buildMenuQuery($productID, 'bug', $startModuleID = 0)); $moduleOwners = array(); while($module = $stmt->fetch()) $moduleOwners[$module->id] = $module->owner; + + $module = 0; + $project = 0; + $type = ''; + $os = ''; + $browser = ''; for($i = 0; $i < $batchNum; $i++) { if(empty($data->titles[$i])) continue; + + if($data->modules[$i] != 'ditto') $module = (int)$data->modules[$i]; + if($data->projects[$i] != 'ditto') $project = (int)$data->projects[$i]; + if($data->types[$i] != 'ditto') $type = $data->types[$i]; + if($data->oses[$i] != 'ditto') $os = $data->oses[$i]; + if($data->browsers[$i] != 'ditto') $browser = $data->browsers[$i]; + $bug = new stdClass(); $bug->openedBy = $this->app->user->account; $bug->openedDate = $now; $bug->product = $productID; - $bug->module = $data->modules[$i]; - $bug->project = $data->projects[$i] ? $data->projects[$i] : 0; + $bug->module = $module; + $bug->project = $project; $bug->openedBuild = implode(',', $data->openedBuilds[$i]); $bug->title = $data->titles[$i]; $bug->steps = nl2br($data->stepses[$i]); - $bug->type = $data->types[$i]; + $bug->type = $type; $bug->severity = $data->severities[$i]; - $bug->os = $data->oses[$i]; - $bug->browser = $data->browsers[$i]; + $bug->os = $os; + $bug->browser = $browser; if(!empty($moduleOwners[$bug->module])) { @@ -111,11 +124,11 @@ class bugModel extends model $bug->assignedDate = $now; } - $this->dao->insert(TABLE_BUG)->data($bug)->autoCheck()->batchCheck($this->config->bug->create->requiredFields, 'notempty')->exec(); - $bugID = $this->dao->lastInsertID(); + $this->dao->insert(TABLE_BUG)->data($bug)->autoCheck()->batchCheck($this->config->bug->create->requiredFields, 'notempty')->exec(); + $bugID = $this->dao->lastInsertID(); - if(dao::isError()) die(js::error('bug#' . ($i+1) . dao::getError(true))); - $actions[$bugID] = $this->action->create('bug', $bugID, 'Opened'); + if(dao::isError()) die(js::error('bug#' . ($i+1) . dao::getError(true))); + $actions[$bugID] = $this->action->create('bug', $bugID, 'Opened'); } return $actions; } diff --git a/module/bug/view/batchcreate.html.php b/module/bug/view/batchcreate.html.php index 7760e7ecfa..cdde551c78 100644 --- a/module/bug/view/batchcreate.html.php +++ b/module/bug/view/batchcreate.html.php @@ -36,23 +36,41 @@