$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
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__
Returns C<1> if the user can bless at least one group. Otherwise returns C<0>.
+=item C<is_mover>
+
+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
$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');
$::lockcount = 0;
+my $cgi = Bugzilla->cgi;
+
unless ( Param("move-enabled") ) {
+ print $cgi->header();
+ PutHeader("Move Bugs");
print "\n<P>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) = (@_);
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 "<P>You do not have permission to move bugs<P>\n";
}
my @bugs;
+my $exporterid = $user->id;
+
+print $cgi->header();
+PutHeader("Move Bugs");
-print "<P>\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 " .
$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";
"($id, $exporterid, now(), " . SqlQuote($comment) . ")");
print "<P>Bug $id moved to " . Param("move-to-url") . ".<BR>\n";
- Bugzilla::BugMail::Send($id, { 'changer' => $exporter });
+ Bugzilla::BugMail::Send($id, { 'changer' => $user->login });
}
}
-print "<P>\n";
my $buglist = $cgi->param('buglist');
$buglist =~ s/:/,/g;
my $logstr = "XML: bugs $buglist sent to $to";
Log($logstr);
+PutFooter();