diff options
author | Sam James <sam@gentoo.org> | 2024-08-25 15:20:20 +0100 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2024-08-25 15:20:20 +0100 |
commit | 75a9a831fc56e12e694dcae29a744ed16eaf90a3 (patch) | |
tree | 3f3269a36e52a7cb868cbcddd0886a56ab954606 | |
parent | resolutions: Add a note on readding packages (diff) | |
download | bugzilla-gentoo-5.0.6.27.tar.gz bugzilla-gentoo-5.0.6.27.tar.bz2 bugzilla-gentoo-5.0.6.27.zip |
extensions: import RestrictComments from bmogentoo-5.0.6.27
Cherry-picked from 0ba9c1f12813a685dff8e15c5c68893668ceb4cb in bmo.git.
6 files changed, 288 insertions, 0 deletions
diff --git a/extensions/RestrictComments/Config.pm b/extensions/RestrictComments/Config.pm new file mode 100644 index 000000000..eb99e5a94 --- /dev/null +++ b/extensions/RestrictComments/Config.pm @@ -0,0 +1,18 @@ +# 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::RestrictComments; + +use 5.10.1; +use strict; +use warnings; + +use constant NAME => 'RestrictComments'; +use constant REQUIRED_MODULES => []; +use constant OPTIONAL_MODULES => []; + +__PACKAGE__->NAME; diff --git a/extensions/RestrictComments/Extension.pm b/extensions/RestrictComments/Extension.pm new file mode 100644 index 000000000..71971079b --- /dev/null +++ b/extensions/RestrictComments/Extension.pm @@ -0,0 +1,107 @@ +# 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::RestrictComments; + +use 5.10.1; +use strict; +use warnings; + +use base qw(Bugzilla::Extension); + +use Bugzilla::Constants; +use Bugzilla::Util qw(i_am_webservice); + +BEGIN { + *Bugzilla::Bug::restrict_comments = \&_bug_restrict_comments; +} + +sub _bug_restrict_comments { + my ($self) = @_; + return $self->{restrict_comments}; +} + +sub bug_check_can_change_field { + my ($self, $args) = @_; + my ($bug, $priv_results) = @$args{qw(bug priv_results)}; + my $user = Bugzilla->user; + + if ( $user->id + && $bug->restrict_comments + && !$user->in_group(Bugzilla->params->{'restrict_comments_group'})) + { + push @$priv_results, + { + result => PRIVILEGES_REQUIRED_EMPOWERED, + reason => 'Specific permissions are required to make this change', + }; + return; + } +} + +sub _can_restrict_comments { + my ($self, $object) = @_; + return unless $object->isa('Bugzilla::Bug'); + return Bugzilla->user->in_group( + Bugzilla->params->{'restrict_comments_enable_group'}); +} + +sub object_end_of_set_all { + my ($self, $args) = @_; + my $object = $args->{object}; + my $input = Bugzilla->input_params; + my $update_restrict_comments + = !i_am_webservice() || exists $input->{restrict_comments}; + if ($update_restrict_comments && $self->_can_restrict_comments($object)) { + $object->set('restrict_comments', $input->{restrict_comments} ? 1 : undef); + } +} + +sub object_update_columns { + my ($self, $args) = @_; + my ($object, $columns) = @$args{qw(object columns)}; + if ($self->_can_restrict_comments($object)) { + push(@$columns, 'restrict_comments'); + } +} + +sub object_columns { + my ($self, $args) = @_; + my ($class, $columns) = @$args{qw(class columns)}; + if ($class->isa('Bugzilla::Bug')) { + push(@$columns, 'restrict_comments'); + } +} + +sub bug_fields { + my ($self, $args) = @_; + my $fields = $args->{'fields'}; + push(@$fields, 'restrict_comments'); +} + +sub config_add_panels { + my ($self, $args) = @_; + my $modules = $args->{panel_modules}; + $modules->{RestrictComments} = "Bugzilla::Extension::RestrictComments::Config"; +} + +sub install_update_db { + my $dbh = Bugzilla->dbh; + + my $field = new Bugzilla::Field({name => 'restrict_comments'}); + if (!$field) { + Bugzilla::Field->create({ + name => 'restrict_comments', + description => 'Restrict Comments', + type => FIELD_TYPE_BOOLEAN, + }); + } + + $dbh->bz_add_column('bugs', 'restrict_comments', {TYPE => 'BOOLEAN'}); +} + +__PACKAGE__->NAME; diff --git a/extensions/RestrictComments/lib/Config.pm b/extensions/RestrictComments/lib/Config.pm new file mode 100644 index 000000000..c1f9829f9 --- /dev/null +++ b/extensions/RestrictComments/lib/Config.pm @@ -0,0 +1,42 @@ +# 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::RestrictComments::Config; + +use 5.10.1; +use strict; +use warnings; + +use Bugzilla::Config::Common; +use Bugzilla::Group; + +our $sortkey = 510; + +sub get_param_list { + my ($class) = @_; + + my @param_list = ( + { + name => 'restrict_comments_group', + type => 's', + choices => \&get_all_group_names, + default => '', + checker => \&check_group + }, + { + name => 'restrict_comments_enable_group', + type => 's', + choices => \&get_all_group_names, + default => '', + checker => \&check_group + }, + ); + + return @param_list; +} + +1; diff --git a/extensions/RestrictComments/template/en/default/admin/params/restrictcomments.html.tmpl b/extensions/RestrictComments/template/en/default/admin/params/restrictcomments.html.tmpl new file mode 100644 index 000000000..d2a050563 --- /dev/null +++ b/extensions/RestrictComments/template/en/default/admin/params/restrictcomments.html.tmpl @@ -0,0 +1,23 @@ +[%# 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 = "Restrict Comments" + desc = "Edit Restrict Comments Configuration" +%] + +[% param_descs = +{ + restrict_comments_group => "Users must be a member of this group to " _ + "comment on bug with restricted commenting " _ + "enabled." + + restrict_comments_enable_group => "Members of this group can toggle " _ + "'restrict comments' on bugs." +} +%] diff --git a/extensions/RestrictComments/template/en/default/hook/bug/edit-after_comment_commit_button.html.tmpl b/extensions/RestrictComments/template/en/default/hook/bug/edit-after_comment_commit_button.html.tmpl new file mode 100644 index 000000000..b6e75b7a1 --- /dev/null +++ b/extensions/RestrictComments/template/en/default/hook/bug/edit-after_comment_commit_button.html.tmpl @@ -0,0 +1,36 @@ +[%# 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. + #%] + + +[% RETURN UNLESS template.name == 'bug/show-modal.html.tmpl' %] +[% RETURN UNLESS user.in_group(Param('restrict_comments_enable_group')) %] + +[%# using a table to match alignment of the needinfo checkboxes %] +<table [%= IF bug_modal %]class="edit-show" style="display:none"[% END %]> +<tr> + <td> + <input type="checkbox" name="restrict_comments" id="restrict_comments" + [% " checked" IF bug.restrict_comments %]> + <label for="restrict_comments"> + Restrict commenting on this [% terms.bug %] to users in the + <b>[% Param('restrict_comments_group') FILTER html %]</b> group. + </label> + (<a href="[% basepath FILTER none %]page.cgi?id=restrict_comments_guidelines.html" + target="_blank">guidelines</a>) + </td> +</tr> +</table> +[% IF bug_modal && bug.restrict_comments %] + <table class="edit-hide"> + <tr> + <td> + <i>Commenting restricted to members of the <b>[% Param('restrict_comments_group') FILTER html %]</b> group.</i> + </td> + </tr> + </table> +[% END %] diff --git a/extensions/RestrictComments/template/en/default/pages/restrict_comments_guidelines.html.tmpl b/extensions/RestrictComments/template/en/default/pages/restrict_comments_guidelines.html.tmpl new file mode 100644 index 000000000..11c669580 --- /dev/null +++ b/extensions/RestrictComments/template/en/default/pages/restrict_comments_guidelines.html.tmpl @@ -0,0 +1,62 @@ +[%# 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. + #%] + +[% USE Bugzilla %] + +[% PROCESS global/header.html.tmpl + title = "Restrict Comments - Guidelines" +%] + +<h3>Restricting Comments</h3> + +<p> + Some [% terms.bug %] reports are inundated with comments that make it + difficult for developers to conduct technical discussions. Restricting + comments provides the ability for users in the + [%+ Param('restrict_comments_enable_group') FILTER html %] group to prevent + users who are not in the [% Param('restrict_comments_group') FILTER html %] + from making additional comments. +</p> + +<h3>Guidelines</h3> + +<ul> + <li> + Restrictions may be applied to [% terms.bugs %] which are subject to high + volumes of off topic comments, or [% terms.bugs %] which contain high volumes + of violations of [% terms.Bugzilla %] + <a href="[% basepath FILTER none %]page.cgi?id=etiquette.html">etiquette guidelines</a>. + </li> + <li> + Restrictions should not be used as a preemptive measure against comments + which have not yet occurred. + </li> + <li> + Restrictions should not be used to privilege + [%+ Param('restrict_comments_group') FILTER html %] users over other users + in valid disputes/discussions. + </li> +</ul> + +<h3>Impact</h3> + +<ul> + <li> + Users who are not in the [% Param('restrict_comments_group') FILTER html %] + group will not be able to comment on the [% terms.bug %], nor will they be + able to change the value of any field. + </li> + <li> + All users will still be able to CC themselves to the [% terms.bug %]. + </li> + <li> + All users will still be able to vote for the [% terms.bug %]. + </li> +</ul> + +[% PROCESS global/footer.html.tmpl %] |