From f432cbcdea794afcaec4abac2d46daee34425980 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" Date: Sat, 6 Jan 2007 19:39:20 +0000 Subject: [PATCH] =?UTF-8?q?Bug=20365129:=20When=20moving=20a=20bug=20to=20?= =?UTF-8?q?another=20product=20and=20the=20target=20product=20has=20only?= =?UTF-8?q?=20one=20component,=20version=20or=20target=20milestone,=20auto?= =?UTF-8?q?matically=20select=20them=20instead=20of=20throwing=20an=20erro?= =?UTF-8?q?r=20-=20Patch=20by=20Fr=C3=83=C2=A9d=C3=83=C2=A9ric=20Buclin=20?= =?UTF-8?q?=20r=3Dbkor=20a=3Djustdave?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.0.0.236/trunk@217900 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/webtools/bugzilla/process_bug.cgi | 40 ++++++++++++++++------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/mozilla/webtools/bugzilla/process_bug.cgi b/mozilla/webtools/bugzilla/process_bug.cgi index 1bb9bbcb82c..6c038497369 100755 --- a/mozilla/webtools/bugzilla/process_bug.cgi +++ b/mozilla/webtools/bugzilla/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;