summaryrefslogtreecommitdiffstats
path: root/extensions/BMO
diff options
context:
space:
mode:
authorByron Jones <glob@mozilla.com>2015-04-21 08:00:18 +0200
committerByron Jones <glob@mozilla.com>2015-04-21 08:00:18 +0200
commit5db6eeb9cf4bf82d785dd193703b46b2139247e5 (patch)
tree2cd234261c4cc56e4035b035b0fc20990ec9a6f6 /extensions/BMO
parent4aa44c46edf93a9707fc693769f39e5aeda7f59b (diff)
downloadbugzilla-5db6eeb9cf4bf82d785dd193703b46b2139247e5.tar.gz
bugzilla-5db6eeb9cf4bf82d785dd193703b46b2139247e5.tar.xz
Bug 579089: Change default Hardware / OS values to be "Unspecified/Unspecified"
Diffstat (limited to 'extensions/BMO')
-rw-r--r--extensions/BMO/Extension.pm120
-rw-r--r--extensions/BMO/template/en/default/hook/admin/params/editparams-current_panel.html.tmpl16
-rw-r--r--extensions/BMO/template/en/default/hook/admin/products/edit-common-rows.html.tmpl35
-rw-r--r--extensions/BMO/template/en/default/hook/admin/products/updated-changes.html.tmpl14
-rw-r--r--extensions/BMO/template/en/default/hook/bug/edit-after_op_sys.html.tmpl45
5 files changed, 217 insertions, 13 deletions
diff --git a/extensions/BMO/Extension.pm b/extensions/BMO/Extension.pm
index 06c07cc83..717f347de 100644
--- a/extensions/BMO/Extension.pm
+++ b/extensions/BMO/Extension.pm
@@ -31,12 +31,13 @@ use Bugzilla::Error;
use Bugzilla::Field;
use Bugzilla::Field::Choice;
use Bugzilla::Group;
+use Bugzilla::Install::Filesystem;
use Bugzilla::Mailer;
use Bugzilla::Product;
use Bugzilla::Status;
use Bugzilla::Token;
-use Bugzilla::Install::Filesystem;
use Bugzilla::User;
+use Bugzilla::UserAgent qw(detect_platform detect_op_sys);
use Bugzilla::User::Setting;
use Bugzilla::Util;
@@ -62,12 +63,17 @@ our $VERSION = '0.1';
#
BEGIN {
- *Bugzilla::Bug::last_closed_date = \&_last_closed_date;
- *Bugzilla::Product::default_security_group = \&_default_security_group;
- *Bugzilla::Product::default_security_group_obj = \&_default_security_group_obj;
- *Bugzilla::Product::group_always_settable = \&_group_always_settable;
+ *Bugzilla::Bug::last_closed_date = \&_last_closed_date;
+ *Bugzilla::Bug::reporters_hw_os = \&_bug_reporters_hw_os;
+ *Bugzilla::Product::default_security_group = \&_default_security_group;
+ *Bugzilla::Product::default_security_group_obj = \&_default_security_group_obj;
+ *Bugzilla::Product::group_always_settable = \&_group_always_settable;
+ *Bugzilla::Product::default_platform_id = \&_product_default_platform_id;
+ *Bugzilla::Product::default_op_sys_id = \&_product_default_op_sys_id;
+ *Bugzilla::Product::default_platform = \&_product_default_platform;
+ *Bugzilla::Product::default_op_sys = \&_product_default_op_sys;
*Bugzilla::check_default_product_security_group = \&_check_default_product_security_group;
- *Bugzilla::Attachment::is_bounty_attachment = \&_is_bounty_attachment;
+ *Bugzilla::Attachment::is_bounty_attachment = \&_is_bounty_attachment;
}
sub template_before_process {
@@ -641,6 +647,43 @@ sub quicksearch_map {
}
}
+sub object_columns {
+ my ($self, $args) = @_;
+ return unless $args->{class}->isa('Bugzilla::Product');
+ push @{ $args->{columns} }, qw( default_platform_id default_op_sys_id );
+}
+
+sub object_update_columns {
+ my ($self, $args) = @_;
+ return unless $args->{object}->isa('Bugzilla::Product');
+ push @{ $args->{columns} }, qw( default_platform_id default_op_sys_id );
+}
+
+sub object_before_create {
+ my ($self, $args) = @_;
+ return unless $args->{class}->isa('Bugzilla::Product');
+
+ my $cgi = Bugzilla->cgi;
+ my $params = $args->{params};
+ foreach my $field (qw( default_platform_id default_op_sys_id )) {
+ $params->{$field} = $cgi->param($field);
+ }
+}
+
+sub object_end_of_set_all {
+ my ($self, $args) = @_;
+ my $object = $args->{object};
+ return unless $object->isa('Bugzilla::Product');
+
+ my $cgi = Bugzilla->cgi;
+ my $params = $args->{params};
+ foreach my $field (qw( default_platform_id default_op_sys_id )) {
+ my $value = $cgi->param($field);
+ detaint_natural($value);
+ $object->set($field, $value);
+ }
+}
+
sub object_end_of_create {
my ($self, $args) = @_;
my $class = $args->{class};
@@ -675,6 +718,52 @@ sub object_end_of_create {
}
}
+sub _bug_reporters_hw_os {
+ my ($self) = @_;
+ return $self->{ua_hw_os} if exists $self->{ua_hw_os};
+ my $memcached = Bugzilla->memcached;
+ my $hw_os = $memcached->get({ key => 'bug.ua.' . $self->id });
+ if (!$hw_os) {
+ (my $ua) = Bugzilla->dbh->selectrow_array(
+ "SELECT user_agent FROM bug_user_agent WHERE bug_id = ?",
+ undef,
+ $self->id);
+ $hw_os = $ua
+ ? [ detect_platform($ua), detect_op_sys($ua) ]
+ : [];
+ $memcached->set({ key => 'bug.ua.' . $self->id, value => $hw_os });
+ }
+ return $self->{ua_hw_os} = $hw_os;
+}
+
+sub _product_default_platform_id { $_[0]->{default_platform_id} }
+sub _product_default_op_sys_id { $_[0]->{default_op_sys_id} }
+
+sub _product_default_platform {
+ my ($self) = @_;
+ if (!exists $self->{default_platform}) {
+ $self->{default_platform} = $self->default_platform_id
+ ? Bugzilla::Field::Choice
+ ->type('rep_platform')
+ ->new($_[0]->{default_platform_id})
+ ->name
+ : undef;
+ }
+ return $self->{default_platform};
+}
+sub _product_default_op_sys {
+ my ($self) = @_;
+ if (!exists $self->{default_op_sys}) {
+ $self->{default_op_sys} = $self->default_op_sys_id
+ ? Bugzilla::Field::Choice
+ ->type('op_sys')
+ ->new($_[0]->{default_op_sys_id})
+ ->name
+ : undef;
+ }
+ return $self->{default_op_sys};
+}
+
sub _get_named_query {
my ($sharer_id, $group_id, $definition) = @_;
my $dbh = Bugzilla->dbh;
@@ -701,11 +790,11 @@ sub _get_named_query {
return $namedquery_id;
}
-# Automatically CC users to bugs based on group & product
sub bug_end_of_create {
my ($self, $args) = @_;
my $bug = $args->{'bug'};
+ # automatically CC users to bugs based on group & product
foreach my $group_name (keys %group_auto_cc) {
my $group_obj = Bugzilla::Group->new({ name => $group_name });
if ($group_obj && $bug->in_group($group_obj)) {
@@ -717,6 +806,21 @@ sub bug_end_of_create {
}
}
}
+
+ # store user-agent
+ if (my $ua = Bugzilla->cgi->user_agent) {
+ trick_taint($ua);
+ Bugzilla->dbh->do(
+ "INSERT INTO bug_user_agent (bug_id, user_agent) VALUES (?, ?)",
+ undef,
+ $bug->id, $ua
+ );
+ }
+}
+
+sub db_sanitize {
+ print "deleting reporter's user-agents...\n";
+ Bugzilla->dbh->do("TRUNCATE TABLE bug_user_agent");
}
# bugs in an ASSIGNED state must be assigned to a real person
@@ -872,7 +976,7 @@ sub db_schema_abstract_schema {
REFERENCES => {
TABLE => 'bugs',
COLUMN => 'bug_id',
- DELETE => 'cascade',
+ DELETE => 'CASCADE',
},
},
user_agent => {
diff --git a/extensions/BMO/template/en/default/hook/admin/params/editparams-current_panel.html.tmpl b/extensions/BMO/template/en/default/hook/admin/params/editparams-current_panel.html.tmpl
index 39f063464..9b251431c 100644
--- a/extensions/BMO/template/en/default/hook/admin/params/editparams-current_panel.html.tmpl
+++ b/extensions/BMO/template/en/default/hook/admin/params/editparams-current_panel.html.tmpl
@@ -6,8 +6,14 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
-[% IF panel.name == "groupsecurity" %]
- [% panel.param_descs.delete_comments_group =
- 'The name of the group of users who can delete comments by using the "deleted" comment tag.'
- %]
-[% END -%]
+[%
+IF panel.name == "groupsecurity";
+ panel.param_descs.delete_comments_group =
+ 'The name of the group of users who can delete comments by using the "deleted" comment tag.';
+
+ELSIF panel.name == "bugfields";
+ panel.param_descs.defaultplatform = "This parameter is ignored on BMO, use per-product defaults instead.";
+ panel.param_descs.defaultopsys = "This parameter is ignored on BMO, use per-product defaults instead.";
+
+END;
+%]
diff --git a/extensions/BMO/template/en/default/hook/admin/products/edit-common-rows.html.tmpl b/extensions/BMO/template/en/default/hook/admin/products/edit-common-rows.html.tmpl
new file mode 100644
index 000000000..7093bcfc6
--- /dev/null
+++ b/extensions/BMO/template/en/default/hook/admin/products/edit-common-rows.html.tmpl
@@ -0,0 +1,35 @@
+[%# 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.
+ #%]
+
+<tr>
+ <th align="right">Default Platform</th>
+ <td>
+ [% INCLUDE default_select
+ field_name = 'default_platform_id'
+ field_value = product.default_platform_id
+ field_values = bug_fields.rep_platform.legal_values
+ %]
+ [%= INCLUDE default_select
+ field_name = 'default_op_sys_id'
+ field_value = product.default_op_sys_id
+ field_values = bug_fields.op_sys.legal_values
+ %]
+ </td>
+</tr>
+
+[% BLOCK default_select %]
+ <select name="[% field_name FILTER html %]">
+ <option value="" [% " selected" IF field_value == "" %]>Detect</option>
+ [% FOREACH v IN field_values %]
+ [% NEXT UNLESS v.is_active %]
+ <option value="[% v.id FILTER html %]" [% " selected" IF field_value == v.id %]>
+ [% v.value FILTER html %]
+ </option>
+ [% END %]
+ </select>
+[% END %]
diff --git a/extensions/BMO/template/en/default/hook/admin/products/updated-changes.html.tmpl b/extensions/BMO/template/en/default/hook/admin/products/updated-changes.html.tmpl
new file mode 100644
index 000000000..af480134e
--- /dev/null
+++ b/extensions/BMO/template/en/default/hook/admin/products/updated-changes.html.tmpl
@@ -0,0 +1,14 @@
+[%# 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 changes.default_platform_id.defined %]
+ <p>Default Platform updated</p>
+[% END %]
+[% IF changes.default_op_sys_id.defined %]
+ <p>Default Op-Sys updated</p>
+[% END %]
diff --git a/extensions/BMO/template/en/default/hook/bug/edit-after_op_sys.html.tmpl b/extensions/BMO/template/en/default/hook/bug/edit-after_op_sys.html.tmpl
new file mode 100644
index 000000000..b5c3a722b
--- /dev/null
+++ b/extensions/BMO/template/en/default/hook/bug/edit-after_op_sys.html.tmpl
@@ -0,0 +1,45 @@
+[%# 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.
+ #%]
+
+[%# because the "from reporter" button adds likely unnecessary noise to a bug,
+ # we only show it on unconfirmed or untriaged bugs %]
+[%
+ RETURN UNLESS
+ (bug.status.value == "UNCONFIRMED" || bug.component == "Untriaged")
+ && bug.check_can_change_field('op_sys', 0, 1);
+ hw_os = bug.reporters_hw_os;
+ RETURN UNLESS hw_os.size;
+ RETURN IF bug.rep_platform == hw_os.0 && bug.op_sys == hw_os.1;
+
+ title = "Set platform to reporter's: " _ hw_os.0 _ " / " _ hw_os.1;
+%]
+
+[% onclick = BLOCK %]
+ $('#rep_platform').val('[% hw_os.0 FILTER js FILTER html %]');
+ $('#op_sys').val('[% hw_os.1 FILTER js FILTER html %]');
+ $('#rep_hw_os').hide();
+[% END %]
+[%
+ IF bug_modal;
+ INCLUDE modal;
+ ELSE;
+ INCLUDE classic;
+ END;
+%]
+
+[% BLOCK classic %]
+ <span id="rep_hw_os">
+ (<a href="javascript:void(0)" title="[% title FILTER html %]" onclick="[% onclick FILTER none %]">from reporter</a>)
+ </span>
+[% END %]
+
+[% BLOCK modal %]
+ <button id="rep_hw_os" type="button" class="minor" title="[% title FILTER html %]" onclick="[% onclick FILTER none %]">
+ From&nbsp;Reporter
+ </button>
+[% END %]