summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2007-01-07 04:39:20 +0100
committerlpsolit%gmail.com <>2007-01-07 04:39:20 +0100
commit7dbcf793c07f0ad6c2e528eb63e7862d6a977ef1 (patch)
tree871e0e84af2c667b3d9596c7c89bc246b775acea
parent685d0e4e57f0bf6bef927fe3a1abb01331ca69f4 (diff)
downloadbugzilla-7dbcf793c07f0ad6c2e528eb63e7862d6a977ef1.tar.gz
bugzilla-7dbcf793c07f0ad6c2e528eb63e7862d6a977ef1.tar.xz
Bug 365129: When moving a bug to another product and the target product has only one component, version or target milestone, automatically select them instead of throwing an error - Patch by Frédéric Buclin <LpSolit@gmail.com> r=bkor a=justdave
-rwxr-xr-xprocess_bug.cgi40
1 files changed, 28 insertions, 12 deletions
diff --git a/process_bug.cgi b/process_bug.cgi
index 1bb9bbcb8..6c0384973 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -270,11 +270,6 @@ if ($cgi->cookie("BUGLIST") && defined $cgi->param('id')) {
$vars->{'bug_list'} = \@bug_list;
}
-foreach my $field_name ('product', 'component', 'version') {
- defined($cgi->param($field_name))
- || ThrowCodeError('undefined_field', { field => $field_name });
-}
-
# This function checks if there is a comment required for a specific
# function and tests, if the comment was given.
# If comments are required for functions is defined by params.
@@ -314,6 +309,10 @@ if (defined $cgi->param('id')) {
undef, $cgi->param('id'));
}
+# At this point, the product must be defined, even if set to "dontchange".
+defined($cgi->param('product'))
+ || ThrowCodeError('undefined_field', { field => 'product' });
+
if (((defined $cgi->param('id') && $cgi->param('product') ne $oldproduct)
|| (!$cgi->param('id')
&& $cgi->param('product') ne $cgi->param('dontchange')))
@@ -361,17 +360,23 @@ if (((defined $cgi->param('id') && $cgi->param('product') ne $oldproduct)
#
my @version_names = map($_->name, @{$prod_obj->versions});
my @component_names = map($_->name, @{$prod_obj->components});
- my $vok = lsearch(\@version_names, $cgi->param('version')) >= 0;
- my $cok = lsearch(\@component_names, $cgi->param('component')) >= 0;
+ my $vok = 0;
+ if (defined $cgi->param('version')) {
+ $vok = lsearch(\@version_names, $cgi->param('version')) >= 0;
+ }
+ my $cok = 0;
+ if (defined $cgi->param('component')) {
+ $cok = lsearch(\@component_names, $cgi->param('component')) >= 0;
+ }
my $mok = 1; # so it won't affect the 'if' statement if milestones aren't used
my @milestone_names = ();
if ( Bugzilla->params->{"usetargetmilestone"} ) {
- defined($cgi->param('target_milestone'))
- || ThrowCodeError('undefined_field', { field => 'target_milestone' });
-
@milestone_names = map($_->name, @{$prod_obj->milestones});
- $mok = lsearch(\@milestone_names, $cgi->param('target_milestone')) >= 0;
+ $mok = 0;
+ if (defined $cgi->param('target_milestone')) {
+ $mok = lsearch(\@milestone_names, $cgi->param('target_milestone')) >= 0;
+ }
}
# We cannot be sure if the component is the same by only checking $cok; the
@@ -413,10 +418,18 @@ if (((defined $cgi->param('id') && $cgi->param('product') ne $oldproduct)
if ($vok) {
$defaults{'version'} = $cgi->param('version');
}
+ elsif (scalar(@version_names) == 1) {
+ $defaults{'version'} = $version_names[0];
+ }
+
$vars->{'components'} = \@component_names;
if ($cok) {
$defaults{'component'} = $cgi->param('component');
}
+ elsif (scalar(@component_names) == 1) {
+ $defaults{'component'} = $component_names[0];
+ }
+
if (Bugzilla->params->{"usetargetmilestone"}) {
$vars->{'use_target_milestone'} = 1;
$vars->{'milestones'} = \@milestone_names;
@@ -426,7 +439,6 @@ if (((defined $cgi->param('id') && $cgi->param('product') ne $oldproduct)
$defaults{'target_milestone'} = $dbh->selectrow_array(
q{SELECT defaultmilestone FROM products
WHERE name = ?}, undef, $prod);
-;
}
}
else {
@@ -447,6 +459,10 @@ if (((defined $cgi->param('id') && $cgi->param('product') ne $oldproduct)
}
}
+# At this point, the component must be defined, even if set to "dontchange".
+defined($cgi->param('component'))
+ || ThrowCodeError('undefined_field', { field => 'component' });
+
# Confirm that the reporter of the current bug can access the bug we are duping to.
sub DuplicateUserConfirm {
my $cgi = Bugzilla->cgi;