From a69d10d9dbfe01a2c04d5f42e24a5dc1d934422b Mon Sep 17 00:00:00 2001 From: sunjun Date: Fri, 10 Jun 2022 06:36:12 +0000 Subject: [PATCH] sprint_194 add project in batchcreate view --- module/bug/config.php | 11 +++++-- module/bug/control.php | 2 ++ module/bug/css/create.css | 6 ++-- module/bug/js/batchcreate.js | 18 +++++++--- module/bug/js/common.js | 49 ++++++++++++++++++++++++++-- module/bug/model.php | 4 +++ module/bug/view/batchcreate.html.php | 15 +++++++++ module/product/control.php | 33 +++++++++++++++++++ 8 files changed, 126 insertions(+), 12 deletions(-) diff --git a/module/bug/config.php b/module/bug/config.php index 3ed3977fb8..680b102b1e 100644 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -40,12 +40,19 @@ $config->bug->list->exportFields = 'id, product, branch, module, project, execut if($config->systemMode == 'classic') $config->bug->list->exportFields = str_replace(' project,', '', $config->bug->list->exportFields); $config->bug->list->customCreateFields = 'execution,noticefeedbackBy,story,task,pri,severity,os,browser,deadline,mailto,keywords'; -$config->bug->list->customBatchCreateFields = 'execution,steps,type,pri,deadline,severity,os,browser,keywords'; $config->bug->list->customBatchEditFields = 'type,severity,pri,productplan,assignedTo,deadline,resolvedBy,resolution,os,browser,keywords'; +if($config->systemMode == 'new') +{ + $config->bug->list->customBatchCreateFields = 'project,execution,steps,type,pri,deadline,severity,os,browser,keywords'; +} +else +{ + $config->bug->list->customBatchCreateFields = 'execution,steps,type,pri,deadline,severity,os,browser,keywords'; +} $config->bug->custom = new stdclass(); $config->bug->custom->createFields = $config->bug->list->customCreateFields; -$config->bug->custom->batchCreateFields = 'execution,deadline,steps,type,severity,os,browser,%s'; +$config->bug->custom->batchCreateFields = 'project,execution,deadline,steps,type,severity,os,browser,%s'; $config->bug->custom->batchEditFields = 'type,severity,pri,assignedTo,deadline,status,resolvedBy,resolution'; $config->bug->editor = new stdclass(); diff --git a/module/bug/control.php b/module/bug/control.php index cd99ed60d7..0cf5e84a89 100755 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -822,6 +822,8 @@ class bug extends control $this->view->stories = $stories; $this->view->builds = $builds; $this->view->users = $this->user->getPairs('devfirst|noclosed'); + $this->view->projects = array('' => '') + $this->product->getProjectPairsByProduct($productID, $branch ? "0,$branch" : 0, 'id_desc', $projectID); + $this->view->projectID = $projectID; $this->view->executions = array('' => '') + $this->product->getExecutionPairsByProduct($productID, $branch ? "0,$branch" : 0, 'id_desc', $projectID); $this->view->executionID = $executionID; $this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'bug', $startModuleID = 0, $branch === 'all' ? 0 : $branch); diff --git a/module/bug/css/create.css b/module/bug/css/create.css index 1cfd6a6b57..be008fac02 100644 --- a/module/bug/css/create.css +++ b/module/bug/css/create.css @@ -47,5 +47,7 @@ html[lang='en'] #deadlineTd .input-group-addon {padding: 5px 18px;} #branch_chosen {min-width: 90px;} #notifyEmailTd .input-group-addon, #deadlineTd .input-group-addon {border-radius: 2px 0px 2px 0px !important;} -#feedback.input-group + #notifyEmailLabel {position: relative; width: 50%; left: 48%} -#executionLabel {position: relative; width: 50%; left: 48%} +#feedback.input-group + #notifyEmailLabel {position: relative; width: 50%; left: 48%;} +#executionLabel {display: inline; position: relative; width: 50%; left: 37%;} +#projectLabel {display: inline;} +#openedBuildLabel {display: inline; position: relative; width: 50%; left: 14%;} diff --git a/module/bug/js/batchcreate.js b/module/bug/js/batchcreate.js index c5cb2073a8..ca5552b022 100644 --- a/module/bug/js/batchcreate.js +++ b/module/bug/js/batchcreate.js @@ -60,17 +60,25 @@ function setLane(regionID, num) } /** - * Load execution builds + * Load execution builds. * - * @param int $productID - * @param int $executionID - * @param int $index + * @param int $productID + * @param int $executionID + * @param int $index * @access public * @return void */ function loadExecutionBuilds(productID, executionID, index) { - branch = $('#branches' + index).val(); + var branch = $('#branches' + index).val(); + if(executionID == 'ditto') + { + for(var i = index - 1; i > 0, executionID == 'ditto'; i--) + { + executionID = $('#executions' + i).val(); + } + } + if(executionID != 0) { link = createLink('build', 'ajaxGetExecutionBuilds', 'executionID=' + executionID + '&productID=' + productID + "&varName=openedBuilds&build=&branch=" + branch + "&index=" + index); diff --git a/module/bug/js/common.js b/module/bug/js/common.js index 96211eea0f..755f02ffee 100644 --- a/module/bug/js/common.js +++ b/module/bug/js/common.js @@ -339,6 +339,39 @@ function loadProductExecutions(productID, projectID = 0) projectID != 0 ? loadProjectBuilds(projectID) : loadProductBuilds(productID); } +/** + * Load executions of product and project. + * + * @param int $productID + * @param int $projectID + * @param int $num + * @access public + * @return void + */ +function loadProductExecutionsByProject(productID, projectID = 0, num = 0) +{ + var branch = $('#branches' + num).val(); + if(typeof(branch) == 'undefined') branch = 0; + + if(projectID == 'ditto') + { + for(var i = num - 1; i > 0, projectID == 'ditto'; i--) + { + projectID = $('#projects' + i).val(); + } + } + + var link = createLink('product', 'ajaxGetExecutionsByProject', 'productID=' + productID + '&projectID=' + projectID + '&branch=' + branch + '&number=' + num); + $.get(link, function(executions) + { + if(!executions) executions = ''; + $('#executions' + num).replaceWith(executions); + $("#executions" + num + "_chosen").remove(); + $("#executions" + num).next('.picker').remove(); + $("#executions" + num).chosen(); + }); +} + /** * Load product plans. * @@ -761,7 +794,7 @@ function notice() function setBranchRelated(branchID, productID, num) { var currentModuleID = config.currentMethod == 'batchedit' ? $('#modules' + num).val() : 0; - moduleLink = createLink('tree', 'ajaxGetModules', 'productID=' + productID + '&viewType=bug&branch=' + branchID + '&num=' + num + '¤tModuleID=' + currentModuleID); + var moduleLink = createLink('tree', 'ajaxGetModules', 'productID=' + productID + '&viewType=bug&branch=' + branchID + '&num=' + num + '¤tModuleID=' + currentModuleID); $.get(moduleLink, function(modules) { if(!modules) modules = ''; @@ -771,7 +804,17 @@ function setBranchRelated(branchID, productID, num) $("#modules" + num).chosen(); }); - executionLink = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=0&branch=' + branchID + '&num=' + num); + var projectLink = createLink('product', 'ajaxGetProjectsByBranch', 'productID=' + productID + '&branch=' + branchID + '&num=' + num); + $.get(projectLink, function(projects) + { + if(!projects) projects = ''; + $('#projects' + num).replaceWith(projects); + $("#projects" + num + "_chosen").remove(); + $("#projects" + num).next('.picker').remove(); + $("#projects" + num).chosen(); + }); + + var executionLink = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=0&branch=' + branchID + '&num=' + num); $.get(executionLink, function(executions) { if(!executions) executions = ''; @@ -781,7 +824,7 @@ function setBranchRelated(branchID, productID, num) $("#executions" + num).chosen(); }); - buildLink = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + "&varName=openedBuilds&build=&branch=" + branchID + "&index=" + num); + var buildLink = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + "&varName=openedBuilds&build=&branch=" + branchID + "&index=" + num); /* If the branch of the current row is inconsistent with the one below, clear the module and execution of the nex row. */ if(config.currentMethod == 'batchcreate') diff --git a/module/bug/model.php b/module/bug/model.php index 5e4d93c7cc..ba87ebef4e 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -159,6 +159,7 @@ class bugModel extends model while($module = $stmt->fetch()) $moduleOwners[$module->id] = $module->owner; $module = 0; + $project = 0; $execution = 0; $type = ''; $pri = 0; @@ -167,6 +168,7 @@ class bugModel extends model foreach($data->title as $i => $title) { if($data->modules[$i] != 'ditto') $module = (int)$data->modules[$i]; + if($data->projects[$i] != 'ditto') $project = (int)$data->projects[$i]; if($data->executions[$i] != 'ditto') $execution = (int)$data->executions[$i]; if($data->types[$i] != 'ditto') $type = $data->types[$i]; if($data->pris[$i] != 'ditto') $pri = $data->pris[$i]; @@ -174,6 +176,7 @@ class bugModel extends model if($data->browsers[$i] != 'ditto') $browser = $data->browsers[$i]; $data->modules[$i] = (int)$module; + $data->projects[$i] = (int)$project; $data->executions[$i] = (int)$execution; $data->types[$i] = $type; $data->pris[$i] = $pri; @@ -196,6 +199,7 @@ class bugModel extends model $bug->product = (int)$productID; $bug->branch = isset($data->branches) ? (int)$data->branches[$i] : 0; $bug->module = (int)$data->modules[$i]; + $bug->project = (int)$data->projects[$i]; $bug->execution = (int)$data->executions[$i]; $bug->openedBuild = implode(',', $data->openedBuilds[$i]); $bug->color = $data->color[$i]; diff --git a/module/bug/view/batchcreate.html.php b/module/bug/view/batchcreate.html.php index c8972d9c1b..91c02ab591 100755 --- a/module/bug/view/batchcreate.html.php +++ b/module/bug/view/batchcreate.html.php @@ -55,6 +55,9 @@ js::set('requiredFields', $config->bug->create->requiredFields); idAB;?> '> product->branch;?> '> bug->module;?> + systemMode == 'new'):?> + '>model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->project;?> + '>model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->execution;?> bug->openedBuild;?> bug->title;?> @@ -83,6 +86,7 @@ js::set('requiredFields', $config->bug->create->requiredFields); $lang->bug->ditto); + $projects += array('ditto' => $lang->bug->ditto); $executions += array('ditto' => $lang->bug->ditto); $lang->bug->typeList += array('ditto' => $lang->bug->ditto); $lang->bug->priList += array('ditto' => $lang->bug->ditto); @@ -94,6 +98,7 @@ js::set('requiredFields', $config->bug->create->requiredFields); $fileName):?> bug->create->requiredFields); ' style='overflow:visible'> + systemMode == 'new'):?> + ' style='overflow:visible'> + ' style='overflow:visible'> @@ -144,6 +152,7 @@ js::set('requiredFields', $config->bug->create->requiredFields); bug->batchCreate; $i++):?> bug->create->requiredFields); ' style='overflow:visible'> + systemMode == 'new'):?> + ' style='overflow:visible'> + ' style='overflow:visible'> @@ -207,6 +219,9 @@ js::set('requiredFields', $config->bug->create->requiredFields); %s ' style='overflow:visible'> + systemMode == 'new'):?> + ' style='overflow:visible'> + ' style='overflow:visible'> diff --git a/module/product/control.php b/module/product/control.php index 2d3a6291a9..7557e4e480 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -963,6 +963,23 @@ class product extends control return print(html::select('project', $projects, $projectID, "class='form-control' onchange='loadProductExecutions({$productID}, this.value)'")); } + /** + * AJAX: get projects of a product in html select. + * + * @param int $productID + * @param int $branch + * @param int $number + * @access public + * @return void + */ + public function ajaxGetProjectsByBranch($productID, $branch = 0, $number = 0) + { + $projects = array('' => ''); + $projects += $this->product->getProjectPairsByProduct($productID, $branch); + + return print(html::select('projects' . "[$number]", array('' => '') + $projects, 0, "class='form-control' onchange='loadProductExecutionsByProject($productID, this.value, $number)'")); + } + /** * AJAX: get executions of a product in html select. * @@ -999,6 +1016,22 @@ class product extends control } } + /** + * AJAX: get executions of a product in html select. + * + * @param int $productID + * @param int $projectID + * @param int $branch + * @param int $number + * @access public + * @return void + */ + public function ajaxGetExecutionsByProject($productID, $projectID = 0, $branch = 0, $number = 0) + { + $executions = $this->product->getExecutionPairsByProduct($productID, $branch, 'id_desc', $projectID, ''); + return print(html::select('executions' . "[$number]", array('' => '') + $executions, 0, "class='form-control' onchange='loadExecutionBuilds($productID, this.value, $number)'")); + } + /** * AJAX: get plans of a product in html select. *