return $self->{'user'} if exists $self->{'user'};
return {} if $self->{'error'};
- my @movers = map { trim $_ } split(",", Param("movers"));
- my $canmove = Param("move-enabled") && Bugzilla->user->id &&
- (lsearch(\@movers, Bugzilla->user->login) != -1);
+ my $user = Bugzilla->user;
+ my $canmove = Param('move-enabled') && $user->is_mover;
# In the below, if the person hasn't logged in, then we treat them
# as if they can do anything. That's because we don't know why they
# Display everything as if they have all the permissions in the
# world; their permissions will get checked when they log in and
# actually try to make the change.
- my $unknown_privileges = !Bugzilla->user->id
- || Bugzilla->user->in_group("editbugs");
+ my $unknown_privileges = !$user->id
+ || $user->in_group("editbugs");
my $canedit = $unknown_privileges
- || Bugzilla->user->id == $self->{assigned_to_id}
+ || $user->id == $self->{assigned_to_id}
|| (Param('useqacontact')
&& $self->{'qa_contact_id'}
- && Bugzilla->user->id == $self->{qa_contact_id});
+ && $user->id == $self->{qa_contact_id});
my $canconfirm = $unknown_privileges
- || Bugzilla->user->in_group("canconfirm");
- my $isreporter = Bugzilla->user->id
- && Bugzilla->user->id == $self->{reporter_id};
+ || $user->in_group("canconfirm");
+ my $isreporter = $user->id
+ && $user->id == $self->{reporter_id};
$self->{'user'} = {canmove => $canmove,
canconfirm => $canconfirm,
return defined($wants_mail) ? 1 : 0;
}
-
+
+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'};
+}
+
sub get_userlist {
my $self = shift;
more general than C<wants_bug_mail>, allowing you to check e.g. permissions
for flag mail.
+=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 CLASS FUNCTIONS
$vars->{'urlquerypart'} = $::buffer;
$vars->{'urlquerypart'} =~ s/(order|cmdtype)=[^&]*&?//g;
$vars->{'order'} = $order;
-
-# The user's login account name (i.e. email address).
-my $login = Bugzilla->user->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');
use Bugzilla::Config qw(:DEFAULT $datadir);
use Bugzilla::BugMail;
+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);
if (!defined $cgi->param('buglist')) {
print $cgi->header();
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;
$msg .= "\n";
Bugzilla::BugMail::MessageToMTA($msg);
+PutFooter();
}
}
-my $action = '';
-if (defined $cgi->param('action')) {
- $action = trim($cgi->param('action'));
-}
-if (Param("move-enabled") && $action eq Param("move-button-text")) {
+my $action = trim($cgi->param('action') || '');
+
+if ($action eq Param('move-button-text')) {
$cgi->param('buglist', join (":", @idlist));
do "move.pl" || die "Error executing move.cgi: $!";
- PutFooter();
exit;
}
<input type="submit" value="Commit">
-[% IF ismover %]
+[% IF Param('move-enabled') && user.is_mover %]
<input type="submit" name="action" value="[% Param('move-button-text') %]">
[% END %]