From: lpsolit%gmail.com <> Date: Fri, 9 Sep 2005 06:50:29 +0000 (+0000) Subject: Bug 256135: Parameter 'movers' is handled differently in Bug.pm and buglist.cgi ... X-Git-Tag: bugzilla-2.18.4~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=052dc992ae7cc74370935d571a360158e483ccfb;p=thirdparty%2Fbugzilla.git Bug 256135: Parameter 'movers' is handled differently in Bug.pm and buglist.cgi - Patch by Frédéric Buclin r/a=myk --- diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index a35b23fb20..48572c7ed1 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -396,12 +396,9 @@ sub user { $self->{'user'} = {}; - my $movers = Param("movers"); - $movers =~ s/\s?,\s?/|/g; - $movers =~ s/@/\@/g; - $self->{'user'}->{'canmove'} = Param("move-enabled") - && (defined $::COOKIE{"Bugzilla_login"}) - && ($::COOKIE{"Bugzilla_login"} =~ /$movers/); + $self->{'user'}->{'canmove'} = Param('move-enabled') + && $::userid + && Bugzilla->user->is_mover; # In the below, if the person hasn't logged in ($::userid == 0), then # we treat them as if they can do anything. That's because we don't diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index 101305a81f..046efbc671 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -698,6 +698,17 @@ sub email_prefs { return $self->{email_prefs}; } +sub is_mover { + my $self = shift; + + if (!defined $self->{'is_mover'}) { + my @movers = map { trim($_) } split(',', Param('movers')); + $self->{'is_mover'} = ($self->id + && lsearch(\@movers, $self->login) != -1); + } + return $self->{'is_mover'}; +} + 1; __END__ @@ -850,6 +861,12 @@ all MySQL supported, this will go away. Returns C<1> if the user can bless at least one group. Otherwise returns C<0>. +=item C + +Returns true if the user is in the list of users allowed to move bugs +to another database. Note that this method doesn't check whether bug +moving is enabled. + =back =head1 SEE ALSO diff --git a/buglist.cgi b/buglist.cgi index e9408f23bc..7b2eed3f68 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -876,18 +876,8 @@ $vars->{'closedstates'} = ['CLOSED', 'VERIFIED', 'RESOLVED']; $vars->{'urlquerypart'} = $::buffer; $vars->{'urlquerypart'} =~ s/(order|cmdtype)=[^&]*&?//g; $vars->{'order'} = $order; - -# The user's login account name (i.e. email address). -my $login = $::COOKIE{'Bugzilla_login'}; - $vars->{'caneditbugs'} = UserInGroup('editbugs'); -# Whether or not this user is authorized to move bugs to another installation. -$vars->{'ismover'} = 1 - if Param('move-enabled') - && defined($login) - && Param('movers') =~ /^(\Q$login\E[,\s])|([,\s]\Q$login\E[,\s]+)/; - my @bugowners = keys %$bugowners; if (scalar(@bugowners) > 1 && UserInGroup('editbugs')) { my $suffix = Param('emailsuffix'); diff --git a/move.pl b/move.pl index e6d18d3c1b..5f6d7a8bca 100755 --- a/move.pl +++ b/move.pl @@ -38,15 +38,18 @@ use Bugzilla::BugMail; $::lockcount = 0; +my $cgi = Bugzilla->cgi; + unless ( Param("move-enabled") ) { + print $cgi->header(); + PutHeader("Move Bugs"); print "\n

Sorry. Bug moving is not enabled here. "; print "If you need to move a bug, contact " . Param("maintainer"); + PutFooter(); exit; } -Bugzilla->login(LOGIN_REQUIRED); - -my $cgi = Bugzilla->cgi; +my $user = Bugzilla->login(LOGIN_REQUIRED); sub Log { my ($str) = (@_); @@ -90,11 +93,7 @@ if (!defined $cgi->param('buglist')) { exit; } -my $exporter = Bugzilla->user->login; -my $movers = Param("movers"); -$movers =~ s/\s?,\s?/|/g; -$movers =~ s/@/\@/g; -unless ($exporter =~ /($movers)/) { +unless ($user->is_mover) { print $cgi->header(); PutHeader("Move Bugs"); print "

You do not have permission to move bugs

\n"; @@ -103,14 +102,15 @@ unless ($exporter =~ /($movers)/) { } my @bugs; +my $exporterid = $user->id; + +print $cgi->header(); +PutHeader("Move Bugs"); -print "

\n"; foreach my $id (split(/:/, scalar($cgi->param('buglist')))) { - my $bug = new Bugzilla::Bug($id, $::userid); + my $bug = new Bugzilla::Bug($id, $exporterid); push @bugs, $bug; if (!$bug->error) { - my $exporterid = DBNameToIdAndCheck($exporter); - my $fieldid = GetFieldID("bug_status"); my $cur_status= $bug->bug_status; SendSQL("INSERT INTO bugs_activity " . @@ -130,7 +130,7 @@ foreach my $id (split(/:/, scalar($cgi->param('buglist')))) { $comment .= $cgi->param('comment') . "\n\n"; } $comment .= "Bug moved to " . Param("move-to-url") . ".\n\n"; - $comment .= "If the move succeeded, $exporter will receive a mail\n"; + $comment .= "If the move succeeded, " . $user->login . " will receive a mail\n"; $comment .= "containing the number of the new bug in the other database.\n"; $comment .= "If all went well, please mark this bug verified, and paste\n"; $comment .= "in a link to the new bug. Otherwise, reopen this bug.\n"; @@ -138,10 +138,9 @@ foreach my $id (split(/:/, scalar($cgi->param('buglist')))) { "($id, $exporterid, now(), " . SqlQuote($comment) . ")"); print "

Bug $id moved to " . Param("move-to-url") . ".
\n"; - Bugzilla::BugMail::Send($id, { 'changer' => $exporter }); + Bugzilla::BugMail::Send($id, { 'changer' => $user->login }); } } -print "

\n"; my $buglist = $cgi->param('buglist'); $buglist =~ s/:/,/g; @@ -172,3 +171,4 @@ Bugzilla::BugMail::MessageToMTA($msg, $to); my $logstr = "XML: bugs $buglist sent to $to"; Log($logstr); +PutFooter(); diff --git a/process_bug.cgi b/process_bug.cgi index cf1046b69c..bb455ec2f6 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -569,10 +569,9 @@ my $action = ''; if (defined $::FORM{action}) { $action = trim($::FORM{action}); } -if (Param("move-enabled") && $action eq Param("move-button-text")) { +if ($action eq Param("move-button-text")) { $cgi->param('buglist', join (":", @idlist)); do "move.pl" || die "Error executing move.cgi: $!"; - PutFooter(); exit; } diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl index b2be410465..eda6d2fa18 100644 --- a/template/en/default/list/edit-multiple.html.tmpl +++ b/template/en/default/list/edit-multiple.html.tmpl @@ -321,7 +321,7 @@ -[% IF ismover %] +[% IF Param('move-enabled') && user.is_mover %] [% END %]