Bug 1102899 - Remove OldBugMove extension. a=glob.
git-svn-id: svn://10.0.0.236/trunk@265762 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
aa9d61173f
commit
6c58dd3801
@ -1 +1 @@
|
||||
9287
|
||||
9288
|
||||
@ -1 +1 @@
|
||||
47342f0e1e8d22355994f7a122003d1cd702bb38
|
||||
a427d03fe6422cbef889c4e4f48a5a611e1d3aac
|
||||
@ -1,15 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
|
||||
package Bugzilla::Extension::OldBugMove;
|
||||
|
||||
use 5.10.1;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use constant NAME => 'OldBugMove';
|
||||
__PACKAGE__->NAME;
|
||||
@ -1,200 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
|
||||
package Bugzilla::Extension::OldBugMove;
|
||||
|
||||
use 5.10.1;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use parent qw(Bugzilla::Extension);
|
||||
use Bugzilla::Constants;
|
||||
use Bugzilla::Error;
|
||||
use Bugzilla::Field::Choice;
|
||||
use Bugzilla::Mailer;
|
||||
use Bugzilla::User;
|
||||
use Bugzilla::Util qw(trim);
|
||||
|
||||
use Scalar::Util qw(blessed);
|
||||
use Storable qw(dclone);
|
||||
|
||||
use constant VERSION => BUGZILLA_VERSION;
|
||||
|
||||
# This is 4 because that's what it originally was when this code was
|
||||
# a part of Bugzilla.
|
||||
use constant CMT_MOVED_TO => 4;
|
||||
|
||||
sub install_update_db {
|
||||
my $reso_type = Bugzilla::Field::Choice->type('resolution');
|
||||
my $moved_reso = $reso_type->new({ name => 'MOVED' });
|
||||
# We make the MOVED resolution inactive, so that it doesn't show up
|
||||
# as a valid drop-down option.
|
||||
if ($moved_reso) {
|
||||
$moved_reso->set_is_active(0);
|
||||
$moved_reso->update();
|
||||
}
|
||||
else {
|
||||
print "Creating the MOVED resolution...\n";
|
||||
$reso_type->create(
|
||||
{ value => 'MOVED', sortkey => '30000', isactive => 0 });
|
||||
}
|
||||
}
|
||||
|
||||
sub config_add_panels {
|
||||
my ($self, $args) = @_;
|
||||
my $modules = $args->{'panel_modules'};
|
||||
$modules->{'OldBugMove'} = 'Bugzilla::Extension::OldBugMove::Params';
|
||||
}
|
||||
|
||||
sub template_before_create {
|
||||
my ($self, $args) = @_;
|
||||
my $config = $args->{config};
|
||||
|
||||
my $constants = $config->{CONSTANTS};
|
||||
$constants->{CMT_MOVED_TO} = CMT_MOVED_TO;
|
||||
|
||||
my $vars = $config->{VARIABLES};
|
||||
$vars->{oldbugmove_user_is_mover} = \&_user_is_mover;
|
||||
}
|
||||
|
||||
sub object_before_delete {
|
||||
my ($self, $args) = @_;
|
||||
my $object = $args->{'object'};
|
||||
if ($object->isa('Bugzilla::Field::Choice::resolution')) {
|
||||
if ($object->name eq 'MOVED') {
|
||||
ThrowUserError('oldbugmove_no_delete_moved');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub object_before_set {
|
||||
my ($self, $args) = @_;
|
||||
my ($object, $field) = @$args{qw(object field)};
|
||||
if ($field eq 'resolution' and $object->isa('Bugzilla::Bug')) {
|
||||
# Store the old value so that end_of_set can check it.
|
||||
$object->{'_oldbugmove_old_resolution'} = $object->resolution;
|
||||
}
|
||||
}
|
||||
|
||||
sub object_end_of_set {
|
||||
my ($self, $args) = @_;
|
||||
my ($object, $field) = @$args{qw(object field)};
|
||||
if ($field eq 'resolution' and $object->isa('Bugzilla::Bug')) {
|
||||
my $old_value = delete $object->{'_oldbugmove_old_resolution'};
|
||||
return if $old_value eq $object->resolution;
|
||||
if ($object->resolution eq 'MOVED') {
|
||||
$object->add_comment('', { type => CMT_MOVED_TO,
|
||||
extra_data => Bugzilla->user->login });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub object_end_of_set_all {
|
||||
my ($self, $args) = @_;
|
||||
my $object = $args->{'object'};
|
||||
|
||||
if ($object->isa('Bugzilla::Bug') and Bugzilla->input_params->{'oldbugmove'}) {
|
||||
my $new_status = Bugzilla->params->{'duplicate_or_move_bug_status'};
|
||||
$object->set_bug_status($new_status, { resolution => 'MOVED' });
|
||||
}
|
||||
}
|
||||
|
||||
sub object_validators {
|
||||
my ($self, $args) = @_;
|
||||
my ($class, $validators) = @$args{qw(class validators)};
|
||||
if ($class->isa('Bugzilla::Comment')) {
|
||||
my $extra_data_validator = $validators->{extra_data};
|
||||
$validators->{extra_data} =
|
||||
sub { _check_comment_extra_data($extra_data_validator, @_) };
|
||||
}
|
||||
elsif ($class->isa('Bugzilla::Bug')) {
|
||||
my $reso_validator = $validators->{resolution};
|
||||
$validators->{resolution} =
|
||||
sub { _check_bug_resolution($reso_validator, @_) };
|
||||
}
|
||||
}
|
||||
|
||||
sub _check_bug_resolution {
|
||||
my $original_validator = shift;
|
||||
my ($invocant, $resolution) = @_;
|
||||
|
||||
if ($resolution eq 'MOVED' && $invocant->resolution ne 'MOVED'
|
||||
&& !Bugzilla->input_params->{'oldbugmove'})
|
||||
{
|
||||
# MOVED has a special meaning and can only be used when
|
||||
# really moving bugs to another installation.
|
||||
ThrowUserError('oldbugmove_no_manual_move');
|
||||
}
|
||||
|
||||
return $original_validator->(@_);
|
||||
}
|
||||
|
||||
sub _check_comment_extra_data {
|
||||
my $original_validator = shift;
|
||||
my ($invocant, $extra_data, undef, $params) = @_;
|
||||
my $type = blessed($invocant) ? $invocant->type : $params->{type};
|
||||
|
||||
if ($type == CMT_MOVED_TO) {
|
||||
return Bugzilla::User->check($extra_data)->login;
|
||||
}
|
||||
return $original_validator->(@_);
|
||||
}
|
||||
|
||||
sub bug_end_of_update {
|
||||
my ($self, $args) = @_;
|
||||
my ($bug, $old_bug, $changes) = @$args{qw(bug old_bug changes)};
|
||||
if (defined $changes->{'resolution'}
|
||||
and $changes->{'resolution'}->[1] eq 'MOVED')
|
||||
{
|
||||
$self->_move_bug($bug, $old_bug);
|
||||
}
|
||||
}
|
||||
|
||||
sub _move_bug {
|
||||
my ($self, $bug, $old_bug) = @_;
|
||||
|
||||
my $dbh = Bugzilla->dbh;
|
||||
my $template = Bugzilla->template;
|
||||
|
||||
_user_is_mover(Bugzilla->user)
|
||||
or ThrowUserError("auth_failure", { action => 'move',
|
||||
object => 'bugs' });
|
||||
|
||||
# Don't export the new status and resolution. We want the current
|
||||
# ones.
|
||||
local $Storable::forgive_me = 1;
|
||||
my $export_me = dclone($bug);
|
||||
$export_me->{bug_status} = $old_bug->bug_status;
|
||||
delete $export_me->{status};
|
||||
$export_me->{resolution} = $old_bug->resolution;
|
||||
|
||||
# Prepare and send all data about these bugs to the new database
|
||||
my $to = Bugzilla->params->{'move-to-address'};
|
||||
$to =~ s/@/\@/;
|
||||
my $from = Bugzilla->params->{'mailfrom'};
|
||||
$from =~ s/@/\@/;
|
||||
my $msg = "To: $to\n";
|
||||
$msg .= "From: Bugzilla <" . $from . ">\n";
|
||||
$msg .= "Subject: Moving bug " . $bug->id . "\n\n";
|
||||
my @fieldlist = (Bugzilla::Bug->fields, 'group', 'long_desc',
|
||||
'attachment', 'attachmentdata');
|
||||
my %displayfields = map { $_ => 1 } @fieldlist;
|
||||
my $vars = { bugs => [$export_me], displayfields => \%displayfields };
|
||||
$template->process("bug/show.xml.tmpl", $vars, \$msg)
|
||||
|| ThrowTemplateError($template->error());
|
||||
$msg .= "\n";
|
||||
MessageToMTA($msg);
|
||||
}
|
||||
|
||||
sub _user_is_mover {
|
||||
my $user = shift;
|
||||
|
||||
my @movers = map { trim($_) } split(',', Bugzilla->params->{'movers'});
|
||||
return ($user->id and grep($_ eq $user->login, @movers)) ? 1 : 0;
|
||||
}
|
||||
|
||||
__PACKAGE__->NAME;
|
||||
@ -1,38 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
|
||||
package Bugzilla::Extension::OldBugMove::Params;
|
||||
|
||||
use 5.10.1;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Bugzilla::Config::Common;
|
||||
|
||||
our $sortkey = 700;
|
||||
|
||||
use constant get_param_list => (
|
||||
{
|
||||
name => 'move-to-url',
|
||||
type => 't',
|
||||
default => ''
|
||||
},
|
||||
|
||||
{
|
||||
name => 'move-to-address',
|
||||
type => 't',
|
||||
default => 'bugzilla-import'
|
||||
},
|
||||
|
||||
{
|
||||
name => 'movers',
|
||||
type => 't',
|
||||
default => ''
|
||||
},
|
||||
);
|
||||
|
||||
1;
|
||||
@ -1,27 +0,0 @@
|
||||
[%# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
#%]
|
||||
[%
|
||||
title = "$terms.Bug Moving"
|
||||
desc = "Set up parameters to move $terms.bugs to/from another installation"
|
||||
%]
|
||||
|
||||
[% param_descs = {
|
||||
|
||||
"move-to-url" =>
|
||||
"The URL of the database we allow some of our $terms.bugs to"
|
||||
_ " be moved to.",
|
||||
|
||||
"move-to-address" =>
|
||||
"To move ${terms.bugs}, an email is sent to the target database."
|
||||
_ " This is the email address that that database uses to listen"
|
||||
_ " for incoming ${terms.bugs}.",
|
||||
|
||||
movers =>
|
||||
"A list of people with permission to move $terms.bugs ",
|
||||
|
||||
} %]
|
||||
@ -1,15 +0,0 @@
|
||||
[%# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
#%]
|
||||
|
||||
[% IF oldbugmove_user_is_mover(user) AND bug.resolution != 'MOVED' %]
|
||||
<p>
|
||||
<input type="submit" id="oldbugmove" name="oldbugmove"
|
||||
value="Move [% terms.Bug FILTER html %] to
|
||||
[%= Param('move-to-url') FILTER html %]">
|
||||
</p>
|
||||
[% END %]
|
||||
@ -1,17 +0,0 @@
|
||||
[%# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
#%]
|
||||
|
||||
[% IF comment.type == constants.CMT_MOVED_TO %]
|
||||
[% comment.body %]
|
||||
|
||||
[%+ terms.Bug %] moved to [% Param("move-to-url") %].
|
||||
If the move succeeded, [% comment.extra_data FILTER email %] will receive a mail
|
||||
containing the number of the new [% terms.bug %] in the other database.
|
||||
If all went well, please paste in a link to the new [% terms.bug %].
|
||||
Otherwise, reopen this [% terms.bug %].
|
||||
[% END %]
|
||||
@ -1,11 +0,0 @@
|
||||
[%# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
#%]
|
||||
|
||||
[% IF action == "move" %]
|
||||
move
|
||||
[% END %]
|
||||
@ -1,17 +0,0 @@
|
||||
[%# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
#%]
|
||||
|
||||
[% IF error == "oldbugmove_no_delete_moved" %]
|
||||
As long as the OldBugMove extension is active, you cannot
|
||||
delete the [%+ display_value("resolution", "MOVED") FILTER html %]
|
||||
resolution.
|
||||
[% ELSIF error == "oldbugmove_no_manual_move" %]
|
||||
You cannot set the resolution of [% terms.abug %] to
|
||||
[%+ display_value("resolution", "MOVED") FILTER html %] without
|
||||
moving the [% terms.bug %].
|
||||
[% END %]
|
||||
@ -1,15 +0,0 @@
|
||||
[%# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
# defined by the Mozilla Public License, v. 2.0.
|
||||
#%]
|
||||
|
||||
[% IF oldbugmove_user_is_mover(user) %]
|
||||
<p>
|
||||
<input type="submit" id="oldbugmove" name="oldbugmove"
|
||||
value="Move [% terms.Bugs FILTER html %] to
|
||||
[%= Param('move-to-url') FILTER html %]">
|
||||
</p>
|
||||
[% END %]
|
||||
Loading…
x
Reference in New Issue
Block a user