summaryrefslogtreecommitdiffstats
path: root/extensions/Needinfo/Extension.pm
diff options
context:
space:
mode:
authorByron Jones <glob@mozilla.com>2015-03-10 06:07:56 +0100
committerByron Jones <glob@mozilla.com>2015-03-10 06:07:56 +0100
commitef96ae157223b3309f7703798b32b0b386b2edff (patch)
treecd0f3c6f234d40998fa6e85ad32c3cac025b610a /extensions/Needinfo/Extension.pm
parent9250c96075fda4a6a11b0f09e42423c650debcec (diff)
downloadbugzilla-ef96ae157223b3309f7703798b32b0b386b2edff.tar.gz
bugzilla-ef96ae157223b3309f7703798b32b0b386b2edff.tar.xz
Bug 1003701: add the ability for users to prevent review/feedback/needinfo requests
Diffstat (limited to 'extensions/Needinfo/Extension.pm')
-rw-r--r--extensions/Needinfo/Extension.pm61
1 files changed, 61 insertions, 0 deletions
diff --git a/extensions/Needinfo/Extension.pm b/extensions/Needinfo/Extension.pm
index 26bca649e..c03c251b4 100644
--- a/extensions/Needinfo/Extension.pm
+++ b/extensions/Needinfo/Extension.pm
@@ -14,9 +14,18 @@ use Bugzilla::Error;
use Bugzilla::Flag;
use Bugzilla::FlagType;
use Bugzilla::User;
+use Bugzilla::User::Setting;
our $VERSION = '0.01';
+BEGIN {
+ *Bugzilla::User::needinfo_blocked = \&_user_needinfo_blocked;
+}
+
+sub _user_needinfo_blocked {
+ return $_[0]->settings->{block_needinfo}->{value} eq 'on';
+}
+
sub install_update_db {
my ($self, $args) = @_;
my $dbh = Bugzilla->dbh;
@@ -47,6 +56,11 @@ sub install_update_db {
});
}
+sub install_before_final_checks {
+ my ($self, $args) = @_;
+ add_setting('block_needinfo', ['on', 'off'], 'off');
+}
+
# Clear the needinfo? flag if comment is being given by
# requestee or someone used the override flag.
sub bug_start_of_update {
@@ -142,6 +156,7 @@ sub bug_start_of_update {
foreach my $requestee (keys %requestees) {
my $needinfo_flag = { type_id => $type->id, status => '?' };
if ($requestee ne 'anyone') {
+ _check_requestee($requestee);
$needinfo_flag->{requestee} = $requestee;
}
push(@new_flags, $needinfo_flag);
@@ -166,6 +181,34 @@ sub bug_start_of_update {
}
}
+sub _check_requestee {
+ my ($requestee) = @_;
+ my $user = ref($requestee)
+ ? $requestee
+ : Bugzilla::User->new({ name => $requestee, cache => 1 });
+ if ($user->needinfo_blocked) {
+ ThrowUserError('needinfo_blocked', { user => $user });
+ }
+}
+
+sub object_end_of_create {
+ my ($self, $args) = @_;
+ my $object = $args->{object};
+ return unless $object->isa('Bugzilla::Flag')
+ && $object->type->name eq 'needinfo'
+ && $object->requestee;
+ _check_requestee($object->requestee);
+}
+
+sub object_end_of_update {
+ my ($self, $args) = @_;
+ my $object = $args->{object};
+ return unless $object->isa('Bugzilla::Flag')
+ && $object->type->name eq 'needinfo'
+ && $object->requestee;
+ _check_requestee($object->requestee);
+}
+
sub object_before_delete {
my ($self, $args) = @_;
my $object = $args->{object};
@@ -183,4 +226,22 @@ sub object_before_delete {
}
}
+sub user_preferences {
+ my ($self, $args) = @_;
+ return unless
+ $args->{current_tab} eq 'account'
+ && $args->{save_changes};
+
+ my $input = Bugzilla->input_params;
+ my $dbh = Bugzilla->dbh;
+ my $settings = Bugzilla->user->settings;
+
+ $dbh->bz_start_transaction();
+ my $value = $input->{block_needinfo} ? 'on' : 'off';
+ my $setting = Bugzilla::User::Setting->new('block_needinfo');
+ $setting->validate_value($value);
+ $settings->{'block_needinfo'}->set($value);
+ $dbh->bz_commit_transaction();
+}
+
__PACKAGE__->NAME;