4.4. Classifications, Products, Components, Versions, and Milestones
********************************************************************

Bugs in Bugzilla are classified into one of a set of admin-defined
Components. Components are themselves each part of a single Product.
Optionally, Products can be part of a single Classification, adding a
third level to the hierarchy.


4.4.1. Classifications
======================

Classifications are used to group several related products into one
distinct entity.

For example, if a company makes computer games, they could have a
classification of "Games", and a separate product for each game. This
company might also have a "Common" classification, containing products
representing units of technology used in multiple games, and perhaps
an "Other" classification containing a few special products that
represent items that are not actually shipping products (for example,
"Website", or "Administration").

The classifications layer is disabled by default; it can be turned on
or off using the useclassification parameter in the *Bug Fields*
section of Parameters.

Access to the administration of classifications is controlled using
the *editclassifications* system group, which defines a privilege for
creating, destroying, and editing classifications.

When activated, classifications will introduce an additional step when
filling bugs (dedicated to classification selection), and they will
also appear in the advanced search form.


4.4.2. Products
===============

Products usually represent real-world shipping products. Many of
Bugzilla's settings are configurable on a per-product basis.

When creating or editing products the following options are available:

Product
   The name of the product

Description
   A brief description of the product

Open for bug entry
   Deselect this box to prevent new bugs from being entered against
   this product.

Enable the UNCONFIRMED status in this product
   Select this option if you want to use the UNCONFIRMED status (see
   Workflow)

Default milestone
   Select the default milestone for this product.

Version
   Specify the default version for this product.

Create chart datasets for this product
   Select to make chart datasets available for this product.

It is compulsory to create at least one component in a product, and so
you will be asked for the details of that too.

When editing a product you can change all of the above, and there is
also a link to edit Group Access Controls; see Assigning Group
Controls to Products.


4.4.2.1. Creating New Products
------------------------------

To create a new product:

1. Select "Administration" from the footer and then choose "Products"
   from the main administration page.

2. Select the "Add" link in the bottom right.

3. Enter the details as outlined above.


4.4.2.2. Editing Products
-------------------------

To edit an existing product, click the "Products" link from the
"Administration" page. If the useclassification parameter is turned
on, a table of existing classifications is displayed, including an
"Unclassified" category. The table indicates how many products are in
each classification. Click on the classification name to see its
products. If the useclassification parameter is not in use, the table
lists all products directly. The product table summarizes the
information defined when the product was created. Click on the product
name to edit these properties, and to access links to other product
attributes such as the product's components, versions, milestones, and
group access controls.


4.4.2.3. Adding or Editing Components, Versions and Target Milestones
---------------------------------------------------------------------

To add new or edit existing Components, Versions, or Target Milestones
to a Product, select the "Edit Components", "Edit Versions", or "Edit
Milestones" links from the "Edit Product" page. A table of existing
Components, Versions, or Milestones is displayed. Click on an item
name to edit the properties of that item. Below the table is a link to
add a new Component, Version, or Milestone.

For more information on components, see Components.

For more information on versions, see Versions.

For more information on milestones, see Milestones.


4.4.2.4. Assigning Group Controls to Products
---------------------------------------------

On the "Edit Product" page, there is a link called "Edit Group Access
Controls". The settings on this page control the relationship of the
groups to the product being edited.

Group Access Controls are an important aspect of using groups for
isolating products and restricting access to bugs filed against those
products. For more information on groups, including how to create,
edit, add users to, and alter permission of, see Groups and Security.

After selecting the "Edit Group Access Controls" link from the "Edit
Product" page, a table containing all user-defined groups for this
Bugzilla installation is displayed. The system groups that are created
when Bugzilla is installed are not applicable to Group Access
Controls. Below is description of what each of these fields means.

Groups may be applicable (i.e. bugs in this product can be associated
with this group), default (i.e. bugs in this product are in this group
by default), and mandatory (i.e. bugs in this product must be
associated with this group) for each product. Groups can also control
access to bugs for a given product, or be used to make bugs for a
product totally read-only unless the group restrictions are met. The
best way to understand these relationships is by example. See Common
Applications of Group Controls for examples of product and group
relationships.

Note:

  Products and Groups are not limited to a one-to-one relationship.
  Multiple groups can be associated with the same product, and groups
  can be associated with more than one product.

If any group has *Entry* selected, then the product will restrict bug
entry to only those users who are members of *all* the groups with
*Entry* selected.

If any group has *Canedit* selected, then the product will be read-
only for any users who are not members of *all* of the groups with
*Canedit* selected. *Only* users who are members of all the *Canedit*
groups will be able to edit bugs for this product. This is an
additional restriction that enables finer-grained control over
products rather than just all-or-nothing access levels.

The following settings let you choose privileges on a *per-product
basis*. This is a convenient way to give privileges to some users for
some products only, without having to give them global privileges
which would affect all products.

Any group having *editcomponents* selected  allows users who are in
this group to edit all aspects of this product, including components,
milestones, and versions.

Any group having *canconfirm* selected allows users who are in this
group to confirm bugs in this product.

Any group having *editbugs* selected allows users who are in this
group to edit all fields of bugs in this product.

The *MemberControl* and *OtherControl* are used in tandem to determine
which bugs will be placed in this group. The only allowable
combinations of these two parameters are listed in a table on the
"Edit Group Access Controls" page. Consult this table for details on
how these fields can be used. Examples of different uses are described
below.


4.4.2.5. Common Applications of Group Controls
----------------------------------------------

The use of groups is best explained by providing examples that
illustrate configurations for common use cases. The examples follow a
common syntax: *Group: Entry, MemberControl, OtherControl, CanEdit,
EditComponents, CanConfirm, EditBugs*, where "Group" is the name of
the group being edited for this product. The other fields all
correspond to the table on the "Edit Group Access Controls" page. If
any of these options are not listed, it means they are not checked.


. Basic Product/Group Restriction
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Suppose there is a product called "Bar". You would like to make it so
that only users in the group "Foo" can enter bugs in the "Bar"
product. Additionally, bugs filed in product "Bar" must be visible
only to users in "Foo" (plus, by default, the reporter, assignee, and
CC list of each bug) at all times. Furthermore, only members of group
"Foo" should be able to edit bugs filed against product "Bar", even if
other users could see the bug. This arrangement would achieved by the
following:

   Product Bar:
   foo: ENTRY, MANDATORY/MANDATORY, CANEDIT

Perhaps such strict restrictions are not needed for product "Bar".
Instead, you would like to make it so that only members of group "Foo"
can enter bugs in product "Bar", but bugs in "Bar" are not required to
be restricted in visibility to people in "Foo". Anyone with permission
to edit a particular bug in product "Bar" can put the bug in group
"Foo", even if they themselves are not in "Foo".

Furthermore, anyone in group "Foo" can edit all aspects of the
components of product "Bar", can confirm bugs in product "Bar", and
can edit all fields of any bug in product "Bar". That would be done
like this:

   Product Bar:
   foo: ENTRY, SHOWN/SHOWN, EDITCOMPONENTS, CANCONFIRM, EDITBUGS


. General User Access With Security Group
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To permit any user to file bugs against "Product A", and to permit any
user to submit those bugs into a group called "Security":

   Product A:
   security: SHOWN/SHOWN


. General User Access With A Security Product
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To permit any user to file bugs against product called "Security"
while keeping those bugs from becoming visible to anyone outside the
group "SecurityWorkers" (unless a member of the "SecurityWorkers"
group removes that restriction):

   Product Security:
   securityworkers: DEFAULT/MANDATORY


. Product Isolation With a Common Group
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To permit users of "Product A" to access the bugs for "Product A",
users of "Product B" to access the bugs for "Product B", and support
staff, who are members of the "Support Group" to access both, three
groups are needed:

1. Support Group: Contains members of the support staff.

2. AccessA Group: Contains users of product A and the Support group.

3. AccessB Group: Contains users of product B and the Support group.

Once these three groups are defined, the product group controls can be
set to:

   Product A:
   AccessA: ENTRY, MANDATORY/MANDATORY
   Product B:
   AccessB: ENTRY, MANDATORY/MANDATORY

Perhaps the "Support Group" wants more control. For example, the
"Support Group"  could be permitted to make bugs inaccessible to users
of both groups "AccessA" and "AccessB". Then, the "Support Group"
could be permitted to publish bugs relevant to all users in a third
product (let's call it "Product Common") that is read-only to anyone
outside the "Support Group". In this way the "Support Group" could
control bugs that should be seen by both groups. That configuration
would be:

   Product A:
   AccessA: ENTRY, MANDATORY/MANDATORY
   Support: SHOWN/NA
   Product B:
   AccessB: ENTRY, MANDATORY/MANDATORY
   Support: SHOWN/NA
   Product Common:
   Support: ENTRY, DEFAULT/MANDATORY, CANEDIT


. Make a Product Read Only
~~~~~~~~~~~~~~~~~~~~~~~~~~

Sometimes a product is retired and should no longer have new bugs
filed against it (for example, an older version of a software product
that is no longer supported). A product can be made read-only by
creating a group called "readonly" and adding products to the group as
needed:

   Product A:
   ReadOnly: ENTRY, NA/NA, CANEDIT

Note:

  For more information on Groups outside of how they relate to
  products see Groups and Security.


4.4.3. Components
=================

Components are subsections of a Product. E.g. the computer game you
are designing may have a "UI" component, an "API" component, a "Sound
System" component, and a "Plugins" component, each overseen by a
different programmer. It often makes sense to divide Components in
Bugzilla according to the natural divisions of responsibility within
your Product or company.

Each component has a default assignee and, if you turned it on in the
Parameters, a QA Contact. The default assignee should be the primary
person who fixes bugs in that component. The QA Contact should be the
person who will ensure these bugs are completely fixed. The Assignee,
QA Contact, and Reporter will get email when new bugs are created in
this Component and when these bugs change. Default Assignee and
Default QA Contact fields only dictate the *default assignments*;
these can be changed on bug submission, or at any later point in a
bug's life.

To create a new Component:

1. Select the "Edit components" link from the "Edit product" page.

2. Select the "Add" link in the bottom right.

3. Fill out the "Component" field, a short "Description", the "Default
   Assignee", "Default CC List", and "Default QA Contact" (if
   enabled). The "Component Description" field may contain a limited
   subset of HTML tags. The "Default Assignee" field must be a login
   name already existing in the Bugzilla database.


4.4.4. Versions
===============

Versions are the revisions of the product, such as "Flinders 3.1",
"Flinders 95", and "Flinders 2000". Version is not a multi-select
field; the usual practice is to select the earliest version known to
have the bug.

To create and edit Versions:

1. From the "Edit product" screen, select "Edit Versions".

2. You will notice that the product already has the default version
   "undefined". Click the "Add" link in the bottom right.

3. Enter the name of the Version. This field takes text only. Then
   click the "Add" button.


4.4.5. Milestones
=================

Milestones are "targets" that you plan to get a bug fixed by. For
example, if you have a bug that you plan to fix for your 3.0 release,
it would be assigned the milestone of 3.0.

Note:

  Milestone options will only appear for a Product if you turned on
  the usetargetmilestone parameter in the "Bug Fields" tab of the
  Parameters page.

To create new Milestones and set Default Milestones:

1. Select "Edit milestones" from the "Edit product" page.

2. Select "Add" in the bottom right corner.

3. Enter the name of the Milestone in the "Milestone" field. You can
   optionally set the "sortkey", which is a positive or negative
   number (-32768 to 32767) that defines where in the list this
   particular milestone appears. This is because milestones often do
   not occur in alphanumeric order; for example, "Future" might be
   after "Release 1.2". Select "Add".

======================================================================

This documentation undoubtedly has bugs; if you find some, please file
them here.
