]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1522341 - Implement new field for indicating if a bug is a task, enhancement...
authorKohei Yoshino <kohei.yoshino@gmail.com>
Wed, 27 Mar 2019 23:46:54 +0000 (19:46 -0400)
committerGitHub <noreply@github.com>
Wed, 27 Mar 2019 23:46:54 +0000 (19:46 -0400)
112 files changed:
Bugzilla/Bug.pm
Bugzilla/Component.pm
Bugzilla/Config/BugFields.pm
Bugzilla/Config/Common.pm
Bugzilla/Constants.pm
Bugzilla/DB.pm
Bugzilla/DB/Schema/Mysql.pm
Bugzilla/Elastic/Search.pm
Bugzilla/Field.pm
Bugzilla/Field/Choice.pm
Bugzilla/Search/Quicksearch.pm
Bugzilla/Test/Util.pm
Bugzilla/User.pm
Bugzilla/WebService/Bug.pm
README.rst
buglist.cgi
bugzilla.dtd
conf/checksetup_answers.txt
config.cgi
docs/en/rst/administering/parameters.rst
docs/en/rst/api/core/v1/bug.rst
docs/en/rst/api/core/v1/bugzilla.rst
editcomponents.cgi
enter_bug.cgi
extensions/BMO/Extension.pm
extensions/BMO/template/en/default/bug/create/create-automative.html.tmpl
extensions/BMO/template/en/default/bug/create/create-client-bounty.html.tmpl
extensions/BMO/template/en/default/bug/create/create-comm-newsletter.html.tmpl
extensions/BMO/template/en/default/bug/create/create-costume.html.tmpl
extensions/BMO/template/en/default/bug/create/create-creative.html.tmpl
extensions/BMO/template/en/default/bug/create/create-crm.html.tmpl
extensions/BMO/template/en/default/bug/create/create-data-compliance.html.tmpl
extensions/BMO/template/en/default/bug/create/create-finance.html.tmpl
extensions/BMO/template/en/default/bug/create/create-fsa-budget.html.tmpl
extensions/BMO/template/en/default/bug/create/create-intern.html.tmpl
extensions/BMO/template/en/default/bug/create/create-ipp.html.tmpl
extensions/BMO/template/en/default/bug/create/create-itrequest.html.tmpl
extensions/BMO/template/en/default/bug/create/create-legal.html.tmpl
extensions/BMO/template/en/default/bug/create/create-mdn.html.tmpl
extensions/BMO/template/en/default/bug/create/create-mobile-compat.html.tmpl
extensions/BMO/template/en/default/bug/create/create-mozlist.html.tmpl
extensions/BMO/template/en/default/bug/create/create-mozpr.html.tmpl
extensions/BMO/template/en/default/bug/create/create-name-clearance.html.tmpl
extensions/BMO/template/en/default/bug/create/create-nda.html.tmpl
extensions/BMO/template/en/default/bug/create/create-recoverykey.html.tmpl
extensions/BMO/template/en/default/bug/create/create-recruiting.html.tmpl
extensions/BMO/template/en/default/bug/create/create-screen-share-whitelist.html.tmpl
extensions/BMO/template/en/default/bug/create/create-swag.html.tmpl
extensions/BMO/template/en/default/bug/create/create-trademark.html.tmpl
extensions/BMO/template/en/default/bug/create/create-user-engagement.html.tmpl
extensions/BMO/template/en/default/bug/create/create-web-bounty.html.tmpl
extensions/BMO/template/en/default/hook/bug/field-help-end.none.tmpl
extensions/BMO/template/en/default/pages/get_permissions.html.tmpl
extensions/BugModal/lib/WebService.pm
extensions/BugModal/template/en/default/bug_modal/edit.html.tmpl
extensions/BugModal/web/bug_modal.css
extensions/BugModal/web/new_bug.js
extensions/BzAPI/lib/Resources/Bugzilla.pm
extensions/BzAPI/template/en/default/config.json.tmpl
extensions/Ember/lib/WebService.pm
extensions/GuidedBugEntry/template/en/default/guided/guided.html.tmpl
extensions/MozProjectReview/Extension.pm
extensions/MozProjectReview/template/en/default/bug/create/create-moz-project-review.html.tmpl
extensions/Push/lib/Serialise.pm
extensions/REMO/template/en/default/bug/create/create-csa-discourse.html.tmpl
extensions/REMO/template/en/default/bug/create/create-mozreps.html.tmpl
extensions/REMO/template/en/default/bug/create/create-remo-budget.html.tmpl
extensions/REMO/template/en/default/bug/create/create-remo-swag.html.tmpl
importxml.pl
new_bug.cgi
post_bug.cgi
process_bug.cgi
qa/config/generate_test_data.pl
qa/t/archived/test_email_preferences.t
qa/t/test_bug_edit.t
qa/t/webservice_bug_fields.t
qa/t/webservice_bug_legal_values.t
query.cgi
request.cgi
sanitycheck.cgi
scripts/c9-install
scripts/generate_bmo_data.pl
scripts/generate_conduit_data.pl
scripts/remove-non-public-data.pl
skins/standard/buglist.css
skins/standard/global.css
t/bmo/comments.t
template/en/default/admin/components/edit-common.html.tmpl
template/en/default/admin/components/list.html.tmpl
template/en/default/admin/params/bugfields.html.tmpl
template/en/default/admin/params/common.html.tmpl
template/en/default/bug/create/create-guided.html.tmpl
template/en/default/bug/create/create.html.tmpl
template/en/default/bug/edit.html.tmpl
template/en/default/bug/field-help.none.tmpl
template/en/default/bug/new_bug.html.tmpl
template/en/default/bug/show-multiple.html.tmpl
template/en/default/email/header-common.txt.tmpl
template/en/default/global/field-descs.none.tmpl
template/en/default/global/messages.html.tmpl
template/en/default/list/edit-multiple.html.tmpl
template/en/default/list/list.atom.tmpl
template/en/default/list/table.html.tmpl
template/en/default/pages/bugzilla.dtd.tmpl
template/en/default/reports/duplicates-table.html.tmpl
template/en/default/request/queue.html.tmpl
template/en/default/search/form.html.tmpl
template/en/default/whine/mail.html.tmpl
template/en/default/whine/mail.txt.tmpl
vagrant_support/checksetup_answers.j2
whine.pl
xt/lib/Bugzilla/Test/Search/Constants.pm

index fca29177019fd1149c9ded1f7b5eb1ef4270c6cf..4e6bfa8fb36fb29eb5cd41e4c850b7067a8737a0 100644 (file)
@@ -85,6 +85,7 @@ sub DB_COLUMNS {
       bug_id
       bug_severity
       bug_status
+      bug_type
       cclist_accessible
       component_id
       creation_ts
@@ -121,6 +122,7 @@ sub VALIDATORS {
     bug_file_loc      => \&_check_bug_file_loc,
     bug_severity      => \&_check_select_field,
     bug_status        => \&_check_bug_status,
+    bug_type          => \&_check_select_field,
     cc                => \&_check_cc,
     comment           => \&_check_comment,
     component         => \&_check_component,
@@ -219,6 +221,7 @@ sub UPDATE_COLUMNS {
     bug_file_loc
     bug_severity
     bug_status
+    bug_type
     cclist_accessible
     component_id
     deadline
@@ -282,6 +285,7 @@ use constant FIELD_MAP => {
   severity              => 'bug_severity',
   status                => 'bug_status',
   summary               => 'short_desc',
+  type                  => 'bug_type',
   url                   => 'bug_file_loc',
   whiteboard            => 'status_whiteboard',
 };
@@ -384,7 +388,7 @@ sub _bz_field {
 sub ES_PROPERTIES {
   return {
     _bz_field('priority'), _bz_field('bug_severity'), _bz_field('bug_status'),
-    _bz_field('resolution'),
+    _bz_field('resolution'), _bz_field('bug_type'),
     status_whiteboard =>
       {type => 'string', analyzer => 'whiteboard_shingle_tokens'},
     delta_ts => {type => 'string', index => 'not_analyzed'},
@@ -401,7 +405,7 @@ sub ES_SELECT_UPDATED_SQL {
   my @fields = (
     'keywords',           'short_desc', 'product',           'component',
     'cf_crash_signature', 'alias',      'status_whiteboard', 'bug_status',
-    'resolution',         'priority',   'assigned_to'
+    'resolution',         'priority',   'assigned_to',       'bug_type'
   );
   my $fields = join(', ', ("?") x @fields);
 
@@ -478,6 +482,7 @@ sub es_document {
     reporter          => $self->reporter->login,
     delta_ts          => $self->delta_ts,
     bug_severity      => $self->bug_severity,
+    bug_type          => $self->bug_type,
   };
 }
 
@@ -854,6 +859,7 @@ sub possible_duplicates {
 # C<component>   - B<Required> The name of the component this bug is being
 #                  filed against.
 #
+# C<bug_type>     - B<Required> The initial type for the bug.
 # C<bug_severity> - B<Required> The severity for the bug, a string.
 # C<creation_ts>  - B<Required> A SQL timestamp for when the bug was created.
 # C<short_desc>   - B<Required> A summary for the bug.
@@ -894,6 +900,8 @@ sub create {
   $dbh->bz_start_transaction();
 
   # These fields have default values which we can use if they are undefined.
+  $params->{bug_type} = Bugzilla->params->{default_bug_type}
+    unless defined $params->{bug_type};
   $params->{bug_severity} = Bugzilla->params->{defaultseverity}
     unless defined $params->{bug_severity};
   $params->{priority} = Bugzilla->params->{defaultpriority}
@@ -2625,7 +2633,7 @@ sub fields {
       reporter_accessible cclist_accessible
       classification_id classification
       product component version rep_platform op_sys
-      bug_status resolution dup_id see_also
+      bug_type bug_status resolution dup_id see_also
       bug_file_loc status_whiteboard keywords
       priority bug_severity target_milestone
       dependson blocked regressed_by regresses
@@ -3253,6 +3261,13 @@ sub set_bug_status {
     }
   }
 }
+
+sub set_type {
+  # The bug_type table column is nullable, but make sure to use the default type
+  # in case it's not set
+  $_[0]->set('bug_type', $_[1] || Bugzilla->params->{'default_bug_type'});
+}
+
 sub set_status_whiteboard { $_[0]->set('status_whiteboard', $_[1]); }
 sub set_summary           { $_[0]->set('short_desc',        $_[1]); }
 sub set_target_milestone  { $_[0]->set('target_milestone',  $_[1]); }
@@ -3649,6 +3664,7 @@ sub bug_file_loc        { return $_[0]->{bug_file_loc} }
 sub bug_id              { return $_[0]->{bug_id} }
 sub bug_severity        { return $_[0]->{bug_severity} }
 sub bug_status          { return $_[0]->{bug_status} }
+sub bug_type            { return $_[0]->{bug_type} }
 sub cclist_accessible   { return $_[0]->{cclist_accessible} }
 sub component_id        { return $_[0]->{component_id} }
 sub creation_ts         { return $_[0]->{creation_ts} }
index d117c83ad4633715b5b9215e4d567293a241ab66..2869e8edaaaee4ed6356f59b42cbdab4efa87df7 100644 (file)
@@ -36,6 +36,7 @@ use constant DB_COLUMNS => qw(
   id
   name
   product_id
+  default_bug_type
   initialowner
   initialqacontact
   description
@@ -45,6 +46,7 @@ use constant DB_COLUMNS => qw(
 
 use constant UPDATE_COLUMNS => qw(
   name
+  default_bug_type
   initialowner
   initialqacontact
   description
@@ -57,6 +59,7 @@ use constant REQUIRED_FIELD_MAP => {product_id => 'product',};
 use constant VALIDATORS => {
   create_series    => \&Bugzilla::Object::check_boolean,
   product          => \&_check_product,
+  default_bug_type => \&_check_default_bug_type,
   initialowner     => \&_check_initialowner,
   initialqacontact => \&_check_initialqacontact,
   description      => \&_check_description,
@@ -200,6 +203,13 @@ sub _check_description {
   return $description;
 }
 
+sub _check_default_bug_type {
+  my ($invocant, $type) = @_;
+  return $type if Bugzilla::Config::Common::check_bug_type($type) eq '';
+  # Ignore silently just in case
+  return undef;
+}
+
 sub _check_initialowner {
   my ($invocant, $owner) = @_;
 
@@ -306,9 +316,10 @@ sub _create_series {
   }
 }
 
-sub set_name        { $_[0]->set('name',        $_[1]); }
-sub set_description { $_[0]->set('description', $_[1]); }
-sub set_is_active   { $_[0]->set('isactive',    $_[1]); }
+sub set_name             { $_[0]->set('name',             $_[1]); }
+sub set_description      { $_[0]->set('description',      $_[1]); }
+sub set_is_active        { $_[0]->set('isactive',         $_[1]); }
+sub set_default_bug_type { $_[0]->set('default_bug_type', $_[1]); }
 
 sub set_default_assignee {
   my ($self, $owner) = @_;
@@ -373,6 +384,10 @@ sub bug_ids {
   return $self->{'bugs_ids'};
 }
 
+sub default_bug_type {
+  return $_[0]->{'default_bug_type'} ||= Bugzilla->params->{'default_bug_type'};
+}
+
 sub default_assignee {
   my $self = shift;
   return $self->{'default_assignee'}
@@ -508,6 +523,7 @@ Bugzilla::Component - Bugzilla product component class.
     my $name               = $component->name;
     my $description        = $component->description;
     my $product_id         = $component->product_id;
+    my $default_bug_type   = $component->default_bug_type;
     my $default_assignee   = $component->default_assignee;
     my $default_qa_contact = $component->default_qa_contact;
     my $initial_cc         = $component->initial_cc;
@@ -521,6 +537,7 @@ Bugzilla::Component - Bugzilla product component class.
     my $component =
       Bugzilla::Component->create({ name             => $name,
                                     product          => $product,
+                                    default_bug_type => $default_bug_type,
                                     initialowner     => $user_login1,
                                     initialqacontact => $user_login2,
                                     triage_owner     => $user_login3,
@@ -528,6 +545,7 @@ Bugzilla::Component - Bugzilla product component class.
 
     $component->set_name($new_name);
     $component->set_description($new_description);
+    $component->set_default_bug_type($new_type);
     $component->set_default_assignee($new_login_name);
     $component->set_default_qa_contact($new_login_name);
     $component->set_cc_list(\@new_login_names);
@@ -575,6 +593,16 @@ Component.pm represents a Product Component object.
 
  Returns:     A reference to an array of bug IDs.
 
+=item C<default_bug_type()>
+
+ Description: Returns the default type for bugs filed under this component.
+              Returns the installation's global default bug type if the
+              component's specific type is not set.
+
+ Params:      none.
+
+ Returns:     A string.
+
 =item C<default_assignee()>
 
  Description: Returns a user object that represents the default assignee for
@@ -656,6 +684,14 @@ Component.pm represents a Product Component object.
 
  Returns:     Nothing.
 
+=item C<set_default_bug_type($new_type)>
+
+ Description: Changes the default bug type of the component.
+
+ Params:      $new_type - one of legal bug types or undef.
+
+ Returns:     Nothing.
+
 =item C<set_default_assignee($new_assignee)>
 
  Description: Changes the default assignee of the component.
@@ -724,6 +760,8 @@ Component.pm represents a Product Component object.
               product         - a Bugzilla::Product object to which
                                 the Component is being added.
               description     - description of the new component (string).
+              default_bug_type  - the default type for bugs filed under this
+                                  component (string).
               initialowner    - login name of the default assignee (string).
               The following keys are optional:
               initiaqacontact - login name of the default QA contact (string),
index 9c08065e89c66c8f67629d51de494ee110887086..dee0717ce0350eadf4fb578000cea02b8caa460c 100644 (file)
@@ -19,6 +19,7 @@ our $sortkey = 600;
 sub get_param_list {
   my $class = shift;
 
+  my @legal_types      = @{get_legal_field_values('bug_type')};
   my @legal_priorities = @{get_legal_field_values('priority')};
   my @legal_severities = @{get_legal_field_values('bug_severity')};
   my @legal_platforms  = @{get_legal_field_values('rep_platform')};
@@ -39,6 +40,14 @@ sub get_param_list {
 
     {name => 'use_see_also', type => 'b', default => 1},
 
+    {
+      name    => 'default_bug_type',
+      type    => 's',
+      choices => \@legal_types,
+      default => 'defect',
+      checker => \&check_bug_type
+    },
+
     {
       name    => 'defaultpriority',
       type    => 's',
index b3d0cb5f82ff52e29b09a56b70c1c60a2bdfef84..deeb8cdeb6e37d28678ff96a7cfc7a886052dc1e 100644 (file)
@@ -23,7 +23,7 @@ use Bugzilla::Status;
 use base qw(Exporter);
 @Bugzilla::Config::Common::EXPORT = qw(
   check_multi check_numeric check_regexp check_url check_group
-  check_priority check_severity check_platform
+  check_bug_type check_priority check_severity check_platform
   check_opsys check_shadowdb check_urlbase check_webdotbase
   check_user_verify_class
   check_mail_delivery_method check_notification check_utf8
@@ -99,6 +99,16 @@ sub check_utf8 {
   return "";
 }
 
+sub check_bug_type {
+  my ($value) = (@_);
+  my $legal_types = get_legal_field_values('bug_type');
+  if (!grep($_ eq $value, @$legal_types)) {
+    return "Must be a legal type value: one of "
+      . join(", ", @$legal_types);
+  }
+  return "";
+}
+
 sub check_priority {
   my ($value) = (@_);
   my $legal_priorities = get_legal_field_values('priority');
index 6e42bc1b033a95b07adde12fbc7bffe4d772e7da..ffa9817418561f684a461e41a034a7c2b7816b4f 100644 (file)
@@ -292,8 +292,8 @@ use constant MAILTO_GROUP => 1;
 
 # The default list of columns for buglist.cgi
 use constant DEFAULT_COLUMN_LIST => (
-  "product",    "component",  "assigned_to", "bug_status",
-  "resolution", "short_desc", "changeddate"
+  "bug_type", "short_desc", "product", "component", "assigned_to",
+  "bug_status", "resolution", "changeddate"
 );
 
 # Used by query.cgi and buglist.cgi as the named-query name
index 4cba3af988f67e363b62484028ecb20bbee2ed94..543549293086bf49b7bbafa8100d3e65a111602f 100644 (file)
@@ -91,8 +91,9 @@ use constant ISOLATION_LEVEL => 'REPEATABLE READ';
 # Bugzilla with enums. After that, they are either controlled through
 # the Bugzilla UI or through the DB.
 use constant ENUM_DEFAULTS => {
+  bug_type => ['defect', 'enhancement', 'task'],
   bug_severity =>
-    ['blocker', 'critical', 'major', 'normal', 'minor', 'trivial', 'enhancement'],
+    ['blocker', 'critical', 'major', 'normal', 'minor', 'trivial'],
   priority     => ["Highest", "High",    "Normal",    "Low",   "Lowest", "---"],
   op_sys       => ["All",     "Windows", "Mac OS",    "Linux", "Other"],
   rep_platform => ["All",     "PC",      "Macintosh", "Other"],
index 0b8ee59c3196cea24e06dddc4954a21866ec5493..2f7ba1b357668596d4154b006d74aa00eaa0d3fc 100644 (file)
@@ -51,6 +51,7 @@ use constant BOOLEAN_MAP => {
     is_multiplicable => 1
   },
   fielddefs    => {mailhead     => 1, obsolete => 1},
+  bug_type     => {isactive     => 1},
   bug_status   => {isactive     => 1},
   resolution   => {isactive     => 1},
   bug_severity => {isactive     => 1},
index a5831a36f8823758afbf5d6983490b645f3ee969..d00a58ee3e162fe541e08ca8fca7ed8b294a73ad 100644 (file)
@@ -34,7 +34,7 @@ with 'Bugzilla::Elastic::Role::HasClient';
 with 'Bugzilla::Elastic::Role::Search';
 
 my @SUPPORTED_FIELDS = qw(
-  bug_id product component short_desc
+  bug_id bug_type product component short_desc
   priority status_whiteboard bug_status resolution
   keywords alias assigned_to reporter delta_ts
   longdesc cf_crash_signature classification bug_severity
@@ -45,6 +45,7 @@ my %IS_SUPPORTED_FIELD = map { $_ => 1 } @SUPPORTED_FIELDS;
 $IS_SUPPORTED_FIELD{relevance} = 1;
 
 my @NORMAL_FIELDS = qw(
+  bug_type
   priority
   bug_severity
   bug_status
index 7a061b43b119e067eb5cbfeef9da9b9fdd528502..6aa6c71ad06cee7fddff08f2a76e861762cb4481 100644 (file)
@@ -248,6 +248,13 @@ use constant DEFAULT_FIELDS => (
     type    => FIELD_TYPE_SINGLE_SELECT,
     buglist => 1
   },
+  {
+    name           => 'bug_type',
+    desc           => 'Type',
+    in_new_bugmail => 1,
+    type           => FIELD_TYPE_SINGLE_SELECT,
+    buglist        => 1
+  },
   {
     name           => 'bug_severity',
     desc           => 'Severity',
index eab2c20f3db9bf7d08e8f67d4e5711bf64f5be04..ff2dd0e35bbfc281a6c6d1b6ef8985ba4522c86a 100644 (file)
@@ -60,6 +60,7 @@ use constant CLASS_MAP => {
 };
 
 use constant DEFAULT_MAP => {
+  bug_type     => 'default_bug_type',
   op_sys       => 'defaultopsys',
   rep_platform => 'defaultplatform',
   priority     => 'defaultpriority',
index 02d1cf6e5e5d60c3b55b32e8b0bc5e08d8b8250d..6351820c4c6e243360768e338c3d864b97dbfb3f 100644 (file)
@@ -28,7 +28,8 @@ use base qw(Exporter);
 # Custom mappings for some fields.
 use constant MAPPINGS => {
 
-  # Status, Resolution, Platform, OS, Priority, Severity
+  # Type, Status, Resolution, Platform, OS, Priority, Severity
+  "type"     => "bug_type",
   "status"   => "bug_status",
   "platform" => "rep_platform",
   "os"       => "op_sys",
@@ -89,7 +90,7 @@ sub FIELD_MAP {
   # "reporter_accessible" and "reporter" both match "rep".
   delete @full_map{
     qw(rep_platform bug_status bug_file_loc bug_group
-      bug_severity bug_status
+      bug_severity bug_status bug_type
       status_whiteboard
       cclist_accessible reporter_accessible)
   };
index b668aedb3c30eb09605fb995f55b694e65080c32..e826d97e004be14b4c7bef7a0edbfbf6be1cde8b 100644 (file)
@@ -102,6 +102,8 @@ sub create_bug {
     {
       default => sub {$Component}
     },
+    bug_type => Str,
+    {default => 'defect'},
     bug_severity => Str,
     {default => 'normal'},
     groups => ArrayRef [Str],
index ad929f1b4450c2b3f06a0e3430cda4131ffb99f8..eb458b2f501c751e24662a385c84e59d2175033a 100644 (file)
@@ -2365,6 +2365,7 @@ our %names_to_events = (
   'resolution'              => EVT_OPENED_CLOSED,
   'keywords'                => EVT_KEYWORD,
   'cc'                      => EVT_CC,
+  'bug_type'                => EVT_PROJ_MANAGEMENT,
   'bug_severity'            => EVT_PROJ_MANAGEMENT,
   'priority'                => EVT_PROJ_MANAGEMENT,
   'bug_status'              => EVT_PROJ_MANAGEMENT,
index 65d5d78af5fee0075f63201333cfc38e873699c2..bbfbe6360bf2f144f11bc96517d9499dce260cdf 100644 (file)
@@ -732,7 +732,7 @@ sub update {
   # We skip certain fields because their set_ methods actually use
   # the external names instead of the internal names.
   $params = Bugzilla::Bug::map_fields($params,
-    {summary => 1, platform => 1, severity => 1, url => 1});
+    {summary => 1, platform => 1, severity => 1, type => 1, url => 1});
 
   my $ids = delete $params->{ids};
   defined $ids || ThrowCodeError('param_required', {param => 'ids'});
@@ -1408,6 +1408,7 @@ sub _bug_to_hash {
       status           => $self->type('string',  $bug->bug_status),
       summary          => $self->type('string',  $bug->short_desc),
       target_milestone => $self->type('string',  $bug->target_milestone),
+      type             => $self->type('string',  $bug->bug_type),
       url              => $self->type('string',  $bug->bug_file_loc),
       version          => $self->type('string',  $bug->version),
       whiteboard       => $self->type('string',  $bug->status_whiteboard),
@@ -2953,6 +2954,10 @@ see the keys included in the user detail hash, see below.
 As with C<triage_owner>, this is an B<extra> field returned only by specifying
 C<triage_owner> or C<_extra> in C<include_fields>.
 
+=item C<type>
+
+C<string> The type of the bug.
+
 =item C<update_token>
 
 C<string> The token that you would have to pass to the F<process_bug.cgi>
@@ -3128,8 +3133,8 @@ and all custom fields.
 in Bugzilla B<4.4>.
 
 =item The C<attachments>, C<comments>, C<duplicates>, C<history>,
-C<regressed_by>, C<regressions> and C<triage_owner> fields were added in
-Bugzilla B<6.0>.
+C<regressed_by>, C<regressions>, C<triage_owner> and C<type> fields were added
+in Bugzilla B<6.0>.
 
 =back
 
@@ -3479,6 +3484,10 @@ will have a QA Contact set, if the field is disabled).
 
 C<string> The login name of the Triage Owner of a bug's component.
 
+=item C<type>
+
+C<string> The Type field on a bug.
+
 =item C<url>
 
 C<string> The "URL" field of a bug.
@@ -3630,6 +3639,8 @@ in by the developer, compared to the developer's other bugs.
 
 =item C<severity> (string) B<Defaulted> - How severe the bug is.
 
+=item C<type> (string) B<Defaulted> - The basic category of the bug.
+
 =item C<alias> (string) - A brief alias for the bug that can be used
 instead of a bug number when accessing this bug. Must be unique in
 all of this Bugzilla.
@@ -4637,6 +4648,10 @@ C<string> The Summary field of the bug.
 
 C<string> The bug's Target Milestone.
 
+=item C<type>
+
+C<string> The Type field on the bug.
+
 =item C<url>
 
 C<string> The "URL" field of a bug.
index 2a3142ef830baeffab35d7b42c705d1c46530022..07e4e260b8ac470c8a874a01a9afeee9f16edd53 100644 (file)
@@ -54,7 +54,7 @@ Vagrant might ask to install some missing plugins it detected, you should instal
 Depending on the speed of your computer and your Internet connection, this entire process
 will take from a few minutes to much longer.
 
-If this fails, please file a bug `using this link <https://bugzilla.mozilla.org/enter_bug.cgi?assigned_to=nobody%40mozilla.org&bug_file_loc=http%3A%2F%2F&bug_ignored=0&bug_severity=normal&bug_status=NEW&cf_fx_iteration=---&cf_fx_points=---&component=Developer%20Box&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&defined_groups=1&flag_type-254=X&flag_type-4=X&flag_type-607=X&flag_type-791=X&flag_type-800=X&flag_type-803=X&form_name=enter_bug&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=Unspecified&priority=--&product=bugzilla.mozilla.org&rep_platform=Unspecified&target_milestone=---&version=Production>`__.
+If this fails, please file a bug `using this link <https://bugzilla.mozilla.org/enter_bug.cgi?assigned_to=nobody%40mozilla.org&bug_file_loc=http%3A%2F%2F&bug_ignored=0&bug_type=defect&bug_severity=normal&bug_status=NEW&cf_fx_iteration=---&cf_fx_points=---&component=Developer%20Box&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&defined_groups=1&flag_type-254=X&flag_type-4=X&flag_type-607=X&flag_type-791=X&flag_type-800=X&flag_type-803=X&form_name=enter_bug&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=Unspecified&priority=--&product=bugzilla.mozilla.org&rep_platform=Unspecified&target_milestone=---&version=Production>`__.
 
 Otherwise, you should have a working BMO developer machine!
 
index ca8967f20ffb5d07ce21eefc91b92c57477b769c..17abd7aeafbc71e6206277868940cbc2173c902a 100755 (executable)
@@ -575,12 +575,12 @@ if (grep('relevance', @displaycolumns) && !$fulltext) {
 
 # Generate the list of columns that will be selected in the SQL query.
 
-# The bug ID is always selected because bug IDs are always displayed.
-# Severity, priority, resolution and status are required for buglist
+# The bug ID is always selected because bug IDs are always displayed. Type,
+# severity, priority, status, resolution and product are required for buglist
 # CSS classes.
 my @selectcolumns
-  = ("bug_id", "bug_severity", "priority", "bug_status", "resolution",
-  "product");
+  = ("bug_id", "bug_type", "bug_severity", "priority", "bug_status",
+  "resolution", "product");
 
 # remaining and actual_time are required for percentage_complete calculation:
 if (grep { $_ eq "percentage_complete" } @displaycolumns) {
@@ -623,7 +623,7 @@ if ($format->{'extension'} eq 'atom') {
     'short_desc',           'opendate',   'changeddate',  'reporter',
     'reporter_realname',    'priority',   'bug_severity', 'assigned_to',
     'assigned_to_realname', 'bug_status', 'product',      'component',
-    'resolution'
+    'resolution',           'bug_type'
   );
   push(@required_atom_columns, 'target_milestone')
     if Bugzilla->params->{'usetargetmilestone'};
@@ -1028,6 +1028,7 @@ if ($dotweak && scalar @bugs) {
   Bugzilla->switch_to_shadow_db();
 
   $vars->{'products'}    = $user->get_enterable_products;
+  $vars->{'types'}       = get_legal_field_values('bug_type');
   $vars->{'platforms'}   = get_legal_field_values('rep_platform');
   $vars->{'op_sys'}      = get_legal_field_values('op_sys');
   $vars->{'priorities'}  = get_legal_field_values('priority');
index 57fe3aadbb7471e54cfcb20b40525ecddb686684..91678849d6ce66c19f55e37f7e23fb85a10eb4f5 100644 (file)
@@ -8,7 +8,7 @@
 <!ELEMENT bug (bug_id, (alias?, creation_ts, short_desc, delta_ts, reporter_accessible,
     cclist_accessible, classification_id, classification, product, component,
     version, rep_platform, op_sys, bug_status, resolution?, dup_id?, see_also*,
-    bug_file_loc?, status_whiteboard?, keywords*, priority, bug_severity,
+    bug_file_loc?, status_whiteboard?, keywords*, bug_type, priority, bug_severity,
     target_milestone?, dependson*, blocked*, regressed_by*, regresses*, everconfirmed,
     reporter, assigned_to, cc*, (estimated_time, remaining_time, actual_time, deadline?)?,
     qa_contact?, votes?, token?, group*, flag*, long_desc*, attachment*)?)>
@@ -17,6 +17,7 @@
 >
 <!ELEMENT bug_id (#PCDATA)>
 <!ELEMENT alias (#PCDATA)>
+<!ELEMENT bug_type (#PCDATA)>
 <!ELEMENT reporter_accessible (#PCDATA)>
 <!ELEMENT cclist_accessible (#PCDATA)>
 <!ELEMENT exporter (#PCDATA)>
index 402039ffc64b72b999e7de821f320cee05770ddb..19ecce06ba3693e95a48c64f3fe73afc7a147a8e 100644 (file)
@@ -22,6 +22,7 @@ $answer{'usetargetmilestone'}   = 1;
 $answer{'webdotbase'}           = '/usr/bin/dot';
 $answer{'auth_delegation'}      = 1;
 $answer{'insidergroup'}         = 'admin';
+$answer{'default_bug_type'}     = 'defect';
 $answer{'defaultpriority'}      = '--';
 $answer{'defaultseverity'}      = 'normal';
 $answer{'skin'}                 = 'Mozilla';
index f4476a476823a735194efc8e1b1329a9ff0405b2..cf3036785c362d3ef1bd28c910a276075825c316 100755 (executable)
@@ -37,6 +37,7 @@ if (Bugzilla->params->{'requirelogin'} && !$user->id) {
 
 # Pass a bunch of Bugzilla configuration to the templates.
 my $vars = {};
+$vars->{'type'}       = get_legal_field_values('bug_type');
 $vars->{'priority'}   = get_legal_field_values('priority');
 $vars->{'severity'}   = get_legal_field_values('bug_severity');
 $vars->{'platform'}   = get_legal_field_values('rep_platform');
index f5e875f699296df243935a2c79075f8144dda639..93d63d395fbf7e3bf0d522900505fe6b98a32ec2 100644 (file)
@@ -257,6 +257,9 @@ use_see_also
     prevents addition of new relationships, but existing ones will continue to
     appear.
 
+default_bug_type
+    This is the type that newly entered bugs are set to.
+
 defaultpriority
     This is the priority that newly entered bugs are set to.
 
index 7da9018cb2018c40a6de2b4a1a7368f12ea5cbe9..cead3697eab7d8a1fe70812295671d2ffbd83d7d 100644 (file)
@@ -62,6 +62,7 @@ name              type   description
          ],
          "resolution": "INVALID",
          "id": 35,
+         "type": "defect",
          "qa_contact": "",
          "triage_owner": "",
          "version": "1.0",
@@ -222,6 +223,7 @@ summary                string    The summary of this bug.
 target_milestone       string    The milestone that this bug is supposed to be
                                  fixed by, or for closed bugs, the milestone that
                                  it was fixed for.
+type                   string    The type of the bug.
 update_token           string    The token that you would have to pass to the
                                  ``process_bug.cgi`` page in order to update this
                                  bug. This changes every time the bug is updated.
@@ -553,6 +555,7 @@ qa_contact        string    The login name of the bug's QA Contact. Note that
                             QA Contact set, if the field is disabled).
 triage_owner      string    The login name of the Triage Owner of a bug's
                             component.
+type              string    The Type field on a bug.
 url               string    The "URL" field of a bug.
 version           string    The Version field of a bug.
 whiteboard        string    Search the "Status Whiteboard" field on bugs for a
@@ -643,6 +646,7 @@ priority            string   (defaulted) What order the bug will be fixed in by
                              the developer, compared to the developer's other
                              bugs.
 severity            string   (defaulted) How severe the bug is.
+type                string   (defaulted) The basic category of the bug.
 alias               array    One or more brief aliases for the bug that can be
                              used instead of a bug number when accessing this bug.
                              Must be unique in all of this Bugzilla.
@@ -997,6 +1001,7 @@ status                 string   The status you want to change the bug to. Note
                                 you should also specify a ``resolution``.
 summary                string   The Summary field of the bug.
 target_milestone       string   The bug's Target Milestone.
+type                   string   The Type field on the bug.
 url                    string   The "URL" field of a bug.
 version                string   The bug's Version field.
 whiteboard             string   The Status Whiteboard field of a bug.
index 571f274e17f30843469fc56e74e834f813a002b5..d0453887dbc88914de471a810ecf813d6338ea30 100644 (file)
@@ -193,6 +193,7 @@ Example response for authenticated user:
           "defaultplatform" : "",
           "defaultpriority" : "--",
           "defaultseverity" : "normal",
+          "default_bug_type" : "defect",
           "duplicate_or_move_bug_status" : "RESOLVED",
           "emailregexp" : "^[\\w\\.\\+\\-=']+@[\\w\\.\\-]+\\.[\\w\\-]+$",
           "emailsuffix" : "",
@@ -232,6 +233,7 @@ A logged-in user can access the following parameters (listed alphabetically):
 * defaultplatform
 * defaultpriority
 * defaultseverity
+* default_bug_type
 * duplicate_or_move_bug_status
 * emailregexpdesc
 * emailsuffix
index 72fd7c679aef56e90dfc24e200f6c95c9d43af33..23922e53373277b8c6efdd22abf97b62fdb91609 100755 (executable)
@@ -119,6 +119,7 @@ if ($action eq 'new') {
   my $triage_owner       = trim($cgi->param('triage_owner')     || '');
   my @initial_cc         = $cgi->param('initialcc');
   my $isactive           = $cgi->param('isactive');
+  my $default_bug_type   = $cgi->param('default_bug_type');
 
   my $component = Bugzilla::Component->create({
     name             => $comp_name,
@@ -128,6 +129,7 @@ if ($action eq 'new') {
     initialqacontact => $default_qa_contact,
     initial_cc       => \@initial_cc,
     triage_owner_id  => $triage_owner,
+    default_bug_type => $default_bug_type,
 
     # XXX We should not be creating series for products that we
     # didn't create series for.
@@ -221,6 +223,7 @@ if ($action eq 'update') {
   });
 
   my $comp_old_name      = trim($cgi->param('componentold')     || '');
+  my $default_bug_type   = trim($cgi->param('default_bug_type') || '');
   my $default_assignee   = trim($cgi->param('initialowner')     || '');
   my $default_qa_contact = trim($cgi->param('initialqacontact') || '');
   my $description        = trim($cgi->param('description')      || '');
@@ -233,6 +236,7 @@ if ($action eq 'update') {
 
   $component->set_name($comp_name);
   $component->set_description($description);
+  $component->set_default_bug_type($default_bug_type);
   $component->set_default_assignee($default_assignee);
   $component->set_default_qa_contact($default_qa_contact);
   $component->set_triage_owner($triage_owner);
index aa07f679a2409683bb315da39813e26f1b5cd4b3..08eb68dfd110ade06d2b78539c0f4a6329591a9f 100755 (executable)
@@ -214,6 +214,7 @@ my %default;
 
 $vars->{'product'} = $product;
 
+$vars->{'bug_type'}     = get_legal_field_values('bug_type');
 $vars->{'priority'}     = get_legal_field_values('priority');
 $vars->{'bug_severity'} = get_legal_field_values('bug_severity');
 $vars->{'rep_platform'} = get_legal_field_values('rep_platform');
@@ -252,6 +253,7 @@ if ($cloned_bug_id) {
 
   # BMO: allow form value component to override the cloned bug component
   $default{'component_'}   = formvalue('component') || $cloned_bug->component;
+  $default{'bug_type'}     = $cloned_bug->bug_type;
   $default{'priority'}     = $cloned_bug->priority;
   $default{'bug_severity'} = $cloned_bug->bug_severity;
   $default{'rep_platform'} = $cloned_bug->rep_platform;
@@ -310,6 +312,8 @@ if ($cloned_bug_id) {
 
 else {
   $default{'component_'} = formvalue('component');
+  $default{'bug_type'}
+    = formvalue('bug_type', Bugzilla->params->{'default_bug_type'});
   $default{'priority'}
     = formvalue('priority', Bugzilla->params->{'defaultpriority'});
   $default{'bug_severity'}
index 0d110ba49a5b77b00b29975a36a7a976b1250f80..9cc35f9ca6b5fc475cc989a65d019b3271521fcc 100644 (file)
@@ -130,7 +130,7 @@ sub template_before_process {
 
     # fields that have a custom sortkey. (So they are correctly sorted
     # when using js)
-    my @sortkey_fields = qw(bug_status resolution bug_severity priority
+    my @sortkey_fields = qw(bug_status resolution bug_type bug_severity priority
       rep_platform op_sys);
 
     my %columns_sortkey;
@@ -1598,6 +1598,7 @@ sub field_end_of_create {
     short_desc   => "Custom field '$name' added to bugzilla.mozilla.org",
     product      => 'Data & BI Services Team',
     component    => 'Database Operations',
+    bug_type     => 'task',
     bug_severity => 'normal',
     op_sys       => 'All',
     rep_platform => 'All',
@@ -1969,6 +1970,7 @@ sub _post_employee_incident_bug {
       product           => 'mozilla.org',
       component         => 'Security Assurance: Incident',
       status_whiteboard => '[infrasec:incident]',
+      bug_type          => 'task',
       bug_severity      => 'critical',
       cc                => ['jstevensen@mozilla.com'],
       groups            => ['infrasec'],
@@ -1993,6 +1995,7 @@ sub _post_employee_incident_bug {
       short_desc   => 'Disable/Regenerate SSH Key',
       product      => $bug->product,
       component    => $bug->component,
+      bug_type     => 'task',
       bug_severity => 'critical',
       cc           => $bug->cc,
       groups       => [map { $_->{name} } @{$bug->groups}],
@@ -2130,6 +2133,7 @@ sub _post_shield_studies {
     short_desc   => '[SHIELD] Study Validation Review for ' . $params->{hypothesis},
     product      => 'Shield',
     component    => 'Shield Study',
+    bug_type     => 'task',
     bug_severity => 'normal',
     op_sys       => 'All',
     rep_platform => 'All',
@@ -2144,6 +2148,7 @@ sub _post_shield_studies {
     short_desc   => '[SHIELD] Shipping Status for ' . $params->{hypothesis},
     product      => 'Shield',
     component    => 'Shield Study',
+    bug_type     => 'task',
     bug_severity => 'normal',
     op_sys       => 'All',
     rep_platform => 'All',
@@ -2158,6 +2163,7 @@ sub _post_shield_studies {
     short_desc   => '[SHIELD] Data Review for ' . $params->{hypothesis},
     product      => 'Shield',
     component    => 'Shield Study',
+    bug_type     => 'task',
     bug_severity => 'normal',
     op_sys       => 'All',
     rep_platform => 'All',
@@ -2172,6 +2178,7 @@ sub _post_shield_studies {
     short_desc   => '[SHIELD] Legal Review for ' . $params->{hypothesis},
     product      => 'Legal',
     component    => 'Firefox',
+    bug_type     => 'task',
     bug_severity => 'normal',
     op_sys       => 'All',
     rep_platform => 'All',
index 73a4310cc32552fa8b6629c84902fa477d869b65..96e688c8f65881184365c04a4c2b305200f8b4ae 100644 (file)
@@ -100,6 +100,7 @@ function validateAndSubmit() {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="token" value="[% token FILTER html %]">
   <input type="hidden" name="assigned_to" value="jgriffin@mozilla.com">
index 7af36a986fa02f28ca61277ecf6cce3d3a551068..9b8d7e1116e74c870f626650b8dd58bbaa44fdd5 100644 (file)
@@ -118,6 +118,7 @@ function validateAndSubmit() {
   <input type="hidden" name="rep_platform" value="unspecified">
   <input type="hidden" name="op_sys" value="unspecified">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="priority" id="priority" value="--">
   <input type="hidden" name="target_milestone" id="target_milestone" value="---">
index b980ff9fc5734c97d461408b40c6218270252404..d050145ff0a0e5b6c368af728c507ac477f38009 100644 (file)
@@ -94,6 +94,7 @@ function toggleAreaOther() {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="token" value="[% token FILTER html %]">
 
index 73bdd27a4939e1de9d940ad915097433b3f8e187..41cd865089e7cd627920bd1bfa677c221f7a29e8 100644 (file)
@@ -157,6 +157,7 @@ YAHOO.util.Event.onDOMReady(function() {
   <input type="hidden" name="component" value="General">
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="version" value="unspecified">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
index faa335194dc8eaf6869c74f8503dd7cd5e49d3ba..29620ff65dd95a16837fcbaa9d23d4f4e3c0957b 100644 (file)
@@ -128,6 +128,7 @@ function toggleTypeOther(element) {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="cc" id="cc" value="">
   <input type="hidden" name="status_whiteboard" id="status_whiteboard" value="">
index 64d76c8b19f6ab597f018cac457445036e41d567..2e9df9a52f8082b2556658ea4e55d0b4e96ce11c 100644 (file)
@@ -97,6 +97,7 @@ $(document).ready(function() {
     <input type="hidden" name="rep_platform" value="All">
     <input type="hidden" name="op_sys" value="Other">
     <input type="hidden" name="version" value="unspecified">
+    <input type="hidden" name="bug_type" value="task">
     <input type="hidden" name="priority" value="--">
     <input type="hidden" name="bug_severity" value="normal">
     <input type="hidden" name="format" value="crm">
index 177a5776e4b40aa94304abbae056afd6d6934e3b..30a792716ddca9f7f8fa52af3ec03fb83168600c 100644 (file)
@@ -80,6 +80,7 @@
 <input type="hidden" name="component" value="General">
 <input type="hidden" name="rep_platform" value="All">
 <input type="hidden" name="op_sys" value="All">
+<input type="hidden" name="bug_type" value="task">
 <input type="hidden" name="priority" value="--">
 <input type="hidden" name="version" value="unspecified">
 <input type="hidden" name="comment" id="comment" value="">
index 018726ee7371cbe18dd15f5bba8fee5c6bf0e670..38c0ac74d3eb0fbd8376a9d21f69e263d51fc719 100644 (file)
@@ -81,6 +81,7 @@
 <input type="hidden" name="product" value="Finance">
 <input type="hidden" name="rep_platform" value="All">
 <input type="hidden" name="op_sys" value="Other">
+<input type="hidden" name="bug_type" value="task">
 <input type="hidden" name="priority" value="--">
 <input type="hidden" name="version" value="unspecified">
 <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
index 1a0673bec6cc7a4a01632d87cb653328c3cf1d12..1c4c3c0db63edda359a81e06c41002b667835d10 100644 (file)
@@ -89,6 +89,7 @@ function validateAndSubmit() {
   <input type="hidden" name="component" value="Budget Requests">
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="version" value="unspecified">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
index 7c7a01680caac0ada112b0903b3fb27995d54eeb..039148e8d09c3dfab96d67bcf3ac9a50a031adee 100644 (file)
@@ -119,6 +119,7 @@ $(document).ready(function() {
     <input type="hidden" name="rep_platform" value="All">
     <input type="hidden" name="op_sys" value="Other">
     <input type="hidden" name="version" value="unspecified">
+    <input type="hidden" name="bug_type" value="task">
     <input type="hidden" name="priority" value="--">
     <input type="hidden" name="bug_severity" value="normal">
     <input type="hidden" name="format" value="intern">
index b19363eb33d9b14a0a408c336eb3d64e4f2e5ba5..efeca2ce0b498f3fc65efe6f68eeeb664aac36ce 100644 (file)
@@ -75,6 +75,7 @@ function validateAndSubmit() {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="token" value="[% token FILTER html %]">
 
index 8bd51c09d228905e9241bae3e768277aca0cf6b7..b25059c8028e87156b6f6ce50f859eda4e1b0dd3 100644 (file)
@@ -96,6 +96,7 @@
   <input type="hidden" id="product" name="product" value="Infrastructure & Operations">
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="version" value="other">
   <input type="hidden" name="token" value="[% token FILTER html %]">
       <option value="normal">IT should get to it within the next week</option>
       <option value="minor" selected="selected">No rush, but hopefully IT can get to it soon</option>
       <option value="trivial">Whenever IT can get around to it</option>
-      <option value="enhancement">This is just an idea, filing it so we don't forget</option>
     </select>
   </td>
   <td>
index 55deedc65394c21cd12225042a7dd5531f61886f..17291479262037a6ee8c12f625813a2c42f9c63a 100644 (file)
@@ -80,6 +80,7 @@ label.required:before {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="bug_severity" value="normal">
   <input type="hidden" name="format" value="legal">
index b0e7641f496ee4d58dae2ae11427a3d9d4b31a63..aba8b3981b50490fe7a0eb3a501a155b05aefeb3 100644 (file)
@@ -131,9 +131,7 @@ strong.required:before {
       }
       var whiteboard = Dom.get('status_whiteboard');
       whiteboard.value = "[specification][type:" + request_type.toLowerCase() + "]";
-      if (request_type == 'feature') {
-        Dom.get('bug_severity').value = 'enhancement';
-      }
+      document.querySelector('[name="bug_type"]').value = request_type == 'bug' ? 'defect' : 'enhancement';
       return true;
     },
     _getRadioValueByClass: function(class_name) {
@@ -185,7 +183,8 @@ strong.required:before {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
-  <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
+  <input type="hidden" name="bug_type" value="task">
+  <input type="hidden" name="bug_severity" value="normal">
   <input type="hidden" name="token" value="[% token FILTER html %]">
   <input type="hidden" name="status_whiteboard" id="status_whiteboard" value="">
 
index 37a7c3ab9d48512861ce20a6c51d90cb605a5663..3de869dcf70c36db95cad5fdd0713875f2520425 100644 (file)
@@ -88,6 +88,7 @@ function validateAndSubmit() {
   <input type="hidden" name="version"      value="unspecified">
   <input type="hidden" name="bug_status"   value="UNCONFIRMED">
   <input type="hidden" name="rep_platform" value="Other">
+  <input type="hidden" name="bug_type"     value="defect">
   <input type="hidden" name="bug_severity" value="normal">
   <input type="hidden" name="status_whiteboard" value="[mobile-compat-form]">
   <input type="hidden" name="user_agent"   value="[% cgi.user_agent() FILTER html %]">
index f1b5326e2c54e72a5ad76099450d1945aa56fe83..25ce7482f96a31960a85112305d6d8d92881795b 100644 (file)
@@ -66,6 +66,7 @@
   <input type="hidden" id="product" name="product" value="mozilla.org">
   <input type="hidden" id="rep_platform" name="rep_platform" value="All">
   <input type="hidden" id="op_sys" name="op_sys" value="Other">
+  <input type="hidden" id="bug_type" name="bug_type" value="task">
   <input type="hidden" id="priority" name="priority" value="--">
   <input type="hidden" id="version" name="version" value="other">
   <input type="hidden" id="short_desc" name="short_desc" value="">
index a7eee012d6d74e4db14618dcfafd27051d5b5af2..56f72dd231fc50362ce3dd0dbff744e436d6e094 100644 (file)
@@ -295,6 +295,7 @@ function validate_form() {
 <input type="hidden" name="rep_platform" value="All">
 <input type="hidden" name="op_sys" value="Other">
 <input type="hidden" name="version" value="unspecified">
+<input type="hidden" name="bug_type" value="task">
 <input type="hidden" name="bug_severity" value="normal">
 <input type="hidden" name="group" value="pr-private">
 <input type="hidden" name="assigned_to" id="assigned_to" value="nobody@mozilla.org">
index 80e2909d546ab398d3cf5e158d20847b920669ef..818ff2e20569a7cd06cf2eba6173bb08ac83ab50 100644 (file)
@@ -82,6 +82,7 @@ $(function() {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="bug_severity" value="normal">
   <input type="hidden" name="format" value="name-clearance">
index 01ded31014c806c756a5b3233db026560ea91b87..d931de5ce32ffb81212422493e135fdefa1e20e5 100644 (file)
@@ -71,6 +71,7 @@ $(function() {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="bug_severity" value="normal">
   <input type="hidden" name="format" value="nda">
index ec5c0783a77f22a3d36f4315df053ab4bbb939c2..f6c99d633bd31b0dbe67a76a171ae4d8521c1399 100644 (file)
@@ -40,6 +40,7 @@
   <input type="hidden" name="op_sys" value="All">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="version" value="other">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" value="normal">
   <input type="hidden" name="groups" value="mozilla-employee-confidential">
   <input type="hidden" name="groups" value="infra">
index f2217b94584c77d228b3b2b5297feeff9db5132f..d7fb7cbf6f4a0bc58fb242f26997be4205e8103e 100644 (file)
@@ -84,6 +84,7 @@ function jobDescToggle(what) {
     <input type="hidden" name="rep_platform" value="All">
     <input type="hidden" name="op_sys" value="Other">
     <input type="hidden" name="version" value="unspecified">
+    <input type="hidden" name="bug_type" value="task">
     <input type="hidden" name="priority" value="--">
     <input type="hidden" name="bug_severity" value="normal">
     <input type="hidden" name="format" value="recruiting">
index a24365f9947ef41828932e676d1517f10823993b..59e04b062d24edb96c2bdbbb2044c57e67b51b5c 100644 (file)
@@ -100,6 +100,7 @@ function fieldValue(elem_id) {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="Trunk">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="short_desc" id="short_desc" value="">
index 3f938304e3eecd2758abc7e6e0c3870595bf8a97..6adfffda684521412c5eddb3e1a26d7dc11ce97d 100644 (file)
@@ -540,6 +540,7 @@ function showGear() {
   <input type="hidden" name="component" value="Swag Requests">
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="priority" value="--">
   <input type="hidden" name="version" value="unspecified">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
index 051a394c72359ce1e3ce063573d05e068e91cde3..c1835c113391d17fb33644bbb98d6cbafdbdff70 100644 (file)
@@ -42,7 +42,8 @@
 
         <input type="hidden" name="product" value="Marketing">
         <input type="hidden" name="component" value="Trademark Permissions">
-        <input type="hidden" name="bug_severity" value="enhancement">
+        <input type="hidden" name="bug_type" value="task">
+        <input type="hidden" name="bug_severity" value="normal">
         <input type="hidden" name="rep_platform" value="All">
         <input type="hidden" name="priority" value="P3">
         <input type="hidden" name="op_sys" value="Other">
index 7b051e74fb625ce916bb8035872e56f44d6f05c1..877c77bb24692bad77084243faad7d909141d3d6 100644 (file)
@@ -94,6 +94,7 @@ function toggleGoalOther() {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="Other">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="token" value="[% token FILTER html %]">
 
index 4229e156cebe9f983ecd0e2f6528d9430c710d6d..928f6c8e3fb649a88b881c410fb60d3cf30d7135 100644 (file)
@@ -78,6 +78,7 @@ function validateAndSubmit() {
   <input type="hidden" name="rep_platform" value="All">
   <input type="hidden" name="op_sys" value="All">
   <input type="hidden" name="version" value="unspecified">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="bug_severity" id="bug_severity" value="normal">
   <input type="hidden" name="priority" id="priority" value="--">
   <input type="hidden" name="target_milestone" id="target_milestone" value="---">
index f7a4ed95042242edcd1d71030594cb8b23d75ead..4b0df82fe62e970d07e077ff26ecafe38abfb86f 100644 (file)
 [% USE Bugzilla %]
 [% IF Bugzilla.request_cache.bmo_fields_page %]
   [%
+    vars.help_html.bug_type =
+      "This field describes the type of ${terms.abug}.
+       <table>
+        <tr>
+          <th>defect</th>
+          <td>regression, crash, hang, security vulnerability and any other general issue</td>
+        </tr>
+        <tr>
+          <th>enhancement</th>
+          <td>new feature, improvement in UI, performance, etc. and any other request for enhancement</td>
+        </tr>
+        <tr>
+          <th>task</th>
+          <td>refactoring, removal, replacement, enabling or disabling of functionality and any other task</td>
+        </tr>
+      </table>"
+
     vars.help_html.priority =
       "This field describes the importance and order in which $terms.abug
        should be fixed compared to other ${terms.bugs}. This field is utilized
@@ -56,9 +73,6 @@
           <td>cosmetic problem like misspelled words or misaligned
           text</td>
         </tr>
-        <tr>
-          <th>enhancement</th>
-          <td>Request for enhancement</td>
       </table>"
 
     vars.help_html.rep_platform =
index e824eb17a9084c1d246149b19595d47b28c1177c..d707ef2245abb7d4dc81e228307d3d3a026fc70c 100644 (file)
@@ -17,7 +17,7 @@
   the <a href="[% basepath FILTER none %]page.cgi?id=triage_request.html">triage request form</a>.
 </p>
 
-[% editbugs = basepath _ "enter_bug.cgi?assigned_to=nobody%40mozilla.org&bug_file_loc=http%3A%2F%2F&bug_ignored=0&bug_severity=normal&bug_status=NEW&cf_fx_iteration=---&cf_fx_points=---&component=Editbugs%20Requests&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&defined_groups=1&flag_type-4=X&flag_type-607=X&flag_type-791=X&flag_type-800=X&flag_type-803=X&flag_type-916=X&form_name=enter_bug&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=Unspecified&priority=--&product=bugzilla.mozilla.org&rep_platform=Unspecified&target_milestone=---&version=Production" %]
+[% editbugs = basepath _ "enter_bug.cgi?assigned_to=nobody%40mozilla.org&bug_file_loc=http%3A%2F%2F&bug_ignored=0&bug_type=task&bug_severity=normal&bug_status=NEW&cf_fx_iteration=---&cf_fx_points=---&component=Editbugs%20Requests&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&defined_groups=1&flag_type-4=X&flag_type-607=X&flag_type-791=X&flag_type-800=X&flag_type-803=X&flag_type-916=X&form_name=enter_bug&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=Unspecified&priority=--&product=bugzilla.mozilla.org&rep_platform=Unspecified&target_milestone=---&version=Production" %]
 
 <p>
   If you want <kbd>editbugs</kbd>, open a
index a5571ec35f5f31cd2f33fb5e1a6413b5fc6ce70c..9e607c502487e6caaa4c1def50688dd2c653332c 100644 (file)
@@ -88,6 +88,7 @@ sub initial_field_values {
   return {
     products => _name($user->get_enterable_products),
     keywords => _name([Bugzilla::Keyword->get_all()]),
+    default_bug_types => get_legal_field_values('bug_type'),
   };
 }
 
@@ -102,8 +103,11 @@ sub product_info {
   my $product
     = Bugzilla::Product->check({name => $params->{product_name}, cache => 1});
   $product = Bugzilla->user->can_enter_product($product, 1);
-  my @components = map { {name => $_->name, description => $_->description,} }
-    @{$product->components};
+  my @components = map { {
+    name => $_->name,
+    description => $_->description,
+    default_bug_type => $_->default_bug_type,
+  } } @{$product->components};
   return {components => \@components, versions => _name($product->versions),};
 }
 
@@ -131,6 +135,7 @@ sub edit {
   $options{bug_severity} = _name('bug_severity', $bug->bug_severity);
   $options{rep_platform} = _name('rep_platform', $bug->rep_platform);
   $options{op_sys}       = _name('op_sys',       $bug->op_sys);
+  $options{bug_type}     = _name('bug_type',     $bug->bug_type);
 
   # custom select fields
   my @custom_fields = grep {
index 51473ac7cf2d964b526206d2126ea6b0b6090e3d..0048e4f0558aef62882db04b5b15718a758cd68a 100644 (file)
         no_label = 1
         hide_on_edit = 1
     %]
+      [% IF bug.bug_type %]
+      <span class="bug-type-label iconic-text" data-type="[% bug.bug_type FILTER html %]">
+        <span class="icon" aria-hidden="true"></span>
+        [%~ bug.bug_type FILTER html ~%]
+      </span>
+      [% END %]
       <b class="bz_status_[% bug.bug_status FILTER html %]">
         [% bug.bug_status FILTER html %]
         [%+ bug.resolution FILTER html IF bug.resolution %]
       </div>
     [% END %]
 
+    [%# type %]
+    [% WRAPPER bug_modal/field.html.tmpl
+        field      = bug_fields.bug_type
+        field_type = constants.FIELD_TYPE_SINGLE_SELECT
+        hide_on_view = 1  # Because it's displayed on the header
+        help       = "https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_type"
+    %]
+      [% bug.bug_type FILTER html %]
+    [% END %]
+
     [%# importance %]
     [% WRAPPER bug_modal/field.html.tmpl
         label = "Importance"
index ca1198c1298933f886a72b6874d875af24a50172..242b92fa0d7c531f4e62cf02e80734a21228bb99 100644 (file)
@@ -255,13 +255,18 @@ input[type="number"] {
 
 #field-status_summary {
     border-top: 1px dotted silver;
-    padding-top: 4px;
+    padding-top: 6px;
+    padding-bottom: 4px;
 }
 
 #status-assignee, #status-assignee .vcard, #status-needinfo, #status-needinfo .vcard {
     display: inline;
 }
 
+#field-status_summary .bug-type-label {
+  margin-right: 8px;
+}
+
 #status-assignee, #status-needinfo {
     margin-left: 8px;
 }
index 13db968609b7f98fbd31670c2a6fd764d5c1222e..3f4ac0e9187381dee0ee4de36ab37c2694200ae5 100644 (file)
@@ -1,5 +1,6 @@
 var initial = {}
 var comp_desc = {}
+var comp_default_bug_type = {}
 var product_name = '';
 
 var component_load = function(product) {
@@ -20,8 +21,10 @@ var component_load = function(product) {
                 callback(data.components)
             });
 
-            for (var i in data.components)
-                comp_desc[data.components[i]["name"]] = data.components[i]["description"];
+            for (const comp of data.components) {
+                comp_desc[comp.name] = comp.description;
+                comp_default_bug_type[comp.name] = comp.default_bug_type;
+            }
 
             selectize = $("#version")[0].selectize;
             selectize.clear();
@@ -67,6 +70,16 @@ $(document).ready(function() {
                         callback(initial.products);
                     }
                 });
+
+                $("#bug_type").selectize({
+                    valueField: 'value',
+                    labelField: 'label',
+                    placeholder: 'Type',
+                    searchField: 'value',
+                    options: initial.default_bug_types.map(type => ({ label: type, value: type })),
+                    preload: true,
+                    create: false,
+                });
             },
             function() {
                 alert("Network issues. Please refresh the page and try again");
@@ -107,8 +120,9 @@ $(document).ready(function() {
     });
 
     component_sel.on("change", function () {
-        var selectize = $("#component")[0].selectize;
-        $('#comp_desc').text(comp_desc[selectize.getValue()]);
+        const name = $("#component")[0].selectize.getValue();
+        $('#comp_desc').text(comp_desc[name]);
+        $("#bug_type")[0].selectize.setValue(comp_default_bug_type[name]);
     });
 
     $('.create-btn')
index 23d423d5a1cce5916c118e925fe31612f576e81b..8d621cb2579aa8c2f417273d342e11d01ef381dc 100644 (file)
@@ -60,6 +60,7 @@ sub get_configuration {
 
   # Pass a bunch of Bugzilla configuration to the templates.
   my $vars = {};
+  $vars->{'type'}       = get_legal_field_values('bug_type');
   $vars->{'priority'}   = get_legal_field_values('priority');
   $vars->{'severity'}   = get_legal_field_values('bug_severity');
   $vars->{'platform'}   = get_legal_field_values('rep_platform');
index a00245ddfcf2a64a5d6e1dd2da05052d1821014b..11474a7aa92ef670f155d15cf55d2716db046148 100644 (file)
@@ -16,6 +16,7 @@ OLD2NEW = {
   'rep_platform'        => 'platform',
   'bug_severity'        => 'severity',
   'bug_status'          => 'status',
+  'bug_type'            => 'type',
   'short_desc'          => 'summary',
   'short_short_desc'    => 'summary',
   'bug_file_loc'        => 'url',
index d42e042976fb3999cd6b93a3fc5460671bc5a911..1c1b35aea7a9966769a7a7b03593643cab158ab5 100644 (file)
@@ -79,6 +79,7 @@ use constant BUG_CHOICE_FIELDS => qw(
 );
 
 use constant DEFAULT_VALUE_MAP => {
+  type_id      => 'default_bug_type',
   op_sys       => 'defaultopsys',
   rep_platform => 'defaultplatform',
   priority     => 'defaultpriority',
index 83d690e83731d3a099203b2d534ed9e98156aceb..34e0da809cc661afaa3e785afce133a3aac68227 100644 (file)
@@ -326,6 +326,7 @@ Product: <b><span id="dupes_product_name">?</span></b>:
 
 <form method="post" action="[% basepath FILTER none %]post_bug.cgi" enctype="multipart/form-data" onsubmit="return bugForm.validate()">
 <input type="hidden" name="token" value="[% token FILTER html %]">
+<input type="hidden" name="bug_type" value="defect">
 <input type="hidden" name="product" id="product" value="">
 <input type="hidden" name="component" id="component" value="">
 <input type="hidden" name="bug_severity" value="normal">
index eb68b07b12da0e9c42179056ec183904201d25b4..f651a6d9910dda3d412dfed37b1924fde68579b9 100644 (file)
@@ -69,6 +69,7 @@ sub post_bug_after_creation {
         . $params->{other_party},
       product      => 'Enterprise Information Security',
       component    => 'Rapid Risk Analysis',
+      bug_type     => 'task',
       bug_severity => 'normal',
       groups       => ['mozilla-employee-confidential'],
       op_sys       => 'All',
@@ -88,6 +89,7 @@ sub post_bug_after_creation {
       . $params->{other_party},
     product      => 'Finance',
     component    => 'Purchase Request Form',
+    bug_type     => 'task',
     bug_severity => 'normal',
     priority     => '--',
     groups       => ['finance'],
index d9e0e0c720c76321f8802aa8ced058e91ac57a2d..8d84e5ae09b50043a0e5fe76e70575641765f13f 100644 (file)
@@ -48,6 +48,7 @@
 </p>
 
 <form method="post" action="[% basepath FILTER none %]post_bug.cgi" id="mozProjectForm" enctype="multipart/form-data">
+  <input type="hidden" id="bug_type" name="bug_type" value="task">
   <input type="hidden" id="product" name="product" value="Legal">
   <input type="hidden" id="component" name="component" value="General">
   <input type="hidden" id="rep_platform" name="rep_platform" value="All">
index c878ff4d98262745806f11c933ae14dbcad338e3..cbb2186005e37af5a7c4d184224b531298a76718 100644 (file)
@@ -211,6 +211,7 @@ sub _bug {
     status           => $self->_status($status),
     summary          => _string($bug->short_desc),
     target_milestone => $self->_milestone($milestone),
+    type             => _string($bug->bug_type),
     url              => _string($bug->bug_file_loc),
     version          => $self->_version($version),
     whiteboard       => _string($bug->status_whiteboard),
index 1b5e6ef3448dd58c2e5ace96260adcbe5220fd5c..59edc11e0628f18c6c152d6e40ab7ef2cd07ad54 100644 (file)
@@ -23,6 +23,7 @@
 <h1>Community IT Discourse Request</h1>
 
 <form method="post" action="[% basepath FILTER none %]post_bug.cgi" id="tmRequestForm" name="f">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="product" value="Infrastructure & Operations">
   <input type="hidden" name="component" value="Community IT: Discourse">
   <input type="hidden" name="bug_severity" value="normal">
index 8c409e23f11e5dfba98140f8d9f4a17be745c005..1f4a13d8f2716608c0677789cb748c03ba2838be 100644 (file)
@@ -39,6 +39,7 @@
 </p>
 
 <form method="post" action="[% basepath FILTER none %]post_bug.cgi" id="tmRequestForm">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="product" value="Mozilla Reps">
   <input type="hidden" name="component" value="Mentorship">
   <input type="hidden" name="bug_severity" value="normal">
index e3edf2dd0023ee10a9c7d04dcecce3237ec9954a..f1dfefab81255901f5ee8d43036424cd2884a759 100644 (file)
@@ -79,6 +79,7 @@ function validateAndSubmit() {
 
   <input type="hidden" name="format" value="remo-budget">
   <input type="hidden" name="created-format" value="remo-budget">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="product" value="Mozilla Reps">
   <input type="hidden" name="component" value="Budget Requests">
   <input type="hidden" name="rep_platform" value="All">
index 07c5b205246e6e8a74987f566522fe4907b1ceef..ce18dc30ad40fa552823d844241bb6cf010aabf1 100644 (file)
@@ -71,6 +71,7 @@ function validateAndSubmit() {
       onSubmit="return validateAndSubmit();">
 
   <input type="hidden" name="format" value="remo-swag">
+  <input type="hidden" name="bug_type" value="task">
   <input type="hidden" name="product" value="Mozilla Reps">
   <input type="hidden" name="component" value="Swag Requests">
   <input type="hidden" name="rep_platform" value="All">
index 2c5aebdf47cc64126118c99df64b59b620df9b34..8e2b19a610a439be2b9a56e181f9ae6c8de3558f 100755 (executable)
@@ -698,8 +698,21 @@ sub process_bug {
     push(@query, "target_milestone");
   }
 
-  # For priority, severity, opsys and platform we check that the one being
+  # For type, priority, severity, opsys and platform we check that the one being
   # imported is valid. If it is not we use the defaults set in the parameters.
+  if (defined($bug_fields{'bug_type'})
+    && check_field('bug_type', scalar $bug_fields{'bug_type'}, undef, ERR_LEVEL))
+  {
+    push(@values, $bug_fields{'bug_type'});
+  }
+  else {
+    push(@values, $params->{'default_bug_type'});
+    $err .= "Unknown type ";
+    $err .= (defined $bug_fields{'bug_type'}) ? $bug_fields{'bug_type'} : "unknown";
+    $err .= ". Setting to default type \"" . $params->{'default_bug_type'} . "\".\n";
+  }
+  push(@query, "bug_type");
+
   if (
     defined($bug_fields{'bug_severity'})
     && check_field(
index 97f593fbb2b9680199675b564aa1348e40d64713..edc53e9491e264ae3fcf36097097a055f507ef50 100755 (executable)
@@ -58,6 +58,7 @@ if (lc($cgi->request_method) eq 'post') {
     short_desc   => scalar($cgi->param('short_desc')),
     product      => scalar($cgi->param('product')),
     component    => scalar($cgi->param('component')),
+    bug_type     => scalar($cgi->param('bug_type')),
     bug_severity => 'normal',
     groups       => \@groups,
     op_sys       => 'Unspecified',
index cbcfc68e6247648636dfd2fed376fabf1dc1a953..577e62d6863a5ad300a1bb672f8c5b68ce186232 100755 (executable)
@@ -115,6 +115,7 @@ push(
     bug_file_loc
     bug_severity
     bug_status
+    bug_type
     dependson
     keywords
     short_desc
index 4741dfc57258d084c05141b7f0ca9c294dd97fee..9ec444ffaf387220091e7c5eab4ee2c0f47b5583 100755 (executable)
@@ -235,7 +235,7 @@ foreach my $bug (@bug_objects) {
 # Component, target_milestone, and version are in here just in case
 # the 'product' field wasn't defined in the CGI. It doesn't hurt to set
 # them twice.
-my @set_fields = qw(op_sys rep_platform priority bug_severity
+my @set_fields = qw(op_sys rep_platform priority bug_severity bug_type
   component target_milestone version
   bug_file_loc status_whiteboard short_desc
   deadline remaining_time estimated_time
@@ -246,6 +246,7 @@ my @set_fields = qw(op_sys rep_platform priority bug_severity
 push(@set_fields, 'assigned_to') if !$cgi->param('set_default_assignee');
 push(@set_fields, 'qa_contact')  if !$cgi->param('set_default_qa_contact');
 my %field_translation = (
+  bug_type               => 'type',
   bug_severity           => 'severity',
   rep_platform           => 'platform',
   short_desc             => 'summary',
index 1af6499a21fcc98563e8bf8e968201afaddb7e14..895a0838681d7bbde35f3f5df01dd1151b164ec0 100644 (file)
@@ -349,6 +349,7 @@ my $admin_user = Bugzilla::User->check($config->{admin_user_login});
 Bugzilla->set_user($admin_user);
 
 my %field_values = (
+  'bug_type'     => 'defect',
   'priority'     => 'Highest',
   'bug_status'   => 'CONFIRMED',
   'version'      => 'unspecified',
index 6d3cb6323c9c39938a268694d59840a54e430edb..d99f2b7a62d517f40e939c698eb412d3960da8b2 100644 (file)
@@ -273,6 +273,8 @@ is_deeply(\@email_sentto, \@email_both, "Admin and normal user got bugmail");
 go_to_bug($sel, $bug1_id);
 
 # Severity change (bugmail to normal user but not admin)
+$sel->select_ok("bug_type", "label=defect");
+$sel->selected_label_is("bug_type", "defect");
 $sel->select_ok("bug_severity", "label=blocker");
 $sel->selected_label_is("bug_severity", "blocker");
 $sel->click_ok("commit");
@@ -320,6 +322,8 @@ log_in($sel, $config, 'admin');
 go_to_bug($sel, $bug1_id);
 
 # Severity change (bugmail to normal user but not admin)
+$sel->select_ok("bug_type", "label=defect");
+$sel->selected_label_is("bug_type", "defect");
 $sel->select_ok("bug_severity", "label=trivial");
 $sel->selected_label_is("bug_severity", "trivial");
 $sel->click_ok("commit");
@@ -384,6 +388,8 @@ log_in($sel, $config, 'editbugs');
 go_to_bug($sel, $bug1_id);
 
 # Severity change (bugmail to both admin and normal user)
+$sel->select_ok("bug_type", "label=defect");
+$sel->selected_label_is("bug_type", "defect");
 $sel->select_ok("bug_severity", "label=normal");
 $sel->selected_label_is("bug_severity", "normal");
 $sel->click_ok("commit");
index fcd22cd1eafc02bcbba21fe2c077be1a44f43831..e2457057f8485ac915905a1a266ca90dbb0b1cc9 100644 (file)
@@ -49,6 +49,7 @@ logout($sel);
 
 log_in($sel, $config, 'QA_Selenium_TEST');
 file_bug_in_product($sel, 'TestProduct');
+$sel->select_ok("bug_type",     "label=defect");
 $sel->select_ok("bug_severity", "label=critical");
 $sel->type_ok("short_desc", "Test bug editing");
 $sel->type_ok("comment",    "ploc");
@@ -64,6 +65,7 @@ $sel->is_text_present_ok('has been added to the database',
 $sel->select_ok("rep_platform", "label=Other");
 $sel->select_ok("op_sys",       "label=Other");
 $sel->select_ok("priority",     "label=Highest");
+$sel->select_ok("bug_type",     "label=defect");
 $sel->select_ok("bug_severity", "label=blocker");
 $sel->type_ok("bug_file_loc",      "foo.cgi?action=bar");
 $sel->type_ok("status_whiteboard", "[Selenium was here]");
@@ -104,6 +106,7 @@ $sel->click_ok("link=bug $bug1_id");
 check_page_load($sel, WAIT_TIME,
   qq{http://HOSTNAME:8000/show_bug.cgi?id=$bug1_id});
 $sel->title_like(qr/^$bug1_id /);
+$sel->select_ok("bug_type",     "label=defect");
 $sel->select_ok("bug_severity", "label=normal");
 $sel->select_ok("priority",     "label=High");
 $sel->select_ok("rep_platform", "label=All");
@@ -137,6 +140,7 @@ logout($sel);
 
 log_in($sel, $config, 'admin');
 go_to_bug($sel, $bug1_id);
+$sel->select_ok("bug_type",     "label=defect");
 $sel->select_ok("bug_severity", "label=blocker");
 $sel->select_ok("priority",     "label=Highest");
 $sel->type_ok("status_whiteboard", "[Selenium was here][admin too]");
@@ -261,6 +265,8 @@ $sel->type_ok("comment",
   "I have no privs, I can only comment (and remove people from the CC list)");
 ok(!$sel->is_element_present('//select[@name="product"]'),
   "Product field not editable");
+ok(!$sel->is_element_present('//select[@name="bug_type"]'),
+  "Type field not editable");
 ok(!$sel->is_element_present('//select[@name="bug_severity"]'),
   "Severity field not editable");
 ok(!$sel->is_element_present('//select[@name="priority"]'),
@@ -371,6 +377,7 @@ logout($sel);
 
 log_in($sel, $config, 'QA_Selenium_TEST');
 file_bug_in_product($sel, 'TestProduct');
+$sel->select_ok("bug_type", "label=defect");
 $sel->select_ok("bug_severity", "label=blocker");
 $sel->type_ok("short_desc", "New bug from me");
 
index 244a92514aa338f6c471b6f1fb4e1efc7d95473a..48373a8855a7c3c1c1d37f4a3f0496fa84e3b1a9 100644 (file)
@@ -14,7 +14,7 @@ use List::Util qw(first);
 use QA::Util;
 
 my ($config, @clients) = get_rpc_clients();
-plan tests => ($config->{test_extensions} ? 1374 : 1356);
+plan tests => ($config->{test_extensions} ? 1416 : 1398);
 
 use constant INVALID_FIELD_NAME => 'invalid_field';
 use constant INVALID_FIELD_ID   => -1;
@@ -76,7 +76,7 @@ sub GLOBAL_GENERAL_FIELDS {
 }
 
 use constant STANDARD_SELECT_FIELDS =>
-  qw(bug_severity bug_status op_sys priority rep_platform resolution);
+  qw(bug_type bug_severity bug_status op_sys priority rep_platform resolution);
 
 use constant ALL_SELECT_FIELDS =>
   (STANDARD_SELECT_FIELDS, qw(cf_qa_status cf_single_select));
index 303868517ece018e4fe2c4eda57b01ca7e86e0af..979db7068d5543717c4eef17abe89cf0db58f851 100644 (file)
 use strict;
 use warnings;
 use lib qw(lib ../../lib ../../local/lib/perl5);
-use Test::More tests => 269;
+use Test::More tests => 275;
 use QA::Util;
 my ($config, @clients) = get_rpc_clients();
 
 use constant INVALID_PRODUCT_ID => -1;
 use constant INVALID_FIELD_NAME => 'invalid_field';
 use constant GLOBAL_FIELDS =>
-  qw(bug_severity bug_status op_sys priority rep_platform resolution
+  qw(bug_type bug_severity bug_status op_sys priority rep_platform resolution
   cf_qa_status cf_single_select);
 use constant PRODUCT_FIELDS => qw(version target_milestone component);
 
index f42e1ae9dd7df0c640715a241c093be90a446e64..c15575a885bb7392d21ce32d827a6b2bfd5be0a3 100755 (executable)
--- a/query.cgi
+++ b/query.cgi
@@ -190,6 +190,7 @@ else {
 }
 @chfields = (sort(@chfields));
 $vars->{'chfield'} = \@chfields;
+$vars->{'bug_type'} = Bugzilla::Field->new({name => 'bug_type'})->legal_values;
 $vars->{'bug_status'}
   = Bugzilla::Field->new({name => 'bug_status'})->legal_values;
 $vars->{'rep_platform'}
index 23181bcfabc9e7dd70552e1ecd1084122e3adac3..25244b157f3e26a79aa995b296125389f9320d5d 100755 (executable)
@@ -109,7 +109,8 @@ sub queue {
                 attachments.ispatch,
                 bugs.bug_status,
                 bugs.priority,
-                bugs.bug_severity " .
+                bugs.bug_severity,
+                bugs.bug_type " .
 
     # Use the flags and flagtypes tables for information about the flags,
     # the bugs and attachments tables for target info, the profiles tables
@@ -305,6 +306,7 @@ sub queue {
       'bug_status'      => $data->[17],
       'priority'        => $data->[18],
       'bug_severity'    => $data->[19],
+      'bug_type'        => $data->[20],
     };
     push(@requests, $request);
   }
index cf95950b2a8c28fb575aece281c6099e6dd71305..c46578a30bf64b36c8d1733c74d18546bf922286 100755 (executable)
@@ -595,6 +595,8 @@ CrossCheck(
   ["flaginclusions", "component_id", "type_id"]
 );
 
+CrossCheck("bug_type", "value", ["bugs", "bug_type", "bug_id"]);
+
 # Check the former enum types -mkanat@bugzilla.org
 CrossCheck("bug_status", "value", ["bugs", "bug_status", "bug_id"]);
 
index a446e2b8214400c2e35ef3b1d23768a41a7c04a0..89cec5716085ed68ba71565c02fd98e206d86f4b 100755 (executable)
@@ -55,6 +55,7 @@ $answer{'usetargetmilestone'}   = 1;
 $answer{'webdotbase'}           = '/usr/bin/dot';
 $answer{'auth_delegation'}      = 1;
 $answer{'insidergroup'}         = 'admin';
+$answer{'default_bug_type'}     = 'defect';
 $answer{'defaultpriority'}      = '--';
 $answer{'defaultseverity'}      = 'normal';
 $answer{'maxattachmentsize'}    = 4095;
index b3ea49847efffdc067c4c89a95c8b8af431db3eb..7b5ff6108aefd90854c0fbe95c1df5871102d2cc 100755 (executable)
@@ -483,6 +483,7 @@ my %set_params = (
   confirmuniqueusermatch => 0,
   maxusermatches         => '100',
   debug_group            => 'editbugs',
+  default_bug_type       => 'defect',
   defaultpriority        => '--',         # FIXME: add priority
   defaultquery => 'resolution=---&emailassigned_to1=1&emailassigned_to2=1'
     . '&emailreporter2=1&emailqa_contact2=1&emailtype1=exact'
index 2685cb4f6b37aa948a0bcce954b2cc296fb5592e..74805ae5e9de05c2cd4ec3cb0f00bd7a631218ea 100755 (executable)
@@ -139,6 +139,7 @@ Bugzilla->set_user(Bugzilla::User->check({name => 'conduit@mozilla.bugs'}));
 Bugzilla::Bug->create({
   product      => 'Firefox',
   component    => 'General',
+  bug_type     => 'defect',
   priority     => '--',
   bug_status   => 'NEW',
   version      => 'unspecified',
index e72c49d447e8b394dd2831d1e48bd25931fd8470..4b9d9cc868bab7487a57037c751fff22da3a985d 100755 (executable)
@@ -48,7 +48,7 @@ my %whitelist = (
   ],
   bugs => [
     qw(
-      bug_id assigned_to bug_file_loc bug_severity bug_status
+      bug_id assigned_to bug_file_loc bug_severity bug_status bug_type
       creation_ts delta_ts short_desc op_sys priority product_id
       rep_platform reporter version component_id resolution
       target_milestone qa_contact status_whiteboard everconfirmed
index 2aee38e2b2d79022eee4f9bae243fa7787d4d697..735cca2d9daf99629bcfac8641fabfc004396679 100644 (file)
 /* Style bug rows according to severity. */
 .bz_blocker { color: red; font-weight: bold; }
 .bz_critical { color: red; }
-.bz_enhancement { color: #666; background-color: white; }
 
 /* Align columns in the "change multiple bugs" form to the right. */
 table#form tr th { text-align: right; }
 
-table.bz_buglist td, table.bz_buglist th {
-}
-
 /* we use a first-child class and not the pseudo-class because IE
  * doesn't support it :-( */
 tr.bz_secure td.first-child, a.bz_secure {
@@ -100,6 +96,10 @@ tr.bz_secure td.first-child, a.bz_secure {
   background-color: inherit;
 }
 
+th, td {
+  padding: 6px 4px;
+}
+
 th.first-child, td.first-child, a.bz_secure {
   padding-left: 20px;
 }
@@ -110,6 +110,12 @@ tr.bz_secure_mode_implied td.first-child {
 tr.bz_secure_mode_manual td.first-child {
 }
 
+td.bz_bug_type_column {
+  padding: 4px;
+  width: 1em;
+  text-align: center;
+}
+
 td.bz_estimated_time_column,
 td.bz_remaining_time_column,
 td.bz_actual_time_column,
index 7ba7d3aab1d15afc629d150506b8cc7c2f0183a9..d58abbdb0ec7a8ba93b5b25d1dd3484b6bb0705e 100644 (file)
@@ -2821,3 +2821,70 @@ pre.comment-text {
 .markdown-body hr {
   border-bottom-color: #eee;
 }
+
+/* Bug types */
+
+:root {
+  --bug-type-color-defect: #D62935;
+  --bug-type-color-enhancement: #2BC028;
+  --bug-type-color-task: #2886C9;
+}
+
+.bug-type-label .icon {
+  font-family: 'Material Icons';
+  line-height: 100%;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.bug-type-label[data-type="defect"] .icon::before {
+  content: '\E85F';
+  color: var(--bug-type-color-defect);
+}
+
+.bug-type-label[data-type="enhancement"] .icon::before {
+  content: '\E862';
+  color: var(--bug-type-color-enhancement);
+}
+
+.bug-type-label[data-type="task"] .icon::before {
+  content: '\E85D';
+  color: var(--bug-type-color-task);
+}
+
+.bug-type-label.iconic .icon {
+  font-size: 18px;
+  vertical-align: middle;
+}
+
+.bug-type-label.iconic-text {
+  border-radius: .2em;
+  padding: .2em .4em .2em .2em;
+  color: #FFF;
+  background-color: #666;
+  line-height: 16px;
+  font-weight: 600;
+}
+
+.bug-type-label.iconic-text[data-type="defect"] {
+  background-color: var(--bug-type-color-defect);
+}
+
+.bug-type-label.iconic-text[data-type="enhancement"] {
+  background-color: var(--bug-type-color-enhancement);
+}
+
+.bug-type-label.iconic-text[data-type="task"] {
+  background-color: var(--bug-type-color-task);
+}
+
+.bug-type-label.iconic-text .icon {
+  margin-right: .2em;
+  font-size: 16px;
+  vertical-align: bottom;
+}
+
+.bug-type-label.iconic-text .icon::before {
+  color: #FFF !important;
+  vertical-align: bottom;
+}
index 7f20ccf8499c500a338804a97ec7b652dfb8325f..992e17fbcd86c28ec581062589445bc46d8569f1 100644 (file)
@@ -27,6 +27,7 @@ my $bug_1 = Bugzilla::Bug->create({
   product    => 'Firefox',
   component  => 'General',
   ,
+  bug_type     => 'defect',
   bug_severity => 'normal',
   groups       => [],
   op_sys       => 'Unspecified',
@@ -46,6 +47,7 @@ my $bug_2    = Bugzilla::Bug->create({
   product    => 'Firefox',
   component  => 'General',
   ,
+  bug_type     => 'defect',
   bug_severity => 'normal',
   groups       => [],
   op_sys       => 'Unspecified',
index ffb67bbf778f4fc103a429a0eb67af58a55ff873..4d9f183b3ec71eb8cb6d7bf80dd05a6d1c570e7e 100644 (file)
     %]
   </td>
 </tr>
+<tr>
+  <th class="field_label"><label for="default_bug_type">Default [% terms.Bug %] Type:</label></th>
+  <td>
+    [% INCLUDE default_select
+        field_name   = 'default_bug_type'
+        field_value  = comp.default_bug_type
+        field_values = bug_fields.bug_type.legal_values
+    %]
+  </td>
+</tr>
 <tr>
   <th class="field_label"><label for="initialowner">Default Assignee:</label></th>
   <td>
 </tr>
 
 [% Hook.process('rows') %]
+
+[% BLOCK default_select %]
+  <select name="[% field_name FILTER html %]">
+    [% FOREACH v IN field_values %]
+      <option value="[% v.value FILTER html %]" [% " selected" IF field_value == v.value %]>
+        [% v.value FILTER html %]
+      </option>
+    [% END %]
+  </select>
+[% END %]
index 5001f6ed9e76ecb62a9bea0b73ca97bbe3c2e396..aca4c95a7938d7a6734816ec561e0b243096d188 100644 (file)
        heading => "Description"
        allow_html_content => 1
      },
+     {
+       name => "default_bug_type"
+       heading => "Default $terms.Bug Type"
+     },
      {
        name => "initialowner"
        heading => "Default Assignee"
index ef5ec55e5313c9f929e3628cbf7ba8ab9bd98e53..2052d48b39aded3c3527ff49a4224846f881dc6e 100644 (file)
@@ -64,6 +64,8 @@
                   "$terms.Bugzilla will then use the operating system that the browser " _
                   "reports to be running on as the default.",
 
+  default_bug_type => "This is the type that newly entered $terms.bugs are set to.",
+
   collapsed_comment_tags => "A comma separated list of tags which, when applied " _
                             "to comments, will cause them to be collapsed by default",
   }
index e7b480c69801e61c36248866b0f99d30b32b19a0..011bcda16665bdc9135a551183eb8d2880d1df02 100644 (file)
           [% FOREACH item = param.choices %]
             <option value="[% item FILTER html %]"
                     [% " selected=\"selected\"" IF item == Param(param.name) %]>
-              [% IF param.name == "defaultseverity" %]
+              [% IF param.name == "default_bug_type" %]
+                [% display_value("bug_type", item) FILTER html %]
+              [% ELSIF param.name == "defaultseverity" %]
                 [% display_value("bug_severity", item) FILTER html %]
               [% ELSIF param.name == "defaultplatform" %]
                 [% display_value("rep_platform", item) FILTER html %]
index 132b4380adbac32e3e3f593518bae059538a13a9..18e02b926b833b6d2ec90f69abb33775fd9a2e15 100644 (file)
@@ -417,9 +417,6 @@ function PutDescription() {
           Trivial: A cosmetic problem, such as a misspelled word or
           misaligned text.
         </option>
-        <option name="enhancement" value="enhancement">
-          Enhancement: Request for new feature or enhancement.
-        </option>
       </select>
       <p>
         Say how serious the problem is, or if your [% terms.bug %] is a
index 3383954f1a700be6dcebc6e79b0984ad1e6ed4a5..cb92f137ddb65ce2b5fba7c0fb8619e3ecf3bb46 100644 (file)
@@ -66,6 +66,7 @@ function initCrashSignatureField() {
 
 var initialowners = new Array([% product.components.size %]);
 var last_initialowner;
+var default_bug_types = new Array([% product.components.size %]);
 var initialccs = new Array([% product.components.size %]);
 var components = new Array([% product.components.size %]);
 var comp_desc = new Array([% product.components.size %]);
@@ -80,6 +81,7 @@ var flags = new Array([% product.components.size %]);
     components[[% count %]] = "[% c.name FILTER js %]";
     comp_desc[[% count %]] = "[% c.description FILTER html_light FILTER js %]";
     initialowners[[% count %]] = "[% c.default_assignee.login FILTER js %]";
+    default_bug_types[[% count %]] = "[% c.default_bug_type FILTER js %]";
     [% flag_list = [] %]
     [% FOREACH f = c.flag_types.bug %]
       [% flag_list.push(f.id) %]
@@ -129,6 +131,7 @@ function set_assign_to() {
             last_initialowner = owner;
         }
 
+        form.bug_type.value = default_bug_types[index];
         document.getElementById('initial_cc').innerHTML = initialccs[index];
         document.getElementById('comp_desc').innerHTML = comp_desc[index];
 
@@ -301,9 +304,9 @@ TUI_hide_default('expert_fields');
 
   <tr>
     [% INCLUDE "bug/field-label.html.tmpl"
-      field = bug_fields.version editable = 1 rowspan = 3
+      field = bug_fields.version editable = 1 rowspan = 4
     %]
-    <td rowspan="3">
+    <td rowspan="4">
       <select name="version" id="version" size="5">
         [%- FOREACH v = version %]
           [% NEXT IF NOT v.is_active %]
@@ -314,6 +317,12 @@ TUI_hide_default('expert_fields');
       </select>
     </td>
 
+    [% INCLUDE bug/field.html.tmpl
+      bug = default, field = bug_fields.bug_type, editable = 1,
+      value = default.bug_type %]
+  </tr>
+
+  <tr>
     [% INCLUDE bug/field.html.tmpl
       bug = default, field = bug_fields.bug_severity, editable = 1,
       value = default.bug_severity %]
index 9e51d9fba9c61b3dbfe366e17dd7106b50800e7d..5f741f6331c15a0f1dff97b492085b75b129c68f 100644 (file)
  [%###############################################################%]
  [%# Importance (priority and severity) #%]
  [%###############################################################%]
+    <tr>
+      <th class="field_label">
+        <label for="type" accesskey="t">
+          <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_type"><u>T</u>ype</a></label>
+      </th>
+      <td>
+       [% INCLUDE bug/field.html.tmpl
+            bug = bug, field = bug_fields.bug_type,
+            no_tds = 1, value = bug.bug_type
+            editable = bug.check_can_change_field('bug_type', 0, 1) %]
+      </td>
+    </tr>
+
     <tr>
       <th class="field_label">
         <label for="priority" accesskey="i">
index 9209525b96590d41d731018512fb162e55572d24..d6f7da3a932605f4fd173d5ae6876e438c1f8f20 100644 (file)
@@ -54,11 +54,14 @@ bug_id =>
   _ " of ${terms.Bugzilla}.",
 
 bug_severity =>
-  "How severe the $terms.bug is, or whether it's an enhancement.",
+  "How severe the $terms.bug is.",
 
 bug_status =>
   "$terms.Abug may be in any of a number of states.",
 
+bug_type =>
+  "The basic category of the ${terms.bug}."
+
 cc =>
   "Users who may not have a direct role to play on this $terms.bug, but who
    are interested in its progress.",
index 4075eb70a41b750376ffb566c0a3bc8129378129..8f592bae74b9d7af95e094d3680bc6ff840f1f2d 100644 (file)
             edit_only = 1
             editable = 1
           %]
+
+          [% INCLUDE bug_modal/field.html.tmpl
+            field = bug_fields.bug_type
+            field_type = constants.FIELD_TYPE_SINGLE_SELECT
+            help = "https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_type"
+            edit_only = 1
+            editable = 1
+          %]
         [% END %]
         [% WRAPPER bug_modal/module.html.tmpl title = "Tracking" %]
           [%# keywords %]
index d335c5559b7d0bcf244a6389ff8ab3ec24f898de..e17138237e452e13356516cc5089b1969569fccb 100644 (file)
       [% PROCESS rightcell %]
     </tr>
 
+    [% PROCESS row cell = "bug_type" %]
+
     <tr>
       <th>[% field_descs.bug_severity FILTER html %]:</th>
       <td class="bz_[% bug.bug_severity FILTER css_class_quote -%]">
index 3576698d0b9c06bf9761135b435c021256c7cea0..6309e836eebbb3ad355f3f000da33692e382e2be 100644 (file)
@@ -12,6 +12,7 @@ X-Bugzilla-ID: [% bug.id %]
 [% IF attach_id %]
 X-Bugzilla-Attach-ID: [% attach_id %]
 [% END %]
+X-Bugzilla-Bug-Type: [% bug.bug_type %]
 X-Bugzilla-Product: [% bug.product %]
 X-Bugzilla-Component: [% bug.component %]
 X-Bugzilla-Version: [% bug.version %]
index 99584f8fdcd9e15637d1def21c4ea09e0f47006e..995841a621e54ec46f5cad7e7480a747c707b424 100644 (file)
@@ -104,6 +104,7 @@ if ( $stash->get("in_template_var") ) {
         "bug_id"                  => "$terms->{Bug} ID",
         "bug_severity"            => "Severity",
         "bug_status"              => "Status",
+        "bug_type"                => "Type",
         "changeddate"             => "Changed",
         "cc"                      => "CC",
         "classification"          => "Classification",
index 8a9a368bdb381cc2d781d4747a90c7e8823fbed4..d08c421747866af4aa2bf0d6517cf97760b8e4fa 100644 (file)
       [% IF changes.description.defined %]
         <li>Description updated to '[% comp.description FILTER html_light %]'</li>
       [% END %]
+      [% IF changes.default_bug_type.defined %]
+        <li>Default [% terms.bug %] type updated to '[% comp.default_bug_type FILTER html %]'</li>
+      [% END %]
       [% IF changes.initialowner.defined %]
         <li>Default assignee updated to '[% comp.default_assignee.login FILTER html %]'</li>
       [% END %]
index 0637eb159ecff53e909298de923652269e6eebdb..148e4ec7f8b4da609891e46b9f26d208dcc96cac 100644 (file)
 
   <tr>
     <th><label for="bug_status">Status:</label></th>
-    <td colspan="3">[% PROCESS status_section %]</td>
+    <td>[% PROCESS status_section %]</td>
+
+    <th>
+      <label for="bug_type">
+        <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_type">Type</a>:
+      </label>
+    </th>
+    <td>
+      [% PROCESS selectmenu menuname = "bug_type"
+                            menuitems = types %]
+    </td>
   </tr>
   [% IF user.is_timetracker %]
     <tr>
index 5568b7bff2b5e88cd2dc7cd9c7af3da6ae1458ee..b853d3ea06428110dec03e85d149a92ad4dec97f 100644 (file)
@@ -75,6 +75,9 @@
       </tr><tr class="bz_feed_resolution">
         <td>[% columns.resolution.title FILTER html %] </td>
         <td>[% display_value("resolution", bug.resolution) FILTER html %]</td>
+      </tr><tr class="bz_feed_type">
+        <td>[% columns.bug_type.title FILTER html %]</td>
+        <td>[% display_value("bug_type", bug.bug_type) FILTER html %]</td>
       </tr><tr class="bz_feed_priority">
         <td>[% columns.priority.title FILTER html %]</td>
         <td>[% display_value("priority", bug.priority) FILTER html %]</td>
index fd572f4337c54c0ff550d9a9b71395f49e580a8f..1d4e6f93ccf57bd1eb500d7c6df3b7ddc67aff95 100644 (file)
@@ -45,6 +45,7 @@
 [%# Setting maxlength => 0 means no limit. We set it for performance reasons. %]
 [% abbrev =
   {
+    "bug_type"             => { maxlength => 0 } ,
     "bug_severity"         => { maxlength => 3 , title => "Sev" } ,
     "priority"             => { maxlength => 7 , title => "Pri" } ,
     "rep_platform"         => { maxlength => 3 , title => "Plt" } ,
   [% count = loop.count() %]
 
   <tr id="b[% bug.bug_id %]" class="bz_bugitem
+             bz_[% bug.bug_type FILTER css_class_quote -%]
              bz_[% bug.bug_severity FILTER css_class_quote -%]
              bz_[% bug.priority FILTER css_class_quote -%]
              bz_[% bug.bug_status FILTER css_class_quote -%]
       [% END %]
       [% IF col_abbrev.format_value %]
         [%- bug.$column FILTER format(col_abbrev.format_value) FILTER html -%]
+      [% ELSIF column == 'bug_type' %]
+        <span class="bug-type-label iconic" title="[% bug.bug_type FILTER html %]"
+              aria-label="[% bug.bug_type FILTER html %]" data-type="[% bug.bug_type FILTER html %]">
+          <span class="icon" aria-hidden="true"></span>
+        </span>
       [% ELSIF column == 'actual_time' ||
                column == 'remaining_time' ||
                column == 'estimated_time' %]
index f0da8d78ee0bcdfb397b93de3a06302f1a662f12..e9619f78872b0a50dda4b254a151e320acd342a9 100644 (file)
@@ -56,6 +56,7 @@
                 bug_file_loc?,
                 status_whiteboard?,
                 keywords*,
+                bug_type,
                 priority,
                 bug_severity,
                 target_milestone?,
@@ -87,6 +88,7 @@
 >
 <!ELEMENT bug_id (#PCDATA)>
 <!ELEMENT alias (#PCDATA)>
+<!ELEMENT bug_type (#PCDATA)>
 <!ELEMENT reporter_accessible (#PCDATA)>
 <!ELEMENT cclist_accessible (#PCDATA)>
 <!ELEMENT exporter (#PCDATA)>
index 6ac325f03438ff1210d11a9e1c77667e2c5c3686..e01f8135832a790e000268dc87dc012afdd38cbf 100644 (file)
@@ -46,6 +46,7 @@
     { name => "delta",
       description => "Change in last<br>$changedsince day(s)" },
     { name => "component", description => field_descs.component },
+    { name => "bug_type", description => field_descs.bug_type },
     { name => "bug_severity", description => field_descs.bug_severity },
     { name => "op_sys", description => field_descs.op_sys },
     { name => "target_milestone", description => field_descs.target_milestone },
           <td class="count">[% item.count FILTER html %]</td>
           <td class="delta">[% item.delta FILTER html %]</td>
           <td class="component">[% bug.component FILTER html %]</td>
+          <td class="bug_type">
+            [%- display_value('bug_type', bug.bug_type) FILTER html %]
+          </td>
           <td class="bug_severity">
             [%- display_value('bug_severity', bug.bug_severity) FILTER html %]
           </td>
index f8a2b11c40c367926d413bb3ea6460f9dab84279..cfb1c82b9f277b7b433b4bc6801c527e10165502 100644 (file)
@@ -209,6 +209,7 @@ to some group are shown by default.
 
     <tr class="bz_bugitem bz_[% request.bug_severity FILTER css_class_quote -%]
                           bz_[% request.priority FILTER css_class_quote -%]
+                          bz_[% request.bug_type FILTER css_class_quote -%]
                           bz_[% request.bug_status FILTER css_class_quote %]">
       [% FOREACH column = display_columns %]
         [% NEXT IF column == group_field || excluded_columns.contains(column) %]
@@ -251,7 +252,7 @@ to some group are shown by default.
 [% BLOCK display_bug %]
   <a href="[% basepath FILTER none %]show_bug.cgi?id=[% request.bug_id %]"
      [%- ' class="bz_secure"' IF request.restricted %]>
-    [% request.bug_id %] ([% request.priority FILTER html %]/[% request.bug_severity FILTER html %]): [%+ request.bug_summary FILTER html %]</a>
+    [% request.bug_id %] ([% request.bug_type FILTER html %]/[% request.priority FILTER html %]/[% request.bug_severity FILTER html %]): [%+ request.bug_summary FILTER html %]</a>
 [% END %]
 
 [% BLOCK display_attachment %]
index a9cf3ab894e47c1dbd2f9bfe399a0524b4b7d75e..54d297d50da6f8948054da480cca8066d8443665 100644 (file)
@@ -200,7 +200,8 @@ TUI_hide_default('information_query');
     [% IF user.is_timetracker %] [%+ field_descs.deadline FILTER html %], [%+ END %]
     [% terms.Bug %] Numbers, [%+ field_descs.version FILTER html %],
     [% IF Param('usetargetmilestone') %] [%+ field_descs.target_milestone FILTER html %], [%+ END %]
-    [% field_descs.bug_severity FILTER html %], [%+ field_descs.priority FILTER html %], [%+ field_descs.rep_platform FILTER html %],
+    [%+ field_descs.bug_type FILTER html %], [% field_descs.bug_severity FILTER html %],
+    [%+ field_descs.priority FILTER html %], [%+ field_descs.rep_platform FILTER html %],
     [%+ field_descs.op_sys FILTER html %]
   </span>
 </div>
@@ -262,7 +263,7 @@ TUI_hide_default('information_query');
 
   [% Hook.process('after_freetext_fields') %]
 
-  [%# *** Status Resolution Severity Priority Hardware OS *** %]
+  [%# *** Status Resolution Type Severity Priority Hardware OS *** %]
   <div>
     [% Hook.process('before_selects_bottom') %]
     [% fake_version_field = { name => bug_fields.version.name,
@@ -279,6 +280,11 @@ TUI_hide_default('information_query');
               value => default.target_milestone
         %]
     [% END %]
+    [% INCLUDE "search/field.html.tmpl"
+          field => bug_fields.bug_type
+          accesskey=> "t"
+          value => default.bug_type
+    %]
     [% INCLUDE "search/field.html.tmpl"
           field => bug_fields.bug_severity
           accesskey=> "v"
index 7f9e608ed7825db8952d7c27fcc8872ee2669695..093660b2f4bdd19fc0cf32638a8ff245ae515091 100644 (file)
@@ -61,6 +61,7 @@
     <table width="100%">
       <tr>
         <th align="left">ID</th>
+        <th align="left">Type</th>
         <th align="left">Sev</th>
         <th align="left">Pri</th>
         <th align="left">Plt</th>
@@ -74,6 +75,7 @@
         <tr>
           <td align="left"><a href="[%+ urlbase FILTER html %]show_bug.cgi?id=
               [%- bug.bug_id %]">[% bug.bug_id %]</a></td>
+          <td align="left">[% display_value("bug_type", bug.bug_type) FILTER html %]</td>
           <td align="left">[% display_value("bug_severity", bug.bug_severity) FILTER html %]</td>
           <td align="left">[% display_value("priority", bug.priority) FILTER html %]</td>
           <td align="left">[% display_value("rep_platform", bug.rep_platform) FILTER html %]</td>
index 13216d895e8ccb96184128304e956d2090b52ac0..78af0b3d2e79b37676648bb5f4c3c5c018f80586 100644 (file)
@@ -49,6 +49,7 @@
   [% FOREACH bug=query.bugs %]
   [% terms.Bug +%] [%+ bug.bug_id %]:
   [%+ urlbase %]show_bug.cgi?id=[% bug.bug_id +%]
+      Type: [%+ display_value("bug_type", bug.bug_type) -%]
   Priority: [%+ display_value("priority", bug.priority) -%]
   Severity: [%+ display_value("bug_severity", bug.bug_severity) -%]
   Platform: [%+ display_value("rep_platform", bug.rep_platform) %]
index 57c84436cd8a1e9ba14e5b5a03bfe82af73d6997..a79df9b62347e24bfa60fa3434ff7ee62f413053 100644 (file)
@@ -33,6 +33,7 @@ $answer{'usetargetmilestone'}   = 1;
 $answer{'webdotbase'}           = '/usr/bin/dot';
 $answer{'auth_delegation'}      = 1;
 $answer{'insidergroup'}         = 'admin';
+$answer{'default_bug_type'}     = 'defect';
 $answer{'defaultpriority'}      = '--';
 $answer{'defaultseverity'}      = 'normal';
 $answer{'skin'}                 = 'Mozilla';
index 1eeda08d714a5a91921398fb24f68cae282359df..0d65d7b4a6e77cedf6528403d5ddcf9be550c244 100755 (executable)
--- a/whine.pl
+++ b/whine.pl
@@ -425,6 +425,7 @@ sub run_queries {
     # Execute the saved query
     my @searchfields = qw(
       bug_id
+      bug_type
       bug_severity
       priority
       rep_platform
index 34953d697334a2e5a9bd791659c419fe1bdd646f..2a7ee32051cf34a6928fb361bd5df957a7ae2445 100644 (file)
@@ -487,6 +487,7 @@ use constant GREATERTHAN_OVERRIDE => (
   assigned_to    => {contains => [2, 3, 4, 5]},
   bug_id         => {contains => [2, 3, 4, 5]},
   bug_group      => {contains => [1, 2, 3, 4]},
+  bug_type       => {contains => [2, 3, 4, 5]},
   bug_severity   => {contains => [2, 3, 4, 5]},
   bug_status     => {contains => [2, 3, 4, 5]},
   component      => {contains => [2, 3, 4, 5]},